Skip to main content
OpenIDEA describes every language in a small definition file, languages/<id>.toml. The definition says which files belong to the language, how to highlight them, and which language server and debug adapter provide code intelligence and debugging. Everything a language server offers (completion, navigation, diagnostics, refactorings) then works through the same editor features for every language.

How language support works

Each open file gets its language from the definitions, checked in this order:
  1. A per-file Override File Type (in the context menu of a file in the project tree or of an editor tab).
  2. An exact file name (Dockerfile, go.mod) or a file name pattern.
  3. The extension, longest match first (.html.erb before .erb).
  4. The first line: a shebang such as #!/usr/bin/env python3, or a pattern such as <?php.
  5. Otherwise the file is plain text.
You can add or remove file name patterns per language in Settings › Editor › File Types (Recognized File Types). For a recognized file, support comes in layers:
  • Highlighting is instant: it comes from a CodeMirror mode in the editor, or from the bundled tree-sitter grammar when the language has no mode.
  • Structure (outline, folding and the symbols in the project index) comes from a bundled tree-sitter grammar and needs no setup.
  • Code intelligence comes from one or more language servers (LSP). The IDE starts them when you open a file, using the nearest folder that contains one of the server’s root markers (Cargo.toml, package.json, pom.xml, …) as the workspace root.
  • Debugging comes from a debug adapter (DAP).
Language servers and debug adapters run programs from your machine, so they start only in projects you trust.

Several servers for one language

A language can list more than one server:
  • Alternatives (shown as a → b in the table below): only the first one that is installed runs. Python, for example, uses basedpyright, and falls back to pyright, ty or pyrefly only when basedpyright is missing. In Settings › Languages & Frameworks › Language Servers you can pick one of them or set the choice to Automatic (the first one available).
  • Additions (shown as + b): run next to the main server, usually only in projects that use them. Ruff joins basedpyright in projects with a Ruff configuration; oxlint joins vtsls in projects with an oxlint configuration; the Angular and Laravel servers join in Angular and Laravel projects.

Installing language servers and debuggers

OpenIDEA does not bundle language servers. When you open a file whose server is missing, a notification says that the server is not installed and offers Install, which installs it and restarts code insight for that language. You can also manage every tool on one page:
1

Open the Language Servers page

Open Settings › Languages & Frameworks › Language Servers (⌘, / Ctrl+Alt+S, then search for “Language Servers”), or run the Language Servers… action from Find Action… (⌘⇧A / Ctrl+Shift+A).
2

Find the tool

Filter by tool or language. Each entry shows whether the tool is installed by the IDE, found on your PATH, set to a custom executable, or missing.
3

Install or point to your own copy

Click Install (or Reinstall) to let the IDE install it, or set Executable to a binary you installed yourself.
The IDE never needs sudo. It installs tools into its own tools folder in the local data directory (see Data directories and logs), using the method that fits each tool: When the IDE looks for a server, it checks the executable you set in settings first, then its own tools folder, then your PATH. Servers that the IDE cannot install (for example sourcekit-lsp, which comes with the Swift toolchain, or the Godot editor’s own server) show an install hint instead.
GitHub release downloads use GITHUB_TOKEN, GH_TOKEN or your gh login when one is available, which avoids anonymous API rate limits.

Configuring a server

Selecting a language server on the Language Servers page shows its settings, which are stored under languageServers.<name> in your settings (globally or per project):
  • turn the server off, or choose which of several alternatives runs;
  • Executable: the program to start;
  • Startup: Arguments, Environment variables and Initialization options (changing these restarts the server);
  • Workspace Configuration: the answer to the server’s workspace/configuration requests, applied without a restart.
Add Language Server… registers a server that no definition knows about: give its command, the languages it serves and its root markers.

Support matrix

The table lists every built-in language definition. Server and debugger names in bold can be installed from the IDE; the others you install yourself (the install hint in the IDE says how). “Highlighting” and “Tree-sitter” mark instant highlighting and the bundled grammar for outline and folding. Notes:
  • C, C++, Objective-C, Swift: lldb-dap comes with LLVM or Xcode. C and C++ can also be debugged with CodeLLDB or GDB 14+; see C and C++.
  • Ruby: rdbg comes from the debug gem.
  • GDScript: the language server and debugger are the Godot editor itself; see Godot.
  • Arduino: needs Arduino IDE 2 (Arduino Language Server, Arduino CLI and clangd).
  • Vue: the Vue server and vtsls run together; vtsls handles the TypeScript part.

Run, test and debug

Run configurations are detected from the build files in your project. The table shows what is detected for each ecosystem; see Run configurations, Testing and Debugging for how to use them. Running, testing (with a test tree and Rerun Failed Tests) and debugging are tested end to end on sample projects for TypeScript, Python, Rust, Go, Java, Kotlin and PHP; debugging is also tested for C and C++. Code intelligence is tested with each of these languages’ real servers (TypeScript, Python, Rust, Go, Java, Kotlin, PHP).

Changing or adding a language

  • To change a built-in definition, put a file with the same id in the languages folder of the configuration directory; it replaces the built-in one at the next start. See Add a language for the format.
  • Plugins can add languages, with their own servers and debuggers. See Language features.