0.4.0 - 2026-08-12
Release Notes
Breaking release — upgrading needs action. Required migration steps are in
docs/UPGRADING.md.
Breaking changes
- types: breaking: Timestamp is microseconds, and its wire form is RFC 3339
- storage: breaking: Two orthogonal version counters on the manifest
- breaking: Rename the schema serial, and bake an engine generation beside it
- parser: breaking: Timestamp declares its precision
- codegen: breaking: Every generated wire form is the RFC 3339 string
- codegen: breaking: Allocate a +timestamp identity, and floor what is written
Features
- parser: Warn that &/^ on the identity field has no effect (#258)
- storage: Carry per-field allocation high-water marks in the manifest
- parser: Reject integer autos that are not conflict-visible
- codegen: Allocate +u32/+u64 at create, seeded by scan and a persisted floor
- codegen: Emit a sequence claim key for bare integer autos
- parser: Accept a bare non-unique integer auto
- storage: Borrow a fixed column's slot instead of copying it (#238)
- parser:
string(N)andstring(N!)parse to a fixed-width inline type (#238) - codegen: Generate the inline string column, end to end (#238)
- validation: The semantic rules for
string(N)(#238) - codegen: Resolve a foreign key to its target's identity type
- codegen: Every surface keys a relation on the target's own id
- codegen: A junction keys each endpoint on its own identity
- parser: Report an identity cycle, an inherited key width, and an unholdable junction key
- parser: A +timestamp identity must be named
idand declaredus - codegen: Generate the engine-format migration hop
- cli: Forgedb migrate engine
- types: InlineStr, a Copy fixed-capacity string key
- parser: A string identity carries a declared width, and no @UTF8
- codegen: A string identity generates an InlineStr key
- codegen: An identity is checked against the URL alphabet at write
- parser: One identity predicate, and one key-type predicate, on the AST
- parser: The identity type allow-list, landing once
- codegen: Reconnect the coordinator client in both error arms (#274)
- codegen: Emit a CorsLayer and check WebSocket origins (#140)
- cli: Wire FORGEDB_CORS_ORIGINS through the generated scaffold (#140)
- codegen: Carry the buffer slot on the scan view (#226)
- codegen: Emit the borrowed full-record page view (#226)
- codegen: Emit the __with_page scan-and-page scope (#226)
Bug Fixes
- codegen: Enforce &/^ on non-identity auto fields (#258)
- codegen: Persist the auto-increment floor before compaction destroys the rows
- codegen: Parenthesize the junction frame's slot before try_into
- codegen:
idwins the identity by name, not by declaration order - codegen: The REST id parse resolves the identity type, not
_ => Uuid - codegen: The browser replica parses a string key
- codegen: An FK to a string key is an inline-string column everywhere
- docs: Two schema examples in SCHEMA.md that never parsed
- coordinator: Couple the client's I/O deadline to the grant wait (#274)
- codegen: Read the page view's scan fields by value, not by no-op clone (#226)
Performance
- codegen: Serialize the live list page from the scan buffers (#226)
- codegen: Hoist the unfiltered-list predicate out of the per-row loop
- codegen: Emit __with_fast_page, the unfiltered list read
- codegen: Route the unfiltered, unsorted list through the fast page
Install forgedb 0.4.0
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/hoodiecollin/forgedb/releases/download/v0.4.0/forgedb-installer.sh | shInstall prebuilt binaries via Homebrew
brew install hoodiecollin/tap/forgedbInstall prebuilt binaries into your npm project
npm install @hoodiecollin/forgedb@0.4.0Download forgedb 0.4.0
| File | Platform | Checksum |
|---|---|---|
| forgedb-aarch64-apple-darwin.tar.xz | Apple Silicon macOS | checksum |
| forgedb-x86_64-apple-darwin.tar.xz | Intel macOS | checksum |
| forgedb-aarch64-unknown-linux-gnu.tar.xz | ARM64 Linux | checksum |
| forgedb-x86_64-unknown-linux-gnu.tar.xz | x64 Linux | checksum |
| forgedb-x86_64-unknown-linux-musl.tar.xz | x64 MUSL Linux | checksum |