v0.0.1
expgov v0.0.1 — first public release
Portable export-governance for TypeScript SDK barrels. Inventory public exports, diff between refs, validate tier rules, trend release tags, trace barrel history, and map the export graph — read-only by default except init.
Docs: https://expgov.pages.dev
Install
# CLI (devDependency — binary name is still `expgov`)
pnpm add -D @expgov/cli
# SDK only — programmatic runExports* APIs
pnpm add -D @expgov/coreexpgov init
expgov validate
expgov inventoryCI / scripting:
expgov validate --json --silentnpm packages
| Package | npm | Role |
|---|---|---|
| CLI | @expgov/cli@0.0.1 |
expgov command + @expgov/cli/core config types |
| SDK | @expgov/core@0.0.1 |
runExports* engine without the CLI binary |
The CLI tarball is self-contained (dist/cli.js bundles core at build time). Config authors can use:
import { defineConfig, type ExpgovConfig } from '@expgov/cli/core';SDK consumers import runExportsValidate, runExportsInventory, etc. from @expgov/core — same engines as the CLI, host-neutral, with matching --json envelopes.
Why @expgov/cli and not expgov?
npm rejected the unscoped name expgov as too similar to the existing package expo. That is registry policy, not a permissions issue — owning the @expgov org does not reserve the global unscoped name.
- Install package:
@expgov/cli - Command on PATH:
expgov(unchanged)
Details: https://expgov.pages.dev/install
Commands
| Command | Purpose |
|---|---|
init |
Scaffold expgov.config.ts |
inventory |
Barrel snapshot — counts, tiers, namespaces |
diff |
Compare export surfaces between refs |
validate |
Governance checks (exit 0/1) |
doctor |
Config discovery and cache hygiene |
suggest |
Dry-run tier allowlist hints |
trend |
Export counts across release tags |
timeline |
Git log of barrel edits |
graph |
Export surface graph |
version |
CLI semver + optional npm update check |
help |
Command reference |
Global flags: --json, --quiet, --silent, --cwd, --config, cache overrides.
Highlights
- Tier governance —
@sdkTierJSDoc + nestedtiers.{stable,internal,advanced}config buckets - Parity checks — tsconfig
paths↔ npmexports - Per-SHA cache —
.expgov/cache/with worktree freshness gate - Machine output — stable JSON envelopes for CI
- Thin CLI host — Commander/chalk/inquirer in CLI; domain logic in
@expgov/core - TypeScript-only config —
expgov.config.tsvia jiti (no JSON config) - Docs site — VitePress at expgov.pages.dev
- Example SDK —
examples/sdk/teaching fixture
Requirements
- Node.js ≥ 20
- Git repo with a TypeScript SDK barrel (
index.tsre-exports)
Pre-v1 note
This is the first public release. CLI argv, --json envelope shape, and exit codes are treated as user-facing contracts. Internal APIs may still change before v1.
Links
- Documentation: https://expgov.pages.dev
- CLI on npm: https://www.npmjs.com/package/@expgov/cli
- SDK on npm: https://www.npmjs.com/package/@expgov/core
- Issues: https://github.com/zamdevio/expgov/issues