Internal JS API
August 23, 2026 · View on GitHub
Internal implementation. No semantic-versioning promise. Everything in this document can change or disappear in any release, including a patch.
What happened
The pre-0.17 releases exported a programmatic SDK (. root, /node,
/browser, /validate subpaths). It was sealed in the SDK-sealing wave:
the package had never been announced, had zero known JS consumers, and a
public JS API is pure maintenance surface (Hyrum's law). The public support
surface is now:
- the CLI (
pptwise …) - the IR schema (
pptwise schema) and its validate/render contract - the deck project format (
deck.spec.json+pages/+assets/) - the agent skill (
skills/pptwise/SKILL.md) - the DSH plugin (the package root export)
What still builds, and for whom
dist/index.js and dist/node.js are still built (see tsup.config.ts).
They exist so that code inside this package — the CLI bundle, the DSH
plugin layer under dsh/, and future MCP/tool surfaces — can share the
render core by relative path (../dist/index.js), version-locked to
the same install. They are deliberately absent from package.json
exports, so Node refuses a bare @liustack/pptwise/node import from
outside the package.
If you need pptwise from your own program, shell out to the CLI: pptwise validate / render / preview speak JSON and exit codes, and that
contract is covered by semver.
The former browser bundles
dist/browser.js and dist/validate.js (self-contained ESM for bare
<script type="module"> pages) were external-only artifacts and are no
longer built. If a web playground ever ships, it will be a product built on
the internal API, not an exported bundle.