NextDNS Ultimate Control Panel
A userscript that adds a floating control panel, analytics dashboard, and power-user tools to the NextDNS web interface.
NDNS transforms the NextDNS dashboard at my.nextdns.io into a power-user environment. It injects a persistent floating panel with quick actions, an API-driven analytics dashboard, domain management tools, and deep customization options — all running client-side as a userscript.
Also available as a Chrome extension: BetterNext
| Category | Details |
|---|---|
| Floating Control Panel | Draggable, resizable, persistent position. Mobile bottom-sheet layout. Quick navigation, browser-side NextDNS verification, domain filters, log controls, action buttons, and accessible modal/switch semantics. |
| Analytics Dashboard | Replaces the default analytics page with custom API-driven views: stat cards, current/all-profile aggregation with partial-failure warnings and retry, 90-day / 1-year historical rollups, blocked-category spike alerts, per-device app drill-downs, ring charts (status, DNSSEC, encryption, protocols, IP versions), bar charts (top domains, blocked domains, devices), data tables, browser CSV/JSON/PDF export, and a Node CSV export CLI. |
| Log Enhancements | Filter by Allowed / Blocked / Cached, hidden domains, and tab-local origin/domain matches. Replay a loaded domain through the current profile DoH resolver. Hide specific domains. Compact mode. Auto-refresh with configurable interval. Real-time log counters. Opt-in IndexedDB cache for offline browsing of loaded rows with TTL, purge, and export boundaries. |
| Domain Management | One-click allow/deny from logs. Domain-of-the-day review picker from loaded queries. 10-step undo stack for allow/deny actions. Bulk allowlist/denylist import. Wildcard/regex builder with recent-log preview. Protected domain tags for local curation during HaGeZi sync. Bulk delete tools with progress tracking. Domain action history. CNAME chain display. |
| Profile Tools | Full profile import/export (JSON) with pre-import rollback backups. Cross-profile config sync. DNS rewrite management from the settings modal. Versioned NDNS settings backup/import with storage repair reporting. |
| Parental Controls | Quick-toggle parental control categories, Safe / Work / Chill bulk presets, recreation time, a local weekly 7x24 heatmap schedule, and device-activity override schedules from the settings modal. |
| HaGeZi Integration | One-click sync of TLD blocklists and allowlists from HaGeZi's curated adblock lists, local hosts/AdBlock blocklist import, per-list upstream hashes, counts, diff views after updates, optional weekly auto-sync notifications, and allow/deny conflict resolution. |
| Webhook Alerts | Send domain query events to Discord, Slack, or any webhook URL. Configurable filter expressions, editable Generic JSON / Discord / Slack payload templates, test sends, last-5 delivery logs, and duplicate-event rate limiting. |
| Theming | Dark, Dark Blue, and Light themes. List page theme override. Compact/roomy panel density, ultra-condensed mode, and Theme Studio custom CSS editor with live preview, size guard, safe-mode reset, and export/import. |
| Scheduled Logs | Automatic log downloads on a configurable schedule with desktop notifications. |
A userscript manager extension:
- Tampermonkey (Chrome, Firefox, Edge, Safari)
- Violentmonkey (Chrome, Firefox, Edge)
- ScriptMonkey / EspressoMonkey (Chrome)
- Install a userscript manager from the list above
- Click here to install NDNS.user.js — your userscript manager will prompt to install
- Visit my.nextdns.io
git clone https://github.com/SysAdminDoc/NDNS.gitOpen your userscript manager, create a new script, and paste the contents of NDNS.user.js.
- Install the userscript and visit any NextDNS page
- The floating panel appears with a prompt to set your API key
- Click "Take Me There!" to navigate to your NextDNS account page
- Click "Capture Key & Continue" — your key is stored locally via
GM.setValue - NDNS is now fully operational
Your API key is stored locally in your userscript manager's storage. It never leaves your browser and is only used for direct requests to the NextDNS API.
Headless CSV export uses the same NextDNS analytics API groups as the browser dashboard.
$env:NEXTDNS_API_KEY = "your-nextdns-api-key"
node tools/export-analytics.mjs --profile your-profile-id --range 90d --scope current --out nextdns-analytics.csvUse --scope all to merge every profile returned by the API, or --self-test to generate fixture CSV without credentials.
The userscript requires the following @grant permissions:
| Grant | Purpose |
|---|---|
GM_addStyle |
Injects CSS for the panel, themes, and analytics dashboard |
GM.setValue / GM.getValue / GM.deleteValue |
Persistent local storage for settings, API key, and UI state |
GM_xmlhttpRequest |
Cross-origin API requests to api.nextdns.io (bypasses CORS) |
NDNS/
├── NDNS.user.js # The complete userscript
└── README.md
node --check NDNS.user.js
node tools/firefox-parity-check.mjs
node tools/api-retry-policy-check.mjs
node tools/webhook-trust-policy-check.mjs
node tools/dom-sink-policy-check.mjs
node tools/storage-policy-check.mjs
node tools/analytics-resilience-check.mjs
node tools/accessibility-policy-check.mjs
node tools/safe-recovery-policy-check.mjs
node tools/offline-cache-privacy-check.mjs
node tools/workflow-fixture-check.mjs
node tools/ui-string-catalog-check.mjs
node tools/log-origin-filter-check.mjs
node tools/dns-replay-check.mjs
node tools/cli-analytics-export-check.mjs
node tools/offline-log-cache-check.mjs
node tools/export-analytics.mjs --self-test- BetterNext — Chrome extension version with identical features, packaged as a Manifest V3 extension
- EspressoMonkey — Chrome Manifest V3 userscript manager extension
MIT — see LICENSE for details.
Built by Matt Parker