Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Language Support

PaddleBoard keeps the default install lean with two tiers.

Ready to use

Common languages — Rust, TypeScript/JavaScript, Python, Go, JSON, YAML, HTML/CSS, and more — are enabled by default. Open a matching file and the language server attaches automatically, downloading on first use.

Python

Basedpyright is the default language server for Python. PyRight and pylsp are disabled by default — Basedpyright is a superset of PyRight, so running both means duplicate diagnostics on every line.

To go back to one of the others, set the language server list yourself in settings.json:

{
  "languages": {
    "Python": {
      "language_servers": ["pyright", "!basedpyright", "ruff", "..."]
    }
  }
}

The ! prefix disables a server, and "..." stands in for the remaining defaults. Swap pyright for pylsp, ty, or pyrefly the same way.

“Import could not be resolved”

If Basedpyright reports Import "<package>" could not be resolved, it is usually right: the package isn’t installed in the interpreter it is analysing against. Basedpyright checks imports more strictly than pylsp did, so switching to it can surface an environment problem that was always there.

Create and populate a virtualenv in the project root, then reopen the folder:

python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt

PaddleBoard discovers .venv automatically. To point at a different interpreter, run toolchain: Select Toolchain from the command palette.

Install support (opt-in)

Languages that need an external toolchain are opt-in. Run Manage Languages from the command palette to enable them; each row shows its prerequisite up front so it never fails silently when the runtime is missing.

Six ship a built-in server:

LanguageServerPrerequisite
JavajdtlsJDK 17+
Kotlinkotlin-language-serverJDK 17+
PHPintelephenseNode
C#roslyn.NET
C++clangddownloads clangd (C stays on by default; clangd is shared)
SwiftSourceKit-LSPSwift toolchain (Xcode / swift.org) — resolved from PATH, not downloaded

Ruby and Dart get their servers from extensions, so their row opens the Extensions page.

Why opt-in? It keeps the default install small and means you choose to pull in a heavier toolchain knowingly, rather than hitting a confusing “server reset the connection” crash when the runtime isn’t present.