Skip to content
Merged

sync #1603

Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
40 commits
Select commit Hold shift + click to select a range
c687507
Merge pull request #1589 from netalertx/next_release
jokob-sk Apr 4, 2026
8a07333
DOCS+LANG: hebrew
jokob-sk Apr 5, 2026
f7fc265
DOCS: dependency
jokob-sk Apr 5, 2026
c0d2daf
DOCS: cleanup
jokob-sk Apr 5, 2026
e1ad574
Merge pull request #1590 from netalertx/next_release
jokob-sk Apr 5, 2026
92f1508
DOCS: growtd
jokob-sk Apr 6, 2026
83de79b
Merge branch 'main' of github.com:netalertx/NetAlertX
jokob-sk Apr 6, 2026
5839853
Add Fritz!Box device scanner plugin via TR-064 protocol
sebingel Jan 29, 2026
0648e82
Add full i18n for Fritz!Box plugin description and settings
sebingel Apr 6, 2026
1d4fd09
Fix robustness issues in Fritz!Box plugin before PR
sebingel Apr 6, 2026
706ef1a
Fix incorrect connection status field mapping in Fritz!Box README
sebingel Apr 6, 2026
ae2dc92
LANG: Finnish
jokob-sk Apr 6, 2026
ee42d8b
Refactor Fritz!Box plugin: move imports to module level
sebingel Apr 6, 2026
bc66575
Add fritzconnection to install-specific requirements files
sebingel Apr 6, 2026
ca9a0ef
Update Fritz!Box plugin README metadata
sebingel Apr 6, 2026
13f840b
Refactor Fritz!Box guest WiFi MAC generation to use string_to_fake_mac
sebingel Apr 6, 2026
4b6203a
Add Fritz!Box plugin entry to docs/PLUGINS.md
sebingel Apr 6, 2026
ae089f5
Merge pull request #1592 from sebingel/fritzbox-plugin
jokob-sk Apr 6, 2026
3c8fd72
Translated using Weblate (Portuguese (Portugal))
AntonioOliveira2 Apr 6, 2026
2e8b793
Translated using Weblate (Catalan)
Apr 7, 2026
da9c5f1
DOCS: typos #1596
jokob-sk Apr 7, 2026
b96b170
Merge branch 'main' of github.com:netalertx/NetAlertX
jokob-sk Apr 7, 2026
548d237
DOCS: contributing
jokob-sk Apr 8, 2026
ef0d521
Merge pull request #1599 from netalertx/next_release
jokob-sk Apr 9, 2026
3ff128e
Translated using Weblate (French)
GitSpoon Apr 7, 2026
7827e24
Translated using Weblate (Russian)
YoSafeguard Apr 7, 2026
68e5b3c
Translated using Weblate (Turkish)
BekirKayraCigdem Apr 7, 2026
0e86284
Translated using Weblate (Italian)
mapi68 Apr 8, 2026
940cd50
Translated using Weblate (Arabic)
bo3bdo Apr 7, 2026
33c3e2f
Translated using Weblate (Portuguese (Brazil))
GoldBull3t Apr 7, 2026
924d70d
Translated using Weblate (Chinese (Simplified Han script))
ptsa Apr 7, 2026
0c6f5b2
Translated using Weblate (Spanish)
Apr 7, 2026
8230b23
Translated using Weblate (German)
Apr 7, 2026
9e605a5
Translated using Weblate (Japanese)
Apr 7, 2026
03891dd
Translated using Weblate (Polish)
Apr 7, 2026
ab45f28
Translated using Weblate (Ukrainian)
Apr 7, 2026
6044a41
DOCS: subnets
jokob-sk Apr 9, 2026
623fabd
DOCS: subnets
jokob-sk Apr 9, 2026
ea8e264
DOCS: subnets
jokob-sk Apr 10, 2026
c40d04b
PLG: AppEvents not clearing in DBCLNP
jokob-sk Apr 10, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion .github/workflows/mkdocs.yml
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,8 @@ jobs:
pip install \
mkdocs==1.6.0 \
mkdocs-material==9.5.21 \
mkdocs-github-admonitions-plugin==0.1.1
mkdocs-github-admonitions-plugin==0.1.1 \
mkdocs-glightbox

- name: Build MkDocs
run: mkdocs build
Expand Down
16 changes: 16 additions & 0 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,22 @@ Before opening a new issue:
- [Check Common Issues & Debug Tips](https://docs.netalertx.com/DEBUG_TIPS#common-issues)
- [Search Closed Issues](https://github.com/netalertx/NetAlertX/issues?q=is%3Aissue+is%3Aclosed)

---

## Contributing without coding knowledge

Writing code is not the only way how you can contribute to the project. Here are some ideas how you can help out otherwise:

- Help improving the documentation (text, typos, use cases, screenshots - all this makes things better)
- Share your favorite project on socials (see [Growth ideas](./GROWTH.md))
- Write a blog post, or a how-to set-up guide
- Write how it helped you to achieve something fun or interesting to simplify your personal or work life
- Help with the translation effort
- Running a nightly or dev build to test for bugs before they make it to the production release
- Report bugs and features with sufficient detail and care (super important to ease everyone's maintenance burden and minimize back-and-forth)
- running a projects test suite


---

## Use of AI
Expand Down
142 changes: 142 additions & 0 deletions GROWTH.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,142 @@
# 📈 NetAlertX Growth Playbook

If you like NetAlertX and want to help it grow, this is how.

This isn’t about spam or "growth hacks." It’s just getting the tool in front of people who already have the problem (manual network docs, blind spots, messy networks).

---

## 🎯 Who this is for

* **Homelabbers** → Proxmox, Unraid, Raspberry Pi setups
* **Self-hosters** → moving away from cloud / want local-first
* **Sysadmins / MSPs** → need visibility + fast onboarding

---

## 💬 Where to post (and how)

### Reddit (main channel)

Reddit works *if* you don’t sound like marketing.

**Subreddits**

* r/homelab
* r/selfhosted
* r/sysadmin
* r/networking

**What works**

* "Show r/homelab" / "I built this"
* Problem → solution
* Real screenshots or short GIFs

**Example**

> Tired of keeping network diagrams up to date?
> I deployed something that does it automatically.

**Avoid**

* Over-explaining
* Buzzwords
* "Check out my project!!!" energy

**Timing (rough guide)**

* Tue–Thu mornings (US time)

---

### Hacker News (Show HN)

Good fit because NetAlertX is:

* local-first
* privacy-focused
* actually useful

**Title**

> Show HN: NetAlertX – network documentation that updates itself

Be ready to answer:

* stack (Python / PHP / JS)
* how discovery works
* privacy / local scanning

---

### Awesome Lists

Low effort, long-term visibility.

Target:

* awesome-selfhosted
* awesome-homelab

Keep it simple:

> NetAlertX – automated network discovery and documentation with alerting

---

## 🎥 Content / creators

If you or someone else makes videos, these angles work:

* **First 5 minutes** → "it already found everything"
* **Before vs after** → manual vs NetAlertX
* **Docker setup** → show how easy it is

No need for overproduction—real usage > polished demos.

---

## ⚖️ Positioning (keep it simple)

When explaining NetAlertX, this is the mental model:

| | Manual Docs | Basic Scanners | NetAlertX |
| ------- | ----------------- | -------------- | ------------------------- |
| Updates | Manual / outdated | On demand | **Automatic** |
| Alerts | None | Limited | **New / unknown devices** |
| History | None | None | **Device timeline** |
| Effort | High | Medium | **Set & forget** |

---

## 🧑‍💻 MSP / professional angle

If you’re using it in real environments:

* Faster client onboarding
* Better visibility
* Less "what changed?" guessing

That’s the value—keep it grounded. And share your experience 🙏

---

## 🛠 Easy ways to help

* Star the repo
* Post a screenshot of your network
* Mention it when someone asks "how do you track devices?" or "how do you detect presence?"
* Write a quick "how I use it" post

---

## Final note

Authenticity matters more than reach.

If it feels like marketing, people ignore it.
If it feels like "this solved my problem," people pay attention.

Thanks a lot in advance!
- jokob
1 change: 1 addition & 0 deletions docs/PLUGINS.md
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,7 @@ Device-detecting plugins insert values into the `CurrentScan` database table. T
| `DHCPSRVS` | [dhcp_servers](https://github.com/netalertx/NetAlertX/tree/main/front/plugins/dhcp_servers/) | ♻ | DHCP servers | | |
| `DIGSCAN` | [dig_scan](https://github.com/netalertx/NetAlertX/tree/main/front/plugins/dig_scan/) | 🆎 | Dig (DNS) Name resolution | | |
| `FREEBOX` | [freebox](https://github.com/netalertx/NetAlertX/tree/main/front/plugins/freebox/) | 🔍/♻/🆎 | Pull data and names from Freebox/Iliadbox | | |
| `FRITZBOX` | [fritzbox](https://github.com/netalertx/NetAlertX/tree/main/front/plugins/fritzbox/) | 🔍 | Fritz!Box device scanner via TR-064 | | |
| `ICMP` | [icmp_scan](https://github.com/netalertx/NetAlertX/tree/main/front/plugins/icmp_scan/) | ♻ | ICMP (ping) status checker | | |
| `INTRNT` | [internet_ip](https://github.com/netalertx/NetAlertX/tree/main/front/plugins/internet_ip/) | 🔍 | Internet IP scanner | | |
| `INTRSPD` | [internet_speedtest](https://github.com/netalertx/NetAlertX/tree/main/front/plugins/internet_speedtest/) | ♻ | Internet speed test | | |
Expand Down
10 changes: 5 additions & 5 deletions docs/REMOTE_NETWORKS.md
Original file line number Diff line number Diff line change
Expand Up @@ -33,27 +33,27 @@ VPNs use virtual interfaces (e.g., `tun0`, `tap0`) to encapsulate traffic, bypas

> **Possible workaround**: Configure the VPN to bridge networks instead of routing to enable ARP, though this depends on the VPN setup and security requirements.

# Other Workarounds
## Other Workarounds

The following workarounds should work for most complex network setups.

## Supplementing Plugins
### Supplementing Plugins

You can use supplementary plugins that employ alternate methods. Protocols used by the `SNMPDSC` or `DHCPLSS` plugins are widely supported on different routers and can be effective as workarounds. Check the [plugins list](./PLUGINS.md) to find a plugin that works with your router and network setup.

## Multiple NetAlertX Instances
### Multiple NetAlertX Instances

If you have servers in different networks, you can set up separate NetAlertX instances on those subnets and synchronize the results into one instance using the [`SYNC` plugin](https://github.com/netalertx/NetAlertX/tree/main/front/plugins/sync).

## Manual Entry
### Manual Entry

If you don't need to discover new devices and only need to report on their status (`online`, `offline`, `down`), you can manually enter devices and check their status using the [`ICMP` plugin](https://github.com/netalertx/NetAlertX/blob/main/front/plugins/icmp_scan/), which uses the `ping` command internally.

For more information on how to add devices manually (or dummy devices), refer to the [Device Management](./DEVICE_MANAGEMENT.md) documentation.

To create truly dummy devices, you can use a loopback IP address (e.g., `0.0.0.0` or `127.0.0.1`) or the `Force Status` field so they appear online.

## NMAP and Fake MAC Addresses
### NMAP and Fake MAC Addresses

Scanning remote networks with NMAP is possible (via the `NMAPDEV` plugin), but since it cannot retrieve the MAC address, you need to enable the `NMAPDEV_FAKE_MAC` setting. This will generate a fake MAC address based on the IP address, allowing you to track devices. However, this can lead to inconsistencies, especially if the IP address changes or a previously logged device is rediscovered. If this setting is disabled, only the IP address will be discovered, and devices with missing MAC addresses will be skipped.

Expand Down
11 changes: 9 additions & 2 deletions docs/SUBNETS.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,15 @@ You need to specify the network interface and the network mask. You can also con
> If you don't see all expected devices run the following command in the NetAlertX container (replace the interface and ip mask):
> `sudo arp-scan --interface=eth0 192.168.1.0/24`
>
> If this command returns no results, the network is not accessible due to your network or firewall restrictions (Wi-Fi Extenders, VPNs and inaccessible networks). If direct scans are not possible, check the [remote networks documentation](./REMOTE_NETWORKS.md) for workarounds.

> If this command returns no results:
>
> - ✅ If you see output like `IPv4: (none)` or `Using 0.0.0.0`:
> - The interface was not detected correctly.
> - Fix: explicitly set the interface using `--interface=<name>`.
>
> - ❌ If the scan runs correctly but still finds no devices:
> - The network may not be accessible due to firewall, VLAN, or network restrictions (Wi-Fi extenders, VPNs, etc.).
> - If direct scans are not possible, check the [remote networks documentation](./REMOTE_NETWORKS.md) for workarounds.

## Example Values

Expand Down
4 changes: 2 additions & 2 deletions docs/WORKFLOWS.md
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
# Workflows Overview

The workflows module in allows to automate repetitive tasks, making network management more efficient. Whether you need to assign newly discovered devices to a specific Network Node, auto-group devices from a given vendor, unarchive a device if detected online, or automatically delete devices, this module provides the flexibility to tailor the automations to your needs.
The workflows module allows to automate repetitive tasks, making network management more efficient. Whether you need to assign newly discovered devices to a specific Network Node, auto-group devices from a given vendor, unarchive a device if detected online, or automatically delete devices, this module provides the flexibility to tailor the automations to your needs.

![Workflows diagram](./img/WORKFLOWS/workflows_diagram.png)

Below are a few examples that demonstrate how this module can be used to simplify network management tasks.
You can find a couple of use case examples in [Workflow Examples](WORKFLOW_EXAMPLES.md).

## Updating Workflows

Expand Down
4 changes: 2 additions & 2 deletions front/js/app-init.js
Original file line number Diff line number Diff line change
Expand Up @@ -126,7 +126,7 @@ function isAppInitialized() {

lang_shouldBeCompletedCalls = getLangCode() == 'en_us' ? 1 : 2;

// check if each ajax call completed succesfully
// check if each ajax call completed successfully
for (const call_name of completedCalls_final) {
if (getCache(CACHE_KEYS.initFlag(call_name)) != "true") {
_isAppInitLog(`[isAppInitialized] waiting on ${call_name} (value: ${getCache(CACHE_KEYS.initFlag(call_name))})`);
Expand Down Expand Up @@ -268,7 +268,7 @@ setTimeout(() => {
// page refresh if configured
const refreshTime = getSetting("UI_REFRESH");
if (refreshTime && refreshTime !== "0" && refreshTime !== "") {
console.log("Refreshing page becasue UI_REFRESH setting enabled.");
console.log("Refreshing page because UI_REFRESH setting enabled.");
newTimerRefreshData(clearCache, parseInt(refreshTime)*1000);
}

Expand Down
5 changes: 3 additions & 2 deletions front/js/ui_components.js
Original file line number Diff line number Diff line change
Expand Up @@ -590,6 +590,7 @@ function addOptionFromModalInput() {
* A MAC is considered fake if it starts with:
* - "FA:CE" (new synthetic devices)
* - "00:1A" (legacy placeholder devices)
* - "02:" (legacy placeholder devices)
*
* The check is case-insensitive.
*
Expand All @@ -600,8 +601,8 @@ function isFakeMac(macAddress) {
// Normalize to lowercase for consistent comparison
macAddress = macAddress.toLowerCase();

// Check if MAC starts with FA:CE or 00:1a
return macAddress.startsWith("fa:ce") || macAddress.startsWith("00:1a");
// Check if MAC starts with FA:CE or 00:1a or 02:
return macAddress.startsWith("fa:ce") || macAddress.startsWith("00:1a") || macAddress.startsWith("02:");
}


Expand Down
2 changes: 1 addition & 1 deletion front/php/templates/language/ar_ar.json
Original file line number Diff line number Diff line change
Expand Up @@ -805,4 +805,4 @@
"settings_system_label": "نظام",
"settings_update_item_warning": "قم بتحديث القيمة أدناه. احرص على اتباع التنسيق السابق. <b>لم يتم إجراء التحقق.</b>",
"test_event_tooltip": "احفظ التغييرات أولاً قبل اختبار الإعدادات."
}
}
32 changes: 16 additions & 16 deletions front/php/templates/language/ca_ca.json
Original file line number Diff line number Diff line change
Expand Up @@ -203,17 +203,17 @@
"Device_MultiEdit_MassActions": "Accions massives:",
"Device_MultiEdit_No_Devices": "Cap dispositiu seleccionat.",
"Device_MultiEdit_Tooltip": "Atenció. Si feu clic a això s'aplicarà el valor de l'esquerra a tots els dispositius seleccionats a dalt.",
"Device_NextScan_Imminent": "",
"Device_NextScan_In": "",
"Device_NoData_Help": "",
"Device_NoData_Scanning": "",
"Device_NoData_Title": "",
"Device_NoMatch_Title": "",
"Device_NextScan_Imminent": "Imminent...",
"Device_NextScan_In": "Proper scan en prop de ",
"Device_NoData_Help": "Si no surten dispositius desprès del scan, comproveu la configuracio de SCAN_SUBNETS i <a href=\"https://docs.netalertx.com/SUBNETS\" target=\"_blank\">documentacio</a>.",
"Device_NoData_Scanning": "Esperant el primer scan - això pot trigar alguns minuts desprès de la configuració inicial.",
"Device_NoData_Title": "Encara no s'han trobat dispositius",
"Device_NoMatch_Title": "No hi ha cap dispositiu que compleixi el filtre",
"Device_Save_Failed": "Problemes guardant el dispositiu",
"Device_Save_Unauthorized": "Token invàlid - No autoritzat",
"Device_Saved_Success": "S'ha guardat el dispositiu",
"Device_Saved_Unexpected": "Actualització de dispositiu ha retornat una resposta no esperada",
"Device_Scanning": "",
"Device_Scanning": "Escanejant...",
"Device_Searchbox": "Cerca",
"Device_Shortcut_AllDevices": "Els meus dispositius",
"Device_Shortcut_AllNodes": "Tots els nodes",
Expand All @@ -232,7 +232,7 @@
"Device_TableHead_FQDN": "FQDN",
"Device_TableHead_Favorite": "Favorit",
"Device_TableHead_FirstSession": "Primera Sessió",
"Device_TableHead_Flapping": "",
"Device_TableHead_Flapping": "Flapping",
"Device_TableHead_GUID": "GUID",
"Device_TableHead_Group": "Grup",
"Device_TableHead_IPv4": "IPv4",
Expand Down Expand Up @@ -323,7 +323,7 @@
"Gen_AddDevice": "Afegir dispositiu",
"Gen_Add_All": "Afegeix tot",
"Gen_All_Devices": "Tots els dispositius",
"Gen_Archived": "",
"Gen_Archived": "Arxivat",
"Gen_AreYouSure": "Estàs segur?",
"Gen_Backup": "Executar Backup",
"Gen_Cancel": "Cancel·lar",
Expand All @@ -334,16 +334,16 @@
"Gen_Delete": "Esborrar",
"Gen_DeleteAll": "Esborrar tot",
"Gen_Description": "Descripció",
"Gen_Down": "",
"Gen_Down": "Baix",
"Gen_Error": "Error",
"Gen_Filter": "Filtrar",
"Gen_Flapping": "",
"Gen_Flapping": "Flapping",
"Gen_Generate": "Generar",
"Gen_InvalidMac": "Mac address invàlida.",
"Gen_Invalid_Value": "S'ha introduït un valor incorrecte",
"Gen_LockedDB": "ERROR - DB podria estar bloquejada - Fes servir F12 Eines desenvolupament -> Consola o provar-ho més tard.",
"Gen_NetworkMask": "Màscara de xarxa",
"Gen_New": "",
"Gen_New": "Nou",
"Gen_Offline": "Fora de línia",
"Gen_Okay": "Ok",
"Gen_Online": "En línia",
Expand All @@ -361,7 +361,7 @@
"Gen_SelectIcon": "<i class=\"fa-solid fa-chevron-down fa-fade\"></i>",
"Gen_SelectToPreview": "Seleccioneu la vista prèvia",
"Gen_Selected_Devices": "Dispositius seleccionats:",
"Gen_Sleeping": "",
"Gen_Sleeping": "Dormint",
"Gen_Subnet": "Subxarxa",
"Gen_Switch": "Switch",
"Gen_Upd": "Actualitzat correctament",
Expand Down Expand Up @@ -591,8 +591,8 @@
"PIALERT_WEB_PROTECTION_name": "Activa l'accés",
"PLUGINS_KEEP_HIST_description": "Quantes entrades de Plugins s'han de mantenir a la història (per Plugin, no per dispositiu).",
"PLUGINS_KEEP_HIST_name": "Història dels Plugins",
"PRAGMA_JOURNAL_SIZE_LIMIT_description": "",
"PRAGMA_JOURNAL_SIZE_LIMIT_name": "",
"PRAGMA_JOURNAL_SIZE_LIMIT_description": "SQLite WAL (Write-Ahead Log) mida màxima en MB abans de desencadenar punts de verificació automàtics. Els valors més baixos (10-20 MB) redueixen l'ús del disc / emmagatzematge, però augmenten l'ús de la CPU durant les exploracions. Els valors més alts (50-100 MB) redueixen els pics de CPU durant les operacions, però poden utilitzar més memòria RAM i espai de disc. Default <code>50 MB</code> saldos ambdós. Útil per a sistemes formats per recursos com dispositius NAS amb targetes SD. Preguntes Freqüents - FAQ.",
"PRAGMA_JOURNAL_SIZE_LIMIT_name": "Límit de mida WAL (MB)",
"Plugins_DeleteAll": "Elimina tot (s'ignoraran els filtres)",
"Plugins_Filters_Mac": "Filtre de MAC",
"Plugins_History": "Historial d'Esdeveniments",
Expand Down Expand Up @@ -805,4 +805,4 @@
"settings_system_label": "Sistema",
"settings_update_item_warning": "Actualitza el valor sota. Sigues curós de seguir el format anterior. <b>No hi ha validació.</b>",
"test_event_tooltip": "Deseu els canvis primer abans de comprovar la configuració."
}
}
4 changes: 2 additions & 2 deletions front/php/templates/language/en_us.json
Original file line number Diff line number Diff line change
Expand Up @@ -400,11 +400,11 @@
"Login_Toggle_Info_headline": "Password Information",
"Maint_PurgeLog": "Purge log",
"Maint_RestartServer": "Restart server",
"Maint_Restart_Server_noti_text": "Are you sure you want to restart the backend server? This may casue app inconsistency. Backup your setup first. <br/> <br/> Note: This may take a few minutes.",
"Maint_Restart_Server_noti_text": "Are you sure you want to restart the backend server? This may cause app inconsistency. Backup your setup first. <br/> <br/> Note: This may take a few minutes.",
"Maintenance_InitCheck": "Init check",
"Maintenance_InitCheck_Checking": "Checking…",
"Maintenance_InitCheck_QuickSetupGuide": "Make sure you followed the <a href=\"https://docs.netalertx.com/INITIAL_SETUP/\" target=\"_blank\">quick setup guide</a>.",
"Maintenance_InitCheck_Success": "Application initialized succesfully!",
"Maintenance_InitCheck_Success": "Application initialized successfully!",
"Maintenance_ReCheck": "Retry check",
"Maintenance_Running_Version": "Installed version",
"Maintenance_Status": "Status",
Expand Down
Loading
Loading