Custom menu buttons
PROAdd custom links to Zabbix navigation menus Adds configurable buttons to the default Zabbix navigation menus (main sidebar and user menu) so user-defined URLs are available from every page. Each button's label, target URL, icon, placement (append or insert before/after any existing item) and whether to open in a new tab can be set from the module management screen. Managed by a Zabbix Super admin and stored in the module configuration so all frontend nodes and HA clusters show the same menu; intended for teams that need quick access to external tools such as ticketing, runbooks or dashboards from within Zabbix.
Zabbix 6.0 - 8.0
Screenshots
How to install
Step 1 · Operating system
Step 3 · Installation
PRO repositories are protected with HTTP basic auth. You need one personal repo token, then you point your package manager at the authenticated URL. A single token unlocks every product your account is entitled to - you do not need a token per widget.
wget https://repo.initmax.com/zabbix/release/initmax-release-latest_all.deb
dpkg -i initmax-release-latest_all.deb
printf 'machine repo.initmax.com login token password %s\n' 'TOKEN_VALUE' > /etc/apt/auth.conf.d/initmax.conf
chmod 600 /etc/apt/auth.conf.d/initmax.conf
sed -i -e '/^# Types: deb/,$ s/^# //' -e 's|USER:TOKEN@||' /etc/apt/sources.list.d/initmax.sources
apt update && apt install zabbix-module-custom-menu-buttons
rpm -Uvh https://repo.initmax.com/zabbix/release/initmax-release-latest.noarch.rpm
sed -i -e '/#\[initmax-zabbix-pro\]/,$ s/^#//' -e 's|USER:TOKEN|token:TOKEN|' /etc/yum.repos.d/initmax.repo
chmod 600 /etc/yum.repos.d/initmax.repo
dnf clean all && dnf install -y zabbix-module-custom-menu-buttons
rpm -Uvh https://repo.initmax.com/zabbix/release/initmax-release-latest.noarch.rpm
sed -i -e '/#\[initmax-zabbix-pro\]/,$ s/^#//' -e 's|USER:TOKEN|token:TOKEN|' /etc/zypp/repos.d/initmax.repo
chmod 600 /etc/zypp/repos.d/initmax.repo
zypper --gpg-auto-import-keys refresh && zypper install -y zabbix-module-custom-menu-buttons
One token unlocks every PRO product on your account. If you cancel one product, the same token keeps working for the rest. Rotate or revoke tokens any time from the Portal.
Step 4 · Edit your Dockerfile
Paste the block after FROM in the final Zabbix frontend stage.
# initMAX custom-menu-buttons - Alpine (apk) package install
USER root
RUN --mount=type=secret,id=initmax_repo_token,required=true \
apk add --no-cache ca-certificates curl \
&& curl -fsSL https://repo.initmax.com/zabbix/release/setup-alpine.sh -o /tmp/initmax-repo.sh \
&& sh /tmp/initmax-repo.sh --edition pro \
--token-file /run/secrets/initmax_repo_token \
-- apk add --no-cache zabbix-module-custom-menu-buttons \
&& rm -f /tmp/initmax-repo.sh
USER 1997
On the last line, keep the USER from your original image.
The block installs the newest available version when the installation step runs. Docker may reuse a cached layer. To keep a fixed version, use zabbix-module-custom-menu-buttons=2.4.0_p2-r3
Step 5 · Build your image
Reveal or create a repo token above. Run the filled command in a terminal in the Dockerfile directory; do not save it to a file.
# initMAX custom-menu-buttons - Alpine (apk) package install
INITMAX_REPO_TOKEN='TOKEN_VALUE' \
docker build --secret id=initmax_repo_token,env=INITMAX_REPO_TOKEN \
-t zabbix-web-custom .
In Compose, use image zabbix-web-custom and recreate the frontend. In Zabbix, open Administration / General / Modules, Scan directory and enable the module.
More options
PRO uses your existing repo token as a Docker build secret. Do not put the token in Dockerfile instructions or ARG/ENV.
Buying another product later? Add its install block to the same Dockerfile; keep the existing blocks and products.
Step 4 · Edit your Dockerfile
For Ubuntu / Debian frontend images. Add after FROM. Keep installed modules in the image; a volume over modules/ would hide package updates.
USER root
RUN --mount=type=secret,id=initmax_repo_token,required=true \
apt-get update \
&& apt-get install -y --no-install-recommends ca-certificates curl \
&& curl -fsSL https://repo.initmax.com/zabbix/release/initmax-release-latest_all.deb -o /tmp/initmax-release.deb \
&& dpkg -i /tmp/initmax-release.deb \
&& cp /etc/apt/sources.list.d/initmax.sources /tmp/initmax.sources \
&& printf 'machine repo.initmax.com login token password %s\n' "$(cat /run/secrets/initmax_repo_token)" > /etc/apt/auth.conf.d/initmax.conf \
&& chmod 600 /etc/apt/auth.conf.d/initmax.conf \
&& sed -i -e '/^# Types: deb/,$ s/^# //' /etc/apt/sources.list.d/initmax.sources \
&& apt-get update \
&& apt-get install -y --no-install-recommends zabbix-module-custom-menu-buttons \
&& mv /tmp/initmax.sources /etc/apt/sources.list.d/initmax.sources \
&& rm -f /tmp/initmax-release.deb /etc/apt/auth.conf.d/initmax.conf \
&& rm -rf /var/lib/apt/lists/*
USER 1997
On the last line, keep the USER from your original image.
Step 5 · Build your image
Reveal or create a repo token above. Run the filled command in a terminal in the Dockerfile directory; do not save it to a file.
INITMAX_REPO_TOKEN='TOKEN_VALUE' \
docker build --secret id=initmax_repo_token,env=INITMAX_REPO_TOKEN \
-t zabbix-web-custom .
In Compose, use image zabbix-web-custom and recreate the frontend. In Zabbix, open Administration / General / Modules, Scan directory and enable the module.
PRO uses your existing repo token as a Docker build secret. Do not put the token in Dockerfile instructions or ARG/ENV.
Step 4 · Edit your Dockerfile
For CentOS Stream / Oracle Linux frontend images. Add after FROM. DNF installs the RPM package; keep installed modules in the image, not a volume over modules/.
USER root
RUN --mount=type=secret,id=initmax_repo_token,required=true \
if ! command -v dnf >/dev/null; then microdnf install -y dnf; fi \
&& { rpm -q initmax-release >/dev/null 2>&1 || rpm -Uvh https://repo.initmax.com/zabbix/release/initmax-release-latest.noarch.rpm; } \
&& cp /etc/yum.repos.d/initmax.repo /tmp/initmax.repo \
&& sed -i -e '/#\[initmax-zabbix-pro\]/,$ s/^#//' -e 's|USER:TOKEN@||' /etc/yum.repos.d/initmax.repo \
&& printf '\nusername=token\npassword=$initmax_repo_token\n' >> /etc/yum.repos.d/initmax.repo \
&& DNF_VAR_initmax_repo_token="$(cat /run/secrets/initmax_repo_token)" dnf install -y zabbix-module-custom-menu-buttons \
&& mv /tmp/initmax.repo /etc/yum.repos.d/initmax.repo \
&& dnf clean all
USER 1997
On the last line, keep the USER from your original image.
Step 5 · Build your image
Reveal or create a repo token above. Run the filled command in a terminal in the Dockerfile directory; do not save it to a file.
INITMAX_REPO_TOKEN='TOKEN_VALUE' \
docker build --secret id=initmax_repo_token,env=INITMAX_REPO_TOKEN \
-t zabbix-web-custom .
In Compose, use image zabbix-web-custom and recreate the frontend. In Zabbix, open Administration / General / Modules, Scan directory and enable the module.
PRO uses your existing repo token as a Docker build secret. Do not put the token in Dockerfile instructions or ARG/ENV.
Have thoughts about Custom menu buttons? Please send us feedback.
Releases
82.4.0 Latest 2026-11-05
Feature
-
Publish the Alpine (apk) package for Docker based Zabbix frontends (repo.initmax.com Alpine channel).
2.3.0 2026-10-14
Security
-
A button's icon value is validated against the icon catalog and escaped when the menu is drawn: a crafted icon could inject script into every page for every user, guest included. URLs with a scheme Zabbix does not allow (javascript: and the like) are refused, and stored ones are shown as plain text.
Feature
-
Zabbix 8.0 support.
Improvement
-
The module is registered in Zabbix as custom-menu-buttons, the name of the product and its package, instead of the internal id xnavigation; its pages moved to zabbix.php?action=module.custommenubuttons.list. Upgrades carry every button over on their own: the package moves the old module's buttons and enabled/disabled state and removes the old module, and a ZIP or manual install adopts them on the first page load and disables the old module.
Fix
-
Top-level buttons can be created again, appending under a page link (e.g. Problems) is refused instead of turning it into a dead folder for everyone, and labels made of spaces are refused; error messages name the visible fields.
2.2.1 2026-08-20
-
Dark themes: the page logo and the placement trail follow the theme
Older versions (5)
2.2.0 2026-08-17
-
Button dialog hints and edition badge, Where-it-lands preview, mass delete on the list
2.1.0 2026-08-17
-
Sell the module under its own name: catalog_slug custom-menu-buttons
2.0.2 2026-08-16
-
README on the combo skeleton: portal installer, feature table, same sections everywhere
2.0.1 2026-08-16
-
Catalog showcase spec; branded README shots
2.0.0 2026-08-10
-
Graft Custom menu buttons onto the v3 pipeline