Supported Languages
Rune offers first-class support for a growing set of programming languages: deep code intelligence, a built-in debugger, and language-specific commands on top of editing. This page lists where each language stands today.
First-class languages
| Language | Status |
|---|---|
| Go | Supported |
| Python | In progress |
| TypeScript | Roadmap |
| Rust | Roadmap |
Everything else: language packages
Beyond the first-class languages, Rune understands the structure of over 300 more through downloadable language packages. Each package bundles a tree-sitter grammar and a set of query files, giving Rune a real parse tree for the file instead of plain text. That parse tree powers syntax highlighting, code folding, indentation, and (most usefully) structural search and navigation.
Searching and navigating by structure
Two commands query the parse tree using tree-sitter patterns:
jumptoastjumps the cursor to a node in the current file. Its syntax isjumptoast <query> <captures> <name>, where<query>is a query file (such aslocals.scm),<captures>is one or more capture names joined by|, and<name>selects the matching line.searchastruns the same kind of query across every file in the workspace and presents the matches in a fuzzy picker. Its syntax issearchast <query> <captures>.
The default config wires these to keys and prompt aliases so you rarely type the raw form.
To jump within the current file, use the jumptoast bindings. They
prefill the prompt with the command and leave it open, so you can fuzzy
search the functions, variables, or types in the file and jump to the one
you pick:
| Key | Jumps to |
|---|---|
<alt-f> | a function or method |
<alt-v> | a variable |
<alt-s> | a type |
To search across the whole workspace, use the searchast aliases; each
has a matching key binding and a prompt alias you can type by name:
| Key | Alias | Searches for |
|---|---|---|
<alt-shift-f> | searchfunc | functions and methods |
<alt-shift-v> | searchvar | variables |
<alt-shift-s> | searchtype | types |
They open a fuzzy picker over every matching definition in the workspace;
selecting a result jumps you straight to it. All of these query
locals.scm filtered by the local.definition.function/.method,
local.definition.var, and local.definition.type captures.
A language package supplies the query files these commands read, so structural features light up for any installed language.
Installing a language package
You do not install these ahead of time. When you open a file in a language whose package is not yet installed, Rune prompts you:
| Option | Effect |
|---|---|
| Yes | Install the package for this file. |
| Yes, Always | Install now, and auto-install future languages on open without asking again. |
| No | Skip it this time. |
| No, Never | Skip it and stop prompting. |
Choosing Yes, Always means that from then on, opening a file in any supported language silently downloads and installs its package; the right grammar is always ready when you open the matching file type.