Changelog
All releases across the Etapsky ecosystem. Follows Semantic Versioning. Packages are published to npm and PyPI. CLI binaries are on GitHub Releases.
March 2026
sdf-cli 0.3.0
Released: March 2026 · npm · Homebrew · GitHub Releases
New commands:
sdf wrap— wrap an existing PDF and JSON data file into a.sdfarchive without writing codesdf convert— convert between supported document schema versions using the migration enginesdf schema— interact with the schema registry: list, fetch, diff versions
Improvements:
sdf inspectnow renders a structured table of all archive entries with sizes, checksums, and validation statussdf validateexits with code1on validation failure and code2on unrecoverable parse errors — suitable for CI pipelinessdf signandsdf verifysurface the signature algorithm and key ID in terminal outputsdf keygengenerates ECDSA-P256 and RSA-2048 key pairs; outputs PEM files with a.sdf-keynaming convention
Distribution:
- macOS arm64 and x64 binaries on GitHub Releases
- Linux x64 and arm64 binaries on GitHub Releases
- Homebrew tap:
brew install etapsky/tap/sdf
sdf-server-core 0.1.2
Released: March 2026 · npm
New:
- ERP connector routes (
/connectors/*) — configure, health-check, match, and push to SAP S/4HANA and Oracle Fusion Cloud ConnectorRegistryfactory pattern with per-tenant connector instancesFieldMapper— maps SDFdata.jsonfields to ERP-specific field names and applies format transforms (e.g., SAPYYYYMMDDdate format)- Oracle Fusion Cloud REST connector — supports Basic, Bearer, and OAuth2 authentication
- Webhook delivery worker — BullMQ job with HMAC-SHA256 payload signing, exponential backoff retry, and dead letter queue
Improvements:
- Rate limiting is now enforced per tenant independently
- Audit log entries now include
ip_addressand structuredmetadataJSONB - S3 pre-signed URL TTL reduced to 1 hour; Glacier lifecycle policy for 90-day archival (production)
admin.tsroutes now require a separateadminAuthMiddleware
Bug fixes:
- Fixed timing in refresh token rotation: previous session
revoked_atis now written atomically with new session creation in a single transaction - Fixed ZIP bomb check applying compressed size instead of uncompressed size
sdf-schema-registry 0.1.0
Released: March 2026 · npm
Initial release.
Features:
SchemaRegistry— register schemas by ID and version, resolve by ID/version pair, list all registered schemasdiffSchemas()— classifies each difference as breaking or non-breaking. Breaking: required field additions, field removals, type narrowing. Non-breaking: optional field additions, description changes, example additionsMigrationEngine— applies a declarative migration definition to transform adata.jsondocument from one schema version to another. Supports field renames, value transforms, and field additions with defaults
sdf-kit 0.2.2
Released: March 2026 · npm
New:
signermodule:sign(),verify(),generateKeyPair()— ECDSA-P256 and RSA-2048 via Web Crypto APIcheckVersion()validator — rejects documents with unsupportedsdf_versionvalues before attempting full parseSDF_ERROR_ARCHIVE_TOO_LARGE— thrown when decompressed content exceeds 200 MB or any single entry exceeds 50 MB
Improvements:
parseSDF()now validates path traversal in ZIP entries before extraction — throwsSDF_ERROR_INVALID_ARCHIVEon any entry containing..path componentsbuildSDF()enforces thatdocument_idis a valid UUID v4generatePDF()validates that no external resource references are present in the generated PDF
Bug fixes:
extractJSON()returnedundefinedinstead of throwingSDF_ERROR_MISSING_FILEwhendata.jsonwas absentvalidateMeta()did not rejectmeta.jsonobjects containing SDF-reserved fields in the wrong location
Python SDK 0.1.1
Released: March 2026 · PyPI
New:
SDFSigner— ECDSA-P256 signing and verification using thecryptographypackageSDFValidator.check_version()— version validation before full parse
Improvements:
SDFProducer.build()now enforces the 50 MB / 200 MB ZIP size limitsSDFReader.extract_json()raisesSDFMissingFileErrorinstead of returningNonewhendata.jsonis absent- PDF generation via
reportlabnow embeds all fonts — no external font references
Bug fixes:
SDFValidator.validate_schema()was importing$reftargets from external URLs when the schema contained ahttps://prefixed$ref— now raisesSDFOfflineViolationErrorinstead
Earlier releases
sdf-kit 0.2.1 — February 2026
extractJSON()— partial-read mode: readsdata.jsonandmeta.jsonwithout loadingvisual.pdf— 3-4× faster for server-side high-throughput pipelinesvalidateMeta()throwsSDF_ERROR_INVALID_METAon missing required fields:sdf_version,document_id,issuer,issued_atparseSDF()now surfaces checksum mismatches asSDF_ERROR_INVALID_ARCHIVE
sdf-kit 0.2.0 — February 2026
buildSDF()— production-ready producer API with fullmeta.jsongenerationparseSDF()— synchronous round-trip parse with full type inferencevalidateSchema()— JSON Schema Draft 2020-12 validation viaajv; strict offline-only mode (external$refthrows immediately)- Universal: Node.js 20/22, browser (Web Crypto API), Electron
sdf-cli 0.2.0 — February 2026
sdf inspect— structured inspection panel with meta, schema fields, data tree, and layer sizessdf validate— pass/fail for CI pipelines;--jsonoutput modesdf signandsdf verify— Phase 4 signing workflowsdf keygen— ECDSA-P256 and RSA-2048 key pair generation
sdf-kit 0.1.0 — January 2026
Initial public release of @etapsky/sdf-kit. Basic buildSDF() and parseSDF() implementation.
Python SDK 0.1.0 — January 2026
Initial public release of etapsky-sdf. Basic SDFProducer, SDFReader, and SDFValidator classes.
Versioning policy
- Patch releases (
x.y.Z): bug fixes, documentation corrections, non-breaking dependency updates - Minor releases (
x.Y.0): new features, new optional parameters, new exports — backward compatible - Major releases (
X.0.0): breaking API changes — announced with a deprecation period in the preceding minor series
Subscribe to releases
- GitHub: Watch releases on the
etapsky/sdfrepository - npm:
npm info @etapsky/sdf-kit dist-tags - PyPI: etapsky-sdf release history