leandrocp/lumis
Syntax Highlighter powered by Tree-sitter and Neovim themes.
{ "createdAt": "2025-02-14T19:40:42Z", "defaultBranch": "main", "description": "Syntax Highlighter powered by Tree-sitter and Neovim themes.", "fullName": "leandrocp/lumis", "homepage": "https://lumis.sh", "language": "C", "name": "lumis", "pushedAt": "2026-03-19T03:34:52Z", "stargazersCount": 77, "topics": [ "cli", "elixir", "java", "rust", "syntax-highlighter", "syntax-highlighting", "tree-sitter", "tree-sitter-highlight" ], "updatedAt": "2026-03-17T05:07:36Z", "url": "https://github.com/leandrocp/lumis"}Lumis
Syntax Highlighter powered by Tree-sitter and Neovim themes
70+ languages. 120+ themes. 4 platforms. One API.
Features
Section titled “Features”- 70+ Tree-sitter languages - Fast and accurate syntax parsing
- 120+ Neovim themes - Updated and curated themes from the Neovim community
- 4 platforms - CLI, Rust, Elixir, Java
- Multiple outputs - HTML (inline/linked), Terminal (ANSI), multi-theme (light/dark), and custom formatters
- Language auto-detection - File extension and shebang support
- Streaming-friendly - Handles incomplete code gracefully
- Zero config - Works out of the box
Quick Start
Section titled “Quick Start”cargo install lumis
lumis highlight src/index.js --theme draculause lumis::{highlight, HtmlInlineBuilder, languages::Language, themes};
let code = "print('Hello')";
let theme = themes::get("dracula").unwrap();
let formatter = HtmlInlineBuilder::new() .lang(Language::Python) .theme(Some(theme)) .build() .unwrap();
let html = highlight(code, formatter);Lumis.highlight!("setTimeout(fun, 5000)", language: "js", formatter: {:html_inline, theme: "dracula"})Project by @andreaTP. More details at https://chicory.dev/blog/syntax-highlight
import io.roastedroot.lumis4j.core.Lumis;import io.roastedroot.lumis4j.core.Lang;import io.roastedroot.lumis4j.core.Theme;
var lumis = Lumis.builder() .withLang(Lang.JAVASCRIPT) .withTheme(Theme.DRACULA) .build();
var result = lumis.highlight("console.log('Hello, World!');");System.out.println(result.string());Documentation
Section titled “Documentation”| Platform | Install | Package | Docs |
|---|---|---|---|
| CLI | cargo install lumis | - | lumis --help |
| Rust | cargo add lumis | crates.io/lumis | [README.md]!(crates/lumis/README.md) • docs.rs |
| Elixir | {:lumis, "~> 0.1"} | hex.pm/lumis | [README.md]!(packages/elixir/lumis/README.md) • hexdocs |
| Java | io.roastedroot:lumis4j:latest | - | - |
Contributing
Section titled “Contributing”Contributions welcome! Feel free to open issues or PRs for bugs, features, new themes, or language support.
Acknowledgements
Section titled “Acknowledgements”- Makeup for setting up the baseline for the Elixir package
- Inkjet for the Rust implementation in the initial versions
- Shiki and syntect for providing awesome syntax highlighting
License
Section titled “License”MIT