Roadmap
Sailfin's path from alpha to a stable 1.0 release and beyond.
Release 1.0
7 of 57 milestones completePhase 1: Runtime Enablement — Systems Primitives
Language features that unblock the pure Sailfin runtime rewrite. Nothing in the runtime can be ported without these.
- extern fn with typed linker-resolved symbols (parser ✓, emitter ✓, type-checker registration needed)
- int (i64) and float (f64) numeric types replacing number
- Raw pointer types (*T, *const T, *mut T) — enforced, not just parsed
- Result<T, E> type and ? error propagation operator
- Bitwise operators on integer types (&, |, ^, >>, <<)
- ${} string interpolation replacing {{ }}
Phase 2: Runtime Enablement — Containers & Resources
Higher-level features needed to express typed containers, resource handles, and higher-order operations in the runtime.
- Closures with captured variables (not just non-capturing lambdas)
- Generic type constraints (fn sort<T: Comparable>(arr: Array<T>))
- Deterministic drop emission — compiler emits scope-exit drop calls for owned values
- Complete generic type inference
- Interface conformance validation with variance checks
Phase 3: Sailfin-Native Runtime
Replace the C runtime with pure Sailfin. Depends on Phase 1 and 2 compiler features being shipped.
- Core memory management — arena allocator, string/array allocation in Sailfin
- String subsystem — {ptr, len, cap} layout, concat, append, substring, grapheme ops
- Array/collection subsystem — typed Array<T>, Slice<T>, push, concat, map/filter/reduce
- File I/O subsystem — fs.read, fs.write, fs.exists, directory ops via extern fn
- Process execution — posix_spawnp/CreateProcessA via extern fn
- Exception subsystem — replace TLS-flag polling or migrate to Result<T, E> internally
- Time/clock subsystem — clock_gettime/mach_absolute_time via extern fn
- Crypto subsystem — SHA-256, Base64 in pure Sailfin (bitwise int ops)
- Native CLI driver — replace native_driver.c with Sailfin entry point
- Remove the C runtime once parity and performance gates are met
Phase 4: Structured Concurrency
Concurrency primitives with capability tracking. Requires Phase 1-2 features plus atomic intrinsics.
- Atomic intrinsics (atomic_add, atomic_cas, memory fences)
- await expression parsing and lowering
- routine { } block parsing and lowering
- channel() as the core concurrency primitive
- spawn expression
- Runtime task scheduler and work queue
Effect System Hardening
Make the effect system world-class — Sailfin's core differentiator. Can progress in parallel with runtime work.
- Wire effect checker into compilation gate — violations block compilation, not just diagnostics
- Hierarchical effect enforcement (io.fs, net.http, etc.)
- Effect polymorphism for generics (fn map<T, E>(f: Fn ![E]) ![E])
- Transitive call-graph enforcement (if A calls B ![net], A needs ![net])
- --fix workflow for automatically inserting missing effect annotations
- gpu and rand effect enforcement
- Capsule-level capability enforcement via capsule.toml
Compiler Stabilization
Build pipeline and LLVM backend correctness.
- Eliminate the Python fixup script
- Make build.sh the sole clean build path with no post-processing
- Pass make check with no fallbacks
- Deterministic self-hosting — stage2 == stage3 fixed-point verified
- Stabilize control-flow LLVM lowering (loop/if/break headers)
- Richer diagnostics — multi-span, severity levels, fix-it hints
Tooling & Developer Workflow
CLI tools and build toolchain modernization.
- sfn fmt — code formatter (token-stream, one style, CI-enforced)
- sfn check — fast type and effect analysis
- sfn vet — static analyzer
- sfn audit — dependency capability surface analysis
- Replace the sfn shell wrapper with a Sailfin-native CLI binary
- Remove Python tooling and scripts from the release pipeline
- Remove Python runtime shims
LLM & Agent Adoption
Make Sailfin the language agents reach for when they need verifiable code. Structured tooling and training-data presence.
- llms.txt — canonical single-file language reference for LLM context windows
- Structured diagnostics (sfn check --json) — machine-readable error output
- MCP server wrapping the compiler for agentic compile-check-fix loops
- 50+ Rosetta Code / classic algorithm ports as training-data corpus
Release Pipeline Hardening
Supply-chain security and reproducible builds.
- Signed checksums and provenance metadata with release artifacts
- Installer CI that validates install.sh against staging artifacts
- Only self-hosted compiler artifacts in build and release workflows
Documentation
Docs, spec, and examples aligned with compiler reality.
- Align README, status, roadmap, and spec with compiler reality
- Expand site docs to production-quality coverage
- Remove legacy compiler-stage references from docs and examples
Post-1.0
These workstreams begin after a stable self-hosted toolchain ships.
Enterprise Hardening & AI Integration
Library-level AI support, taint tracking, and advanced safety features — delivered as capsules, not language syntax.
- sfn/ai capsule — model invocation, prompt templating, generation provenance
- Migrate model/prompt/tool/pipeline from language syntax to sfn/ai library
- Secret<T> / PII<T> taint tracking integrated with the effect system
- sfn lsp — language server for IDE integration
- sfn audit enhancements — transitive capability analysis, SBOM generation
- Ownership and borrowing enforcement (Affine<T>, Linear<T>, &T, &mut T)
Platform & Ecosystem
Runtime, tooling, and ecosystem infrastructure for post-1.0 growth.
- Async runtime — Sailfin-native event loop, task scheduler, and channels
- Runtime diagnostics — structured tracing and allocation telemetry
- WebAssembly emission target
- Native test framework — golden, adversarial, and replay test types
- |> pipeline operator with async and lazy semantics
- GPU effect enforcement and tensor dispatch
Exploration Backlog
Under consideration with no committed milestone.
- unsafe capability enforcement
- Currency literals ($0.05) and time literals (1s, 150ms)
- Notebook and interactive tooling
- Effect handlers (algebraic effect semantics)
- Capability-scoped sandboxing for capsule execution
Contributing
Open an issue or start a discussion in a pull request. Tag it with the appropriate milestone
label so it can be triaged against the 1.0 scope. Major design changes that affect the language
or ABI should reference a written proposal in docs/proposals/ before implementation begins.