v1.1.0 — pdfnative 1.3.0 coverage + an agent-native CLI (22 scripts, COLRv1 emoji, true streaming, PDF/UA, --json envelopes, schema)
Released 2026-06-14
v1.1.0 surfaces the new pdfnative 1.3.0 engine capabilities through the
CLI and makes the tool agent-native. render now reaches all 22 Unicode
scripts and COLRv1 colour emoji through expanded --font / --lang
shortcuts, adds true constant-memory streaming (--stream-true), and a
--max-blocks cap for very large documents. inspect gains a read-only
PDF/UA (ISO 14289-1) structural validator (--pdfua, --check pdfua) for
CI accessibility gates. A new agent-native contract — global --json
envelopes, stable E_* error codes, a --dry-run validation mode, and a
schema command — lets autonomous AI agents and CI pipelines drive the CLI
deterministically. It also adds a token-economy output projection
(--summary / --fields + compact JSON under --json) that cuts agent output
~90% while preserving the fields orchestration code branches on. A CycloneDX
SBOM is now attached to every release.
100% backward-compatible with v1.0.0 — every existing invocation keeps working.
⭐ Star
pdfnative— the
zero-dependency PDF engine that powers this CLI. Every star helps the
long-term project.
Highlights
- 22 Unicode scripts + COLRv1 colour emoji. The six scripts new in
pdfnative 1.3.0 — Telugu (te), Sinhala (si), Tibetan (bo), Khmer
(km), Myanmar (my), Amharic/Ethiopic (am) — plus the existing 16 and
native colour emoji are now selectable via--font. - True constant-memory streaming.
--stream-trueemits and frees PDF parts
as it goes, so the fully-joined binary never materialises in memory.
Byte-identical to the buffered builders. - Configurable block cap.
--max-blocks <n>exposes pdfnative's
layout.maxBlocks(default 100 000) for multi-thousand-page reports. - PDF/UA structural validation.
inspect --pdfuareports
{ valid, errors, warnings };inspect --check pdfuais a CI gate. It is a
developer-time structural check, not a substitute for a full reference
validator such as veraPDF. - Agent-native contract. Global
--jsonstatus/error envelopes, stable
E_*error codes, a--dry-runvalidation mode, and aschemacommand.
Token economy is built in via--summary(minimal verdict),--fields
(dot-path projection), and compact JSON under--json(--prettyopt-out)
to reduce agent output by ~90% without changing human-readable defaults.
See AGENTS.md. - Supply-chain transparency. A CycloneDX SBOM (
sbom.cdx.json) is attached
to every GitHub release and an OpenSSF Scorecard badge is published.
What's new
render
-
--fontallow-list expanded to all 22 bundled scripts +color-emoji.
Each shortcut name doubles as its--langcode; pdfnative routes each code
point to the font whose cmap covers it, so mixed-script and emoji text render
automatically once the relevant fonts are registered.# Telugu document pdfnative render --input te.json --font te --lang te --output te.pdf # COLRv1 colour emoji pdfnative render --input party.json --font color-emoji --lang color-emoji --output party.pdf
-
--stream-true— true constant-memory streaming via
buildDocumentPDFStreamTrue/buildPDFStreamTrue. Same constraints as
--stream(no TOC blocks, no{pages}placeholder), byte-identical output,
and mutually exclusive with the other--stream*flags.pdfnative render --input big-doc.json --output report.pdf --stream-true
-
--max-blocks <n>— raise or lower the document-block ceiling
(default 100 000).# Cap a potentially huge payload as a fail-fast guard pdfnative render --input big-doc.json --output report.pdf --max-blocks 50000
inspect
-
PDF/UA (ISO 14289-1) structural validation via
validatePdfUA. The
validator checks/MarkInfo /Marked,/StructTreeRoot+/ParentTree,
/Metadata,/Lang, and per-page/MCIDuniqueness — a fast developer-time
gate that complements a full reference validator such as veraPDF.# Add a report to the inspection output pdfnative inspect --input report.pdf --pdfua # CI accessibility gate (exit 1 if structural prerequisites fail) pdfnative inspect --input report.pdf --check pdfua
Agent-native automation
The CLI is now designed so an autonomous AI agent — or any program — can drive
it deterministically (no MCP server, no daemon, just the process contract).
-
--jsonenvelope. Pass--jsonto any command to get a single
machine-readable object on stderr. On failure:
{ "ok": false, "command": "…", "error": { "code": "E_*", "message": "…" } }.
On success,render/sign/batchemit a{ "ok": true, … }status
line. stdout stays reserved for the artifact (PDF, report, schema, script). -
Stable error codes. Every failure carries a code (
E_USAGE,E_INPUT,
E_PARSE,E_IO,E_SIGN,E_VERIFY_FAILED,E_CHECK_FAILED,
E_UNSUPPORTED,E_RUNTIME) so callers branch on a class, not on prose.
Numeric exit codes (0/1/2) are unchanged. -
--dry-runvalidates inputs forrender/sign/batchwithout
producing output. -
schemacommand prints a versioned JSON Schema (Draft 2020-12) for the
renderinput, theinspect/verify/batchoutput, and the compact
inspect-summary/verify-summary/batch-summaryshapes. -
Token economy output projection. For JSON-on-stdout commands
(inspect/verify/batch):- compact JSON is automatic under
--json(--prettyforces indentation); --summaryemits a canonical minimal verdict:inspect:{ pages, encrypted, signatures, pdfa }verify:{ valid, signatures, invalid }batch:{ total, succeeded, failed }(drops per-fileresults)
--fields a,b.ckeeps only named dot-paths (array segments map over items;
unknown paths are omitted).
This keeps stdout token-cheap for agents while preserving deterministic
machine-readable behavior.
pdfnative schema list pdfnative schema verify-summary pdfnative schema render pdfnative inspect --input doc.pdf --json --summary pdfnative verify --input doc.pdf --json --fields valid pdfnative render --input doc.json --output out.pdf --dry-run --json
See AGENTS.md and
samples/agent/. - compact JSON is automatic under
Compatibility
- Built on pdfnative
^1.3.0(was^1.2.0). - Node.js ≥ 20, Bun, Deno (
node dist/cli.cjs). - Zero extra runtime dependencies —
pdfnativeremains the sole dependency. - 100% backward-compatible with v1.0.0.
Notes
- Sign-side LTV (embedding timestamps /
/DSSat signing time) remains
upstream-blocked in pdfnative;sign --timestampstays reserved and errors
clearly. See ROADMAP.md and SECURITY.md. - The agent contract adds no network surface:
--jsonand--dry-runare
pure local presentation/validation. The CLI stays offline by default.