{"id":"readm3.com/readm3","name":"readm3","commands":["readm3"],"examples":[{"run":"readm3","does":"Browse Markdown files under the current directory"},{"run":"readm3 <dir>","does":"Browse Markdown in a given directory"},{"run":"readm3 --print <file.md>","does":"Render a Markdown file to the terminal in color"},{"run":"readm3 edit .","does":"Open this folder in the readm3 desktop editor, like subl ."},{"run":"readm3 paste <file>","does":"Share a file behind a private link, no account needed"},{"run":"readm3 login","does":"Sign in to sync and save documents to your account"}],"description":"Plain text editor for Markdown and code: terminal reader, web and desktop editor (Linux, macOS, Windows), sharing, version history, an API and an MCP server.","homepage":"https://readm3.com","repository":"https://github.com/profullstack/readm3","license":"MIT","agentic":false,"latest_version":"0.32.0","vendor":"Profullstack","install":"curl -fsSL https://readm3.com/install.sh | sh","publisher":"profullstack","npm":"@profullstack/readm3","w3bs":"w3bs install readm3.com/readm3","scan":{"status":"passed","scanner":"threatcrush 0.13.30","filesScanned":138,"summary":{"critical":0,"high":2,"medium":22,"low":7,"info":0},"malware":0,"truncated":false,"version":"0.32.0","sources":{"installer":"https://readm3.com/install.sh","installerSha256":"b24192c9a29e7517111372285235b175a31d3057b1973d0f09081ba703e891af","repository":"github.com/profullstack/readm3"},"notes":[],"scannedAt":"2026-11-03T04:49:00.726Z","findings":[{"ruleId":"js-unescaped-html-sink","title":"unescaped HTML rendering","severity":"high","category":"code","cwe":"CWE-79","file":"source/site/admin.ts","line":258,"malware":false},{"ruleId":"js-unescaped-html-sink","title":"unescaped HTML rendering","severity":"high","category":"code","cwe":"CWE-79","file":"source/site/history-panel.ts","line":129,"malware":false},{"ruleId":"insecure-temp-file","title":"predictable temporary file path","severity":"medium","category":"code","cwe":"CWE-377","file":"source/.github/workflows/ci.yml","line":92,"malware":false},{"ruleId":"sql-template-interpolation","title":"SQL built from a template literal or f-string","severity":"medium","category":"code","cwe":"CWE-89","file":"source/server/operations.ts","line":337,"malware":false},{"ruleId":"sql-template-interpolation","title":"SQL built from a template literal or f-string","severity":"medium","category":"code","cwe":"CWE-89","file":"source/server/store.ts","line":171,"malware":false},{"ruleId":"sql-template-interpolation","title":"SQL built from a template literal or f-string","severity":"medium","category":"code","cwe":"CWE-89","file":"source/server/store.ts","line":178,"malware":false},{"ruleId":"js-unescaped-html-sink","title":"unescaped HTML rendering","severity":"medium","category":"code","cwe":"CWE-79","file":"source/site/admin.ts","line":172,"malware":false},{"ruleId":"js-unescaped-html-sink","title":"unescaped HTML rendering","severity":"medium","category":"code","cwe":"CWE-79","file":"source/site/admin.ts","line":268,"malware":false},{"ruleId":"js-unescaped-html-sink","title":"unescaped HTML rendering","severity":"medium","category":"code","cwe":"CWE-79","file":"source/site/admin.ts","line":281,"malware":false},{"ruleId":"js-unescaped-html-sink","title":"unescaped HTML rendering","severity":"medium","category":"code","cwe":"CWE-79","file":"source/site/admin.ts","line":376,"malware":false},{"ruleId":"js-unescaped-html-sink","title":"unescaped HTML rendering","severity":"medium","category":"code","cwe":"CWE-79","file":"source/site/admin.ts","line":528,"malware":false},{"ruleId":"js-unescaped-html-sink","title":"unescaped HTML rendering","severity":"medium","category":"code","cwe":"CWE-79","file":"source/site/admin.ts","line":569,"malware":false},{"ruleId":"js-unescaped-html-sink","title":"unescaped HTML rendering","severity":"medium","category":"code","cwe":"CWE-79","file":"source/site/admin.ts","line":643,"malware":false},{"ruleId":"js-unescaped-html-sink","title":"unescaped HTML rendering","severity":"medium","category":"code","cwe":"CWE-79","file":"source/site/admin.ts","line":655,"malware":false},{"ruleId":"js-unescaped-html-sink","title":"unescaped HTML rendering","severity":"medium","category":"code","cwe":"CWE-79","file":"source/site/ai-dialog.ts","line":34,"malware":false},{"ruleId":"js-unescaped-html-sink","title":"unescaped HTML rendering","severity":"medium","category":"code","cwe":"CWE-79","file":"source/site/ask-panel.ts","line":49,"malware":false},{"ruleId":"js-unescaped-html-sink","title":"unescaped HTML rendering","severity":"medium","category":"code","cwe":"CWE-79","file":"source/site/code-view.ts","line":54,"malware":false},{"ruleId":"js-unescaped-html-sink","title":"unescaped HTML rendering","severity":"medium","category":"code","cwe":"CWE-79","file":"source/site/sharing.ts","line":246,"malware":false},{"ruleId":"js-unescaped-html-sink","title":"unescaped HTML rendering","severity":"medium","category":"code","cwe":"CWE-79","file":"source/site/viewer.ts","line":751,"malware":false},{"ruleId":"redos-nested-quantifier","title":"regex with nested unbounded quantifiers","severity":"medium","category":"code","cwe":"CWE-1333","file":"source/src/code.ts","line":234,"malware":false},{"ruleId":"redos-nested-quantifier","title":"regex with nested unbounded quantifiers","severity":"medium","category":"code","cwe":"CWE-1333","file":"source/src/code.ts","line":244,"malware":false},{"ruleId":"redos-nested-quantifier","title":"regex with nested unbounded quantifiers","severity":"medium","category":"code","cwe":"CWE-1333","file":"source/src/code.ts","line":250,"malware":false},{"ruleId":"redos-nested-quantifier","title":"regex with nested unbounded quantifiers","severity":"medium","category":"code","cwe":"CWE-1333","file":"source/src/sensitive.ts","line":55,"malware":false},{"ruleId":"redos-nested-quantifier","title":"regex with nested unbounded quantifiers","severity":"medium","category":"code","cwe":"CWE-1333","file":"source/src/sensitive.ts","line":88,"malware":false},{"ruleId":"js-ssrf-outbound-request","title":"outbound request to a non-constant URL","severity":"low","category":"code","cwe":"CWE-918","file":"source/server/test/oauth.test.ts","line":75,"malware":false},{"ruleId":"js-ssrf-outbound-request","title":"outbound request to a non-constant URL","severity":"low","category":"code","cwe":"CWE-918","file":"source/server/test/oauth.test.ts","line":79,"malware":false},{"ruleId":"secret-database-url","title":"Database URL with credentials","severity":"low","category":"secret","cwe":"CWE-798","file":"source/site/test/sharing.spec.ts","line":505,"malware":false},{"ruleId":"secret-aws-access-key","title":"AWS Access Key","severity":"low","category":"secret","cwe":"CWE-798","file":"source/test/sensitive.test.ts","line":15,"malware":false},{"ruleId":"secret-private-key","title":"Private Key","severity":"low","category":"secret","cwe":"CWE-798","file":"source/test/sensitive.test.ts","line":18,"malware":false},{"ruleId":"secret-jwt","title":"JSON Web Token","severity":"low","category":"secret","cwe":"CWE-798","file":"source/test/sensitive.test.ts","line":19,"malware":false},{"ruleId":"secret-database-url","title":"Database URL with credentials","severity":"low","category":"secret","cwe":"CWE-798","file":"source/test/sensitive.test.ts","line":24,"malware":false}]}}