Roadmap
Status legend: โ shipped ยท ๐ง in progress.
Phases 0โ4 shipped in the integrated 0.5.0 toolchain release. Phase 5 hardening
is largely shipped; the remaining production-readiness work is tracked under the
Production Ready (v1.0)
milestone.
Phase 0: Spec First โ
- document the language design
- lock down the core type-system concepts
- define monorepo package responsibilities
Phase 1: Core โ
- parser
- AST
- pretty printer
- type representation
- subtype and consistency
- basic inference
Deliverables:
.tynix -> .nixtynix checktynix emit
Phase 2: Ambient + Workspace โ
.d.tynixparser- workspace declaration discovery
importdeclaration resolution- declaration emitter stabilization
Phase 3: Type Puzzle Features โ
- conditional types
infer- higher-kinded type application
- improved solver diagnostics
Phase 4: Tooling โ
- Haskell LSP server
- VS Code extension
- Zed extension
- neovim helper
Phase 5: Hardening ๐ง
- larger fixture corpus โ
- golden tests โ
- regression suite โ
- performance tuning ๐ง
- incremental cache โ (LSP analysis cache)
Toward v1.0: Production Ready ๐ง
Tracked under the Production Ready (v1.0) milestone, organized as epics:
- Nix-language parity โ
: attrset patterns with defaults and
@binders,inherit (src), nested and dynamic attribute paths,ordefaults, every operator (/,->,|>,<|, prefix-),<nixpkgs>,~/and interpolated paths, string escapes. Compiled output of 4000 sampled nixpkgs files parses to the same AST as the source undernix-instantiate --parse. - Span-carrying diagnostics โ
:
line:colin the CLI, exact underlines in editors, argument-level call mismatches, field-level record errors - Checker soundness โ
: Hindley-Milner let-polymorphism with per-SCC
generalization, rigid (skolemized) signatures, row-polymorphic open
records, optional fields,
AttrsOfdictionaries - Gradual adoption of unannotated Nix โ : soft injected dependencies, literal widening, a typed prelude for every builtin; about 98% of a sample of 800 unannotated nixpkgs files type-check
- LSP features โ : scope- and type-aware completion, rich diagnostics with related information, unused-binding and deprecation lints, code actions, signature help, navigation
- Editor setup and distribution โ
:
tynix ide install,tynix doctor, thetynix.devinstaller, flake packages, overlay and NixOS / nix-darwin / Home Manager modules - CLI output contract and exit codes โ ; watch mode ๐ง
- Release/cross-platform packaging and CI hardening (lint, security scan, coverage) ๐ง
- Property-based, integration, golden, and benchmark tests ๐ง
Next: Type System
Planned after v1.0, roughly in priority order:
- type classes, so that constraint contexts such as
Functor f =>(already parsed) are enforced - flow-sensitive narrowing through guards:
isAttrs x,x ? a,x._tag == "some"andx != nullrefiningxinside the branch config-aware typing of NixOS, nix-darwin and Home Manager modules, with option declarations driving the type ofconfig- implementing records whose fields carry their own
forall(instances ofFunctor-style dictionaries) in.tynix - reporting more than one diagnostic per file
- kind annotations
Shipping Criteria
- erased
.nixpreserves source semantics - existing
.nixfiles can be typed with.d.tynixalone - hover and diagnostics are practically useful
- the main type-puzzle examples are expressible