Indent News

Release notes and updates from the Indent team. This page carries released versions only — prereleases, the exp channel and engine work in progress are on the Experimental tab.

Released2026-10-16

Indent 2.4 — lighter on memory, and two release channels

Building on 2.3's speed work, 2.4 shrinks how much memory Indent uses. Every collection — strings, lists, dictionaries and groups — is now copy-on-write: reading a variable is a refcount bump instead of a deep copy, and the copy only happens on the first write after a value becomes shared. Pass-by-value behaviour is unchanged — var b = a still never lets b affect a.

  • Peak RSS holding 200 copies of one 200 KB string: 84.7 MB → 12.6 MB
  • Passing a 201 KB string to a function: 130 µs → 7.7 µs
  • len() of a 20 000-item list: 0.0767 s → 0.0000424 s
  • has_key() on a 5 000-key dict: 0.0711 s → 0.0000659 s
  • Startup importing five std modules: 3.51 ms → 2.49 ms

Value is 32 bytes (was 56) and every statement 112 (was 152) — guardrail tests fail the build if either grows back.

Release channels. Two channels now come out of the same pipeline and the same gates. stable is the default and what releases/latest resolves to; exp follows tagged prereleases such as v2.4.1-exp.1, published as GitHub prereleases, so an existing stable install is never moved onto an experimental build by accident.

Use indent --switch-to-exp / indent --switch-to-stable / indent --channel, or install a channel directly with --channel exp. Checksums are verified before anything is installed, and the replaced binary is kept as a .bak.

⚠️ Breaking: indent --version now prints the channel — indent 2.4.0 (stable). Anything parsing the version from that line should take the first word.

Upgrading is automatic: the on-disk program cache changed format, so the first run after upgrading re-parses each cached file once. Full release notes →

Installer2026-10-16

Windows: "indent does nothing" — fixed at the root

Two separate Windows problems were making Indent look broken after a successful install:

  • The installer never downloaded anything. It couldn't establish a connection that GitHub still accepts. The download now works on a stock Windows install.
  • The program wouldn't start. Indent needed a Microsoft runtime library that isn't present on a clean Windows install. Without it, Windows showed "VCRUNTIME140.dll was not found" and indent just returned to the prompt with no output.

indent.exe is now self-contained — it carries everything it needs, so it runs on a clean Windows install with no extra downloads. The installer also verifies the runtime actually runs after installing, and offers to fix a missing runtime automatically if it doesn't.

Both fixes are in 2.4.0, which is out now. If you're staying on 2.3.0 or earlier, installing the runtime yourself makes it work immediately:

winget install --id Microsoft.VCRedist.2015+.x64 -e

Released2026-10-14

Indent 2.3.0 — the performance release 🚀

2.3 is a major optimization pass. Same language, same syntax — dramatically faster where it matters. Highlights against 2.2.2:

  • List append in a loop: ~7,400× faster
  • len() on a 20,000-item list: ~1,000× faster
  • Dict indexing in a loop: ~1,080× faster
  • Slicing a large list: 354× faster
  • 100,000 function calls: 3.4× faster
  • Startup with 5 std imports: 1.8× faster

Expressions are now parsed once and reused, the Value type shrank from 128 B to 56 B, and the whole .idnt test suite runs notably faster. Nothing in your existing code needs to change.

Full release notes →

Roadmap2026-09

Where Indent is heading

The performance and memory work is part of a broader goal: make a small, readable language that is genuinely fast enough for real scripts, bots, and games — without the ceremony of larger languages.

See Indent vs Python for an honest, up-to-date feature comparison, and the competitiveness roadmap for what's next.

⬇ Install IndentRead the Docs →