Skip to content

Status: what works today

Eelgrass is pre-alpha. This page is the honesty contract: if a capability isn't listed as Yes here, other pages should not imply it ships.

Engine

CapabilityStatus
Durable on-disk pages + WALYes
Crash recovery (WAL replay)Yes
Multi-page B+tree (splits, interiors, root growth)Yes
insert / update / delete (tombstones)Yes
filter / selectYes
sort / take / skipYes (stable sort; Int counts)
joinYes: follows a ref field (inner)
group … aggregateYes: count / sum / min / max / avg
distinctYes
asofYes: pins nearest named snapshot ≤ time (not raw page history)
atomic { … }Yes: SI pin, RYW, single-process first-committer-wins. Transactions
ULID row idsYes
Secondary indexes (field: Type @index)Yes: equality; planner picks index vs scan
Access planner (index vs scan hint)Yes: shape-only hint[^plan]
Multi-tenant catalog / fork / snapshot / suspend / deleteYes
Compact (v1)Yes: eelgrass compact / Studio ops
Lazy migration Slice AYes: fingerprint apply-on-touch; pending_migration clears
Page corruption surfaced (checksum)Yes: recorded and exposed on GET …/health/detail
Cross-process first-committer-winsNot yet
across tenants(…) executionNot yet (parsed only)
Cloud backends (R2 / Durable Objects)Not yet

Language front-end

CapabilityStatus
Lexer / parser / ASTYes
Typechecker (Money, enums, joins-as-types, is / as)Yes
Named queries (query Name(params) { … })Yes
Wasm intel for Studio (complete / diagnose / hover)Yes
Packaged LSP serverNot yet (design only)

TypeScript (@eelgrass/client)

CapabilityStatus
Money class (bigint minors)Yes
eelgrass\…`` tagged templateYes
Named-query codegen (eelgrass-codegen)Yes
EelgrassExecutor interfaceYes
Shipping HTTP / IPC transportNot yet

Studio

CapabilityStatus
Collections + virtualized gridYes
Query editor + RunYes
Editor intel (| stage menu, completions, hover, Shape + long-press, squiggles)Yes
Write-mode mutation consoleYes
Plan hint (index vs scan)Yes
Tenant switcher / create / forkYes
Time-travel pin (named snapshots)Yes
Schema & migration panelYes
Live CDC (WebSocket /tail + HTTP poll fallback)Yes
Health panelYes
Mobile-first shell (Studio)Yes: drawer nav, header ⋮ overflow, bottom-sheet log, safe-area
Visual query builderYes: stage cards (filter/join/sort/asof/group/… + CRUD); compound/atomic stay in Code
Local playground (?local=1)Yes: part-based app builder on D17 wasm (localEngine); mock only as fallback/?mock=1; templates + workspace ledger + live .eel
100k-row grid tripwireYes: ?bench=grid100k Playwright scroll budget
Playground mobile PlaywrightYes on apex (playground-e2e / npm run test:playground:ci); PR gate still rust+docs only
Playground workbook export packageYes: JSON package { schema.eel, queries.eel, project.json, data.json }; zip / serve handoff polish later

Browser engine

CapabilityStatus
File + in-memory storage backends[^traits]Yes
Injected wall clockYes
Wasm session engineYes
Durable OPFS engineYes: Web Worker + createSyncAccessHandle (synchronous, crash-consistent)

What's next

  • @breaking drop + page-history compaction (lazy migration Slice B+)
  • asof over raw page-version history
  • OPFS log-structured store (flush is O(delta), not O(mirror))
  • Cross-process conflict detection
  • TS transport + export/import packaging
  • Execute across tenants under capability grants

Agent plans and crate-level design live under Maintainers → Internals. Those are not product promises.

[^plan]: Implemented in the eelgrass-plan crate for maintainers who are tracing the workspace. [^traits]: Storage and recovery are pluggable behind PageStore / WalSink traits (file and mem backends). Product users only need to know that disk and browser share the same execution model.

Pre-alpha. Local-first. Stdlib-only Rust engine. Tenant concerns shifted left into the database.