Thanks for your interest in AHTML.
- Schema changes go through PRs against
SPEC.mdandpackages/schema/src/schema.json, with a 4-week stability window between proposal and release. - The TypeScript prototype is the reference implementation until Phase 1 (Rust) ships. Breaking the TS implementation breaks everyone.
- No new dependencies in
@ahtmljs/schemawithout discussion. It is intentionally zero-dependency at runtime.
git clone https://github.com/DibbayajyotiRoy/AHTML
cd ahtml
npm install
npm run build --workspaces --if-present # builds dist/ for schema + next + agent
cd examples/benchmark && npm run start # verify your installcd packages/schema && npx tsc --noEmit -p tsconfig.json
cd packages/next && npx tsc --noEmit -p tsconfig.json
cd packages/agent && npx tsc --noEmit -p tsconfig.json
cd examples/landing && npx tsc --noEmit -p tsconfig.json
cd examples/benchmark && npx tsc --noEmit -p tsconfig.jsonAll five must pass before merging.
- Open a discussion at GitHub Discussions describing the proposed change.
- Wait for one of the schema stewards (currently the project lead) to ack the proposal.
- Submit a PR with:
- Updated
SPEC.mdsection - Updated
packages/schema/src/schema.json - Updated
packages/schema/src/types.ts(TS shapes) - Updated
packages/schema/src/validate.ts(runtime validator) - Updated
packages/schema/src/format-compact.tsandformat-json.tsif the change is wire-visible - At least one round-trip test (compact ↔ JSON ↔ canonical bytes)
- Updated
CHANGELOG.mdentry
- Updated
- PR is left open for 4 weeks while implementations stabilize.
- Merge.
- TypeScript with
strict: trueandnoUncheckedIndexedAccess: true. exactOptionalPropertyTypes: false(relaxed; causes friction without proportional benefit).- No comments that restate the code. Comments document why, not what.
- No backward-compat shims for unreleased code.
- No emoji in source unless explicitly requested.
| Track | Examples |
|---|---|
| Phase 0 polish | More extractors (Microdata, RDFa, page-metadata) |
| Framework plugins | @ahtmljs/vite, @ahtmljs/sveltekit, @ahtmljs/astro, @ahtmljs/nuxt, @ahtmljs/remix |
| Benchmark expansion | Adapters for WebShop / Mind2Web / WebArena |
| Phase 1 Rust core | Start with the format-compact parser in chumsky |
| Phase 2 language | Tree-sitter grammar for .ahtml |
| Real-world adopters | Open a discussion. We'll help you wire it up. |
- Browser-only changes that break Node compatibility
- Rebrands of MCP / OpenAPI / JSON-LD vocabulary (these are downstream emits; their contracts are theirs)
- A new entity primitive (the six are intentionally small)
- A new dependency in
@ahtmljs/schema - A new build tool
# Bump package versions
npm version <major|minor|patch> --workspaces
git tag v0.1.x
git push --tags
# Publish (project maintainer only)
npm publish --workspaces --access publicBe kind. Disagree on the technical merits. We do not have a separate Code of Conduct file; the maintainers will use judgment.