homepage-blocky-widget/INSTALL.md
Alkim Ake Gozen cc34c22aa5 feat: initial Blocky widget for Homepage dashboard
Parses Blocky's /metrics (Prometheus text) endpoint to show:
- Blocking status (Enabled/Disabled)
- Blocked domains count (denylist entries)
- Total queries served
- Cache hit rate %

No REST stats endpoint exists in Blocky, so the proxy handler
fetches and parses the Prometheus text format directly.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-21 11:59:09 +09:00

1.9 KiB
Raw Blame History

Installation

These files integrate as a standard service widget into the Homepage dashboard source. Homepage has no plugin system — you need to patch the source and rebuild.

1. Copy widget files

cp -r src/widgets/blocky /path/to/homepage/src/widgets/

2. Register the widget

src/widgets/widgets.js — add import and export:

import blocky from "./blocky/widget";
// ... existing imports ...

export default {
  blocky,
  // ... existing widgets ...
};

src/widgets/components.js — add dynamic import:

const components = {
  blocky: dynamic(() => import("./blocky/component")),
  // ... existing components ...
};

3. Add translations

In public/locales/en/common.json, merge the contents of translations/en.json into the top-level object. Repeat for any other locale files you use.

4. Homepage config

# services.yaml
- Infrastructure:
    - Pi DNS:
        href: http://10.0.50.5:4000
        description: DNS ad-blocker
        icon: blocky.png
        widget:
          type: blocky
          url: http://10.0.50.5:4000

What the widget shows

Field Source metric
Status blocky_blocking_enabled (Enabled / Disabled)
Blocked Domains blocky_denylist_cache_entries{group="ads"}
Total Queries blocky_cache_hits_total + blocky_cache_misses_total
Cache Hit Rate hits / (hits + misses) × 100

Data is pulled from Blocky's Prometheus /metrics endpoint — the only source that exposes query counts. The REST /api/blocking/status endpoint only returns the blocking toggle state.

Upstream

There is an open feature request at https://github.com/gethomepage/homepage/discussions/2732 (currently 8 upvotes — Homepage requires 20 before considering a PR). Once it crosses that threshold, this widget can be submitted as a PR to the official repo.