Editor Integrations

July 24, 2026 · View on GitHub

Raven runs over stdio (raven --stdio) and works with any editor that has an LSP client.

Getting the binary

The VS Code extension bundles the binary — no separate download needed. For all other editors, download a pre-built raven binary from the GitHub releases page and place it on your PATH (or note the full path for the snippets below).

VS Code

Install the extension (which bundles the binary) from the VS Code Marketplace or OpenVSX.

To use alongside vscode-R (for running code, viewing plots, etc.), disable its language server to avoid duplicate completions:

"r.lsp.enabled": false

You may also want:

"editor.snippetSuggestions": "bottom"

Zed

Add to your settings.json:

"languages": {
  "R": {
    "language_servers": ["r_language_server"]
  }
},
"lsp": {
  "r_language_server": {
    "binary": {
      "path": "/path/to/raven",
      "arguments": ["--stdio"]
    }
  }
}

Neovim

Manual setup (Neovim 0.8+):

vim.lsp.start({
  name = "raven",
  cmd = { "/path/to/raven", "--stdio" },
  filetypes = { "r", "rmd" },
  root_dir = vim.fs.dirname(vim.fs.find({ ".git" }, { upward = true })[1]),
})

Generic LSP Client

Any LSP client that supports stdio transport:

raven --stdio

Configure your editor's LSP client to run this command for .R, .r, .Rmd, .qmd, .jags, .bugs, .bug, and .stan files. Raven classifies JAGS extensions case-insensitively and applies strict JAGS-dialect behavior; this does not claim general OpenBUGS, WinBUGS, MultiBUGS, or NIMBLE compatibility. Some editors apply case-sensitive file filters before launching Raven, so configure case-insensitive matching when available or enumerate the case variants your project uses.

Agent Integration

Claude Code

Install the raven-lsp plugin from the jbearak/claude-plugins marketplace:

/plugin marketplace add jbearak/claude-plugins
/plugin install raven-lsp@jbearak

The plugin configures Claude Code to launch Raven for R files (.R, .r, .Rmd).

OpenCode

Create opencode.json in your project root:

{
  "$schema": "https://opencode.ai/config.json",
  "lsp": {
    "r": {
      "command": ["raven", "--stdio"],
      "extensions": [".R", ".r", ".Rmd"]
    }
  }
}

Kiro CLI

Create lsp.json in your project root:

{
  "languages": {
    "r": {
      "name": "raven",
      "command": "raven",
      "args": ["--stdio"],
      "file_extensions": ["R", "r", "Rmd"],
      "project_patterns": [".Rproj"]
    }
  }
}

Crush

Create crush.json in your project root:

{
  "$schema": "https://charm.land/crush.json",
  "lsp": {
    "r": {
      "command": "raven",
      "args": ["--stdio"],
      "extensions": [".R", ".r", ".Rmd"]
    }
  }
}

Project configuration

All editor integrations honor raven.toml at the project root automatically. See Configuration § Project config. Editor-specific settings (e.g. VS Code's raven.linting.lineLength) act as a fallback for keys the project file does not pin.

Troubleshooting

  • Server not found: Ensure raven is on your PATH, or specify the full path to the binary.
  • No diagnostics: Check that R files have .R or .r, JAGS files have .jags, .bugs, or .bug, and Stan files have .stan. Model-file matching is case-insensitive. JAGS receives syntax-only diagnostics; Stan also reports conservative undeclared variables in files with real program blocks, while block-free fragments and files containing #include intentionally remain silent for that semantic pass.
  • Stale package completions: Run Raven: Refresh package cache from the command palette, or restart the server.
  • Package watcher issues on Linux: Raven watches .libPaths() recursively (~10–20 watches per installed package). On systems with the legacy 8192 inotify limit, the watcher can fail silently. Raise the limit: sudo sysctl fs.inotify.max_user_watches=524288 (persist via /etc/sysctl.conf).
  • Cross-file features not working: Ensure the workspace root is set correctly (Raven uses it for source() path resolution). Open the folder containing your R project, not a parent directory.