Reference

# Code languages

Any language Rouge knows works. Multi-language examples remember your choice.

## Multi-language examples

Pick a tab — every example on the page follows.

`DocsUI::Example` renders one example in several languages with tabs. The choice is a **global sticky preference** — persisted in `localStorage` and synced across every example group on the page and across pages. Switch Ruby → Python once and it sticks everywhere.

Ruby

Python

JavaScript

```ruby
client = Anthropic::Client.new(api_key: ENV["ANTHROPIC_API_KEY"])
msg = client.messages.create(
  model: "claude-opus-4-8",
  max_tokens: 1024,
  messages: [{ role: "user", content: "Hello" }]
)
puts msg.content.first.text
```

```python
client = anthropic.Anthropic(api_key=os.environ["ANTHROPIC_API_KEY"])
msg = client.messages.create(
    model="claude-opus-4-8",
    max_tokens=1024,
    messages=[{"role": "user", "content": "Hello"}],
)
print(msg.content[0].text)
```

```javascript
const client = new Anthropic({ apiKey: process.env.ANTHROPIC_API_KEY });
const msg = await client.messages.create({
  model: "claude-opus-4-8",
  max_tokens: 1024,
  messages: [{ role: "user", content: "Hello" }],
});
console.log(msg.content[0].text);
```

Author it by handing each language a code block:

```ruby
example do |ex|
  ex.code(:ruby, filename: "client.rb")   { ruby_source }
  ex.code(:python, filename: "client.py") { python_source }
  ex.code(:javascript)                    { js_source }
end
```

## Any language

No allowlist — Rouge's full registry (~200 lexers).

```go
package main

import "fmt"

func main() { fmt.Println("go works") }
```

```rust
fn main() {
    println!("rust works");
}
```

```elixir
defmodule Demo do
  def hello, do: IO.puts("elixir works")
end
```

## Configuring languages

Pass any Rouge lexer name to `lexer:` directly. Register **aliases** to map a custom name onto a real lexer, and **labels** to control the tab caption an example shows:

```ruby
DocsKit.configure do |c|
  c.code_lexer_aliases   = { curl: "console" }
  c.code_language_labels = { elixir: "Elixir" }
end
```

Now `DocsUI::Code(src, lexer: :curl)` highlights with the `console` lexer. An unknown lexer falls back to `code_lexer_fallback` (plaintext) instead of raising.

| Option | Purpose |
| --- | --- |
| `code_lexer_aliases` | Map friendly names onto real Rouge lexers, e.g. { curl: "console" }. Merged over the built-in aliases. |
| `code_lexer_fallback` | Lexer used when a requested name is unknown. Defaults to "plaintext" — no highlighting, no error. |
| `code_language_labels` | Override the tab caption per language in DocsUI::Example, e.g. { elixir: "Elixir" }. |

> **Tip:** Aliases and labels are optional — every Rouge lexer already works by name. Reach for these only to rename a lexer (curl → console) or polish a tab caption.