Skip to content

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 .sdf archive without writing code
  • sdf convert — convert between supported document schema versions using the migration engine
  • sdf schema — interact with the schema registry: list, fetch, diff versions

Improvements:

  • sdf inspect now renders a structured table of all archive entries with sizes, checksums, and validation status
  • sdf validate exits with code 1 on validation failure and code 2 on unrecoverable parse errors — suitable for CI pipelines
  • sdf sign and sdf verify surface the signature algorithm and key ID in terminal output
  • sdf keygen generates ECDSA-P256 and RSA-2048 key pairs; outputs PEM files with a .sdf-key naming convention

Distribution:


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
  • ConnectorRegistry factory pattern with per-tenant connector instances
  • FieldMapper — maps SDF data.json fields to ERP-specific field names and applies format transforms (e.g., SAP YYYYMMDD date 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_address and structured metadata JSONB
  • S3 pre-signed URL TTL reduced to 1 hour; Glacier lifecycle policy for 90-day archival (production)
  • admin.ts routes now require a separate adminAuthMiddleware

Bug fixes:

  • Fixed timing in refresh token rotation: previous session revoked_at is 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 schemas
  • diffSchemas() — classifies each difference as breaking or non-breaking. Breaking: required field additions, field removals, type narrowing. Non-breaking: optional field additions, description changes, example additions
  • MigrationEngine — applies a declarative migration definition to transform a data.json document 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:

  • signer module: sign(), verify(), generateKeyPair() — ECDSA-P256 and RSA-2048 via Web Crypto API
  • checkVersion() validator — rejects documents with unsupported sdf_version values before attempting full parse
  • SDF_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 — throws SDF_ERROR_INVALID_ARCHIVE on any entry containing .. path components
  • buildSDF() enforces that document_id is a valid UUID v4
  • generatePDF() validates that no external resource references are present in the generated PDF

Bug fixes:

  • extractJSON() returned undefined instead of throwing SDF_ERROR_MISSING_FILE when data.json was absent
  • validateMeta() did not reject meta.json objects 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 the cryptography package
  • SDFValidator.check_version() — version validation before full parse

Improvements:

  • SDFProducer.build() now enforces the 50 MB / 200 MB ZIP size limits
  • SDFReader.extract_json() raises SDFMissingFileError instead of returning None when data.json is absent
  • PDF generation via reportlab now embeds all fonts — no external font references

Bug fixes:

  • SDFValidator.validate_schema() was importing $ref targets from external URLs when the schema contained a https:// prefixed $ref — now raises SDFOfflineViolationError instead

Earlier releases

sdf-kit 0.2.1 — February 2026

  • extractJSON() — partial-read mode: reads data.json and meta.json without loading visual.pdf — 3-4× faster for server-side high-throughput pipelines
  • validateMeta() throws SDF_ERROR_INVALID_META on missing required fields: sdf_version, document_id, issuer, issued_at
  • parseSDF() now surfaces checksum mismatches as SDF_ERROR_INVALID_ARCHIVE

sdf-kit 0.2.0 — February 2026

  • buildSDF() — production-ready producer API with full meta.json generation
  • parseSDF() — synchronous round-trip parse with full type inference
  • validateSchema() — JSON Schema Draft 2020-12 validation via ajv; strict offline-only mode (external $ref throws 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 sizes
  • sdf validate — pass/fail for CI pipelines; --json output mode
  • sdf sign and sdf verify — Phase 4 signing workflow
  • sdf 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