Migrating to Language Pipes 2.0
Language Pipes 2.0.0 replaces the flag-driven serve/init CLI with a
TOML configuration file plus an interactive TUI. No CLI flags configure a
node anymore — everything (model selection, networking, ports, security) now
lives in the TOML config file, and only a handful of machine-local settings are
controlled by environment variables.
If you have a 1.x config file, scripts, or environment variables, you’ll need to update them as described below.
1. CLI commands
| 1.x | 2.0.0 | Notes |
|---|---|---|
language-pipes serve [flags...] | language-pipes -c config.toml run | No more per-flag overrides — all settings come from the TOML file. |
language-pipes init [file] | language-pipes (launch the TUI) | The TUI now creates, edits, and saves configurations interactively. |
| (n/a) | language-pipes -c config.toml config | New: prints a resolved config as a human-readable report (not valid TOML). |
| (n/a) | language-pipes -c config.toml --start | New: launches the TUI and immediately starts serving without the startup confirmation. |
Argument order matters. -c/--config, --start, -v, and -h are
global options and must come before the subcommand:
# 1.xlanguage-pipes serve --config config.toml --node-id node-1 --openai-port 8000 \ --layer-models "id=Qwen/Qwen3-1.7B,device=cpu,memory=4" --end-models Qwen/Qwen3-1.7B
# 2.0.0language-pipes -c config.toml run-c/--config accepts either a path containing .toml, or the name of a
saved configuration under <app_dir>/configs/<name>.toml:
language-pipes -c config.toml run # explicit pathlanguage-pipes -c node4 run # resolves <app_dir>/configs/node4.tomlAll of the old serve flags — --node-id, --openai-port, --layer-models,
--end-models, --num-local-layers, --logging-level/-l,
--bootstrap-address, --whitelist-ips, --whitelist-node-ids,
--app-dir, --model-dir, --print-times — are removed. Move these
values into your TOML config (see below), or, for the handful of machine-local
ones, into environment variables.
keygen is unchanged.
2. Configuration file changes
Renamed properties
| 1.x key | 2.0.0 key | Notes |
|---|---|---|
oai_port / openai_port | job_port | Top-level. Port for the OpenAI-compatible API server. |
[[layer_models]] → id | model_id | Per-entry field. |
[[layer_models]] → max_memory | memory | Per-entry field. |
Bootstrap node(s)
The single flat bootstrap_address / bootstrap_port pair is replaced by a
[[bootstrap_nodes]] array of tables, which lets you list multiple peers:
# 1.xbootstrap_address = "192.168.0.2"bootstrap_port = 5000
# 2.0.0[[bootstrap_nodes]]address = "192.168.0.2"port = 5000Network key
network_key used to be a path to a key file generated by
language-pipes keygen. In 2.0.0 it is the hex key string itself, inlined
directly into the TOML.
The contents of an old key file are the hex string, so migration is just:
cat network.key# e.g. 9f86d081884c7d659a2feaa0c55ad015...# 1.xnetwork_key = "network.key"
# 2.0.0network_key = "9f86d081884c7d659a2feaa0c55ad015"You can also generate a fresh key with language-pipes keygen (prints the hex
string and writes it to network.key) or from the network configuration
screen in the TUI.
Removed properties
These no longer exist in the TOML config and have no config-file replacement:
| 1.x key | What to do instead |
|---|---|
model_validation | Removed entirely — model weight hash validation is no longer configurable. |
max_pipes | Removed entirely. |
print_times | Removed entirely. |
logging_level | Removed. Logging is fixed at INFO and written to a per-session log file under the app’s log directory. |
app_dir | Set the LP_APP_DIR environment variable instead (see below). |
model_dir | Set the LP_MODEL_DIR environment variable instead (see below). |
num_local_layers | Set the LP_NUM_LOCAL_LAYERS environment variable instead (see below). |
Key ordering now matters
In TOML, keys written after an array-of-tables header ([[layer_models]],
[[bootstrap_nodes]]) belong to that table, not the top-level document. Put
all top-level scalar keys (node_id, job_port, end_models,
peer_port, network_key, etc.) before any [[layer_models]] or
[[bootstrap_nodes]] blocks.
3. Environment variables
1.x exposed a generic LP_* override for almost every config property. In
2.0.0, environment variables only control machine-local settings; the TOML
config is authoritative for everything else.
| 1.x environment variable | 2.0.0 |
|---|---|
LP_NODE_ID, LP_LAYER_MODELS, LP_OAI_PORT, LP_API_KEYS, LP_PEER_PORT, LP_NETWORK_IP, LP_BOOTSTRAP_ADDRESS, LP_BOOTSTRAP_PORT, LP_NETWORK_KEY, LP_WHITELIST_IPS, LP_WHITELIST_NODE_IDS, LP_MAX_PIPES, LP_MODEL_VALIDATION, LP_PRINT_TIMES, LP_LOGGING_LEVEL | Removed. Set these in the TOML config file instead. |
LP_APP_DIR | Unchanged. |
LP_MODEL_DIR | Unchanged. |
| (n/a) | LP_NUM_LOCAL_LAYERS — new home for the old --num-local-layers / num_local_layers setting. Default 1. |
LP_HUGGINGFACE_TOKEN | Still read, but no longer the primary mechanism — see below. |
export LP_APP_DIR=~/.config/language_pipesexport LP_MODEL_DIR=~/.cache/language_pipes/modelsexport LP_NUM_LOCAL_LAYERS=14. HuggingFace token
In 1.x, LP_HUGGINGFACE_TOKEN was the main way to supply a token for gated
models. In 2.0.0, the token is stored in <app_dir>/globals.toml
(hf_token). The TUI prompts for it the first time a gated model needs to be
downloaded and offers to save it for future use. LP_HUGGINGFACE_TOKEN is
still read, but won’t be persisted for you — use the TUI prompt (or write the
token into globals.toml yourself) for a one-time setup.
5. Full example
1.x config:
node_id = "node-1"openai_port = 8000api_keys = ["test_key"]
[[layer_models]]id = "Qwen/Qwen3-1.7B"device = "cpu"max_memory = 4
end_models = ["Qwen/Qwen3-1.7B"]
peer_port = 5000network_ip = "192.168.0.1"bootstrap_address = "192.168.0.2"bootstrap_port = 5000network_key = "network.key"
logging_level = "INFO"max_pipes = 1model_validation = trueprint_times = falsenum_local_layers = 1app_dir = "~/.config/language_pipes"model_dir = "~/.cache/language_pipes/models"2.0.0 config:
node_id = "node-1"job_port = 8000api_keys = ["test_key"]end_models = ["Qwen/Qwen3-1.7B"]
peer_port = 5000network_ip = "192.168.0.1"network_key = "9f86d081884c7d659a2feaa0c55ad015"
[[layer_models]]model_id = "Qwen/Qwen3-1.7B"device = "cpu"memory = 4
[[bootstrap_nodes]]address = "192.168.0.2"port = 5000# Machine-local settings move to the environmentexport LP_APP_DIR=~/.config/language_pipesexport LP_MODEL_DIR=~/.cache/language_pipes/modelsexport LP_NUM_LOCAL_LAYERS=1language-pipes -c config.toml run