0.10.0 (2026-09-29)

Bug Fixes

  • stop logging a warning for a missing parser - #1546
  • configure the parser store on first use - #1557
  • BREAKING: render HTML lines as inline spans with overridable layout CSS - #1559
  • compose annotations in highlight events - #1578

Code Refactoring

  • BREAKING: check parser bytes only where Lumis downloads them - #1627

Documentation

  • update the Elixir docs and examples for Lumis 0.9 - #1536
  • retire the WASM and CDN page - #1609

Features

  • add Lumis.highlight_events/3 - #1543
  • recognize 16 more code fence labels - #1553
  • allow generating CSS without line layout - #1566
  • add an inline structure to the HTML formatters - #1568
  • update generated themes - #1608

Testing

  • pin top-level API parity across runtimes with a manifest - #1547
  • cover CRLF endings split across highlight events - #1580

0.9.1 (2026-09-25)

Bug Fixes

  • highlight plain text when a parser is not installed - #1541

0.9.0 (2026-09-24)

This release no longer auto loads the languages (parsers) used to syntax highlight code.

You need to install the languages or bundles you want otherwise you won't see any color applied.

Example:

# mix.exs

{:lumis, "~> 0.9"},
{:lumis_wasm_javascript, "~> 0.26"},
{:lumis_wasm_bundle_backend, "~> 0.1"}

See https://docs.lumis.sh/reference/languages and https://docs.lumis.sh/languages for more info.

Bug Fixes

  • reject a hex colour that is only partly hex - #1394
  • BREAKING: preserve source line endings across runtimes - #1410
  • track patched NIF dependencies - #1434
  • bound the query match limit so capture iteration stays linear, and make it configurable - #1425 by @ericmj
  • keep light-dark() to the colors it can express - #1444
  • BREAKING: return an exception from Lumis.highlight/2 instead of a string - #1499
  • BREAKING: report a full Wasm store as its own parser failure - #1507

Code Refactoring

  • BREAKING: re-export lumis-core's formatters from lumis - #1387
  • BREAKING: inline annotation event fields - #1441
  • BREAKING: nest the render limits under one budget option - #1526

Documentation

  • migrate documentation to Fumadocs - #1445
  • say how a lock reaches a release - #1483
  • say the generated Dockerfile needs no changes - #1497
  • update parser package npm and hex templates - #1498

Features

  • update generated themes - #1358
  • add Token themes - #1365
  • BREAKING: introduce annotations - #1100
  • HTML formatter helpers - #1377
  • ANSI formatter helpers - #1388
  • export the same helpers across runtimes - #1396
  • BREAKING: render line highlighting as built-in decoration events - #1398
  • BREAKING: render line numbers from the line decoration - #1411
  • theme line number gutters - #1431
  • support HTML tag attributes - #1436
  • expose rainbow brackets as decorations - #1439
  • manage and enforce lumis-lock.toml with mix lumis.* - #1479
  • bound a render with a time limit - #1478
  • rename the cache verb to download - #1481
  • BREAKING: parsers from Hex deps - #1486
  • BREAKING: load only installed parsers - #1489
  • BREAKING: remove the runtime parser download from the Elixir and Node libraries - #1510

Performance

  • coalesce same-scope highlight spans - #1459

Testing

  • stress testing across runtimes - #1446

0.8.0 (2026-09-03)

Code Refactoring

  • keep one copy of each test parser - #1288

Documentation

Features

  • highlight code inside diff hunks - #1284
  • update generated themes - #1293
  • name the highlight options in every runtime - #1289
  • update generated themes - #1307
  • BREAKING: require Elixir 1.15 - #1338
  • update generated themes - #1343

0.7.0 (2026-08-13)

Bug Fixes

  • BREAKING: align the default theme on none across runtimes - #1142
  • pin lumis crate requirements to the workspace version - #1140
  • highlight lines in light-dark() mode - #1260
  • resolve compatible WASM package versions - #1263
  • resolve one data directory across every runtime - #1264
  • align the public API across Rust, the CLI, Elixir and JavaScript - #1266

Documentation

  • add deployment guide - #1268
  • add release migration steps - #1272

Features

  • update generated themes - #1122
  • unify dynamic WASM language loading - #1099
  • BREAKING: one vocabulary for the language and theme catalog, in every runtime - #1269
  • mirror precompiled NIFs to Cloudflare R2 - #1270
  • warm-up parsers - #1273

Performance

  • prepare large parser bundles concurrently - #1271

Breaking changes

Load languages on-demand

No changes are required but it's recommended to warm-up parsers to avoid slow first requests.

See https://lumis.hexdocs.pm/deployment.html

Removed default onedark theme

Add theme: "onedark" to :html_inline and :terminal to keep old colors.

Align Theme and Language APIs

  1. Replace Lumis.available_languages()["elixir"] with Lumis.Languages.get("elixir").
  2. Get theme names with Enum.map(Lumis.available_themes(), & &1.name).

0.6.3 (2026-07-23)

Bug Fixes

  • prevent query capture list pool overflow on large inputs - #1028 by @ericmj
  • keep Elixir NIF lockfile portable - #1029
  • haskell heap corruption on aarch64-linux - #1086 by @ericmj

0.6.2 (2026-07-08)

Features

  • update generated themes - #992
  • update jinja and r langs - #993

0.6.1 (2026-07-03)

Bug Fixes

  • preserve curly braces - #982
  • themes issues - #977 by @Fosox

0.6.0 (2026-06-12)

⚠ BREAKING CHANGES

  • adopt the l- prefix on token class #952

Bug Fixes

  • use vim.pack to update themes - #751
  • fix build for glimmer and fortran

Features

  • rainbow brackets - #949
  • css stylesheet builder - #951

0.5.0 (2026-04-22)

Bug Fixes

  • remove stale gleam query node name causing QueryError - #718 by @stefanobaghino

Features

  • terminal: add bg color and width options - #713 by @Gazler
  • terminal: add background theme option - #723

0.4.0 (2026-04-18)

Bug Fixes

  • BREAKING: rename formatter -> formatters - #678

Documentation

  • elixir examples
  • move runnable examples into package dirs - #709

Features

  • align lang -> language names - #591

0.3.0 (2026-04-05)

Features

Code Refactoring

Code Refactoring

0.2.0 (2026-04-02)

⚠ BREAKING CHANGES

  • bump tree-sitter 0.26 (#521)

Features

Bug Fixes

  • include unnamed children in range (#430) (782bfaa)
  • isolate elixir nif from rust release workspace (#528) (da1c6d1)

Miscellaneous Chores

0.1.2 - 2026-03-04

Fixed

  • Use published lumis crate

0.1.1 - 2026-02-19

Changed

  • Add language nushell (started by @c4lliope)
  • Rename CSS class from athl to lumis for consistency with the project name
  • Rename CSS class from athl-themes to lumis-themes for multi-theme formatter
  • Change default CSS variable prefix from --athl to --lumis

0.1.0 - 2026-01-27

First release of lumis, a renamed version of the autumn package.

Migration from autumn

Update your mix.exs:

# Before
{:autumn, "~> 0.6"}

# After
{:lumis, "~> 0.1"}

Update your imports:

# Before
alias Autumn
alias Autumn.Theme

# After
alias Lumis
alias Lumis.Theme