{"adoption": {"forks": 163, "observed_at": "2026-08-28T04:05:58.164378+00:00", "stars": 1950}, "canonical_url": "https://ross.abutalabs.com/products/md-to-pdf", "card": {"archived": false, "artifact_type": "cli-tool", "description": "Hackable CLI tool for converting Markdown files to PDF using Node.js and headless Chrome.", "domain": ["developer-tools", "documentation", "pdf", "files"], "enriched": true, "function": ["pdf", "markdown", "cli", "developer-tools"], "health_score": 69, "homepage": "https://www.npmjs.com/md-to-pdf", "language": "TypeScript", "license": "MIT", "license_family": "permissive", "maturity": "active", "member_repos": ["simonhaenisch/md-to-pdf"], "name": "simonhaenisch/md-to-pdf", "platform": ["cli", "cross-platform"], "pushed_at": "2025-12-03T09:43:53+00:00", "repo": "simonhaenisch/md-to-pdf", "stars": 1950, "tags": ["markdown-to-pdf", "puppeteer", "headless-chrome", "pdf-generation", "syntax-highlighting", "watch-mode", "nodejs"], "topics": ["markdown-to-pdf", "pdf-generation", "documentation", "homework", "assignments", "markdown", "pdf", "headless-chrome", "puppeteer", "cli", "md"], "urls": [], "use_cases": ["convert markdown files to pdf from the command line", "generate pdf documentation from markdown", "turn homework or assignments written in markdown into pdf", "batch convert multiple markdown files to pdf concurrently", "watch a markdown file and regenerate pdf on changes", "apply custom css styles when exporting markdown to pdf", "convert html to pdf via headless chrome"], "what_it_is": "A hackable Node.js CLI tool that converts Markdown files to PDF using Marked for HTML conversion and Puppeteer (headless Chromium) for rendering. It supports watch mode, custom stylesheets, front-matter configuration, syntax highlighting, and a programmatic API.", "when_to_avoid": ["you need a lightweight tool without a headless Chromium dependency", "you need LaTeX-quality typesetting for academic papers", "you need a GUI-based document converter", "you need conversion formats other than PDF"], "when_to_choose": ["you want a simple, hackable markdown-to-pdf converter with a small codebase you can customize", "you need styling control via CSS, front-matter config, headers/footers, and page breaks", "you want watch mode for iterative document editing", "you prefer a Node.js/npm-based workflow"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/md-to-pdf", "repo": "simonhaenisch/md-to-pdf", "role": "main", "score": 54}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:05:58.164378+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T03:06:53.018786+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "7457586240ca02afb4dff82d6aa2ae6f5a563d5e72570bc30b3f7e2147223468", "fetched_at": "2026-08-28T04:05:58.164378+00:00", "kind": "readme", "missing": false, "url": "https://github.com/simonhaenisch/md-to-pdf"}, {"content_hash": "b8b344d89c51f6d6e19e5ecfa427c8b4fba13b202ae6453fa179bb21aaea308d", "fetched_at": "2026-08-29T10:46:49.907801+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/md-to-pdf"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:05:58.164378+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T03:06:53.018786+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "7457586240ca02afb4dff82d6aa2ae6f5a563d5e72570bc30b3f7e2147223468", "fetched_at": "2026-08-28T04:05:58.164378+00:00", "kind": "readme", "missing": false, "url": "https://github.com/simonhaenisch/md-to-pdf"}, {"content_hash": "b8b344d89c51f6d6e19e5ecfa427c8b4fba13b202ae6453fa179bb21aaea308d", "fetched_at": "2026-08-29T10:46:49.907801+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/md-to-pdf"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T03:06:53.018786+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "7457586240ca02afb4dff82d6aa2ae6f5a563d5e72570bc30b3f7e2147223468", "fetched_at": "2026-08-28T04:05:58.164378+00:00", "kind": "readme", "missing": false, "url": "https://github.com/simonhaenisch/md-to-pdf"}, {"content_hash": "b8b344d89c51f6d6e19e5ecfa427c8b4fba13b202ae6453fa179bb21aaea308d", "fetched_at": "2026-08-29T10:46:49.907801+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/md-to-pdf"}], "taxonomy_version": 1}, "health_score": {"inputs": ["days_since_push", "days_since_release", "archived"], "kind": "computed", "method": "health_v1"}, "homepage": {"kind": "observed", "observed_at": "2026-08-28T04:05:58.164378+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:05:58.164378+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:05:58.164378+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T03:06:53.018786+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "7457586240ca02afb4dff82d6aa2ae6f5a563d5e72570bc30b3f7e2147223468", "fetched_at": "2026-08-28T04:05:58.164378+00:00", "kind": "readme", "missing": false, "url": "https://github.com/simonhaenisch/md-to-pdf"}, {"content_hash": "b8b344d89c51f6d6e19e5ecfa427c8b4fba13b202ae6453fa179bb21aaea308d", "fetched_at": "2026-08-29T10:46:49.907801+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/md-to-pdf"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:05:58.164378+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:05:58.164378+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T03:06:53.018786+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "7457586240ca02afb4dff82d6aa2ae6f5a563d5e72570bc30b3f7e2147223468", "fetched_at": "2026-08-28T04:05:58.164378+00:00", "kind": "readme", "missing": false, "url": "https://github.com/simonhaenisch/md-to-pdf"}, {"content_hash": "b8b344d89c51f6d6e19e5ecfa427c8b4fba13b202ae6453fa179bb21aaea308d", "fetched_at": "2026-08-29T10:46:49.907801+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/md-to-pdf"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:05:58.164378+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:05:58.164378+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:05:58.164378+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T03:06:53.018786+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "7457586240ca02afb4dff82d6aa2ae6f5a563d5e72570bc30b3f7e2147223468", "fetched_at": "2026-08-28T04:05:58.164378+00:00", "kind": "readme", "missing": false, "url": "https://github.com/simonhaenisch/md-to-pdf"}, {"content_hash": "b8b344d89c51f6d6e19e5ecfa427c8b4fba13b202ae6453fa179bb21aaea308d", "fetched_at": "2026-08-29T10:46:49.907801+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/md-to-pdf"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:05:58.164378+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:05:58.164378+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T03:06:53.018786+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "7457586240ca02afb4dff82d6aa2ae6f5a563d5e72570bc30b3f7e2147223468", "fetched_at": "2026-08-28T04:05:58.164378+00:00", "kind": "readme", "missing": false, "url": "https://github.com/simonhaenisch/md-to-pdf"}, {"content_hash": "b8b344d89c51f6d6e19e5ecfa427c8b4fba13b202ae6453fa179bb21aaea308d", "fetched_at": "2026-08-29T10:46:49.907801+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/md-to-pdf"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T03:06:53.018786+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "7457586240ca02afb4dff82d6aa2ae6f5a563d5e72570bc30b3f7e2147223468", "fetched_at": "2026-08-28T04:05:58.164378+00:00", "kind": "readme", "missing": false, "url": "https://github.com/simonhaenisch/md-to-pdf"}, {"content_hash": "b8b344d89c51f6d6e19e5ecfa427c8b4fba13b202ae6453fa179bb21aaea308d", "fetched_at": "2026-08-29T10:46:49.907801+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/md-to-pdf"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T03:06:53.018786+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "7457586240ca02afb4dff82d6aa2ae6f5a563d5e72570bc30b3f7e2147223468", "fetched_at": "2026-08-28T04:05:58.164378+00:00", "kind": "readme", "missing": false, "url": "https://github.com/simonhaenisch/md-to-pdf"}, {"content_hash": "b8b344d89c51f6d6e19e5ecfa427c8b4fba13b202ae6453fa179bb21aaea308d", "fetched_at": "2026-08-29T10:46:49.907801+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/md-to-pdf"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T03:06:53.018786+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "7457586240ca02afb4dff82d6aa2ae6f5a563d5e72570bc30b3f7e2147223468", "fetched_at": "2026-08-28T04:05:58.164378+00:00", "kind": "readme", "missing": false, "url": "https://github.com/simonhaenisch/md-to-pdf"}, {"content_hash": "b8b344d89c51f6d6e19e5ecfa427c8b4fba13b202ae6453fa179bb21aaea308d", "fetched_at": "2026-08-29T10:46:49.907801+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/md-to-pdf"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 55, "longevity": 100, "rhythm": 27}, "computed_at": "2026-09-02T17:46:02.011165+00:00", "flags": [], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 3407, "days_push": 273, "days_rel": 273, "gap_med": null, "n_releases_24m": 1}, "score": 54, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}