

# Editor tooling

Run `oroc language-server` from a project with `oro.toml` to connect an installed language server to Oro's build model. Choose one language per process; an editor can launch multiple processes for the same project.

```bash
oroc language-server --language typescript .
```

**Before you start:** Node.js 22+, the selected language server on the editor's `PATH`, and the relevant target tools. Oro does not download language servers automatically. Stdout is reserved for LSP; build/preparation messages go to stderr. See the complete [command options](/runtime/docs/cli/language-server/).

## Choose a language

| Language | Default backend | Model and limits |
| --- | --- | --- |
| Kotlin | `kotlin-language-server`, fwcd adapter | Android model; Java 21 for editor qualification, separate from Java 17 native Android builds |
| TypeScript / JavaScript / React | `typescript-language-server --stdio` | Install TypeScript alongside the server; web editing does not require Gradle or an Android SDK |
| C / C++ / Objective-C / Objective-C++ | `clangd` | Native target model; C-family language-server launch is unavailable on Windows in this release |
| Swift | `sourcekit-lsp` | Swift 6.0+ / Xcode 16+ for compiler settings, rename, and formatting support |
| Custom language | Configured stdio executable | Backend owns project discovery unless a dedicated adapter exists |

Windows TypeScript editing, C++ model export, and runtime builds remain available despite the C-family language-server launch limit. A model being exportable does not prove that every backend can consume it.

## Configure the backend

Add only necessary overrides to `oro.toml`:

```toml
[language_server.typescript]
command = "typescript-language-server"
args = ["--stdio"]

[language_server.cpp]
command = "clangd"
args = ["--background-index"]
```

`command` names one executable, not a shell command. Relative executable paths resolve against the project root; `args` is an array passed literally and replaces the default arguments. A language-specific table overrides its family table. `--server` overrides the executable without discarding configured arguments. Custom stdio adapters own discovery and reject Oro's `--prepare`, `--refresh`, and `--offline` model controls.

## Export and inspect models

```bash
oroc tooling typescript .
oroc tooling doctor .
```

Use [`tooling kotlin`](/runtime/docs/cli/tooling/kotlin/), [`tooling cpp`](/runtime/docs/cli/tooling/cpp/), [`tooling typescript`](/runtime/docs/cli/tooling/typescript/), and [`tooling swift`](/runtime/docs/cli/tooling/swift/) for target models. [`tooling doctor`](/runtime/docs/cli/tooling/doctor/) reports prerequisites and model freshness. Check each command's platform/architecture and preparation options before exporting a native target.

The directory containing `oro.toml` is the recommended workspace root; `oro.ini` is also recognized. Explicit project directories and `--config` override editor root discovery. Otherwise the wrapper uses initialize workspace roots and falls back to its working directory only when those roots are absent. Keep installed API/native inputs matched and refresh stale models after source or target changes.

## Editor clients and process recovery

The release includes a VS Code client under [`editors/vscode`](https://github.com/oro-computer/runtime/tree/v0.2.1/editors/vscode); follow its [installation instructions](https://github.com/oro-computer/runtime/blob/v0.2.1/editors/vscode/README.md). The [language-server guide](https://github.com/oro-computer/runtime/blob/v0.2.1/docs/LANGUAGE_SERVER.md) includes Coc configuration, supported combinations, model identity, preparation, and recovery details.

The wrapper owns backend startup, cancellation, and process lifecycle. Its preparation/startup timeout defaults to 300000 ms. Use `--startup-timeout` deliberately for a slow first preparation; do not route build logs into LSP stdout or assume a failed backend is ready because a model file exists. Release qualification tests backend lifecycle and cancellation, but does not imply every installed editor/server combination has been qualified.
