Client-Side Zabbix Tools vs Server Scripts

Where Tokens and Data Should Live

Every Zabbix automation story eventually hits the same question:

Where does the API token live, and who can see the export?

Shared Python on a bastion, a cron user with a long-lived token in ~/.env, a Google Sheet of host inventories — all work, until they don’t. ZbxWizz takes a different default: the workbench runs entirely in your browser. Tokens and workbook data stay on your machine; the only outbound calls are the Zabbix API requests you trigger.

Zabbix connection settings stay in the browser


The usual automation footprints

Approach Token location Data location Typical risk
Script on jump host File / env on the server CSV on the server, or stdout Shared access, leftover files, broad OS permissions
CI pipeline Secret store (good) or plain vars (bad) Build artifacts / logs Token in logs; over-privileged runners
Desktop script Laptop env Local files Better isolation; still easy to scp secrets around
SaaS “Zabbix helper” Vendor cloud Vendor cloud Third-party processing of config & credentials
ZbxWizz Browser localStorage IndexedDB + optional File Save No middle tier; you still protect the workstation

None of these is magically “secure.” The point is attack surface and habit: fewer places for a bulk-export of 10k hosts (with macros!) to land by accident.


What “client-side” means in practice

When you open ZbxWizz:

  1. Static HTML/JS/CSS loads (from your Zabbix host, GitHub Pages, or localhost)
  2. You paste an API URL + token into the connection dialog
  3. Imports, transforms, charts, and Push run in the page
  4. Sheet data persists in IndexedDB; connection + saved request templates in localStorage
  5. File → Save downloads a workbook JSON — without URL, token, or templates

Empty workbench — no server-side session for your sheet

There is no ZbxWizz backend that stores your inventory. That is intentional.


Why this helps day-to-day ops

1. Campaigns stay with the operator

Tag migrations and CSV onboardings are often personal workflows: filter, spot-check, Push ten rows, rethink. Keeping that sheet in the browser (or a saved file on your disk) beats leaving hosts-with-macros.csv in /tmp on a shared box.

2. Tokens are not “the team’s Python venv”

Rotate a token in Zabbix, update the dialog, done. You are not hunting which cron still has last year’s key.

3. Same-origin deploy reduces weird CORS stories

Serve ZbxWizz next to the Zabbix UI and use relative api_jsonrpc.php. Browser + same host is a boring, auditable path. See Installation.

4. Review before write is visible

Pull/Push only hit selected + visible rows. The spreadsheet is the dry-run surface — easier to peer-review than a wall of JSON in a terminal.

Select the subset before Push


What client-side does not solve

Be honest with stakeholders:

Treat the browser profile like a workstation secret store: lock the screen, use a dedicated profile for admin work if your org requires it, and prefer short-lived API tokens with least privilege.


When a server script is still the right tool

Choose code on a server when you need:

A useful split many teams adopt:

Work Tool
Desired-state baselines Ansible / Terraform / git
Interactive cleanup & audits ZbxWizz
Nightly reports Small scheduled job

ZbxWizz is not trying to replace IaC. It replaces the folder of fix-tags-FINAL-v3.py scripts born from spreadsheet panic.


Practical hardening checklist

Push templates stay local until you Execute


Get started

— Sergiu, Creator of ZbxWizz

← Back to blog