Skip to content

Configuration

This page shows where Tabby's configuration lives and how to attach a completion, chat or embedding model so the server does real work.

Where configuration lives

Path What it is
/var/lib/tabby/config.toml The live Tabby configuration, written on first boot. Owned by tabby:tabby, mode 0640.
/etc/tabby/tabby.env Environment for tabby.service. Sets TABBY_ROOT=/var/lib/tabby.
/var/lib/tabby Tabby's state directory, tabby:tabby, mode 0700. Local models download to /var/lib/tabby/models.
/opt/sushi/etc/tabby/customer-model.example.toml Commented examples for attaching models.
/opt/sushi/etc/tabby/config.toml.tmpl The template first boot starts from.

First boot writes config.toml and tabby.env only if they do not exist yet. Your edits are kept across reboots. The ubuntu user cannot read /var/lib/tabby, so use sudo to view or edit the configuration.

The default configuration

The default config.toml attaches no completion or chat model. It points Tabby's embedding model at the loopback stub on port 18080, so Tabby can start without downloading anything:

[model.embedding.http]
kind = "openai/embedding"
api_endpoint = "http://127.0.0.1:18080/v1"
model_name = "sushi-demo-embed"

The stub returns a fixed placeholder vector. It is only there so the server starts. Replace it with a real embedding backend when you need features that rely on embeddings.

Attach a model

  1. Look at the examples:

    cat /opt/sushi/etc/tabby/customer-model.example.toml
    
  2. Edit the live configuration and add the blocks you need:

    sudo nano /var/lib/tabby/config.toml
    
  3. Restart Tabby:

    sudo systemctl restart tabby.service
    
  4. Check that it came back:

    curl http://127.0.0.1:8080/v1/health
    

After you attach a completion model, try /v1/completions yourself, for example from an IDE extension. The image's checks do not test model quality.

Local completion model

A model ID from the Tabby registry makes Tabby download weights into /var/lib/tabby/models the first time it starts. That needs outbound HTTPS and more RAM and disk than the server alone, so resize the instance and volume first. From the example file:

[model.completion.local]
model_id = "StarCoder-1B"
parallelism = 1
num_gpu_layers = 0

Remote chat backend

To use an OpenAI-compatible chat endpoint you run or subscribe to, without local weights:

[model.chat.http]
kind = "openai/chat"
api_endpoint = "https://<your-endpoint>/v1"
model_name = "<chat-model>"
api_key = "<your-key>"

Real embedding backend

Replace the stub block with your own endpoint:

[model.embedding.http]
kind = "openai/embedding"
api_endpoint = "https://<your-endpoint>/v1"
model_name = "<embedding-model>"
api_key = "<your-key>"

Keep keys on the instance

config.toml is readable only by tabby and root. Do not copy keys into EC2 user data, git, tickets or screen recordings.

See the Tabby documentation for the model IDs and backend kinds Tabby supports.

Keep Tabby private

Tabby runs with --host 127.0.0.1 --port 8080 and has no authentication in front of it on this image. Use Session Manager port forwarding for your own access. Before you let IDEs reach it over a network, put your own reverse proxy with authentication and TLS in front of it, and open only that proxy's port in the security group. Never open port 8080 or 18080.

Last updated October 13, 2026 · Suggest an improvement