homarr-dashboard/DASHBOARD_AS_CODE.md

5.2 KiB

🏗️ Dashboard as Code for Homarr

Homarr 1.0 stores data in SQLite, but there are ways to work with it programmatically.


Homarr 1.0+ supports exporting/importing boards as JSON.

How to Export Your Current Board

1. Go to Manage → Boards
2. Click on a board
3. Click "Export" button
4. Download JSON file

JSON Structure Example

Here's a complete board JSON you can import:

{
  "name": "Main Dashboard",
  "description": "Public dashboard with news and links",
  "backgroundImage": "",
  "backgroundImageAttachment": "fixed",
  "backgroundImageRepeat": "no-repeat",
  "backgroundImageSize": "cover",
  "colorScheme": "dark",
  "customCss": "/* Paste CSS from custom-boards.css here */",
  "items": [
    {
      "type": "clock",
      "x": 0,
      "y": 0,
      "width": 2,
      "height": 2,
      "options": {
        "showDate": true,
        "timeFormat": "24"
      }
    },
    {
      "type": "weather",
      "x": 2,
      "y": 0,
      "width": 2,
      "height": 2,
      "options": {
        "location": "Stockholm, Sweden",
        "unit": "celsius"
      }
    },
    {
      "type": "rss",
      "x": 0,
      "y": 2,
      "width": 4,
      "height": 3,
      "options": {
        "feedUrls": [
          "https://selfh.st/rss/",
          "https://noted.lol/rss/",
          "https://feeds.fireside.fm/selfhosted/rss"
        ],
        "postsLimit": 10,
        "enableRtl": false,
        "descriptionLineClamp": 3,
        "hideDescription": false
      }
    },
    {
      "type": "rss",
      "x": 4,
      "y": 2,
      "width": 4,
      "height": 3,
      "options": {
        "feedUrls": [
          "https://www.bleepingcomputer.com/feed/",
          "https://feeds.feedburner.com/TheHackersNews",
          "https://krebsonsecurity.com/feed/"
        ],
        "postsLimit": 10,
        "descriptionLineClamp": 2
      }
    },
    {
      "type": "app",
      "x": 0,
      "y": 5,
      "width": 1,
      "height": 1,
      "options": {
        "appId": "gmail-id"
      }
    },
    {
      "type": "app",
      "x": 1,
      "y": 5,
      "width": 1,
      "height": 1,
      "options": {
        "appId": "github-id"
      }
    }
  ],
  "visibility": "public",
  "layout": {
    "columnCount": 8
  }
}

How to Import

1. Manage → Boards
2. Click "Import" button
3. Upload JSON file
4. Review and confirm

Option 2: SQLite Database Editing (Advanced)

Homarr stores everything in /opt/homarr/appdata/db/homarr.db

Access the Database

# SSH to your server
docker exec -it homarr sh

# Install sqlite3
apk add sqlite3

# Open database
sqlite3 /appdata/db/homarr.db

# View tables
.tables

# View boards
SELECT * FROM Board;

# View apps
SELECT * FROM App;

Key Tables

Table Purpose
Board Board definitions
Section Board sections/items
App App definitions
Integration Integration configs

Option 3: API Approach (Scripting)

Homarr has internal APIs you can script against:

Get Board Data

# Get all boards
curl http://localhost:7575/api/boards

# Get specific board
curl http://localhost:7575/api/boards/main-dashboard

Create Board via API

# This requires authentication cookie/session
# You'd need to extract from browser DevTools

curl -X POST http://localhost:7575/api/boards \
  -H "Content-Type: application/json" \
  -H "Cookie: your-auth-cookie" \
  -d '{
    "name": "Auto Created Board",
    "visibility": "public"
  }'

Option 4: Pre-built JSON Files (I Can Create These)

I can create complete JSON files for you to import!

Board 1: Main Dashboard JSON

File: boards/main-dashboard.json

Board 2: System Monitor JSON

File: boards/system-overview.json

Board 3: Infrastructure JSON

File: boards/infrastructure.json

You would:

  1. Download these JSON files
  2. Import each one in Homarr
  3. Done!

What I Can Do For You

Option A: Create Importable JSON Files

I'll create complete JSON files for each board:

  • Main Dashboard (with RSS feeds, clock, weather)
  • System Overview (full-screen Dash.)
  • Infrastructure (with all your apps)
  • Media Center (if needed)

You just import them!

Option B: Create SQL Scripts

Generate SQL INSERT statements to directly populate the database.

Option C: Step-by-Step Copy/Paste

Provide exact values to enter in each field.


Which Option Do You Want?

Option Effort For You Effort For Me Best For
A - JSON Import Low (just import) Medium Quick setup
B - SQL Script Low (run script) Medium Automation
C - Copy/Paste Medium Low Learning

Tell Me:

  1. Which boards do you want me to build?

    • Main Dashboard (public)
    • System Overview (private)
    • Infrastructure (private)
    • Media Center (private)
    • News Hub (public)
  2. Which method?

    • JSON import files
    • SQL script
    • Copy/paste guide
  3. Your details:

    • Location (for weather)
    • Apps you want included (from the 60+ list)
    • RSS feed preferences

I'll build them for you! 🚀