Skip to content

Language Support

Lucerna ships custom AST-aware chunkers for popular languages. Files in any other language are not indexed.

.gitignore is always respected. Lucerna discovers all .gitignore files in the project tree (root and subdirectories) and applies their patterns to both indexing and file watching.

LanguageExtensionsChunksGraph edges
TypeScript / JavaScript.ts, .tsx, .js, .jsxImports, functions, generators, arrow functions, classes, methods, interfaces, type aliasesIMPORTS, DEFINES, EXTENDS, CALLS
Python.py, .pywImports, classes, functions (including class methods with className)IMPORTS, DEFINES, EXTENDS, CALLS
Java.javaImports, classes, interfaces, enums (type), methodsIMPORTS, DEFINES, EXTENDS, IMPLEMENTS, CALLS
Go.goImports, functions, receiver methods (method), structs (class), interfaces, type declarationsIMPORTS, DEFINES, CALLS
Rust.rsImports (use), structs (class), enums (type), traits (interface), impl blocks (class), functionsIMPORTS, DEFINES, CALLS
C#.csImports (using), classes, records (class), structs (class), interfaces, enums (type), methodsIMPORTS, DEFINES, EXTENDS, CALLS
Swift.swiftImports, classes + structs (class), protocols (interface), enums (type), functions/methodsIMPORTS, DEFINES, EXTENDS, CALLS
Kotlin.kt, .ktsImports, classes + interfaces (class), functions/methodsIMPORTS, DEFINES, EXTENDS, IMPLEMENTS, CALLS
Ruby.rbImports (require/require_relative), classes, modules (class), methodsIMPORTS, DEFINES, EXTENDS, CALLS
PHP.phpImports (use), functions, classes, interfaces, traits (interface), methodsIMPORTS, DEFINES, EXTENDS, IMPLEMENTS, CALLS
C.c, .hIncludes (#include), functions, structs (class)IMPORTS, DEFINES, CALLS
C++.cpp, .cc, .cxx, .hppIncludes (#include), classes, functions/methodsIMPORTS, DEFINES, EXTENDS, CALLS
Bash / Shell.sh, .bashSource imports (source/.), functionsIMPORTS, DEFINES, CALLS
Scala.scalaImports, classes, objects (class), traits (interface), methodsIMPORTS, DEFINES, EXTENDS, CALLS
Lua.luaRequires (require()), functions, local functionsIMPORTS, DEFINES, CALLS
R.r, .RLibrary imports (library()/require()), functionsIMPORTS, DEFINES, CALLS
Dart.dartImports, classes, functions/methodsIMPORTS, DEFINES, EXTENDS, CALLS
Haskell.hsImports, functions, data types (type), type classes (class)IMPORTS, DEFINES, CALLS
Elixir.ex, .exsAliases/imports, modules (class), def/defp functions/methodsIMPORTS, DEFINES, CALLS
Clojure.clj, .cljs, .cljcns form (import chunk), defn/defn-/defmacro functionsIMPORTS, DEFINES, CALLS
Groovy.groovy, .gradleImports, classes, methodsIMPORTS, DEFINES, CALLS
Perl.pl, .pmuse imports, subroutinesIMPORTS, DEFINES, CALLS
PowerShell.ps1, .psm1using imports, functions, classes/methodsIMPORTS, DEFINES, CALLS
MATLAB.mFunctions, classdefs and methodsDEFINES, CALLS
Zig.zig@import declarations, functionsIMPORTS, DEFINES, CALLS
Solidity.solImports, contracts (class), interfaces, functions/methods, events/modifiers (type)IMPORTS, DEFINES, EXTENDS, CALLS
SQL.sqlStatement-level chunks: CREATE TABLE, CREATE VIEW, SELECT, INSERT, UPDATE, DELETE
JSON.jsonTop-level key splitting for large files; single chunk for small files
Markdown.md, .mdxHeading-based sections (H1–H3) with full breadcrumbs
XML.xml, .xsd, .xslTop-level element splitting for large files; single chunk for small files
TOML.tomlTable splitting by [section] / [[array]] headers
YAML.yaml, .ymlTop-level key splitting
HTML.html, .htmTop-level element splitting (like XML)
CSS.cssRule-set splitting by selector
SCSS.scssRule-set splitting; named @mixin and @function definitions
Vue.vueOne chunk per top-level block: <script>, <template>, <style>
Svelte.svelteOne chunk per block: <script>, <style>, remaining markup as template
Julia.jlImports, functions, structs (class), modules (class)IMPORTS, DEFINES, CALLS
OCaml.ml, .mliImports (open), let bindings, type definitions, modulesIMPORTS, DEFINES
Erlang.erlModule/export attributes (import), functionsIMPORTS, DEFINES, CALLS
Objective-C.m, .mmImports (#import), interfaces, implementations, methodsIMPORTS, DEFINES, CALLS
All other languagesNot indexed

DEFINES edges link the import chunk to every named symbol in the same file. EXTENDS/IMPLEMENTS edges are emitted when inheritance syntax is present and the grammar supports it.

Grammar modules are loaded on first encounter — no configuration needed. Lucerna automatically initializes any language the first time it sees a file of that type.