Highlight
This is the core Lumis workflow: choose a language, choose a formatter, then render output.
Simple example
- JavaScript
- Rust
- Elixir
- Java
- CLI
import {highlight} from '@lumis-sh/lumis';
import {htmlInline} from '@lumis-sh/lumis/formatters';
import javascript from '@lumis-sh/lumis/langs/javascript';
import dracula from '@lumis-sh/themes/dracula';
const html = await highlight(
'const x = 1',
htmlInline({language: javascript, theme: dracula})
);
use lumis::{highlight, HtmlInlineBuilder, languages::Language, themes};
let theme = themes::get("dracula").unwrap();
let formatter = HtmlInlineBuilder::new()
.language(Language::Javascript)
.theme(Some(theme))
.build()
.unwrap();
let html = highlight("const x = 1", formatter);
Lumis.highlight!(
"const x = 1",
formatter: {:html_inline, language: "javascript", theme: "dracula"}
)
import io.roastedroot.lumis4j.core.Lang;
import io.roastedroot.lumis4j.core.Lumis;
import io.roastedroot.lumis4j.core.Theme;
var lumis = Lumis.builder().build();
var highlighter = lumis.highlighter()
.withLang(Lang.JAVASCRIPT)
.withTheme(Theme.DRACULA)
.build();
var html = highlighter.highlight("const x = 1").string();
lumis highlight index.js \
--language javascript \
--theme dracula
Options by runtime
| Need | CLI | Rust | Elixir | JavaScript | Java |
|---|---|---|---|---|---|
| Set language | --language | .language(...) | language: "..." | language: ... | withLang(...) |
| Set theme | --theme | .theme(...) | theme: "..." | theme: ... | withTheme(...) |
| Choose output | --formatter | builder type | formatter: ... | formatter factory | runtime-specific |
Language detection
If you omit the language, Lumis tries to detect it using:
- file extensions (
.rs,.js,.ex, etc.) - filenames (
Makefile,Dockerfile,Caddyfile) - shebangs (
#!/usr/bin/env python) - Emacs mode lines (
-*- mode: ruby -*-)
If detection fails, it falls back to plaintext.
Incomplete code
Lumis handles incomplete or malformed code without crashing. Tree-sitter produces a partial syntax tree and Lumis highlights what it can. This is useful for streaming scenarios where code arrives in chunks (e.g., LLM output).
Next steps
- choose an output mode in Formatters
- pick or generate colors in Themes
- emphasize lines in Line Highlighting