Known limitations
What xisto does not support yet, checked against the compiler on 12 Nov 2026. Each item says what to write instead. Intended differences are in Divergences from TypeScript.
Language
- Object rest from an untyped value.
const { a, ...rest } = { a: 1, b: 2 }needs the source typed (XS6006); with an interface or class it works. - Generators as values. No
.next(), no spread, noArray.from: consume them withfor…of. yieldinsidetry … finally(XS6011).export * as ns from(XS1039): re-export the names one by one.- Side-effect imports.
import "./x.ts"does not run the module's top-level code. Export a function and call it. - Nested classes and enums (XS6027): declare them at the top level.
- String indexing
s[i](XS6033): uses.slice(i, i + 1). (boolean | null)[](XS6039):(int | null)[]and(T | null)[]of objects and strings work.- Array methods.
findon arrays of numbers (XS7056: usefindIndex);spliceonly assplice(i, 1);toSortedand other recent methods (XS6038). Object.isand some otherObjectstatics are missing.- Interfaces that mix fields and methods, passed from a class that does not
implementsthem: writeimplementson the class. - Generic arrow values inside functions are erased: their results are copied through JSON (XS2110).
- Prototype patching only in the form described in Decorators.
Runtime and library
MapandSetfor…ofdoes not see entries added during the loop.String.prototype.normalizereturns the string unchanged;localeCompareandDatehave no ICU data:Date.toString()shows the zone abbreviation (-03), not its long name.Map.getof a missing key with anintvalue is a run-time error: test withhas.- Stack traces stop after 39 frames and do not show runtime frames.
Tools
--devbuilds of programs that usesetTimeout,setIntervalorclearIntervalcurrently fail in the C compiler; build without--dev.- The
qbebackend covers numbers, strings, arrays, classes, interfaces and control flow; it has no closures,Map/Set, streams, exceptions or networking (XS6001). The default C backend has none of these limits. - No language server: editors get the debugger only.
Intended semantic differences
These are not on the roadmap to change:
intoverflow, out-of-bounds indices and failed casts are errors, neverundefinedor a rounded value.- One empty value,
null. - Floating-point sums are never reordered or fused (no FMA), so results are bit-identical to Node's; hand- vectorised code in other languages can be faster on such loops.
- A pattern that needs backtracking stops with a
RangeErrorafter a fixed number of steps, where Node would run on.