Skip to content

Tabbed Widgets ​

What Are Tabbed Widgets? ​

Tabbed widgets let you stack multiple widgets in one space with tabs to switch between them. Perfect for saving dashboard space!

Quick Examples ​

Example 1: Monitoring Hub (Docker + Home Lab) ​

Stack your monitoring widgets together:

json
{
  "id": "monitoring",
  "type": "Tabbed",
  "config": {
    "tabs": [
      {
        "id": "docker",
        "label": "Docker",
        "widgetType": "Docker"
      },
      {
        "id": "homelab",
        "label": "Services",
        "widgetType": "Home Lab"
      }
    ]
  },
  "position": { "x": 0, "y": 0, "w": 6, "h": 4 },
  "enabled": true
}

Example 2: Info Center (Time + Weather) ​

Quick glance information in one spot:

json
{
  "id": "info",
  "type": "Tabbed",
  "config": {
    "tabs": [
      {
        "id": "time",
        "label": "Clock",
        "widgetType": "Time"
      },
      {
        "id": "weather",
        "label": "Weather",
        "widgetType": "Weather"
      }
    ]
  },
  "position": { "x": 0, "y": 0, "w": 4, "h": 3 },
  "enabled": true
}

Example 3: Content Hub (Jellyfin + Reddit) ​

Entertainment and news together:

json
{
  "id": "content",
  "type": "Tabbed",
  "config": {
    "tabs": [
      {
        "id": "jellyfin",
        "label": "Now Playing",
        "widgetType": "Jellyfin"
      },
      {
        "id": "reddit",
        "label": "Reddit",
        "widgetType": "Reddit",
        "widgetConfig": {
          "subreddits": ["movies", "television", "entertainment"]
        }
      }
    ]
  },
  "position": { "x": 6, "y": 0, "w": 6, "h": 4 },
  "enabled": true
}

How to Add Tabbed Widgets ​

  1. Access your database:
bash
cd /path/to/homepage
sqlite3 ./data/homepage.db
  1. Insert a tabbed widget:
sql
INSERT INTO widgets (id, type, config, position, enabled) VALUES (
  'monitoring-tabs',
  'Tabbed',
  '{
    "tabs": [
      {"id": "docker", "label": "Docker", "widgetType": "Docker"},
      {"id": "homelab", "label": "Services", "widgetType": "Home Lab"}
    ]
  }',
  '{"x":0,"y":0,"w":6,"h":4}',
  1
);
  1. Exit and restart:
sql
.exit
bash
docker-compose restart

Method 2: Using API ​

bash
curl -X PUT http://localhost:3020/api/widgets/monitoring-tabs \
  -H "Content-Type: application/json" \
  -d '{
    "id": "monitoring-tabs",
    "type": "Tabbed",
    "config": {
      "tabs": [
        {"id": "docker", "label": "Docker", "widgetType": "Docker"},
        {"id": "homelab", "label": "Services", "widgetType": "Home Lab"}
      ]
    },
    "position": {"x": 0, "y": 0, "w": 6, "h": 4},
    "enabled": true
  }'

Available Widget Types ​

You can use any of these in your tabs:

  • Time - Clock and date
  • Weather - Current weather
  • Bookmarks - Quick links
  • Docker - Container monitoring
  • Home Lab - Service status
  • Jellyfin - Now playing
  • Reddit - Subreddit feeds

Tab Configuration ​

Each tab needs:

FieldRequiredDescription
id✅ YesUnique ID for the tab
label✅ YesText shown on the tab button
widgetType✅ YesType of widget to display
widgetConfig❌ NoConfig to pass to the widget (e.g., Reddit subreddits)

Widget Config Examples ​

Reddit with Custom Subreddits ​

json
{
  "id": "reddit-tab",
  "label": "Tech News",
  "widgetType": "Reddit",
  "widgetConfig": {
    "subreddits": ["programming", "technology", "linux"]
  }
}

Multiple Tabs with Configs ​

json
{
  "tabs": [
    {
      "id": "tech-reddit",
      "label": "Tech",
      "widgetType": "Reddit",
      "widgetConfig": {"subreddits": ["programming", "webdev"]}
    },
    {
      "id": "news-reddit",
      "label": "News",
      "widgetType": "Reddit",
      "widgetConfig": {"subreddits": ["worldnews", "technology"]}
    }
  ]
}

Complete Example — Add via SQL ​

WARNING

Editing the database directly is a last resort. Credentials are no longer stored in widgets.config — see the security guide — so hand-written rows must leave credential fields out and let the settings UI store them.

Here's a complete SQL command to add a tabbed widget:

sql
-- Monitoring Hub with Docker and Home Lab
INSERT INTO widgets (id, type, config, position, enabled) VALUES (
  'monitoring-hub',
  'Tabbed',
  '{"tabs":[{"id":"docker","label":"Containers","widgetType":"Docker"},{"id":"services","label":"Services","widgetType":"Home Lab"}]}',
  '{"x":0,"y":0,"w":6,"h":4}',
  1
);

-- Media Center with Jellyfin and Reddit
INSERT INTO widgets (id, type, config, position, enabled) VALUES (
  'media-center',
  'Tabbed',
  '{"tabs":[{"id":"jellyfin","label":"Now Playing","widgetType":"Jellyfin"},{"id":"reddit-movies","label":"Movies","widgetType":"Reddit","widgetConfig":{"subreddits":["movies","television"]}}]}',
  '{"x":6,"y":0,"w":6,"h":4}',
  1
);

-- Quick Info with Time and Weather
INSERT INTO widgets (id, type, config, position, enabled) VALUES (
  'quick-info',
  'Tabbed',
  '{"tabs":[{"id":"time","label":"Clock","widgetType":"Time"},{"id":"weather","label":"Weather","widgetType":"Weather"}]}',
  '{"x":0,"y":4,"w":4,"h":3}',
  1
);

Tips ​

  1. Keep tab labels short - They should fit nicely in the tab bar
  2. Related widgets together - Group similar content (monitoring, media, etc.)
  3. 2-4 tabs works best - Too many tabs get cramped
  4. Size matters - Make sure the container is big enough for the content
  5. Test after adding - Refresh the page to see your new tabbed widget

Troubleshooting ​

Widget shows "No Tabs Configured":

  • Check your JSON syntax in the config
  • Make sure tabs is an array with at least one tab

Widget shows "Widget type not found":

  • Check the widgetType matches exactly (case-sensitive)
  • Available types: Time, Weather, Bookmarks, Docker, Home Lab, Jellyfin, Reddit

Tabs don't show content:

  • Verify the widget config is valid JSON
  • Check browser console for errors
  • Make sure the widget has required config (e.g., Reddit needs subreddits)

Can't see the new widget:

  • Refresh your browser
  • Check Settings → Widgets to ensure it's enabled
  • Verify the position doesn't overlap with other widgets

Deleting Tabbed Widgets ​

sql
DELETE FROM widgets WHERE id = 'your-widget-id';

Or disable in Settings → Widgets


Enjoy stacking your widgets! 📚

Personal Homepage Dashboard