Autumnus is a syntax highlighter powered by Tree-sitter and Neovim themes. It provides beautiful and accurate syntax highlighting for over 70 programming languages with support for over 100 themes.
- 🎨 Over 100 themes including popular ones like:
- Dracula, Catppuccin, Tokyo Night, Gruvbox
- GitHub themes (light/dark)
- Solarized variants
- Nord, OneDark, and many more
- 🌳 Tree-sitter powered syntax highlighting with specialized scoping
- 📝 Support for 70+ programming languages
- 🎯 Multiple output formats:
- HTML with inline styles
- HTML with linked stylesheets
- HTML with multiple themes (light/dark or custom)
- Terminal output with ANSI colors
- 🔍 Automatic language detection from file extensions
- 🚀 Zero configuration needed to get started
- 🖥️ Command-line interface included
Add Autumnus to your Cargo.toml:
[dependencies]
autumnus = "0.7"By default, Autumnus includes support for all languages, which can result in longer compilation times. You can reduce compilation time and binary size by enabling only the languages you need:
[dependencies]
autumnus = { version = "0.7", default-features = false, features = ["lang-rust", "lang-javascript", "lang-python"] }Available language features:
lang-angular- Angular templateslang-asm- Assemblylang-astro- Astro frameworklang-bash- Bash/Shell scriptslang-c- C programming languagelang-caddy- Caddylang-clojure- Clojurelang-cmake- CMake build fileslang-comment- Comment highlightinglang-commonlisp- Common Lisplang-cpp- C++lang-csharp- C#lang-css- CSS stylesheetslang-csv- CSV fileslang-dart- Dartlang-diff- Diff/patch fileslang-dockerfile- Docker fileslang-eex- Elixir EEx templateslang-ejs- EJS templateslang-elixir- Elixirlang-elm- Elmlang-erb- ERB templateslang-erlang- Erlanglang-fish- Fishlang-fsharp- F#lang-gleam- Gleamlang-glimmer- Glimmer/Handlebarslang-go- Golang-graphql- GraphQLlang-haskell- Haskelllang-hcl- HCL/Terraformlang-heex- Phoenix HEEx templateslang-html- HTMLlang-iex- Elixir IExlang-java- Javalang-javascript- JavaScriptlang-json- JSONlang-kotlin- Kotlinlang-latex- LaTeXlang-liquid- Liquid templateslang-llvm- LLVM IRlang-lua- Lualang-make- Makefileslang-markdown- Markdownlang-markdown-inline- Inline Markdownlang-nix- Nixlang-objc- Objective-Clang-ocaml- OCamllang-ocamlinterface- OCaml Interfacelang-perl- Perllang-php- PHPlang-plaintext- Plain Textlang-powershell- PowerShelllang-protobuf- Protocol Bufferslang-python- Pythonlang-r- Rlang-regex- Regular expressionslang-ruby- Rubylang-rust- Rustlang-scala- Scalalang-scss- SCSSlang-sql- SQLlang-surface- Phoenix Surfacelang-svelte- Sveltelang-swift- Swiftlang-toml- TOMLlang-tsx- TypeScript JSXlang-typescript- TypeScriptlang-typst- Typstlang-vim- Vim scriptlang-vue- Vue.jslang-xml- XMLlang-yaml- YAMLlang-zig- Zig
Or use the convenience feature to enable all languages:
[dependencies]
autumnus = { version = "0.7", features = ["all-languages"] }Install the autumnus command-line tool:
cargo install autumnusFor faster compilation, you can install the CLI with only the languages you need:
# Install with only specific languages
cargo install autumnus --no-default-features --features "lang-rust,lang-python,lang-javascript"
# Install with web development languages
cargo install autumnus --no-default-features --features "lang-html,lang-css,lang-javascript,lang-typescript,lang-json"
# Install with all languages (same as default)
cargo install autumnus --features "all-languages"This can significantly reduce compilation time, especially on slower machines or CI environments.
use autumnus::{highlight, Options};
let code = r#"
function greet(name) {
console.log(`Hello ${name}!`);
}
"#;
let html = highlight("javascript", code, Options::default());use autumnus::{highlight, Options, themes::Theme};
let code = "SELECT * FROM users WHERE active = true;";
// Parse theme from string
let theme: Theme = "dracula".parse().expect("Theme not found");
// Or: let theme = themes::get("dracula").expect("Theme not found");
let html = highlight(
"sql",
code,
Options {
theme,
..Options::default()
}
);use autumnus::{highlight, Options};
let code = r#"
defmodule MyApp do
def hello, do: :world
end
"#;
// Language will be automatically detected as Elixir from the .ex extension
let html = highlight("app.ex", code, Options::default());use autumnus::{highlight, Options, FormatterOption};
let code = "puts 'Hello from Ruby!'";
let ansi = highlight(
"ruby",
code,
Options {
formatter: FormatterOption::Terminal,
..Options::default()
}
);use autumnus::{highlight, Options, FormatterOption};
let code = "console.log('Hello!')";
let html = highlight(
"javascript",
code,
Options {
formatter: FormatterOption::HtmlLinked,
..Options::default()
}
);When using FormatterOption::HtmlLinked, include the corresponding CSS file for your chosen theme:
<link rel="stylesheet" href="css/dracula.css" />The autumnus command-line tool provides several commands for syntax highlighting and code analysis:
autumnus list-languagesLists all supported programming languages and their associated file patterns.
autumnus list-themesLists all available syntax highlighting themes.
autumnus highlight <path> [options]Highlights the contents of a file with syntax highlighting.
Options:
-f, --formatter <formatter>: Output format (default: terminal)terminal: ANSI colored output for terminalhtml-inline: HTML output with inline styleshtml-linked: HTML output with linked stylesheet
-t, --theme <theme>: Theme name (default: catppuccin_frappe)
Example:
autumnus highlight src/main.rs --formatter html-inline --theme github_darkautumnus highlight-source <source> [options]Highlights a string of source code.
Options:
-l, --language <language>: Programming language for the source code-f, --formatter <formatter>: Output format (default: terminal)-t, --theme <theme>: Theme name (default: catppuccin_frappe)
Example:
autumnus highlight-source "println!(\"Hello World!\");" -l rustautumnus dump-tree-sitter <path>Dumps the Tree-sitter AST (Abstract Syntax Tree) for a given file. This is useful for debugging or understanding how Tree-sitter parses your code.
autumnus gen-theme --url <git-url> --colorscheme <name> [options]Generates a theme JSON file from any Git repository containing a Neovim theme.
Note: Requires nvim to be installed and available in $PATH.
Required options:
--url <git-url>: Git repository URL (e.g., https://github.com/catppuccin/nvim)--colorscheme <name>: Colorscheme name to activate (e.g., catppuccin-mocha)
Optional:
--setup <lua-code>: Custom Lua setup code to run before activating the colorscheme-o, --output <path>: Output file path (prints to stdout if not specified)--appearance <light|dark>: Theme appearance (defaults to dark)
Examples:
# Basic usage - output to stdout
autumnus gen-theme --url https://github.com/catppuccin/nvim --colorscheme catppuccin-mocha
# Save to file
autumnus gen-theme \
--url https://github.com/folke/tokyonight.nvim \
--colorscheme tokyonight \
-o tokyonight.json
# With custom setup code
autumnus gen-theme \
--url https://github.com/ellisonleao/gruvbox.nvim \
--colorscheme gruvbox \
--setup "require('gruvbox').setup({ contrast = 'hard' })" \
-o gruvbox-hard.json
# Specify light appearance
autumnus gen-theme \
--url https://github.com/projekt0n/github-nvim-theme \
--colorscheme github_light \
--appearance light \
-o github-light.jsonSee themes/README.md for more details on theme generation.
Check the documentation for a complete list of supported languages and file extensions.
Autumnus includes over 100 themes, such as:
- Dracula and Dracula Soft
- Catppuccin (Mocha, Macchiato, Frappe, Latte)
- GitHub themes (Light/Dark, High Contrast, Colorblind)
- Gruvbox (Light/Dark variants)
- Nord
- OneDark variants
- Rose Pine
- Solarized variants
- Tokyo Night variants
- And many more!
Check the documentation for a complete list of supported themes.
Contributions are welcome! Feel free to:
- Report bugs
- Suggest new features
- Add new themes
- Add support for new languages
- Improve documentation
Autumnus would not be possible without these projects: