{"_id":"@cognitivesand/md2pdf","_rev":"4-b2af9c8645d71c7237b703af0bb1e824","name":"@cognitivesand/md2pdf","dist-tags":{"latest":"0.2.0"},"versions":{"0.1.3":{"name":"@cognitivesand/md2pdf","version":"0.1.3","keywords":["markdown","pdf","mermaid","webdriver","cli"],"license":"MIT","_id":"@cognitivesand/md2pdf@0.1.3","maintainers":[{"name":"cognitivesand","email":"contact@cognitive-sand.ai"}],"homepage":"https://github.com/CognitiveSand/md2pdf#readme","bugs":{"url":"https://github.com/CognitiveSand/md2pdf/issues"},"bin":{"md2pdf":"dist/cli.js"},"dist":{"shasum":"c9a04ec4a4df2ff3101a0ee7b06211fdb7dee8bb","tarball":"https://registry.npmjs.org/@cognitivesand/md2pdf/-/md2pdf-0.1.3.tgz","fileCount":63,"integrity":"sha512-+j406e0KFq6ueuMUGwnz9KR0d8UzXyJZxSQMpJUzUIlkT8TnK79TWNs9q3YZSeE5vN7T5E7Z2Dr6a334xZprUQ==","signatures":[{"sig":"MEUCIFWAhL6Y3CKAfF/YtAb+cHe7kG+jkyYNcLGC/eEFC2PUAiEAkHcjNhAjo0YEt1zv1+RS27guYEu9qkklQb2UOLSAwBk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":331458},"type":"module","engines":{"node":">=20.0.0"},"gitHead":"fd42717d89fbfaebe102e2bc00b7d69f602f0d59","scripts":{"test":"vitest run --reporter=verbose","build":"npm run clean && tsc","clean":"node scripts/cleanDist.mjs","prepack":"npm run test:all","prepare":"tsc","test:all":"npm run typecheck && npm test && npm run test:artifacts && npm run check:artifacts && npm run build && npm run test:browser && npm run test:real-browser","typecheck":"tsc --noEmit","test:watch":"vitest","test:browser":"vitest run --config vitest.browser.config.ts","check:package":"node scripts/checkPackage.mjs","release:verify":"npm run test:all && npm run check:package","test:artifacts":"vitest run tests/unit/artifacts --reporter=verbose","test:contracts":"vitest run tests/unit/contracts --reporter=verbose","check:artifacts":"node scripts/checkArtifactFreshness.mjs","test:real-browser":"vitest run --config vitest.real-browser.config.ts"},"_npmUser":{"name":"cognitivesand","email":"contact@cognitive-sand.ai"},"repository":{"url":"git+https://github.com/CognitiveSand/md2pdf.git","type":"git"},"_npmVersion":"11.17.0","description":"Convert Markdown to PDF locally, without TeX/LaTeX","directories":{},"_nodeVersion":"24.14.1","dependencies":{"fflate":"0.8.3","mermaid":"11.15.0","markdown-it":"14.2.0","highlight.js":"11.11.1","markdown-it-footnote":"4.0.0","markdown-it-task-lists":"2.1.1"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"4.1.7","typescript":"6.0.3","@types/node":"25.9.1","@types/markdown-it":"14.1.2","@types/markdown-it-footnote":"3.0.4"},"_npmOperationalInternal":{"tmp":"tmp/md2pdf_0.1.3_1783518669841_0.03599602490601517","host":"s3://npm-registry-packages-npm-production"}},"0.1.4":{"name":"@cognitivesand/md2pdf","version":"0.1.4","keywords":["markdown","pdf","mermaid","webdriver","cli"],"license":"MIT","_id":"@cognitivesand/md2pdf@0.1.4","maintainers":[{"name":"cognitivesand","email":"contact@cognitive-sand.ai"}],"homepage":"https://github.com/CognitiveSand/md2pdf#readme","bugs":{"url":"https://github.com/CognitiveSand/md2pdf/issues"},"bin":{"md2pdf":"dist/cli.js"},"dist":{"shasum":"57e6cda5f8330c5a74c95272fe9cc8e9c17f7e1c","tarball":"https://registry.npmjs.org/@cognitivesand/md2pdf/-/md2pdf-0.1.4.tgz","fileCount":64,"integrity":"sha512-FMLNvmSWPsdco0eiOhZYKrit4F+FP7YwVP3EjM1B1RO5GPqPTNX4S/+1n3Kn43BKRJBetFYaxe1gS/il8jqWCg==","signatures":[{"sig":"MEUCIGmBGV3orKeDei/8K52Zn65Rt8FA1/Nw0J5DrJ4WcJGpAiEAyacQwG3GDmn1ZPbpBpr/ZqSgSf+dmbnh6ALKqOcqBv0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@cognitivesand%2fmd2pdf@0.1.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":3898850},"type":"module","engines":{"node":">=20.0.0"},"gitHead":"a592f53a29daf30e7b62bccbcb4d2bf57a9ebb6c","scripts":{"test":"vitest run --reporter=verbose","build":"npm run clean && tsc","clean":"node scripts/cleanDist.mjs","prepack":"npm run test:all","prepare":"tsc","test:all":"npm run typecheck && npm test && npm run test:artifacts && npm run check:artifacts && npm run build && npm run test:browser && npm run test:real-browser","typecheck":"tsc --noEmit","test:watch":"vitest","test:browser":"vitest run --config vitest.browser.config.ts","check:package":"node scripts/checkPackage.mjs","release:verify":"npm run test:all && npm run check:package","test:artifacts":"vitest run tests/unit/artifacts --reporter=verbose","test:contracts":"vitest run tests/unit/contracts --reporter=verbose","check:artifacts":"node scripts/checkArtifactFreshness.mjs","test:real-browser":"vitest run --config vitest.real-browser.config.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:be90748a-0969-4d30-a6ee-92a714cb20de"}},"repository":{"url":"git+https://github.com/CognitiveSand/md2pdf.git","type":"git"},"_npmVersion":"11.16.0","description":"Convert Markdown to PDF locally, without TeX/LaTeX","directories":{},"_nodeVersion":"24.18.0","dependencies":{"fflate":"0.8.3","markdown-it":"14.2.0","highlight.js":"11.11.1","markdown-it-footnote":"4.0.0","markdown-it-task-lists":"2.1.1"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"4.1.7","mermaid":"11.16.0","typescript":"6.0.3","@types/node":"25.9.1","@types/markdown-it":"14.1.2","@types/markdown-it-footnote":"3.0.4"},"_npmOperationalInternal":{"tmp":"tmp/md2pdf_0.1.4_1783526505471_0.9427268891933316","host":"s3://npm-registry-packages-npm-production"}},"0.1.5":{"name":"@cognitivesand/md2pdf","version":"0.1.5","keywords":["markdown","pdf","mermaid","webdriver","cli"],"license":"MIT","_id":"@cognitivesand/md2pdf@0.1.5","maintainers":[{"name":"cognitivesand","email":"contact@cognitive-sand.ai"}],"homepage":"https://github.com/CognitiveSand/md2pdf#readme","bugs":{"url":"https://github.com/CognitiveSand/md2pdf/issues"},"bin":{"md2pdf":"dist/cli.js"},"dist":{"shasum":"c8d64f354f62a1f926511c4f5af04a176ba11b76","tarball":"https://registry.npmjs.org/@cognitivesand/md2pdf/-/md2pdf-0.1.5.tgz","fileCount":64,"integrity":"sha512-B4rmegEX+C1InHn3Ki7DaR85N9WIr+M/IX77kuBDYe4fHw7m1TzqcLlSXqFva4WkwJdQsl3qFgUlyGSVCPfq1w==","signatures":[{"sig":"MEQCIASyjcnzEIRqDGOk9qwGdU7W5cG2lgwvXvlHRYYaa3SEAiBaH4nQOgleweg1Ae7oYxb0DTUM9rNxDsxBGjSMu+yckQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@cognitivesand%2fmd2pdf@0.1.5","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":3900241},"type":"module","engines":{"node":">=20.0.0"},"gitHead":"c21824781c3a61bfae53cdaa285b325e6b7e78f0","scripts":{"test":"vitest run --reporter=verbose","build":"npm run clean && tsc","clean":"node scripts/cleanDist.mjs","prepack":"npm run test:all","prepare":"tsc","test:all":"npm run typecheck && npm test && npm run test:artifacts && npm run check:artifacts && npm run build && npm run test:browser && npm run test:real-browser","typecheck":"tsc --noEmit","test:watch":"vitest","test:browser":"vitest run --config vitest.browser.config.ts","check:package":"node scripts/checkPackage.mjs","release:verify":"npm run test:all && npm run check:package","test:artifacts":"vitest run tests/unit/artifacts --reporter=verbose","test:contracts":"vitest run tests/unit/contracts --reporter=verbose","check:artifacts":"node scripts/checkArtifactFreshness.mjs","test:real-browser":"vitest run --config vitest.real-browser.config.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:be90748a-0969-4d30-a6ee-92a714cb20de"}},"repository":{"url":"git+https://github.com/CognitiveSand/md2pdf.git","type":"git"},"_npmVersion":"11.16.0","description":"Convert Markdown to PDF locally, without TeX/LaTeX","directories":{},"_nodeVersion":"24.18.0","dependencies":{"fflate":"0.8.3","markdown-it":"14.2.0","highlight.js":"11.11.1","markdown-it-footnote":"4.0.0","markdown-it-task-lists":"2.1.1"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"4.1.7","mermaid":"11.16.0","typescript":"6.0.3","@types/node":"25.9.1","@types/markdown-it":"14.1.2","@types/markdown-it-footnote":"3.0.4"},"_npmOperationalInternal":{"tmp":"tmp/md2pdf_0.1.5_1783609350473_0.29810711834551573","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@cognitivesand/md2pdf","version":"0.2.0","description":"Convert Markdown to PDF locally, without TeX/LaTeX","type":"module","license":"MIT","homepage":"https://github.com/CognitiveSand/md2pdf#readme","repository":{"type":"git","url":"git+https://github.com/CognitiveSand/md2pdf.git"},"bugs":{"url":"https://github.com/CognitiveSand/md2pdf/issues"},"keywords":["markdown","pdf","mermaid","webdriver","cli"],"bin":{"md2pdf":"dist/cli.js"},"engines":{"node":">=20.0.0"},"scripts":{"clean":"node scripts/cleanDist.mjs","build":"npm run clean && tsc","prepare":"tsc","prepack":"npm run test:all","test":"vitest run --reporter=verbose","test:contracts":"vitest run tests/unit/contracts --reporter=verbose","test:artifacts":"vitest run tests/unit/artifacts --reporter=verbose","test:watch":"vitest","test:browser":"vitest run --config vitest.browser.config.ts","test:real-browser":"vitest run --config vitest.real-browser.config.ts","test:all":"npm run typecheck && npm test && npm run test:artifacts && npm run check:artifacts && npm run build && npm run test:browser && npm run test:real-browser","check:artifacts":"node scripts/checkArtifactFreshness.mjs","check:package":"node scripts/checkPackage.mjs","release:verify":"npm run test:all && npm run check:package","typecheck":"tsc --noEmit"},"dependencies":{"fflate":"0.8.3","highlight.js":"11.11.1","markdown-it":"14.2.0","markdown-it-footnote":"4.0.0","markdown-it-task-lists":"2.1.1"},"devDependencies":{"@types/markdown-it":"14.1.2","@types/markdown-it-footnote":"3.0.4","@types/node":"25.9.1","mermaid":"11.16.0","typescript":"6.0.3","vitest":"4.1.7"},"gitHead":"d12b83a108c64e6e877e6ea5edbc3cc1ef9df353","_id":"@cognitivesand/md2pdf@0.2.0","_nodeVersion":"24.18.0","_npmVersion":"11.16.0","dist":{"integrity":"sha512-06CzaUHAEOh2nUxMznkkunQXLQro8jLcOfdBrx0R57uIAle9D8N6Z9UYlg0aN023mq9eUMZcBcJ3LcQmywj6sQ==","shasum":"cfa85a750880255979dec0f3707bbc58412e54f6","tarball":"https://registry.npmjs.org/@cognitivesand/md2pdf/-/md2pdf-0.2.0.tgz","fileCount":64,"unpackedSize":3903915,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@cognitivesand%2fmd2pdf@0.2.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIBMnSrM5oZl+TzK78T10lmUYHe078YDcRWiHIl0gOHrbAiBu0PeujgjBpi++cPWCRg38niKZO9t4LA4p1RTF5TOpng=="}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:be90748a-0969-4d30-a6ee-92a714cb20de"}},"directories":{},"maintainers":[{"name":"cognitivesand","email":"contact@cognitive-sand.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/md2pdf_0.2.0_1784626001168_0.8458243152320013"},"_hasShrinkwrap":false}},"time":{"created":"2026-07-08T13:51:09.672Z","modified":"2026-07-21T09:26:41.629Z","0.1.3":"2026-07-08T13:51:10.047Z","0.1.4":"2026-07-08T16:01:45.789Z","0.1.5":"2026-07-09T15:02:30.665Z","0.2.0":"2026-07-21T09:26:41.341Z"},"bugs":{"url":"https://github.com/CognitiveSand/md2pdf/issues"},"license":"MIT","homepage":"https://github.com/CognitiveSand/md2pdf#readme","keywords":["markdown","pdf","mermaid","webdriver","cli"],"repository":{"type":"git","url":"git+https://github.com/CognitiveSand/md2pdf.git"},"description":"Convert Markdown to PDF locally, without TeX/LaTeX","maintainers":[{"name":"cognitivesand","email":"contact@cognitive-sand.ai"}],"readme":"<p align=\"center\">\n  <img src=\"docs/images/banner_readme_md2pdf.png\" alt=\"md2pdf banner\">\n</p>\n\n<h1 align=\"center\">md2pdf</h1>\n\n<p align=\"center\">\n  Convert Markdown to clean PDFs with one command.<br>\n  Lightweight and fully local.\n</p>\n\n## Quick Start\n\nYou need Node.js 20 or later and one installed browser: Google Chrome,\nChromium, Microsoft Edge, Brave, Vivaldi, or Firefox.\n\n```bash\nnpx @cognitivesand/md2pdf notes.md\n# creates notes.pdf beside notes.md\n```\n\nOr install the command globally:\n\n```bash\nnpm install --global @cognitivesand/md2pdf\nmd2pdf notes.md\n```\n\nWorks with Bun: `bunx @cognitivesand/md2pdf notes.md` resolves the same npm\npackage.\n\n## Why md2pdf\n\nAI assistants and coding agents write Markdown by default. Chat exports,\ngenerated reports, design documents, meeting summaries, project documentation:\nthe volume of Markdown produced every day has grown with every model release,\nand most of it eventually needs to reach someone who does not read Markdown.\nPDF is how that document lands in an inbox, a review, or an archive.\n\nThe existing routes to a PDF each ask for a trade-off. A TeX/LaTeX toolchain\nmeans a multi-gigabyte install to convert a two-page note. Converters built on\na bundled headless browser download hundreds of megabytes of Chromium per\nproject. Online converters are the worst trade: your document leaves your\nmachine for a server you do not control.\n\nmd2pdf takes none of those trades. It renders your Markdown in the browser you\nalready have, entirely on your machine.\n\n## Objectives\n\n- **Fully local.** Your documents never leave your machine. No telemetry, no\n  remote rendering, no network calls with your content.\n- **Open source.** MIT-licensed, developed in the open at\n  [CognitiveSand/md2pdf](https://github.com/CognitiveSand/md2pdf).\n- **Complete Markdown support.** Tables, task lists, footnotes,\n  syntax-highlighted code fences, local raster images (PNG, JPEG, WebP), and\n  Mermaid diagrams rendered to vector graphics in the PDF.\n- **Lightweight.** Five small, actively maintained runtime dependencies. The\n  Mermaid renderer ships inside the package as a single pinned, checksummed\n  asset instead of pulling in its ~100-package dependency tree, and md2pdf\n  drives the browser already installed on your system instead of shipping one.\n- **Minimal attack surface.** Remote scripts, stylesheets, and images are never\n  loaded. Non-HTTPS and active link schemes (`javascript:`, `data:`, `file:`,\n  ...) are neutralized to plain text. Inputs are bounded by safety limits, and\n  every dependency and vendored asset passes a 7-day quarantine before adoption\n  (see the [Artifact Freshness Policy](ARTIFACT_FRESHNESS_POLICY.md)).\n\n## Usage\n\n```bash\nmd2pdf [OPTIONS] ENTRY [ENTRY ...]\n\nENTRY                     a Markdown file or a directory of Markdown files\n-o, --output PATH         output path for a single-file conversion\n    --output-dir DIR      write every output PDF into DIR\n-f, --force-overwrite     overwrite existing output PDFs without prompting\n    --size PT             base font size in points (default: 9)\n-h, --help                list options with one-line descriptions\n    --version             print the version, license, and publisher\n```\n\nExamples:\n\n```bash\nmd2pdf notes.md\nmd2pdf notes.md --output out/report.pdf\nmd2pdf a.md b.md --output-dir build\nmd2pdf ./notes-folder\nmd2pdf notes.md --force-overwrite\nmd2pdf notes.md --size 11\n```\n\nDirectory conversion is non-recursive: only top-level `.md` files in\nthe named directory are converted. The `.md` extension is matched\ncase-insensitively.\n\n### Behavior Notes\n\n- By default, `notes.md` writes `notes.pdf` beside the source.\n- `--output` is valid only when exactly one Markdown file is produced. The\n  extension is used verbatim; the CLI does not force `.pdf`.\n- `--output-dir` uses each source file's base name.\n- `--output` and `--output-dir` are mutually exclusive.\n- Existing outputs are preserved unless `--force-overwrite` is supplied or an\n  interactive overwrite prompt is accepted.\n- In non-interactive mode, an existing output without `--force-overwrite` is\n  skipped and counted in the final summary.\n- Batch conversion continues after per-file conversion failures and prints a\n  final summary: `<succeeded> succeeded, <failed> failed, <skipped> skipped`.\n\nExit codes:\n\n- `0`: every conversion succeeded, or all existing outputs were skipped without\n  conversion failures.\n- `1`: at least one conversion failed.\n- `2`: invalid command-line usage.\n\n### Markdown Scope\n\nmd2pdf supports headings, paragraphs, lists, tables, task lists, footnotes,\nfenced code blocks, relative raster images (PNG, JPEG, and WebP), and Mermaid\ncode fences. Browser-backed tests cover the rendered PDF behavior for the rich\nMarkdown and Mermaid paths.\n\nImages must be local relative files under the Markdown source directory. SVG,\nGIF, remote image URLs, absolute image paths, file URLs, unknown extensions,\nmismatched image content, and symlinks that escape the source directory are\nrejected before rendering.\n\nSafe HTTPS links remain clickable in the generated PDF. Non-HTTPS, local, and\nactive schemes such as `http:`, `javascript:`, `data:`, `file:`, `blob:`, and\n`ftp:` are rendered as text links without an `href`.\n\nSafety limits enforced during rendering: Markdown documents up to 10 MB,\nindividual lines up to 1 MB, up to 100 images, up to 50 Mermaid blocks, Mermaid\nblocks up to 256 KB, highlighted code fences up to 1 MB, individual images up\nto 20 MB, total embedded image bytes up to 100 MB, and image dimensions up to\n25 megapixels.\n\n### Browser and Driver Selection\n\nmd2pdf detects an installed browser on first run and resolves a matching\nWebDriver from the artifacts declared in `artifacts.json`, provisioned into a\nper-user cache. It does not select arbitrary drivers from `PATH`. For a browser\nwhose WebDriver ships bundled with it (such as the Firefox snap), md2pdf uses\nthat bundled driver after a compatibility check.\n\n`MD2PDF_BROWSER` may point the converter at a specific browser executable. It\nis an environment variable, not a CLI option:\n\n```bash\nMD2PDF_BROWSER=/usr/bin/chromium md2pdf notes.md\n```\n\n### Windows PowerShell Shim\n\nOn Windows, npm can generate both `md2pdf.cmd` and `md2pdf.ps1` shims.\nPowerShell may resolve `md2pdf` to the `.ps1` shim first, and the local\nExecutionPolicy can block that script even when the `.cmd` shim is available.\nUse the command shim directly when that happens:\n\n```powershell\nmd2pdf.cmd --help\n```\n\n## Project Structure\n\n```\nsrc/          TypeScript sources: CLI, converter pipeline, Markdown renderer,\n              browser locator, WebDriver client, artifact policy\ntests/        unit, integration, and browser-backed test suites plus fixtures\ndocs/         architecture, requirements, user stories, CI matrix, research\nscripts/      artifact freshness, package, and build check scripts\nassets/       default and highlight stylesheets bundled into the PDF\nsecurity/     security audit records\nartifacts.json           declared runtime artifacts (browsers, drivers)\nARTIFACT_FRESHNESS_POLICY.md  the dependency quarantine policy\n```\n\n## Contributing\n\nIssues and pull requests are welcome at\n[CognitiveSand/md2pdf](https://github.com/CognitiveSand/md2pdf).\n\nTo install from source:\n\n```bash\ngit clone https://github.com/CognitiveSand/md2pdf.git\ncd md2pdf\nnpm install --global .\nmd2pdf --help\n```\n\nThe `prepare` script compiles `dist/` during install, so `md2pdf` lands on your\n`PATH` in one step on Linux, macOS, or Windows. Re-run the same command after\npulling changes.\n\n### Development\n\n```bash\nnpm ci\nnpm run typecheck\nnpm test\nnpm run test:contracts\nnpm run check:artifacts\nnpm run build\n```\n\n`npm test` runs fast unit and contract coverage. `npm run test:browser` runs\nthe browser-backed integration tests and requires a local browser plus an\neligible WebDriver declared in `artifacts.json`. `npm run test:all` is the full\nrelease gate; it runs automatically before every publish.\n\nPublishing is automated: creating a GitHub release triggers\n[`publish.yml`](.github/workflows/publish.yml), which runs the full release\ngate and publishes to npm via trusted publishing (OIDC) with provenance.\n\nLocal development may set `MD2PDF_SKIP_REAL_BROWSER_TESTS=1` to skip the real\nbrowser proof explicitly; release evidence must run without that skip.\n\nTo smoke-test the exact tarball that would be published:\n\n```bash\nnpm ci\nnpm pack\nnpm install --global --prefix /tmp/md2pdf-user ./cognitivesand-md2pdf-<version>.tgz\n/tmp/md2pdf-user/bin/md2pdf --help\n```\n\n### Artifact Freshness Policy\n\nEvery artifact in md2pdf must be the newest eligible version available after a\n7-day quarantine period. The policy applies to npm dependencies, transitive\nlockfile entries, bundled assets, drivers, browser fallback builds, generated\nvendor files, and runtime provisioning paths. There is no emergency bypass or\nforce mode. See [`ARTIFACT_FRESHNESS_POLICY.md`](ARTIFACT_FRESHNESS_POLICY.md).\n\n## Project Status\n\nThe current release is published as\n[`@cognitivesand/md2pdf`](https://www.npmjs.com/package/@cognitivesand/md2pdf)\non npm; see the\n[GitHub releases](https://github.com/CognitiveSand/md2pdf/releases) for\nversion history. The release covers the user-visible CLI surface,\nbrowser-backed Markdown rendering,\nMermaid diagrams, local WebDriver printing, overwrite/skip behavior, batch\nsummaries, npm packaging, artifact freshness checks, and release validation\npaths.\n\n---\n\n<p align=\"center\">\n  <a href=\"https://cognitivesand.ai\">\n    <img src=\"docs/images/cognitivesand-logo-light.png\" alt=\"CognitiveSand\" width=\"280\">\n  </a>\n</p>\n\n<p align=\"center\">\n  md2pdf is built by <strong>CognitiveSand</strong>.<br>\n  Discover our work at\n  <a href=\"https://cognitivesand.ai\">visit cognitivesand.ai&nbsp;→</a>\n</p>\n","readmeFilename":"README.md"}