Skip to main content

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

LanguageStatus
GoSupported
PythonIn progress
TypeScriptRoadmap
RustRoadmap

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:

  • jumptoast jumps the cursor to a node in the current file. Its syntax is jumptoast <query> <captures> <name>, where <query> is a query file (such as locals.scm), <captures> is one or more capture names joined by |, and <name> selects the matching line.
  • searchast runs the same kind of query across every file in the workspace and presents the matches in a fuzzy picker. Its syntax is searchast <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:

KeyJumps 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:

KeyAliasSearches for
<alt-shift-f>searchfuncfunctions and methods
<alt-shift-v>searchvarvariables
<alt-shift-s>searchtypetypes

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:

OptionEffect
YesInstall the package for this file.
Yes, AlwaysInstall now, and auto-install future languages on open without asking again.
NoSkip it this time.
No, NeverSkip 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.

Ask Rune Agent