Releases: netalertx/NetAlertX
v26.2.6 - Hotfix: Offline/Online detection, Plugin object deletion fixes
Hi all 🙋♂️!
Unfortunately I left a debug line in the code which caused some offline/online detection issues, so I’m pushing out a hotfix now (sorry about that). Thanks to everyone who reported weird behavior so quickly.
I’ve also added a static code check to catch that particular debug line in the future, as I use it frequently when troubleshooting scanning issues.
I've also re-did all the container paths in the docs from jokob-sk/netalertx to netalertx/netalertx as I moved the repo to an org.
🔧 Hotfix Summary
- Removes leftover debug logic affecting device state changes
- Restores proper offline/online detection behavior
If you’re already seeing strange presence/status updates, please pull the latest image and restart your container.
🧪 Want new features sooner?
If you like living on the slightly adventurous side and want fixes/features earlier, consider running the dev image and help test ongoing changes so issues get caught before they hit production 🙌
⚠️ Please backup everything and create a CSV export of your devices before proceeding — especially if you plan to use your existing database.
services:
netalertx:
image: "ghcr.io/netalertx/netalertx-dev:latest"Running dev and notice something odd?
Open an issue or drop feedback — it genuinely helps stabilize upcoming releases 👍
Thanks again everyone for testing and reporting issues so quickly ❤️
💔 Upcoming Breaking Changes
Sometimes I have to introduce breaking changes.
Warning
- 🔺 NEXT RELEASE REMOVAL: The SYNC plugin node port will change to the value of the
GRAPHQL_PORTsetting. Both ports are currently supported, so please update your configuration to use the new port inSYNC_hub_urlandSYNC_nodes. - 🔺 NEXT RELEASE REMOVAL: If you have implemented external applications using the [OLD API endpoints](https://docs.netalertx.com/API_OLD), please migrate to the [NEW API endpoints](https://docs.netalertx.com/API/).
✨ Fixes and Improvements
- Incorrect online detection caused by debug code #1489
- Clearing plugin objects was not possible #1487
- Small CSS fixes on the device details page top boxes
Full Changelog: v26.2.4...v26.2.6
v26.2.4 - 🌐 Expanded MCP/OpenAPI, IP Dual-Stack Stability, and Advanced Field Control
Hi All 👋 !
This release focuses on backend extensibility and improved stability for complex network environments. A significant portion of these updates, particularly regarding API coverage and infrastructure, comes from contributions by @adamoutler and the community.
MCP server and OpenAPI coverage have been expanded, now including an auto-generated /docs API playground for easier integration. This allows power users to test endpoints, scripts, and "hack around" with the system's capabilities directly from the browser. Infrastructure support is also improved with better CORS handling and the introduction of a new Raspberry Pi OS image.
For network monitoring, "IP Changed" notification fatigue is addressed in dual-stack devices by logging IPv4 and IPv6 data. There is also a new devVlan field to segment and your devices easier. You can for example couple this with the built-in workflows and auto-populate VLAN based on IP ranges. You can now see exactly which plugin discovered a specific value, creating a clear audit trail for your network. There is now more granular control over data with new the ability to lock specific fields from being overwritten by plugins.
Additionally, device heuristics for icon and type recognition are improved for smart plugs and other hardware, and UI issues related to ad-hoc plugin runs and stable version labeling are resolved.
Thanks to @adamoutler, @2m, and everyone who contributed code and bug reports for this version.
💔 Breaking changes
Sometimes I have to introduce breaking changes
Warning
- 🔺 NEXT RELEASE REMOVAL: The port of the sync nodes for the SYNC plugin will change to the value of the
GRAPHQL_PORTsetting. Both ports are currently supported, so please update your configuration to point to the new port in theSYNC_hub_urlandSYNC_nodessettings. - 🔺 NEXT RELEASE REMOVAL: If you have implemented external applications using the OLD API endpoints, please migrate to the NEW API endpoints.
🆕New capabilities
- Extended MCP server and OpneAPI coverage by @adamoutler 🙏
- Better CORS and reverse proxy support by @adamoutler 🙏 #1440
- Easier forcing DUMMY devices to appear online via the
devForceStatusfield - New
devVlan,devPrimaryIPv4,devPrimaryIPv6fields #1273 - Source fields showing which plugin discovered the value for a field
- The ability to lock select fields from being overwritten by plugins
- The ability to choose if a plugin overwrites a field via the
SET_ALWAYS/SET_EMPTYsettings - Logging the ipv4 and ipv6 should decrease the number of
IP Changednotifications on dual-stack setups #1273 - Auto-generated
/docsAPI playground by @adamoutler 🙏 - New
PIHOLEAPI_CONSIDER_ONLINEandPIHOLEAPI_GET_OFFLINEsettings to enable import of online devices only #1436 - Nix flake sample by @2m
- A new Raspberry Pi OS image by @adamoutler 🙏
✨Fixes and Improvements
- Better icon, device type heuristics for newly discovered devices (phone, smartplug, dyson devices)
- Fixed version display in footer #1320
- Ad-hoc plugin runs, tests and device deletion from the list view were not working #1419
What's Changed
- sync by @jokob-sk in #1321
- coderabbit parser and gemini instructions by @adamoutler in #1421
- Add system pytest and use it instead by @adamoutler in #1422
- php xdebug log location by @adamoutler in #1423
- speed up devcontainer remove extension by @adamoutler in #1427
- Enhance API_TOKEN retrieval instructions in tests by @adamoutler in #1431
- feat(api): MCP, OpenAPI & Dynamic Introspection by @adamoutler in #1429
- sync by @jokob-sk in #1432
- Refactor Dockerfile.debian for multi-stage build and hardening by @adamoutler in #1442
- Update Docker Compose capabilities for root-entrypoint by @adamoutler in #1451
- feat: Authoritative plugin fields by @jokob-sk in #1435
- Update INSTALLATION.md by @matt-shelley-IT in #1456
- Enable proxies on docs by @adamoutler in #1450
- Agentic Skills & Environmental Vars docs by @adamoutler in #1459
- Add nix flake by @2m in #1466
- Http sec fetch by @adamoutler in #1468
- Fix: ALWAYS_FRESH_INSTALL behavior by @adamoutler in #1470
- Tidy test scripts by @adamoutler in #1471
- Standardize and Optimize OpenAPI & MCP for AI Agents by @adamoutler in #1476
- Redirect from / to /docs by @adamoutler in #1477
- First run auto configure scan subnets by @adamoutler in #1478
- MCP Bridge Fixes & Dev Environment Automation by @adamoutler in #1480
- Remove logging driver from Docker Compose config by @adamoutler in #1483
- Update OpenAPI spec description with detailed info by @adamoutler in #1485
- MCP Enhancements: Named Totals, OpenAPI Resource, and Dev Skills by @adamoutler in #1484
New Contributors
- @matt-shelley-IT made their first contribution in #1456
- @2m made their first contribution in #1466
Full Changelog: v26.1.17...v26.2.4
v26.1.17 - 🔽 AdGuard Integration, Deployment Flexibility & MQTT Enhancements
Hey y'all 👋 ,
This release has a strong mix of new capabilities and long-requested fixes. Big thanks to continuous and new contributors.
The SNMP plugin now supports Fortinet / FortiGate devices, and the ICMP plugin now supports fping for faster scans. High-speed networks benefit from a new opt-in native binary for INTRSPD, and MQTT users can now receive full, rich notification payloads (matching webhook behavior) for events like new, down, and reconnected devices. This release also introduces AdGuard Home integration via a new import plugin, expands deployment flexibility with the return of PUID/GUID environment variables, and improves overall discovery accuracy.
Reverse-proxy setups are now more robust thanks to the new BACKEND_API_URL setting and improved documentation. MQTT now correctly supports anonymous connections, a new UI_LOCALE setting addresses browser-specific date quirks, and fake MAC addresses are clearly identifiable using the FA:CE: prefix.
As always, huge thanks to the community contributors who helped push this release forward — your PRs, testing, and feedback continue to make NetAlertX better with every iteration 🙏
See below for more detailed updates.
Screenshots
💔 Breaking changes
Sometimes I have to introduce breaking changes
docker-compose.yml updates
To add the GUID and PUID capability we had to add new permissions:
cap_add: # Add only the necessary capabilities
- NET_ADMIN # Required for ARP scanning
- NET_RAW # Required for raw socket operations
- NET_BIND_SERVICE
- CHOWN # 🆕new line
- SETUID # 🆕new line
- SETGID # 🆕new lineSee the updated docker-compose docs for details
For reverse proxies use the BACKEND_API_URL setting to point to your backend port
If SMTP not working as expected please navigate to Settings and do the following:
- Clear the existing
SMTP_PASSin the UI - Enter your
SMTP_PASS - Click Save
Warning
- ⚠DEPRECATED: The port of the sync nodes for the SYNC plugin will change to the value of the
GRAPHQL_PORTsetting. Both ports are currently supported, so please update your configuration to point to the new port in theSYNC_hub_urlandSYNC_nodessettings. - 🔺DEPRECATED: If you have implemented external applications using the OLD API endpoints, please migrate to the NEW API endpoints.
Some OLD endpoints are still present but they will be now removed in upcoming versions.
🆕New capabilities
SNMPDSCnow supportsFortinet/Fortigatesystems #1324INTRSPDnow supports opt-in native binary for high-sped internet connections (see docs on how to enable) - thanks to @amir0ff 🙏MQTTnow supports sending of full notification messages #1339- A new AdGuard import plugin
ADGUARDIMP#1341 - Re-introduction of
PUIDandGUIDenvironmental variables for more deployment options - thanks to @adamoutler 🙏 - The
ICMPplugin now supportsfpingvia theICMP_MODEsetting #1331
✨Fixes and Improvements
- For reverse proxies use the
BACKEND_API_URLsetting to point to your backend port - More robust error handling in the Network topology view #1323 #1308
- More robust handling of date-time stamps
YYYY.DD.MM#1312 - Backups of
app.conffiles created in wrong directory during settings save #1311 APP_CONF_OVERRIDEwas not applied #1328MQTTallows for anonymous connections #1358- A new
UI_LOCALEsetting to control date display as Chrome and Firefox behave differently when using the TZ #1335 - Fake MAC addresses will from now start with
FA:CE:to make it easily distinguishable and detectable #1344 - Better Reverse Proxy support and Authentik docs by @luckylinux 🙏
- New
NEWDEV_NAME_CLEANUP_REGEXdefaults to cleanup.home.arpanames #1383
🔝 Current priorities
- High priority: Settings, Workflows and Plugins core improvements
- Low priority: UI (PRs welcome, but follow guidelines)
What's Changed
- Fix typo in warning message for read-only mode by @mmomjian in #1317
- Change copy command to install with permissions by @adamoutler in #1332
- Remove dev branch from docker compose file by @KihtrakRaknas in #1333
- Fix pr 1309: Add OpenAPI Tools and MCP Server Bridge by @jokob-sk in #1326
- Add script to generate synthetic device inventory CSV by @adamoutler in #1338
- Devcontainer-devices by @adamoutler in #1340
- Allow other users (Non-Synology) by @adamoutler in #1363
- Improving mount diagnostics by @adamoutler in #1364
- Hybrid Speedtest implementation (Python-First with Native Opt-in) by @amir0ff in #1370
- Feature: Passive PUID/PGID Support & Startup Sequence Refactor by @adamoutler in #1381
- PUId fixes by @adamoutler in #1387
- Enable Root PUID; Add AUFS filesystem capability warnings and documentation by @adamoutler in #1393
- Fix Saving Changes in Devices Page. by @luckylinux in #1395
- [reverse proxy] Use getApiBase() to get GraphQL Endpoint for events by @luckylinux in #1397
- [reverse proxy] Use getApiBase() to get GraphQL Endpoint for front/deviceDetailsTools.php. by @luckylinux in #1396
- [reverse proxy] Use getApiBase() to get GraphQL Endpoint for System Information about Network by @luckylinux in #1398
- Add selenium to devcontainer by @adamoutler in #1399
- fix: root access PHP & Nginx by @adamoutler in #1400
- Add caddy and authentik sso documentation by @luckylinux in #1415
New Contributors
- @mmomjian made their first contribution in #1317
- @amir0ff made their first contribution in #1370
- @luckylinux made their first contribution in #1395
Full Changelog: v25.11.29...v26.1.17
v25.11.29 - 🛡 Enhanced security, PIHOLEAPI and changes in data folders
Hi everyone 👋 !
This release significantly improves the security of the application by running on a read-only filesystem. Because of this major internal change, manual migration steps are required. The user data Docker volume paths have moved from /app to /data, and a tmpfs mount is now required for all writable directories. Find a sample docker-compose.yml template below and read the Migration docs for details on how the permissions changed. Also ensure you re-save the settings after the migration (See details below on why).
A big thanks to @adamoutler who rewrote the installation scripts and created a comprehensive pre-initialization check, enhancing the code-base with linting checks, created a devcontainer to speed-up development and various other additions.
This version also adds a PIHOLEAPI plugin that leverages the new v6 API for device retrieval from your PiHole instance. Thank you to @leiweibau for the bulk of the code from his PiAlert project.
Thanks also to @JVKeller for help with the bare-metal install.
As always, thank you to all translators: @GitSpoon , @maksim2005UKR , @mapi68 , "R" , @Atalanttore , "anton garcias", @YoSafeguard , @AlmaziikDev , "jeet moh", @Blueberryy , @p-bo , @bo3bdo , "Carlos M. Silva"
Minimum required docker-compose.yml template:
services:
netalertx:
container_name: netalertx
image: "ghcr.io/jokob-sk/netalertx" # 🆕 This has changed
network_mode: "host"
cap_drop: # 🆕 New line
- ALL # 🆕 New line
cap_add: # 🆕 New line
- NET_RAW # 🆕 New line
- NET_ADMIN # 🆕 New line
- NET_BIND_SERVICE # 🆕 New line
restart: unless-stopped
volumes:
- /local_data_dir:/data # 🆕 This folder contains your /db and /config directories and the parent changed from /app to /data
# Ensuring the timezone is the same as on the server - make sure also the TIMEZONE setting is configured
- /etc/localtime:/etc/localtime:ro # 🆕 New line
environment:
- PORT=20211
# 🆕 New "tmpfs" section START 🔽
tmpfs:
# All writable runtime state resides under /tmp; comment out to persist logs between restarts
- "/tmp:uid=20211,gid=20211,mode=1700,rw,noexec,nosuid,nodev,async,noatime,nodiratime"
# 🆕 New "tmpfs" section END 🔼
See the Migration docs for details as the folders and files need to be owned by a 20211 user and group.
❗ Known issues:
- See open issues.
📃 Changelog
💔 Breaking changes
Sometimes I have to introduce breaking changes
- ⏰ Reminder: Due to code refactoring in order to upgrade to this version from a version before
v25.5.24, you have to upgrade tov25.5.24before upgrading to this version). See the upgrades docs for details. - 💔 Due to language string cleanup you will have to select your
UI_LANGagain and re-save your settings. - 💔 Due to the format of the
SMTP_PASSsetting changes you will have to re-save your settings. - 💔 The
TZ=Europe/Berlindocker variable was replaced by a more common approach mapping- v /etc/localtime:/etc/localtime:ro - 💔 Due to security hardening the docker container volume locations changed, from
/appto/dataand a newtmpfsmount for all writable directories was added. See Migration docs for details.
Warning
⚠️ UPCOMING: The port of the sync nodes for the SYNC plugin will change to the value of theGRAPHQL_PORTsetting. Both ports are currently supported, so please update your configuration to point to the new port in theSYNC_hub_urlandSYNC_nodessettings.⚠️ UPCOMING: If you have implemented external applications using the OLD API endpoints, please migrate to the NEW API endpoints.
🆕New capabilities
ARPSCAN_DURATIONsetting to runARPSCANfor a longer time to try to discover IoT or similar devices #1172- Device name in page titles #1162
UI_DEFAULT_PAGE_SIZEsetting to change the default page size #1181NEWDEV_IP_MATCH_NAMEsetting to disable name discovery and matching based on IP if you don't have static IPs on your networkPIHOLEAPIplugin to connect to your PiHole instance via API #1282- Notifications now contain a link to the server in the footer as per the
REPORT_DASHBOARD_URLsetting #1267
✨Fixes and Improvements
eventsnotifications enabled on theInternetroot node and using theSYNCplugin led to IP flipping #1207app.logline break fixLOG_LEVELnot respected #1217- Compound notification filters didn't work #1210
- The Device tile for
All devicesdidn't work properly #1238 SNMPDSCdidn't respect timeout settings #1231- Multi-edit preventing error if no devices selected #1219
SMTP_PASSdidn't allow for'quotes in passwords #1253- Devices with number-only names caused Network topology page error #1281
- You can now use the
--vlanparameter if you have bothNMAPDEVandARPSCANenabled #1264 - Performance optimizations of name lookups #1251
- Better invalid data handling of the
UNIFIAPIplugin #1224 - More robust args handling in the
NMAPplugin #1288 - Better SCHEDULE cron value validation #1306
🔝 Current priorities
- High priority: Settings, Workflows and Plugins core improvements
- Low priority: UI (PRs welcome, but follow guidelines)
🐞 Known issues
- See also 🚑 fixes below and the Issues tracker
If you have any debug info/suggestions regarding the above, please open a separate issue, thanks! 🤍
What's Changed
- fix: Support compound conditions in SafeConditionBuilder (Issue #1210) by @PreistlyPython in #1211
- Baremetal installer by @JVKeller in #1212
- Update timestamp format to use UTC timezone by @adamoutler in #1216
- Fix install script references in HW_INSTALL.md by @gonzague in #1213
- Update HW_INSTALL.md by @JVKeller in #1222
- Update README.md by @JVKeller in #1223
- Add script to regenerate the database from schema by @adamoutler in #1229
- Feat: Enterprise-Grade Security Hardening and Build Overhaul by @adamoutler in #1230
- Rename CONTRIBUTING to CONTRIBUTING.md by @AlmazzikDev in #1236
- Change branch back to main. by @JVKeller in #1237
- sync by @jokob-sk in #1244
- Hardening fixes by @adamoutler in #1235
- Security features overview by @adamoutler in #1247
- Easy permissions by @adamoutler in #1248
- Sync by @jokob-sk in #1249
- Fix typo in PiHole integration guide by @Tweebloesem in #1255
- update docker compose by @adamoutler in #1256
- BE: Remove GraphQL check from healthcheck by @jokob-sk in #1257
- BE: fix GRAPHQL_PORT by @jokob-sk in #1258
- BE: Devices Tiles SQL syntax error #1238 by @jokob-sk in #1260
- Next release by @jokob-sk in #1245
- Feat: make errors more helpful by @adamoutler in #1263
- Fix permissions on Synology by @adamoutler in #1268
- next_release by @jokob-sk in #1261
- sync by @jokob-sk in #1269
- sync by @jokob-sk in #1272
- Fix typo in Baseline Docker Compose - DOCKER_COMPOSE.md by @alexhk in #1278
- Pr 1279 by @jokob-sk in #1280
- Data and tmp standardization by @adamoutler in #1279
- Next release by @jokob-sk in #1271
- Fix: Fix for ports by @adamoutler in #1286
- Add missing .VERSION file by @adamoutler in #1287
- Add .VERSION to gitignore by @adamoutler in #1290
- Add VERSION file creation by @adamoutler in #1295
- Test fixes by @adamoutler in #1291
- Update Docker Compose documentation for volume usage by @adamoutler in #1296
- Improve CI code checks (URL path, Python syntax, linting, tests) by @adamoutler in #1289
- feat: docker-based testing by @adamoutler in #1299
- BE: linting fixes by @jokob-sk in #1300
*...
v25.10.1 - 📈Performance, UNIFIAPI, new API layer, SYNC port change
Hey everyone! 👋
Any contribution, big or small makes me incredibly grateful and happy. Currently going thru some bumps in life, so this release, with that many contributions, makes me breath easier and helps me focus on some necessary things outside of FOSS.
This release comes with lots of backend improvements and LOTS of contributions from the amazing @ingoratsdorf , @adamoutler, @PreistlyPython, @cvc90, @SantosSi , @ningmeng68 , @martinkuck , @FlyingToto , and @Virenbar 💙
To highlight biggest ones, @ingoratsdorf helped improve performance of the backend significantly - in some cases by over 50% in certain cases. This will be mostly felt on slower servers. He targeted disk writes, read access, and helped remove unnecessary setting changes checks.
Then @adamoutler swooped in to significantly improve the developer experience with a devcontainer setup and he is hardening the image, and fixing bugs all over the place.
On top of that more bare metal installation options are being worked on, the setup process is being streamlined, and security being hardened.
Hope everyone appreciates this release as much as I do.
Screenshots
💔 Breaking changes
Sometimes I have to introduce breaking changes
- Reminder: Due to code refactoring in order to upgrade to this version from a version before
v25.5.24, you have to upgrade tov25.5.24before upgrading to this version). See the upgrades docs for details.
Warning
⚠️ UPCOMING: The port of the sync nodes for the SYNC plugin will change to the value of theGRAPHQL_PORTsetting. Both ports are currently supported, so please update your configuration to point to the new port in theSYNC_hub_urlandSYNC_nodessettings.⚠️ UPCOMING: If you have implemented external applications using the OLD API endpoints, please migrate to the NEW API endpoints.
🆕New capabilities
- You can now change the default subject of the report emails via the
SMTP_SUBJECTsetting #1146 - A new
UNIFIAPIplugin that supports multiple sites and uses the UNIFI API directly (see disclaimer for supported use cases) - A new API layer with extensive documentation
✨Fixes and Improvements
- Better handling of non-existing parent nodes which prevented the devices list to load #1132
- Better handling of date time formats #1147
- Performance improvements by @ingoratsdorf 🙏 #1144
- Breaking and upcoming changes will be updated in #1150
- A relative URL in the Reports page was fixed thanks to @cvc90 so reverse proxies work as expected 🙏
- Muting SYNC plugin notifications if
LOG_LEVELset tominimalornone#1164
Previous releases:
https://github.com/jokob-sk/NetAlertX/releases
What's Changed
- Changing absolute path URL to relative path URL in report.php by @cvc90 in #1140
- Added cache to get_settings by @ingoratsdorf in #1151
- added a variant of example 2 as 5... by @FlyingToto in #1154
- Adding secondary cache to settings by @ingoratsdorf in #1156
- Enhance in-app tooltips for clarity by @adamoutler in #1165
- adding example 5 of docker compose (3rd try!) by @FlyingToto in #1155
- DB result iteration fix on empty result by @ingoratsdorf in #1167
- Ubuntu installer by @ingoratsdorf in #1166
- Add custom User-Agent header to requests in website monitor script by @cvc90 in #1171
- DB functions tidyup and streamlining by @ingoratsdorf in #1169
- Changing absolute path URL to relative path URL in deviceDetailsTools.php by @cvc90 in #1170
- Bare metal Installer rework by @ingoratsdorf in #1173
- Installer rework by @ingoratsdorf in #1174
- provide more descriptive reason for failure by @adamoutler in #1177
- clearPluginEvents by @ingoratsdorf in #1176
- Make it easier to find the corresponding log files by @adamoutler in #1183
- Ubuntu24 installer updates by @ingoratsdorf in #1186
- Change default encryption key to an empty string by @adamoutler in #1188
- feat: Devcontainer by @adamoutler in #1184
- Missed commit for devcontainer setup by @adamoutler in #1189
- Security: Fix SQL injection vulnerabilities (Issue #1179) by @PreistlyPython in #1182
- Fix log directory setup in setup.sh by @adamoutler in #1190
- Document standard plugin formats and logging practices by @adamoutler in #1192
- Improve I/O performance with ramdisks by @adamoutler in #1191
- Rework Logging in restart-backend.sh by @adamoutler in #1194
- Ubuntu 24 Installer rewrite by @ingoratsdorf in #1201
- make scheduler setup more robust against wrong scheduling by @ingoratsdorf in #1202
- Make plugin loader more robust by @ingoratsdorf in #1203
- Mqtt optimisations and TZ fixes by @ingoratsdorf in #1205
New Contributors
- @adamoutler made their first contribution in #1165
- @PreistlyPython made their first contribution in #1182
Full Changelog: v25.8.6...v25.10.1
v25.8.6 - Prometheus metrics endpoint, better icon, type guessing 📊
Hi selfhosters! ☁️
A small release to fix a couple of outstanding issues and a nice addition by @kllngtme contributing a Prometheus metrics endpoint and NetAlertX-like looking Grafana template 📊
I also managed to sneak in a better icon and type guessing mechanism, with an easy to maintain (and contribute to 😉 ) heuristics json file.
As always, see all the stuff that has changed below.
💔 Breaking changes
Sometimes I have to introduce breaking changes
- Reminder: Due to code refactoring in order to upgrade to this version from a version before
v25.5.24, you have to upgrade tov25.5.24before upgrading to this version). See the upgrades docs for details.
🆕New capabilities
- New Prometheus
<server>:<GRAPHQL_PORT>/metricsAPI endpoint with a Grafana template based on the work of @kllngtme 🙏 - The parent network node column in the devices list displays as a chip with hover-over info
- New heuristics JSON rules file to make icon and device type guessing more maintainable
- Heuristics:Device icon and type guessing docs
✨Fixes and Improvements
- Reworked device heuristics for guessing device icon an device type #1129
- Further performance improvements to the System info page by switching from
https://ifconfig.cotohttps://api64.ipify.orgwith a 10s timeout #1124 - Fixed the dummy/manual device creation #1126
- Fixed copying icons across devices of the same type #1128
- Fixed the loading overlay on the Tools tab on devices when returning to a different device #1130
- Fixed issue when creating new devices with number-only names #1131
- System info sub-menu items
Previous releases:
https://github.com/jokob-sk/NetAlertX/releases
Full Changelog: v25.7.30...v25.8.6
v25.7.30 - Relationship types and NICs support 🎨
Hi everyone! 👋
This release adds new ways to control device status via NICs, along with support for colored relationship types, including virtual devices. Children nodes are now shown on the device details page, complete with hover-over tooltips for quick insights.
The Network topology page has been redesigned with filtering, sorting, search, and hover-over info boxes for easier navigation 🔍. A new setting also allows you to hide specific relationship types from the main view 🛠️.
Additional improvements include available IP listings per subnet 📶, support for Apprise tags and non-SSL NTFY instances 📢, performance optimizations, translation updates 🌍, and various UI refinements for a smoother experience 🎨. See the full list of new capabilities, fixes, and improvements below.
A big thank YOU to all contributors to translations and code 🙏 :
Thanks to @dougmaitelli @fuad00 @slammingprogramming for code contributions 👨💻, and on the translations side, @kkumakuma for finalizing the Chinese translation 🥳 and @cosmicDustOfLightLength for a big push on the Polish one 🙌 as well as to ongoing translation maintenance by @slammingprogramming @ond000 @mapi68 @YoSafeguard @GitSpoon @Atalanttore @bo3bdo @Maksim2005UA2 @BekirKayraCigdem @ptsa @GoldBull3t @PrinsGeryha @Noschvie @mriosriquelme 🙏
💔 Breaking changes
Sometimes I have to introduce breaking changes
- Reminder: Due to code refactoring in order to upgrade to this version from a version before
v25.5.24, you have to upgrade tov25.5.24before upgrading to this version). See the upgrades docs for details.
🆕New capabilities
- New relationship type option to be configured for devices
- Colored relationship types to represent different types of connections and devices, such as NICs, virtual devices and more #724
- Rework of the Network topology page with Offline/Archived filters, search, ordering, hover info boxes and more
- Network node indicator of a network node via an icon
- A new
UI_hide_rel_typessetting to select which relationships to hide from the main devices lists - Device presence status override based on NICs
- Children devices and NICs shown on Device details screens with hover-over details peeking
- Filtering and sorting support added on the Network screen of Unassigned and Connected devices
- Added support for non-ssl self-hosted
NTFYinstances via theNTFY_VERIFY_SSLsetting #1117 - Hover-over details peeking in some devices views
- Added support for Apprise tags by @dougmaitelli 🙏 #1122
- List of available IPs per subnet in System info #1124
✨Fixes and Improvements
- Better icon and device type guessing from @slammingprogramming 🙏
- Incorrect volume fix in docker-compose by @fuad00 🙏
- Performance gains by adding DB indexes mostly on the Device details pages
- Device details tabs are only loaded on focus speeding up initial load time
- Last Seen (
devLastConnection) is now updated when the device was last connected, and not only when it switched from offline to online as this seems to be a more logical behavior - Network tree setup docs update
- Links opening in a new tab are marked with an arrow to prevent confusion when navigating the UI
- Small dark theme fixes
- Removal of now unnecessary VOIDED events detection that was causing missing-events in the presence views #1119
- Fix of double-bars for newly detected devices #1119
- Integrations / Device -> Plugins view only shows plugins with data to streamline the UI
- Better icon selector for custom device properties
Previous releases:
https://github.com/jokob-sk/NetAlertX/releases
Target release frequency:
- Monthly
What's Changed
- hotfix: invalid volume variable by @fuad00 in #1121
- Add support for Apprise Tags by @dougmaitelli in #1123
New Contributors
- @fuad00 made their first contribution in #1121
- @dougmaitelli made their first contribution in #1123
Full Changelog: v25.7.4...v25.7.30
v25.7.4 - Unifi hotfix 🩹
Quick hot-fix - left in some test code 🤦♂️
Thanks to @scalerow for quick report and fix 🙏
🔌Plugins
- Fix for
UNFIMPwhere I left some test code ✨
What's Changed
New Contributors
Full Changelog: v25.7.3...v25.7.4
v25.7.3 - 🌍 Arabic translation and various fixes
Hey everyone 👋,
This is a lighter release of some fixes I wanted to get out before implementing some bigger changes. I want to thank the community to help me translate NetAlertX into almost 15 languages! 🌐 The latest big addition is @bo3bdo for a full Arabic translation and @ond000 who started on the Czech translation. As always, thanks everyone keeping the translations up-to-date: @mapi68 @Atalanttoreweblate @Maksim2005UA @GitSpoon @YoSafeguard @slammingprogramming @oldmav
Any small contribution to translations or code helps to keep this project going - consistency is key! 🙂
Read on what additional fixes are included in this release. 🔽
💔 Breaking changes
Sometimes I have to introduce breaking changes
- Reminder: Due to code refactoring in order to upgrade to this version you have to run a previous version of the application (run
v25.5.24before upgrading to this version). See the upgrades docs for details.
🏘️ Community
- Huge thanks to @slammingprogramming for various fixes and @bo3bdo for a full Arabic translation 🆕
📚Docs updates
- A new docs article with workflow examples 🆕
⚙Settings
- Fixed incorrect
REFRESH_FQDNcheck in the device name discovery scanners #1081 ✨
🔌Plugins
- Fix for devices with number only names that were not sent via
MQTT#1102 ✨ - Fix for the
FREEBOXplugin by @mathoudebine #1084 ✨ - Fix for
VNDRPDTnot updating the vendor database #1080 ✨
🖼 UI
- Archived devices are now being hidden in the Network topology view ✨
Other Info
| 🆕 - New features | ✨ - Fixes & Improvements | ⚠ - Possibly breaking changes | 🧪 - Experimental/work in progress |
|---|
What's Changed
- Added buymeacoffee to FUNDING.yml and move it to the correct directory by @YouFoundAlpha in #1075
- Updating base image to Alpine 3.22 by @vladaurosh in #1076
- Update freebox.py: add missing entries in device_type_map by @mathoudebine in #1085
- Sanitize device fields and prevent crash with numeric hostnames by @slammingprogramming in #1089
- Revert "Sanitize device fields and prevent crash with numeric hostnames" by @slammingprogramming in #1091
- add documentation feedback issue template by @slammingprogramming in #1097
- Sanitize hostnames, macs, and vendor names before running .lower/.upper on them to prevent AttributeError by @slammingprogramming in #1098
- Docs overhaul by @slammingprogramming in #1099
- Improvements by @slammingprogramming in #1101
New Contributors
- @YouFoundAlpha made their first contribution in #1075
- @mathoudebine made their first contribution in #1085
- @slammingprogramming made their first contribution in #1089
Full Changelog: v25.6.7...v25.7.3
v25.6.7 - Legacy upgrade removal and Fully Qualified Domain Names 🆎
Hi everyone! 👋
To simplify code maintenance (the database.py file has been reduced from 1000 to 500 lines), I’ve removed legacy migration support from PiAlert and dropped support for older database upgrade paths.
There’s no impact if you're upgrading from version v25.5.24 to this release.
However, if you're on an older version, please upgrade to v25.5.24 first by pulling the previous image:
ghcr.io/jokob-sk/netalertx:25.5.24
Then restart the application.
Upgrading from PiAlert is still supported — just ensure you first run the v25.5.24 version before upgrading to the latest release.
New in this version:
- ✅ Auto-updated FQDN (Fully Qualified Domain Name) collection
- 🔍 New DIGSCAN plugin to collect FQDN via active scans
- 🛠️ Added init check under the Maintenance section to help debug startup issues
Big thanks to @johnwang16 for the reverse proxy fixes, and to everyone who submitted translations so quickly — @GitSpoon, @mapi68, @Maksim2005UA, @yunyi35 🙏
Hope you find the new features useful! As always, happy to hear your feedback here or on Discord.
💔 Breaking changes
Sometimes I have to introduce breaking changes
- Due to code refactoring in order to upgrade to this version you have to run a previous version of the application (e.g. run
ghcr.io/jokob-sk/netalertx:25.5.24before upgrading to this version). To simplify maintenance migration from PiAlert has been removed and previous PiAlert installations will have to run theghcr.io/jokob-sk/netalertx:25.5.24image for an automated migration. See the migration docs for details.
📚Docs updates
- Rewritten quick start guide ✨
⚙Settings
- A new
REFRESH_FQDNsetting to auto-update the Device Fully Qualified Domain Name (FQDN) #1065 🆕
🔌Plugins
DIGSCANnew Dig plugin from code refactoring 🆕
🖼 UI
- New Initialization check under Maintenance 🆕
devMacadded to workflow fields for more automation options 🆕
Other Info
| 🆕 - New features | ✨ - Fixes & Improvements | ⚠ - Possibly breaking changes | 🧪 - Experimental/work in progress |
|---|
What's Changed
- use relative paths for reverse proxy by @johnwang16 in #1071
Full Changelog: v25.5.24...v25.6.7







