{"id":15315608,"url":"https://github.com/obsfx/lurkdown","last_synced_at":"2026-05-03T21:32:03.061Z","repository":{"id":128852530,"uuid":"286346607","full_name":"obsfx/lurkdown","owner":"obsfx","description":"A markdown transpiler tool that was built on NodeJS with TypeScript to create standalone, markdown-generated HTML files.","archived":false,"fork":false,"pushed_at":"2021-01-09T13:57:52.000Z","size":25043,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-09-12T07:21:48.712Z","etag":null,"topics":["command-line-tool","html","html-files","markdown","markdown-parser","markdown-to-html","nodejs","parser","standalone","standalone-executables","standalone-html-files","syntax-highlighting","tool","transpiler","typescript"],"latest_commit_sha":null,"homepage":"https://obsfx.github.io/lurkdown/","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/obsfx.png","metadata":{"files":{"readme":"README.html","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2020-08-10T01:17:06.000Z","updated_at":"2021-02-15T13:31:40.000Z","dependencies_parsed_at":"2023-04-08T04:01:45.352Z","dependency_job_id":null,"html_url":"https://github.com/obsfx/lurkdown","commit_stats":null,"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/obsfx/lurkdown","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/obsfx%2Flurkdown","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/obsfx%2Flurkdown/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/obsfx%2Flurkdown/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/obsfx%2Flurkdown/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/obsfx","download_url":"https://codeload.github.com/obsfx/lurkdown/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/obsfx%2Flurkdown/sbom","scorecard":{"id":701224,"data":{"date":"2025-08-11","repo":{"name":"github.com/obsfx/lurkdown","commit":"bc9ebfea0be2e14f9b8031b54653ab5f1fcbf26c"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":1.5,"checks":[{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Token-Permissions","score":-1,"reason":"No tokens found","details":null,"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"SAST","score":0,"reason":"no SAST tool detected","details":["Warn: no pull requests merged into dev branch"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"Code-Review","score":0,"reason":"Found 0/30 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Dangerous-Workflow","score":-1,"reason":"no workflows found","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Pinned-Dependencies","score":-1,"reason":"no dependencies found","details":null,"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: GNU General Public License v3.0: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Signed-Releases","score":0,"reason":"Project has not signed or included provenance with any releases.","details":["Warn: release artifact v0.2.0 not signed: https://api.github.com/repos/obsfx/lurkdown/releases/36176928","Warn: release artifact v0.0.8 not signed: https://api.github.com/repos/obsfx/lurkdown/releases/31738022","Warn: release artifact v0.2.0 does not have provenance: https://api.github.com/repos/obsfx/lurkdown/releases/36176928","Warn: release artifact v0.0.8 does not have provenance: https://api.github.com/repos/obsfx/lurkdown/releases/31738022"],"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'master'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"Vulnerabilities","score":0,"reason":"14 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: GHSA-968p-4wvh-cqc8","Warn: Project is vulnerable to: GHSA-grv7-fg5c-xmjg","Warn: Project is vulnerable to: GHSA-fjxv-7rqg-78g4","Warn: Project is vulnerable to: GHSA-ww39-953v-wcq6","Warn: Project is vulnerable to: GHSA-896r-f27r-55mw","Warn: Project is vulnerable to: GHSA-952p-6rrq-rcjv","Warn: Project is vulnerable to: GHSA-xvch-5gv4-984h","Warn: Project is vulnerable to: GHSA-hj48-42vr-x3v9","Warn: Project is vulnerable to: GHSA-22r3-9w55-cj54","Warn: Project is vulnerable to: GHSA-hrpp-h998-j3pp","Warn: Project is vulnerable to: GHSA-p8p7-x288-28g6","Warn: Project is vulnerable to: GHSA-c2qf-rxjj-qqgw","Warn: Project is vulnerable to: GHSA-72xf-g2v4-qvf3","Warn: Project is vulnerable to: GHSA-j8xg-fqg3-53r7"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}}]},"last_synced_at":"2025-08-22T05:15:18.001Z","repository_id":128852530,"created_at":"2025-08-22T05:15:18.001Z","updated_at":"2025-08-22T05:15:18.001Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32586187,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-03T06:36:36.687Z","status":"ssl_error","status_checked_at":"2026-05-03T06:36:09.306Z","response_time":103,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["command-line-tool","html","html-files","markdown","markdown-parser","markdown-to-html","nodejs","parser","standalone","standalone-executables","standalone-html-files","syntax-highlighting","tool","transpiler","typescript"],"created_at":"2024-10-01T08:51:13.079Z","updated_at":"2026-05-03T21:32:03.043Z","avatar_url":"https://github.com/obsfx.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003c!DOCTYPE html\u003e\n\u003chtml lang=\"en\"\u003e\n    \u003c!-- \n        //\n        //\n        generated by lurkdown \n        https://github.com/obsfx/lurkdown \n        //\n        //\n    --\u003e\n    \u003chead\u003e\n        \u003cmeta charset=\"utf-8\" /\u003e\n        \u003cmeta http-equiv=\"x-ua-compatible\" content=\"ie=edge\" /\u003e\n        \u003cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1\" /\u003e\n\n        \u003ctitle\u003elurkdown\u003c/title\u003e\n        \u003c!--@favico--\u003e\n        \u003cstyle\u003e@font-face {\n    font-family: 'Inter';\n    src: url('src/inter/Inter-MediumItalic.woff2') format('woff2'),\n        url('src/inter/Inter-MediumItalic.woff') format('woff');\n    font-weight: 500;\n    font-style: italic;\n    font-display: swap;\n}\n\n@font-face {\n    font-family: 'Inter';\n    src: url('src/inter/Inter-ExtraBold.woff2') format('woff2'),\n        url('src/inter/Inter-ExtraBold.woff') format('woff');\n    font-weight: 800;\n    font-style: normal;\n    font-display: swap;\n}\n\n@font-face {\n    font-family: 'Inter';\n    src: url('src/inter/Inter-BlackItalic.woff2') format('woff2'),\n        url('src/inter/Inter-BlackItalic.woff') format('woff');\n    font-weight: 900;\n    font-style: italic;\n    font-display: swap;\n}\n\n@font-face {\n    font-family: 'Inter';\n    src: url('src/inter/Inter-Regular.woff2') format('woff2'),\n        url('src/inter/Inter-Regular.woff') format('woff');\n    font-weight: normal;\n    font-style: normal;\n    font-display: swap;\n}\n\n@font-face {\n    font-family: 'Inter';\n    src: url('src/inter/Inter-LightItalic.woff2') format('woff2'),\n        url('src/inter/Inter-LightItalic.woff') format('woff');\n    font-weight: 300;\n    font-style: italic;\n    font-display: swap;\n}\n\n@font-face {\n    font-family: 'Inter';\n    src: url('src/inter/Inter-SemiBoldItalic.woff2') format('woff2'),\n        url('src/inter/Inter-SemiBoldItalic.woff') format('woff');\n    font-weight: 600;\n    font-style: italic;\n    font-display: swap;\n}\n\n@font-face {\n    font-family: 'Inter';\n    src: url('src/inter/Inter-BoldItalic.woff2') format('woff2'),\n        url('src/inter/Inter-BoldItalic.woff') format('woff');\n    font-weight: bold;\n    font-style: italic;\n    font-display: swap;\n}\n\n@font-face {\n    font-family: 'Inter';\n    src: url('src/inter/Inter-SemiBold.woff2') format('woff2'),\n        url('src/inter/Inter-SemiBold.woff') format('woff');\n    font-weight: 600;\n    font-style: normal;\n    font-display: swap;\n}\n\n@font-face {\n    font-family: 'Inter';\n    src: url('src/inter/Inter-Black.woff2') format('woff2'),\n        url('src/inter/Inter-Black.woff') format('woff');\n    font-weight: 900;\n    font-style: normal;\n    font-display: swap;\n}\n\n@font-face {\n    font-family: 'Inter';\n    src: url('src/inter/Inter-ExtraLightItalic.woff2') format('woff2'),\n        url('src/inter/Inter-ExtraLightItalic.woff') format('woff');\n    font-weight: 200;\n    font-style: italic;\n    font-display: swap;\n}\n\n@font-face {\n    font-family: 'Inter';\n    src: url('src/inter/Inter-Light.woff2') format('woff2'),\n        url('src/inter/Inter-Light.woff') format('woff');\n    font-weight: 300;\n    font-style: normal;\n    font-display: swap;\n}\n\n@font-face {\n    font-family: 'Inter';\n    src: url('src/inter/Inter-Bold.woff2') format('woff2'),\n        url('src/inter/Inter-Bold.woff') format('woff');\n    font-weight: bold;\n    font-style: normal;\n    font-display: swap;\n}\n\n@font-face {\n    font-family: 'Inter';\n    src: url('src/inter/Inter-ExtraLight.woff2') format('woff2'),\n        url('src/inter/Inter-ExtraLight.woff') format('woff');\n    font-weight: 200;\n    font-style: normal;\n    font-display: swap;\n}\n\n@font-face {\n    font-family: 'Inter';\n    src: url('src/inter/Inter-Medium.woff2') format('woff2'),\n        url('src/inter/Inter-Medium.woff') format('woff');\n    font-weight: 500;\n    font-style: normal;\n    font-display: swap;\n}\n\n@font-face {\n    font-family: 'Inter';\n    src: url('src/inter/Inter-ExtraBoldItalic.woff2') format('woff2'),\n        url('src/inter/Inter-ExtraBoldItalic.woff') format('woff');\n    font-weight: 800;\n    font-style: italic;\n    font-display: swap;\n}\n\n@font-face {\n    font-family: 'Inter';\n    src: url('src/inter/Inter-Thin.woff2') format('woff2'),\n        url('src/inter/Inter-Thin.woff') format('woff');\n    font-weight: 100;\n    font-style: normal;\n    font-display: swap;\n}\n\n@font-face {\n    font-family: 'Inter';\n    src: url('src/inter/Inter-ThinItalic.woff2') format('woff2'),\n        url('src/inter/Inter-ThinItalic.woff') format('woff');\n    font-weight: 100;\n    font-style: italic;\n    font-display: swap;\n}\n\n@font-face {\n    font-family: 'Inter';\n    src: url('src/inter/Inter-Italic.woff2') format('woff2'),\n        url('src/inter/Inter-Italic.woff') format('woff');\n    font-weight: normal;\n    font-style: italic;\n    font-display: swap;\n}\n\n/**\n * Minified by jsDelivr using clean-css v4.2.1.\n * Original file: /npm/@exampledev/new.css@1.1.2/new.css\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n:root{--nc-font-sans:'Inter',-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Oxygen,Ubuntu,Cantarell,'Open Sans','Helvetica Neue',sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol\";--nc-font-mono:Consolas,monaco,'Ubuntu Mono','Liberation Mono','Courier New',Courier,monospace;--nc-tx-1:#000000;--nc-tx-2:#1A1A1A;--nc-bg-1:#FFFFFF;--nc-bg-2:#F6F8FA;--nc-bg-3:#E5E7EB;--nc-lk-1:#0070F3;--nc-lk-2:#0366D6;--nc-lk-tx:#FFFFFF;--nc-ac-1:#79FFE1;--nc-ac-tx:#0C4047}@media (prefers-color-scheme:dark){:root{--nc-tx-1:#ffffff;--nc-tx-2:#eeeeee;--nc-bg-1:#000000;--nc-bg-2:#111111;--nc-bg-3:#222222;--nc-lk-1:#3291FF;--nc-lk-2:#0070F3;--nc-lk-tx:#FFFFFF;--nc-ac-1:#7928CA;--nc-ac-tx:#FFFFFF}}*{margin:0;padding:0}address,area,article,aside,audio,blockquote,datalist,details,dl,fieldset,figure,form,iframe,img,input,meter,nav,ol,optgroup,option,output,p,pre,progress,ruby,section,table,textarea,ul,video{margin-bottom:1rem}button,html,input,select{font-family:var(--nc-font-sans)}body{margin:0 auto;max-width:750px;padding:2rem;border-radius:6px;overflow-x:hidden;word-break:break-word;overflow-wrap:break-word;background:var(--nc-bg-1);color:var(--nc-tx-2);font-size:1.03rem;line-height:1.5}::selection{background:var(--nc-ac-1);color:var(--nc-ac-tx)}h1,h2,h3,h4,h5,h6{line-height:1;color:var(--nc-tx-1);padding-top:.875rem}h1,h2,h3{color:var(--nc-tx-1);padding-bottom:2px;margin-bottom:8px;border-bottom:1px solid var(--nc-bg-2)}h4,h5,h6{margin-bottom:.3rem}h1{font-size:2.25rem}h2{font-size:1.85rem}h3{font-size:1.55rem}h4{font-size:1.25rem}h5{font-size:1rem}h6{font-size:.875rem}a{color:var(--nc-lk-1)}a:hover{color:var(--nc-lk-2)}abbr:hover{cursor:help}blockquote{padding:1.5rem;background:var(--nc-bg-2);border-left:5px solid var(--nc-bg-3)}abbr{cursor:help}blockquote :last-child{padding-bottom:0;margin-bottom:0}header{background:var(--nc-bg-2);border-bottom:1px solid var(--nc-bg-3);padding:2rem 1.5rem;margin:-2rem calc(0px - (50vw - 50%)) 2rem;padding-left:calc(50vw - 50%);padding-right:calc(50vw - 50%)}header h1,header h2,header h3{padding-bottom:0;border-bottom:0}header\u003e:first-child{margin-top:0;padding-top:0}header\u003e:last-child{margin-bottom:0}a button,button,input[type=button],input[type=reset],input[type=submit]{font-size:1rem;display:inline-block;padding:6px 12px;text-align:center;text-decoration:none;white-space:nowrap;background:var(--nc-lk-1);color:var(--nc-lk-tx);border:0;border-radius:4px;box-sizing:border-box;cursor:pointer;color:var(--nc-lk-tx)}a button[disabled],button[disabled],input[type=button][disabled],input[type=reset][disabled],input[type=submit][disabled]{cursor:default;opacity:.5;cursor:not-allowed}.button:focus,.button:hover,button:focus,button:hover,input[type=button]:focus,input[type=button]:hover,input[type=reset]:focus,input[type=reset]:hover,input[type=submit]:focus,input[type=submit]:hover{background:var(--nc-lk-2)}code,kbd,pre,samp{font-family:var(--nc-font-mono)}code,kbd,pre,samp{background:var(--nc-bg-2);border:1px solid var(--nc-bg-3);border-radius:4px;padding:3px 6px;font-size:.9rem}kbd{border-bottom:3px solid var(--nc-bg-3)}pre{padding:1rem 1.4rem;max-width:100%;overflow:auto}pre code{background:inherit;font-size:inherit;color:inherit;border:0;padding:0;margin:0}code pre{display:inline;background:inherit;font-size:inherit;color:inherit;border:0;padding:0;margin:0}details{padding:.6rem 1rem;background:var(--nc-bg-2);border:1px solid var(--nc-bg-3);border-radius:4px}summary{cursor:pointer;font-weight:700}details[open]{padding-bottom:.75rem}details[open] summary{margin-bottom:6px}details[open]\u003e:last-child{margin-bottom:0}dt{font-weight:700}dd::before{content:'→ '}hr{border:0;border-bottom:1px solid var(--nc-bg-3);margin:1rem auto}fieldset{margin-top:1rem;padding:2rem;border:1px solid var(--nc-bg-3);border-radius:4px}legend{padding:auto .5rem}table{border-collapse:collapse;width:100%}td,th{border:1px solid var(--nc-bg-3);text-align:left;padding:.5rem}th{background:var(--nc-bg-2)}tr:nth-child(even){background:var(--nc-bg-2)}table caption{font-weight:700;margin-bottom:.5rem}textarea{max-width:100%}ol,ul{padding-left:2rem}li{margin-top:.4rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}mark{padding:3px 6px;background:var(--nc-ac-1);color:var(--nc-ac-tx)}input,select,textarea{padding:6px 12px;margin-bottom:.5rem;background:var(--nc-bg-2);color:var(--nc-tx-2);border:1px solid var(--nc-bg-3);border-radius:4px;box-shadow:none;box-sizing:border-box}img{max-width:100%}\n/*# sourceMappingURL=/sm/4a51164882967d28a74fabce02685c18fa45a529b77514edc75d708f04dd08b9.map */:root {\n\t--nc-tx-1: #ffffff;\n\t--nc-tx-2: #eeeeee;\n\t--nc-bg-1: #000000;\n\t--nc-bg-2: #111111;\n\t--nc-bg-3: #222222;\n\t--nc-lk-1: #3291FF;\n\t--nc-lk-2: #0070F3;\n\t--nc-lk-tx: #FFFFFF;\n\t--nc-ac-1: #7928CA;\n\t--nc-ac-tx: #FFFFFF;\n}\u003c/style\u003e\n    \u003c/head\u003e\n    \u003cbody\u003e\n        \u003cdiv class='ld-wrapper'\u003e\u003cdiv class='ld-div'\u003e\u003ch1 class='ld-h1'\u003elurkdown \u003c/h1\u003e\u003c/div\u003e\u003cdiv class='ld-div'\u003e\u003ca class='ld-a' href='https://badge.fury.io/js/lurkdown'\u003e\u003cimg class='ld-img' src='https://badge.fury.io/js/lurkdown.svg' alt='npm version'\u003e\u003c/a\u003e\u003c/div\u003e\u003cdiv class='ld-div'\u003e\u003ca class='ld-a' href='https://github.com/obsfx/lurkdown'\u003eView the source code on GitHub\u003c/a\u003e \u003c/div\u003e\u003cbr\u003e\u003cdiv class='ld-div'\u003e\u003cimg class='ld-img' src='https://raw.githubusercontent.com/obsfx/lurkdown/gh-pages/demo.gif' alt='lurkdown'\u003e\u003c/div\u003e\u003cbr\u003e\u003cdiv class='ld-div'\u003e\u003ccode class='ld-code'\u003elurkdown\u003c/code\u003e is a command-line markdown transpiler tool that was built on \u003ccode class='ld-code'\u003eNodeJS\u003c/code\u003e with \u003ccode class='ld-code'\u003eTypeScript\u003c/code\u003e to create standalone, markdown-generated HTML files. \u003ccode class='ld-code'\u003elurkdown\u003c/code\u003e converts all locally hosted image files to \u003ccode class='ld-code'\u003ebase64\u003c/code\u003e to avoid dealing with images when we want to host that HTML files at somewhere. \u003cem class='ld-em'\u003eIt is not perfect but works in most cases.\u003c/em\u003e\u003c/div\u003e\u003cbr\u003e\u003cdiv class='ld-div'\u003e\u003ch2 class='ld-h2'\u003einstallation\u003c/h2\u003e\u003c/div\u003e\u003cdiv class='ld-div'\u003eYou can directly install via npm\u003c/div\u003e\u003cbr\u003e\u003cdiv class='ld-div'\u003e\u003cpre class='ld-pre hljs'\u003e\u003ccode\u003e\u003cspan class=\"hljs-built_in\"\u003enpm\u003c/span\u003e i -g lurkdown\n\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cbr\u003e\u003cdiv class='ld-div'\u003eOr you can download the standalone executable version.\u003c/div\u003e\u003cdiv class='ld-div'\u003e\u003ca class='ld-a' href='https://github.com/obsfx/lurkdown/releases'\u003eStandalone Executables\u003c/a\u003e\u003c/div\u003e\u003cbr\u003e\u003cdiv class='ld-div'\u003e\u003ch2 class='ld-h2'\u003edisclaimer\u003c/h2\u003e\u003c/div\u003e\u003cdiv class='ld-div'\u003esome core features are not implemented:\u003c/div\u003e\u003cdiv class='ld-div'\u003e\u003col class='ld-ol' start='1'\u003e\u003cli class='ld-li'\u003e      Combined blockquotes.\u003cbr\u003e\u003c/li\u003e\u003cli class='ld-li'\u003e      Reference style images.\u003c/li\u003e\u003c/ol\u003e\u003c/div\u003e\u003cdiv class='ld-div'\u003erestrictions:\u003c/div\u003e\u003cdiv class='ld-div'\u003e\u003col class='ld-ol' start='1'\u003e\u003cli class='ld-li'\u003e    \u003ccode class='ld-code'\u003elurkdown\u003c/code\u003e doesn't deal with font files. You have to host them at somewhere and \u003ccode class='ld-code'\u003e@import\u003c/code\u003e the \u003ccode class='ld-code'\u003eCSS\u003c/code\u003e file of font definitions.\u003c/li\u003e\u003c/ol\u003e\u003c/div\u003e\u003cbr\u003e\u003cdiv class='ld-div'\u003e\u003ch2 class='ld-h2'\u003ehow to use\u003c/h2\u003e\u003c/div\u003e\u003cdiv class='ld-div'\u003eYou can directly use with command-line parameters.\u003c/div\u003e\u003cdiv class='ld-div'\u003e\u003cul class='ld-ul'\u003e\u003cli class='ld-li'\u003e   \u003ccode class='ld-code'\u003e--files\u003c/code\u003e / \u003cstrong class='ld-strong'\u003e\u003cem class='ld-em'\u003emandatory\u003c/em\u003e\u003c/strong\u003e -\u003e Specify file paths by enclosing with quotes and then separating with commas.\u003cbr\u003e  \u003ccode class='ld-code'\u003ee.g. --files='./path/to/file.md, ./path/to/file2.md, ./path/to/file3.md'\u003c/code\u003e\u003c/li\u003e\u003cli class='ld-li'\u003e   \u003ccode class='ld-code'\u003e--theme\u003c/code\u003e / \u003cstrong class='ld-strong'\u003e\u003cem class='ld-em'\u003eoptional\u003c/em\u003e\u003c/strong\u003e -\u003e Available themes: dark, light. If you don't specify a theme, output files will be exported without any styling.\u003c/li\u003e\u003cli class='ld-li'\u003e   \u003ccode class='ld-code'\u003e--titles\u003c/code\u003e / \u003cstrong class='ld-strong'\u003e\u003cem class='ld-em'\u003eoptional\u003c/em\u003e\u003c/strong\u003e -\u003e Specify the titles that will be used in \u003ccode class='ld-code'\u003etitle\u003c/code\u003e tag in output files. They should be specified in the same order as files and they should be enclosed with quotes and then separated with commas.\u003cbr\u003e  \u003ccode class='ld-code'\u003ee.g --titles='file title, file2 title, file3 title'\u003c/code\u003e\u003c/li\u003e\u003cli class='ld-li'\u003e   \u003ccode class='ld-code'\u003e--outdir\u003c/code\u003e / \u003cstrong class='ld-strong'\u003e\u003cem class='ld-em'\u003eoptional\u003c/em\u003e\u003c/strong\u003e -\u003e If you don't specify an output directory, files will be exported in same directory as like input files.\u003c/li\u003e\u003cli class='ld-li'\u003e   \u003ccode class='ld-code'\u003e--styles\u003c/code\u003e / \u003cstrong class='ld-strong'\u003e\u003cem class='ld-em'\u003eoptional\u003c/em\u003e\u003c/strong\u003e -\u003e Specify the custom \u003ccode class='ld-code'\u003eCSS\u003c/code\u003e file paths If you want to customize the output files. They should be specified like files and titles. Enclose with quotes and then separate with commas.\u003cbr\u003e  \u003ccode class='ld-code'\u003ee.g. --styles='./path/to/cssfile.css, ./path/to/cssfile2.css'\u003c/code\u003e\u003c/li\u003e\u003cli class='ld-li'\u003e   \u003ccode class='ld-code'\u003e--favico\u003c/code\u003e / \u003cstrong class='ld-strong'\u003e\u003cem class='ld-em'\u003eoptional\u003c/em\u003e\u003c/strong\u003e -\u003e Specify the path of favico file.\u003c/li\u003e\u003c/ul\u003e\u003c/div\u003e\u003cbr\u003e\u003cdiv class='ld-div'\u003eExample usage\u003c/div\u003e\u003cbr\u003e\u003cdiv class='ld-div'\u003e\u003cpre class='ld-pre hljs'\u003e\u003ccode\u003elurkdown \u003cspan class=\"hljs-attribute\"\u003e--theme\u003c/span\u003e=dark \u003cspan class=\"hljs-attribute\"\u003e--files\u003c/span\u003e=\u003cspan class=\"hljs-string\"\u003e\u0026#x27;./src/test/http_notes.md, ./src/test/post.md\u0026#x27;\u003c/span\u003e \u003cspan class=\"hljs-attribute\"\u003e--titles\u003c/span\u003e=\u003cspan class=\"hljs-string\"\u003e\u0026#x27;HTTP Notes, My First Blog Post\u0026#x27;\u003c/span\u003e \u003cspan class=\"hljs-attribute\"\u003e--outdir\u003c/span\u003e=./export \u003cspan class=\"hljs-attribute\"\u003e--favico\u003c/span\u003e=./src/icon.ico\n\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cbr\u003e\u003cdiv class='ld-div'\u003eOr you can just pass a single \u003ccode class='ld-code'\u003econfig.json\u003c/code\u003e file with the \u003ccode class='ld-code'\u003e--config\u003c/code\u003e parameter.\u003c/div\u003e\u003cdiv class='ld-div'\u003eExample usage:\u003c/div\u003e\u003cbr\u003e\u003cdiv class='ld-div'\u003e\u003cpre class='ld-pre hljs'\u003e\u003ccode class='json'\u003e{\n    \u003cspan class=\"hljs-attr\"\u003e\u0026quot;favico\u0026quot;\u003c/span\u003e: \u003cspan class=\"hljs-string\"\u003e\u0026quot;./favicon.ico\u0026quot;\u003c/span\u003e,\n    \u003cspan class=\"hljs-attr\"\u003e\u0026quot;outdir\u0026quot;\u003c/span\u003e: \u003cspan class=\"hljs-string\"\u003e\u0026quot;./ld-output\u0026quot;\u003c/span\u003e,\n    \u003cspan class=\"hljs-attr\"\u003e\u0026quot;theme\u0026quot;\u003c/span\u003e: \u003cspan class=\"hljs-string\"\u003e\u0026quot;dark\u0026quot;\u003c/span\u003e,\n    \u003cspan class=\"hljs-attr\"\u003e\u0026quot;styles\u0026quot;\u003c/span\u003e: [\n        \u003cspan class=\"hljs-string\"\u003e\u0026quot;./src/custom.css\u0026quot;\u003c/span\u003e,\n        \u003cspan class=\"hljs-string\"\u003e\u0026quot;./src/custom2.css\u0026quot;\u003c/span\u003e\n    ],\n    \u003cspan class=\"hljs-attr\"\u003e\u0026quot;files\u0026quot;\u003c/span\u003e: [\n        { \u003cspan class=\"hljs-attr\"\u003e\u0026quot;path\u0026quot;\u003c/span\u003e: \u003cspan class=\"hljs-string\"\u003e\u0026quot;./src/test/test.md\u0026quot;\u003c/span\u003e, \u003cspan class=\"hljs-attr\"\u003e\u0026quot;title\u0026quot;\u003c/span\u003e: \u003cspan class=\"hljs-string\"\u003e\u0026quot;Test File\u0026quot;\u003c/span\u003e },\n        { \u003cspan class=\"hljs-attr\"\u003e\u0026quot;path\u0026quot;\u003c/span\u003e: \u003cspan class=\"hljs-string\"\u003e\u0026quot;./src/test/event_loop.md\u0026quot;\u003c/span\u003e, \u003cspan class=\"hljs-attr\"\u003e\u0026quot;title\u0026quot;\u003c/span\u003e: \u003cspan class=\"hljs-string\"\u003e\u0026quot;Event Loops\u0026quot;\u003c/span\u003e },\n        { \u003cspan class=\"hljs-attr\"\u003e\u0026quot;path\u0026quot;\u003c/span\u003e: \u003cspan class=\"hljs-string\"\u003e\u0026quot;./src/test/http_notes.md\u0026quot;\u003c/span\u003e, \u003cspan class=\"hljs-attr\"\u003e\u0026quot;title\u0026quot;\u003c/span\u003e: \u003cspan class=\"hljs-string\"\u003e\u0026quot;HTTP Notes\u0026quot;\u003c/span\u003e }\n    ]\n}\n\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cdiv class='ld-div'\u003e\u003cpre class='ld-pre hljs'\u003e\u003ccode\u003elurkdown --\u003cspan class=\"hljs-built_in\"\u003econfig\u003c/span\u003e=./\u003cspan class=\"hljs-built_in\"\u003econfig\u003c/span\u003e.json\n\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cbr\u003e\u003cdiv class='ld-div'\u003e\u003ch2 class='ld-h2'\u003ecustomization\u003c/h2\u003e\u003c/div\u003e\u003cdiv class='ld-div'\u003eYou can customize the elements by using this \u003ccode class='ld-code'\u003eCSS\u003c/code\u003e class names.\u003c/div\u003e\u003cbr\u003e\u003cdiv class='ld-div'\u003e\u003cpre class='ld-pre hljs'\u003e\u003ccode class='css'\u003e\u003cspan class=\"hljs-selector-class\"\u003e.ld-wrapper\u003c/span\u003e { }\n\n\u003cspan class=\"hljs-selector-class\"\u003e.ld-div\u003c/span\u003e { }\n\n\u003cspan class=\"hljs-selector-class\"\u003e.ld-blockquote\u003c/span\u003e { }\n\n\u003cspan class=\"hljs-selector-class\"\u003e.ld-pre\u003c/span\u003e { }\n\u003cspan class=\"hljs-selector-class\"\u003e.ld-code\u003c/span\u003e { }\n\n\u003cspan class=\"hljs-selector-class\"\u003e.ld-em\u003c/span\u003e { }\n\u003cspan class=\"hljs-selector-class\"\u003e.ld-strong\u003c/span\u003e { }\n\u003cspan class=\"hljs-selector-class\"\u003e.ld-del\u003c/span\u003e { }\n\n\u003cspan class=\"hljs-selector-class\"\u003e.ld-h1\u003c/span\u003e { }\n\u003cspan class=\"hljs-selector-class\"\u003e.ld-h2\u003c/span\u003e { }\n\u003cspan class=\"hljs-selector-class\"\u003e.ld-h3\u003c/span\u003e { }\n\u003cspan class=\"hljs-selector-class\"\u003e.ld-h4\u003c/span\u003e { }\n\u003cspan class=\"hljs-selector-class\"\u003e.ld-h5\u003c/span\u003e { }\n\u003cspan class=\"hljs-selector-class\"\u003e.ld-h6\u003c/span\u003e { }\n\n\u003cspan class=\"hljs-selector-class\"\u003e.ld-img\u003c/span\u003e { }\n\n\u003cspan class=\"hljs-selector-class\"\u003e.ld-a\u003c/span\u003e { }\n\n\u003cspan class=\"hljs-selector-class\"\u003e.ld-ol\u003c/span\u003e { }\n\u003cspan class=\"hljs-selector-class\"\u003e.ld-ul\u003c/span\u003e { }\n\u003cspan class=\"hljs-selector-class\"\u003e.ld-li\u003c/span\u003e { }\n\n\u003cspan class=\"hljs-selector-class\"\u003e.ld-checkbox\u003c/span\u003e { }\n\n\u003cspan class=\"hljs-selector-class\"\u003e.ld-table\u003c/span\u003e { }\n\u003cspan class=\"hljs-selector-class\"\u003e.ld-thead\u003c/span\u003e { }\n\u003cspan class=\"hljs-selector-class\"\u003e.ld-tbody\u003c/span\u003e { }\n\u003cspan class=\"hljs-selector-class\"\u003e.ld-tr\u003c/span\u003e { }\n\u003cspan class=\"hljs-selector-class\"\u003e.ld-th\u003c/span\u003e { } \n\u003cspan class=\"hljs-selector-class\"\u003e.ld-td\u003c/span\u003e { }\n\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cdiv class='ld-div'\u003e\u003chr\u003e\u003c/div\u003e\u003cdiv class='ld-div'\u003e\u003ccode class='ld-code'\u003elurkdown\u003c/code\u003e uses \u003ca class='ld-a' href='https://github.com/highlightjs/highlight.js'\u003ehighlight.js\u003c/a\u003e to deal with syntax highlighting so if you want to customize the syntax highlighting, you can pass the \u003ca class='ld-a' href='https://highlightjs.org/static/demo/'\u003ecustomized css files\u003c/a\u003e with the \u003ccode class='ld-code'\u003e--styles\u003c/code\u003e parameter.\u003cbr\u003e\u003c/div\u003e\u003c/div\u003e\n    \u003c/body\u003e\n\u003c/html\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fobsfx%2Flurkdown","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fobsfx%2Flurkdown","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fobsfx%2Flurkdown/lists"}