Getting started¶
Loom installs as a single npm package and runs as a single Node process backed by SQLite.
Requirements¶
- Node.js ≥ 20
- A modern OS that can build / run
better-sqlite3(Linux, macOS, Windows) - An API key from at least one upstream LLM provider
Install¶
Initialize¶
Run the interactive wizard:
It collects:
- Where the config file should live — project dir, user home, or a custom path
- Admin username + password (or a reference to
${LOOM_ADMIN_PASSWORD}) - Your first provider (OpenAI / Azure OpenAI / Azure AI Foundry / skip)
- Port + hostname
- Whether to start the server immediately
A loom.config.yaml is written with chmod 600 and a freshly generated master_key.
Non-interactive variants¶
# Write a default template
loom init --yes --force
# Print the template to stdout
loom init --print > loom.config.yaml
Start¶
The default URL is http://localhost:3000. Log in with the admin credentials you set during init.
Your first request¶
- Visit
/settings/api-keysand create a key (sk-loom-...) - Make sure at least one provider has a valid
api_key
curl http://localhost:3000/api/v1/chat/completions \
-H "Authorization: Bearer sk-loom-..." \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-4o-mini",
"messages": [{"role": "user", "content": "Hello"}],
"stream": true
}'
Or use any OpenAI SDK:
from openai import OpenAI
client = OpenAI(base_url="http://localhost:3000/api/v1", api_key="sk-loom-...")
print(client.chat.completions.create(
model="gpt-4o-mini",
messages=[{"role": "user", "content": "Hello"}],
).choices[0].message.content)
Next steps¶
- Add more providers and tweak per-model defaults — see Providers
- Wire in MCP tools — see MCP integration
- Explore the playground — see Playground
- Use the request log for forensics — see Request logs