{"adoption": {"forks": 46, "observed_at": "2026-08-28T04:04:01.550819+00:00", "stars": 1218}, "canonical_url": "https://ross.abutalabs.com/products/unpdf", "card": {"archived": false, "artifact_type": "library", "description": "📄 PDF extraction and rendering across all JavaScript runtimes", "domain": ["pdf", "files", "developer-tools"], "enriched": true, "function": ["pdf", "parser", "ocr"], "health_score": 99, "homepage": null, "language": "TypeScript", "license": "MIT", "license_family": "permissive", "maturity": "active", "member_repos": ["unjs/unpdf"], "name": "unjs/unpdf", "platform": ["bun", "browser", "cross-platform", "serverless", "cloud"], "pushed_at": "2026-08-14T10:42:44+00:00", "repo": "unjs/unpdf", "stars": 1218, "tags": ["pdfjs", "text-extraction", "serverless", "edge", "cloudflare-workers", "ai-pipelines", "natural-language-processing", "nodejs", "deno"], "topics": ["pdf", "pdfjs", "serverless"], "urls": [], "use_cases": ["extract text from pdf files in javascript", "parse pdfs for ai summarization or rag pipelines", "read pdf content in cloudflare workers or edge functions", "extract images and links from pdf documents", "modern replacement for pdf-parse in node", "use pdf.js in deno or bun without node-specific dependencies"], "what_it_is": "unpdf is a TypeScript library providing PDF extraction and rendering utilities that work across all JavaScript runtimes, including Node.js, Deno, Bun, browsers, and serverless edge environments. It bundles a serverless-optimized build of Mozilla's PDF.js and offers simple APIs for extracting text, links, and images from PDF documents.", "when_to_avoid": ["you need full PDF creation or heavy layout manipulation rather than extraction", "you only target Node.js and already depend on native PDF tooling like pdftotext", "you need OCR of scanned PDFs without a text layer"], "when_to_choose": ["you need PDF text extraction that runs in serverless or edge environments", "you want a maintained, multi-runtime alternative to pdf-parse", "you're building AI workflows that ingest PDF documents", "you want a simple API over PDF.js with the option to drop down to the raw PDF.js API"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/unpdf", "repo": "unjs/unpdf", "role": "main", "score": 93}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:04:01.550819+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T06:17:05.620645+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "4ac75dcbc700b621d6a73772a97837268e22040abcf77d3c1fe7e9f08e9e24d2", "fetched_at": "2026-08-28T04:04:01.550819+00:00", "kind": "readme", "missing": false, "url": "https://github.com/unjs/unpdf"}, {"content_hash": "bc5877aadc35aa7c7b36e446c708b7b9c4d9d2300b81079a925d1c41aa062e33", "fetched_at": "2026-08-29T12:24:42.656807+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/unpdf"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:04:01.550819+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T06:17:05.620645+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "4ac75dcbc700b621d6a73772a97837268e22040abcf77d3c1fe7e9f08e9e24d2", "fetched_at": "2026-08-28T04:04:01.550819+00:00", "kind": "readme", "missing": false, "url": "https://github.com/unjs/unpdf"}, {"content_hash": "bc5877aadc35aa7c7b36e446c708b7b9c4d9d2300b81079a925d1c41aa062e33", "fetched_at": "2026-08-29T12:24:42.656807+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/unpdf"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T06:17:05.620645+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "4ac75dcbc700b621d6a73772a97837268e22040abcf77d3c1fe7e9f08e9e24d2", "fetched_at": "2026-08-28T04:04:01.550819+00:00", "kind": "readme", "missing": false, "url": "https://github.com/unjs/unpdf"}, {"content_hash": "bc5877aadc35aa7c7b36e446c708b7b9c4d9d2300b81079a925d1c41aa062e33", "fetched_at": "2026-08-29T12:24:42.656807+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/unpdf"}], "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:04:01.550819+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:04:01.550819+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:04:01.550819+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T06:17:05.620645+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "4ac75dcbc700b621d6a73772a97837268e22040abcf77d3c1fe7e9f08e9e24d2", "fetched_at": "2026-08-28T04:04:01.550819+00:00", "kind": "readme", "missing": false, "url": "https://github.com/unjs/unpdf"}, {"content_hash": "bc5877aadc35aa7c7b36e446c708b7b9c4d9d2300b81079a925d1c41aa062e33", "fetched_at": "2026-08-29T12:24:42.656807+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/unpdf"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:04:01.550819+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:04:01.550819+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T06:17:05.620645+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "4ac75dcbc700b621d6a73772a97837268e22040abcf77d3c1fe7e9f08e9e24d2", "fetched_at": "2026-08-28T04:04:01.550819+00:00", "kind": "readme", "missing": false, "url": "https://github.com/unjs/unpdf"}, {"content_hash": "bc5877aadc35aa7c7b36e446c708b7b9c4d9d2300b81079a925d1c41aa062e33", "fetched_at": "2026-08-29T12:24:42.656807+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/unpdf"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:04:01.550819+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:04:01.550819+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:04:01.550819+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T06:17:05.620645+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "4ac75dcbc700b621d6a73772a97837268e22040abcf77d3c1fe7e9f08e9e24d2", "fetched_at": "2026-08-28T04:04:01.550819+00:00", "kind": "readme", "missing": false, "url": "https://github.com/unjs/unpdf"}, {"content_hash": "bc5877aadc35aa7c7b36e446c708b7b9c4d9d2300b81079a925d1c41aa062e33", "fetched_at": "2026-08-29T12:24:42.656807+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/unpdf"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:04:01.550819+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:04:01.550819+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T06:17:05.620645+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "4ac75dcbc700b621d6a73772a97837268e22040abcf77d3c1fe7e9f08e9e24d2", "fetched_at": "2026-08-28T04:04:01.550819+00:00", "kind": "readme", "missing": false, "url": "https://github.com/unjs/unpdf"}, {"content_hash": "bc5877aadc35aa7c7b36e446c708b7b9c4d9d2300b81079a925d1c41aa062e33", "fetched_at": "2026-08-29T12:24:42.656807+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/unpdf"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T06:17:05.620645+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "4ac75dcbc700b621d6a73772a97837268e22040abcf77d3c1fe7e9f08e9e24d2", "fetched_at": "2026-08-28T04:04:01.550819+00:00", "kind": "readme", "missing": false, "url": "https://github.com/unjs/unpdf"}, {"content_hash": "bc5877aadc35aa7c7b36e446c708b7b9c4d9d2300b81079a925d1c41aa062e33", "fetched_at": "2026-08-29T12:24:42.656807+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/unpdf"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T06:17:05.620645+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "4ac75dcbc700b621d6a73772a97837268e22040abcf77d3c1fe7e9f08e9e24d2", "fetched_at": "2026-08-28T04:04:01.550819+00:00", "kind": "readme", "missing": false, "url": "https://github.com/unjs/unpdf"}, {"content_hash": "bc5877aadc35aa7c7b36e446c708b7b9c4d9d2300b81079a925d1c41aa062e33", "fetched_at": "2026-08-29T12:24:42.656807+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/unpdf"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T06:17:05.620645+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "4ac75dcbc700b621d6a73772a97837268e22040abcf77d3c1fe7e9f08e9e24d2", "fetched_at": "2026-08-28T04:04:01.550819+00:00", "kind": "readme", "missing": false, "url": "https://github.com/unjs/unpdf"}, {"content_hash": "bc5877aadc35aa7c7b36e446c708b7b9c4d9d2300b81079a925d1c41aa062e33", "fetched_at": "2026-08-29T12:24:42.656807+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/unpdf"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 97, "longevity": 79, "rhythm": 97}, "computed_at": "2026-09-03T02:20:16.233290+00:00", "flags": [], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 1118, "days_push": 19, "days_rel": 20, "gap_med": 6, "n_releases_24m": 26}, "score": 93, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}