0.14 (May 20, 2026)
There were nearly five hundred commits since the last release. The highlights
are the bytes type, full expression support in f-strings, a 2x-faster
recursive-descent parser, and a significant rework of heap lifetimes.
Language features
- Implement the
bytestype:b"..."literals,bytes()constructor,
methods like.elems(), indexing, and slicing. - F-string expressions:
{}placeholders now accept arbitrary expressions
(arithmetic, function calls, indexing, comprehensions, conditionals), not
just identifiers. Adds!sand!rconversion specifiers. - Add
startandendparameters tostr.startswith()and
str.endswith(). - Allow
defaultas a named argument indict.pop(). - Support
Enum.Valuesyntax for accessing enum variants. - Reject unparenthesized trailing-comma tuples (e.g.
x = 1,).
Parser
- Add a hand-written recursive-descent + Pratt expression parser as an
alternative to LALRPOP, roughly 2x faster on per-parse microbenchmarks.
Selectable viaParserKind. - Expose comment spans from the parser via
AstModule::comments(). - Abstract the parser behind a
Parsertrait withParseError.
Breaking API changes
- Heap lifetime rework:
&'v Heapis nowHeap<'v>(invariant).
Module::newis private; useModule::with_heap,
Module::with_temp_heap, orModule::with_temp_heap_asyncinstead.
Freezeris now non-owning. FrozenRefremoved:FrozenRefandOwnedFrozenRefare deleted.
UseFrozenValueTypedandFrozenAnyValue<T>/FrozenAnyArray<T>
instead.Value<'v>is no longerSend + Sync.StarlarkFunctionremoved in favor ofStarlarkCallable.AnyLifetimeis now sealed instead ofunsafe.Evaluatoris covariant over'a.- Starlark values require partial sendness.
OwnedFrozenValue::allocand itsDefaultimpl removed.UnpackValue,TyUser::new, and error functions now return
starlark::Errorinstead ofanyhow::Error.StarlarkSerialize/StarlarkDeserializeadded as trait bounds on
StarlarkValue(default panic impls are auto-generated by
#[starlark_value]).exported_namedeleted.
New APIs
Value::function_name()for def/lambda/native callables.collect_strvtable method onStarlarkValue.callstack_nth_locationfunction.BeforeStmtFuncexported fromstarlark::eval.OwnedHeap,Heap::temp,HeapSendablefor frozen heaps.Module::with_heap,Module::with_temp_heap,
Module::with_temp_heap_async.access_owned_frozen_valuewith branded lifetime guarantees.- Named frozen heaps (
freeze_named/into_ref_named) with reference
inspection. - Heaps can depend on frozen heaps.
extra_mutonEvaluatorfor mutable access to extras.- Allow storing
peak_allocated_bytesin frozen heap. - Expose
RecordTypeandpositionalfrom the public API. - Open visibility of
starlark-syntaxcrate. unpack_str_errconvenience function.- Resource limits: instruction count and heap memory limits during
evaluation. gen_flame_datareturnsOptioninstead of panicking.
Trait implementations and derives
- Implement
FreezeforValueTypedand 5-element tuples. - Implement
DisplayforValueTypedComplexandValueOf. - Derive
UnpackValueandStarlarkTypeRepron single-field structs. #[starlark_module]macro supports generic functions and methods.
starlark_map
SmallMap::and_modifyentry API method.SmallSet::reserve.SmallSet::hashed().Vec2pair collection from iterators.
LSP and tooling
- Add command to restart the Starlark language server.
- Show variables for all stack frames in the debug adapter.
- Hover provides docs for functions without docstrings.
- Go-to-definition works inside
#[starlark_value]macro bodies. find_call_by_namesupports dot expressions (e.g.foo.bar()).- Fix go-to-definition for prelude and native symbols on Windows.
- Improve newline behavior for single-line
#comments. - Introduce
LspOpError; removeanyhowerrors from LSP. - Fix VSCode extension build; update
vscode-languageclient.
Performance
- 2x parsing speedup via the new recursive-descent parser.
FrozenThinBoxSlicemade thinner; addThinBoxSliceFrozenValue.- Avoid tuple allocations in
cmd_args.add(). - Improve statement profiler accuracy.
- Flame+summary combined profiling mode.
- Show GC walking vs dropping in time-flame graph.
Bug fixes
- Fix panic in starlark unpack instruction (now returns an error).
- Fix WASM compatibility (
Instant::now()guarded behind platform checks). - Fix starlark debugger crash.
- Fix for writing empty statement profile.
- Fix const evaluation panic during rustdoc builds.
- Record error messages now include the record type name.
- Fix thread safety bounds on heap
reserve. - Big integers no longer quoted in JSON output.
- Fix qualified
FreezeResultinFreezederive macro. - Fix lifetimes on
OwnedFrozenValueTypedandFrozenHeapallocation. - Fix frozen string interning soundness issue.
- Fix incorrect doc generation name mangling.
- Ensure instruction-count resource checks run at end of evaluation.
Internal
- Large-scale starlark-pagable serialization/deserialization infrastructure
for frozen heap paging (100+ commits). - VTable and static value registration infrastructure.
- Many clippy fixes and dependency bumps.
2b4032d6ca6528c