Follow FREE product releases now. If you later buy a PRO product using the same email, the licence will appear in this account automatically.
navigatorMAX
FREE PRONavigation widget for dashboards and custom URLs with coloured tiles This widget renders selected Zabbix dashboards, host-group problem views and custom URLs as either a collapsible tree or a grid of icon-and-text tiles. Sources may be matched by exact name, wildcards or (PRO) regular expressions and can include global dashboards, host dashboards, templates, hosts or host groups with optional subgroup inclusion; appearance, grid size, icons, labels, colours, refresh interval and per-tile overrides are configurable. Tiles can be coloured from live trigger state and display per-severity counts, making the widget suitable for teams and operators who need a single navigable front end for many dashboards, host drilldowns and operational links.
Screenshots
How to install
Install via your OS package manager. Using the initMAX repository (apt / dnf / zypper) is the recommended way - you get GPG-signed updates automatically.
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
apt update && apt install zabbix-module-navigatormax
rpm -Uvh https://repo.initmax.com/zabbix/release/initmax-release-latest.noarch.rpm
dnf clean all && dnf install -y zabbix-module-navigatormax
rpm -Uvh https://repo.initmax.com/zabbix/release/initmax-release-latest.noarch.rpm
zypper --gpg-auto-import-keys refresh && zypper install -y zabbix-module-navigatormax
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-navigatormax
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-navigatormax
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-navigatormax
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 navigatormax - Alpine (apk) package install
USER root
RUN 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 free \
-- apk add --no-cache zabbix-module-navigatormax \
&& 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-navigatormax=2.1.0_p1-r3
Step 5 · Build your image
Run the command in a terminal in the Dockerfile directory.
# initMAX navigatormax - Alpine (apk) package install
docker build -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
No manual APK downloads or file copying.
Buying another product later? Add its install block to the same Dockerfile; keep the existing blocks and products.
Step 4 · Edit your Dockerfile
Paste the block after FROM in the final Zabbix frontend stage.
# initMAX navigatormax - 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-navigatormax \
&& 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-navigatormax=2.1.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 navigatormax - 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 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 \
&& apt-get update \
&& apt-get install -y --no-install-recommends zabbix-module-navigatormax \
&& rm -f /tmp/initmax-release.deb \
&& rm -rf /var/lib/apt/lists/*
USER 1997
On the last line, keep the USER from your original image.
Step 5 · Build your image
Run the command in a terminal in the Dockerfile directory.
docker build -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.
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-navigatormax \
&& 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 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; } \
&& dnf install -y zabbix-module-navigatormax \
&& dnf clean all
USER 1997
On the last line, keep the USER from your original image.
Step 5 · Build your image
Run the command in a terminal in the Dockerfile directory.
docker build -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.
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-navigatormax \
&& 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.
ZIP modules in a persistent volume. You manage updates manually.
1 · Download and extract the ZIP
Save the ZIP for your version and edition as module.zip on the Docker host. Unzip it into a new directory as shown below, then read the included INSTALL.md.
WORKDIR=$(mktemp -d)
unzip module.zip -d "$WORKDIR" && cd "$WORKDIR/navigatormax"
2 · Mount the modules volume
Keep your existing modules volume. For a new one, merge this Zabbix 8.0 example into Compose and recreate the frontend. Preserve other settings and transfer existing modules before switching. For images with a ui/ directory, mount /usr/share/zabbix/ui/modules. Do not share a volume between different Zabbix versions.
services:
zabbix-web:
volumes:
- zabbix-web-modules-8.0:/usr/share/zabbix/modules
volumes:
zabbix-web-modules-8.0:
docker compose up -d --no-deps zabbix-web
3 · Copy the module into the volume
Replace zabbix-web with your actual frontend container name. Select legacy/ for Zabbix 6.0–6.2, otherwise modern/.
When updating, back up this module and its settings first. Only its own directory is replaced, never the whole modules/ directory.
Show copy commands
(
set -eu
ZABBIX_WEB_CONTAINER=zabbix-web
ZABBIX_FRONTEND=$(docker exec "$ZABBIX_WEB_CONTAINER" sh -c '
for root in /usr/share/zabbix/ui /usr/share/zabbix /usr/share/zabbix/php; do
[ -f "$root/include/defines.inc.php" ] && echo "$root" && break
done')
test -n "$ZABBIX_FRONTEND" || { echo "Zabbix frontend not found in container" >&2; exit 1; }
ZBXVER=$(docker exec "$ZABBIX_WEB_CONTAINER" grep -m1 ZABBIX_VERSION "$ZABBIX_FRONTEND/include/defines.inc.php" | grep -oE "[0-9]+\.[0-9]+" | head -1)
case "$ZBXVER" in
6.0|6.2) PAYLOAD=legacy ;;
6.4|7.0|7.2|7.4|8.0) PAYLOAD=modern ;;
*) echo "Unsupported Zabbix frontend: $ZBXVER" >&2; exit 1 ;;
esac
test -f "$PAYLOAD/manifest.json" || { echo "Run from the extracted navigatormax ZIP directory" >&2; exit 1; }
if grep -q '"supported_versions"[[:space:]]*:' "$PAYLOAD/manifest.json"; then
SUPPORTED=$(awk 'BEGIN { RS="]" } /"supported_versions"[[:space:]]*:/ {
sub(/^.*"supported_versions"[[:space:]]*:[[:space:]]*\[/, ""); print; exit
}' "$PAYLOAD/manifest.json")
printf '%s\n' "$SUPPORTED" | grep -Fq "\"$ZBXVER\"" \
|| { echo "Module does not support Zabbix $ZBXVER" >&2; exit 1; }
fi
ZABBIX_MODULES_VOLUME=$(docker inspect --format '{{range .Mounts}}{{println .Type .Destination .RW .Name}}{{end}}' "$ZABBIX_WEB_CONTAINER" \
| awk -v target="$ZABBIX_FRONTEND/modules" '$1 == "volume" && $2 == target && $3 == "true" { print $4 }')
test -n "$ZABBIX_MODULES_VOLUME" || { echo "Mount a writable modules volume in Compose first" >&2; exit 1; }
echo "Zabbix $ZBXVER · $PAYLOAD · $ZABBIX_MODULES_VOLUME"
if docker exec "$ZABBIX_WEB_CONTAINER" test -d "$ZABBIX_FRONTEND/modules/navigatormax"; then
BACKUP=$(mktemp -d)
docker cp "$ZABBIX_WEB_CONTAINER:$ZABBIX_FRONTEND/modules/navigatormax" "$BACKUP/"
echo "Backup: $BACKUP/navigatormax"
docker exec -u root "$ZABBIX_WEB_CONTAINER" rm -rf "$ZABBIX_FRONTEND/modules/navigatormax"
fi
docker exec -u root "$ZABBIX_WEB_CONTAINER" mkdir -p "$ZABBIX_FRONTEND/modules/navigatormax"
docker cp "$PAYLOAD/." "$ZABBIX_WEB_CONTAINER:$ZABBIX_FRONTEND/modules/navigatormax/"
docker exec -u root -e ZABBIX_FRONTEND="$ZABBIX_FRONTEND" "$ZABBIX_WEB_CONTAINER" sh -c '
chown -R "$(stat -c "%u:%g" "$ZABBIX_FRONTEND/include/defines.inc.php")" "$ZABBIX_FRONTEND/modules/navigatormax"
'
docker restart "$ZABBIX_WEB_CONTAINER"
)
4 · Enable the module in Zabbix
Administration / General / Modules / Scan directory. Enable the single entry for this product. For an earlier or renamed copy, follow Earlier copies in the included INSTALL.md before scanning to retain its settings.
Manual copying does not run package pre/post-install or upgrade scripts. If required, follow INSTALL.md. After changing the Zabbix version, use a separate volume with compatible modules and scan again.
These are displayed instructions only. Nothing is executed against your Docker environment.
Releases
32.1.0 Latest 2026-11-06
-
Publish the Alpine (apk) package for Docker based Zabbix frontends (repo.initmax.com Alpine channel).
2.0.1 2026-10-16
-
Display shared PRO padlocks in FREE source menus
2.0.0 2026-10-16
-
Preserve historical migration-fixture chunk sizes when Zabbix 8.0 expands the current schema field capacity.
-
Pin the native executor to its approved Docker CLI image digest to avoid repeated mutable-tag lookups in cached matrix runs.
-
Replay duplicate blur notifications during pending previews, including native 6.0 session-query parameters, and preserve rejection of actual edits, cancellation and failed destinations.
-
Verify saved severity values across native checkbox-list formats and replay original configuration with version-correct storage chunks.
-
Reject invalid numeric edits made during a pending tile preview, even when their normalized value equals Auto or a clamped font size.
-
Keep one-click tile Apply working when native controls repeat unchanged values on blur while the preview is loading.
-
Keep the saved-preset remove action visible and clickable on frontends without the native Zabbix icon font.
-
Extend native dropdown option highlighting across the whole menu and centre tile problem-count checkboxes with their labels and help icons.
-
Keep help text readable and inside narrow windows on older Zabbix frontends; centre the question mark and dismiss pinned hints when their form scrolls or resizes.
-
Preserve contrasting text and stable borders on multi-page tiles when legacy link styles apply, including hover and keyboard focus.
-
Preserve the original 0.14.6 Or calculation and 100-tile limit when those default fields were omitted from saved widgets, including the first render after upgrade; retain explicit settings and the 1000-tile maximum.
-
Retain inactive paid URL rules and saved tile overrides when editing in FREE, including their order, so upgrading to PRO restores them without rebuilding the configuration.
-
Show an explicit unavailable host state when problem data exceeds the bounded lookup or the API fails; keep the warning visible when counts are hidden.
-
Mark Add custom tile with the PRO padlock and centre locked controls in the FREE form.
-
Keep every dashboard page actionable in the page menu, including the first page.
-
Validate field values before applying, explain pending selection changes with an orange warning, and show empty-result and tile-limit messages.
-
Align empty and filled selectors, compact tile controls and preserve spacing around the primary tile-loading action.
-
Load original-resolution icons in the tile editor instead of enlarging 24 px thumbnails, keeping high-resolution icons sharp on Retina displays.
-
Centre tile icons and labels consistently with or without problem counts, reserving space for the footer and fitting content on small tiles.
-
Resolve modern host dashboards with host permissions and filter tiles, colours and problem counts by the current user's access.
-
Keep neutral button labels readable on hover and keyboard focus, and theme the page picker in dark mode.
-
Preserve empty automatic font sizes while typing; step per-tile overrides from the inherited size.
-
Fall back to black text when coloured tiles cannot reach 4.5:1 contrast with navy or white.
-
Align target filters, tile editor labels, control heights and colour previews in light and dark themes; stack narrow forms without overlapping controls.
-
Preserve readable dark lettering on the yellow PRO badge in dark mode.
-
Fit widget and tile configuration dialogs to narrow viewports without horizontal overflow.
-
Fill the complete widget background and choose readable text colours using relative luminance.
-
Make empty tile icons visible and directly editable, and clarify when tile refresh preserves customizations.
-
Name the legacy 6.0/6.2 files after the product, so the classes autoload.
-
Carry one product identity, geometry and version across the v1 and v2 trees.
-
Let the global font size be set to the inherited size instead of losing it.
-
Show the edition badge and padlock the PRO controls in the configuration dialog.
-
Give the PRO edition badge the styling the FREE one already had.
-
Keep the target pickers working when a Zabbix API call fails.
-
Stop the button tiles sitting high in the widget.
-
Preserve saved boolean target calculations while new selections use Include/Exclude.
-
Keep the preset name box from widening the configuration dialog.
-
Keep targets and per-tile setup of a saved widget on Zabbix 6.4.
-
Regenerate the native catalogue gallery from self-contained dashboard, host-group and problem fixtures.
-
Document the source-loading workflow, group hierarchy matching, reload preservation, presets and updated FREE/PRO boundaries.
-
Customer README describing navigatorMAX and its FREE and PRO editions.
-
Hand-off note recording what is done, what is not, and why.
-
Extend the supported frontend matrix to Zabbix 8.0, tested on 8.0.0rc2, including its dark themes.
-
Show loaded tile count, page count and first-page overflow beside grid capacity; show spare positions when all tiles fit on one page.
-
Resolve Zabbix expression macros in tile descriptions in both editions, including live editor previews, while preserving the saved expressions and the viewer's item permissions.
-
Include one built-in Host dashboards and problems starter in both editions, with automatic tile loading; keep additional presets and shared preset management in PRO.
-
Create a tile for each matching host group, optionally including subgroups; group tiles open Problems and do not require dashboards.
-
Mix exact names and wildcard patterns with explicit
regex:expressions; show the interpreted matching type beside each field. -
Add independent custom tiles, choose same-window or new-tab URL opening, and retain custom destinations and appearance when reloading the selection.
-
Select multiple host groups, hosts and triggers for a tile's problem filter, using picked names or patterns.
-
Configure icon size, tile spacing and corner radius, including preset persistence.
-
Explain presets, icon sources, inherited values and colour filters with illustrated help and a live tile preview.
-
Lay the navigatorMAX widget source into the v3 etalon layout.
-
Carve the FREE baseline from the PRO capabilities in features.yaml.
-
Clickthrough scenarios for the FREE baseline and each PRO capability.
-
Second demo preset for the list view.
-
End-to-end tests for tile icons: the default, switched off, and the per-tile override.
-
Support Zabbix 6.4 with its own configuration layout; Advanced starts collapsed as on 7.x.
-
Support Zabbix 6.0 and 6.2 through a manifest-v1 adapter over the shared code.
-
Include basic host dashboards and automatic destination-host problem colours/counts in FREE; keep group/tag/template selection and per-tile problem filters in PRO.
-
Select sources with Include/Exclude, load their tiles in one action, then configure appearance and arrange the tiles.
-
Load and create tiles automatically after confirming a preset; keep source and display presets separate from individual tile overrides.
-
Place dashboard page selection below the dashboard name and show page counts for multi-page dashboard choices.
-
Show equal-sized light/dark colour examples with theme icons, and explain global icon and severity-colour administration.
-
Organize configuration into targets, appearance, individual tiles and problem display using native Zabbix controls.
-
Drop the Skeleton's demo AI, chat, MCP and layout example from the tree.
-
Keep shared preset storage, management controls and write actions out of the FREE build.
-
Let presets carry the widget background and default tile colour; the demos use initMAX colours.
-
Assert the widget's security invariants from a test instead of by review.
-
Move the widget's logic out of the class only the 7.x framework can load.