2.0 KiB
2.0 KiB
Adding a Service to Heimdall Dashboard
After deploying a new self-hosted service, add it to the Heimdall dashboard for quick access.
Database Location
Heimdall stores items in SQLite at:
/var/lib/docker/volumes/heimdall_config/_data/www/app.sqlite
The volume name may vary — check with docker inspect heimdall.
Schema
items (
id, title, colour, icon, url, description, pinned, "order",
deleted_at, created_at, updated_at, type, user_id, class, appid, appdescription, role
)
Key columns for insertion:
title— Display nameurl— Service URLcolour— Hex colour (e.g.,"#d48c3c")description— Short descriptiontype—"0"for standard itemsuser_id— Usually1class— For built-in app support:App\\SupportedApps\\Plex\\Plex(pattern:App\\SupportedApps\\<Name>\\<Name>). UseNonefor generic items.appid—Nonefor generic itemspinned—0(not pinned)"order"— Position in grid. UseSELECT MAX("order") FROM items+ 1icon—""(empty string, uses built-in favicon fetching)
Insert via Python
The DB is owned by root/Docker user. Access requires sudo:
import sqlite3
db = "/var/lib/docker/volumes/heimdall_config/_data/www/app.sqlite"
conn = sqlite3.connect(db)
max_order = conn.execute('SELECT MAX("order") FROM items').fetchone()[0]
conn.execute("""
INSERT INTO items (title, colour, icon, url, description, pinned, "order", type, user_id, class, appid)
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
""", (
"Audiobookshelf",
"#d48c3c",
"",
"http://192.168.50.98:13378",
"Audiobooks & podcasts",
0,
max_order + 1,
"0",
1,
None,
None
))
conn.commit()
conn.close()
Pitfalls
sqlite3CLI may not be installed on the host — use Python'ssqlite3module instead- "order" is a reserved word in SQLite — must be double-quoted in queries
- Items appear immediately in Heimdall — no restart needed