Migration 0.19 → 0.20¶
ETLantic 0.20 adds pre-import plugin trust, unified safe I/O, artifact isolation, outbound network policy, serialization bans, and release SBOM / attestation support.
1. Bump packages¶
pip install 'etlantic==0.20.0'
# matching extras / plugins
pip install 'etlantic-polars==0.20.0' 'etlantic-pandas==0.20.0'
Plugin packages require etlantic>=0.20.0,<0.21.
2. Production plugin manifests¶
First-party plugins ship etlantic-plugin-manifest.json. Production
security_mode="production" requires a readable static manifest before
entry-point import. Third-party plugins must ship the same schema
(etlantic.plugin_manifest/1) or discovery fails closed.
3. Allowlists still required in production¶
Profile(
name="production",
security_mode="production",
plugin_allowlist={
"etlantic-polars": "==0.20.0",
"etlantic-sql": "==0.20.0",
},
)
Allowlist evaluation now happens before ep.load().
4. Outbound destinations¶
If transformations emit webhooks, declare allowlisted hosts:
Profile(
name="production",
security_mode="production",
plugin_allowlist={"local": None},
outbound={
"allowed_schemes": ["https"],
"allowed_hosts": ["hooks.example.com"],
"allow_redirects": False,
"max_response_bytes": 1_048_576,
},
)
Loopback, link-local, private, and metadata-service targets are denied by default.
5. Regenerate plans¶
Artifact and cache identity strings gained isolation dimensions. Stored 0.19 plans remain loadable but should be regenerated so new identity keys and trust records are recorded.
6. Safe I/O roots¶
Report and schema-history file stores now write through SafeIoPolicy. Ensure
store roots are intentional directories (not world-writable shared paths) and
avoid symlink farms that escape the root.
Residual risk¶
- Process isolation for capability probes is containment, not a complete sandbox for untrusted Python (explicit product non-goal).
- OIDC trusted publishing is preferred; long-lived PyPI tokens may remain as bootstrap fallback until every distribution is configured for Trusted Publishing.