|
| 1 | +--- |
| 2 | +title: Introducing the Web Interface |
| 3 | +author: troglobit |
| 4 | +date: 2026-07-01 08:00:00 +0100 |
| 5 | +categories: [showcase] |
| 6 | +tags: [webui, restconf, management] |
| 7 | +image: |
| 8 | + path: /assets/img/webui-overview.png |
| 9 | + alt: The Infix web interface, Overview page |
| 10 | + show_in_post: false |
| 11 | +--- |
| 12 | + |
| 13 | +<!-- |
| 14 | + Screenshots captured from a Banana Pi BPI-R3 running Infix v26.06.0 (GA). |
| 15 | + Files in /assets/img/: webui-overview, webui-interfaces (Status list), |
| 16 | + webui-interface-detail, webui-configure, webui-tree, webui-maintenance, |
| 17 | + webui-netbrowse, webui-login. |
| 18 | +--> |
| 19 | + |
| 20 | +Infix has always been a *YANG-native* system: every setting lives in a |
| 21 | +model-backed datastore, reachable over the CLI, NETCONF, and RESTCONF. |
| 22 | +With [**v26.06**][release] we add a fourth way in: a built-in **web |
| 23 | +interface**. |
| 24 | + |
| 25 | +It is not a separate configuration path with its own quirks. The WebUI |
| 26 | +speaks [RESTCONF][rfc8040] to the same datastore as everything else, so |
| 27 | +what you see and change in the browser is exactly what the CLI and |
| 28 | +NETCONF see. One source of truth, now with a point-and-click front end. |
| 29 | + |
| 30 | +{: #fig1 width="800" } |
| 31 | +_**Figure 1**: The Overview page — system, board, vitals, connectivity, and addresses at a glance._ |
| 32 | + |
| 33 | +### A guided tour |
| 34 | + |
| 35 | +The landing page is **Overview**. Across the top sit *System |
| 36 | +Information* (hostname, contact, OS build), *Runtime* (uptime, memory, |
| 37 | +load), and *Board* (model, base MAC). Below, a *Key Vitals* panel with |
| 38 | +the hottest sensors (CPU, radios, SFP modules) sits beside *Disk |
| 39 | +Usage*, a *Connectivity* card (default gateway, Internet reachability, |
| 40 | +DNS, and time sync), and an *Addresses* summary. Enough to answer "is it |
| 41 | +healthy, reachable, and what is it?" without a click. |
| 42 | + |
| 43 | +The sidebar splits into three groups: **Status** for read-only |
| 44 | +operational data, **Configure** for changing settings, and |
| 45 | +**Maintenance** for the lifecycle tasks. |
| 46 | + |
| 47 | +#### Status at a glance |
| 48 | + |
| 49 | +If there is one screen to show a newcomer, it is **Interfaces**. It |
| 50 | +lists every interface with its state, and nests the members of a bridge |
| 51 | +directly underneath it, so you can see at a glance that `lan1`–`lan4` |
| 52 | +are bridged into `br0` and *forwarding*, while the uplink `wan` pulls a |
| 53 | +DHCP lease of its own. When an interface joins a bridge it becomes a |
| 54 | +bridge port, and the list reflects that: the status column shows the |
| 55 | +bridge port state (`forwarding`, `disabled`, …) rather than a plain |
| 56 | +up/down. |
| 57 | + |
| 58 | +{: #fig2 width="800" } |
| 59 | +_**Figure 2**: The Interfaces overview — bridge members nested under `br0`, each with its bridge port state._ |
| 60 | + |
| 61 | +Click any interface to open its detail page: link speed, duplex, PHY and |
| 62 | +PMD type, the supported and advertised link modes, and a counters panel |
| 63 | +that updates live. Other interface kinds show what matters for them: the |
| 64 | +station table and scan results for Wi-Fi, peer state for WireGuard, frame |
| 65 | +statistics for Ethernet. Alongside sit the familiar operational tables: |
| 66 | +routes, services, DHCP leases, LLDP and mDNS neighbours, and hardware |
| 67 | +sensors. |
| 68 | + |
| 69 | +{: #fig3 width="800" } |
| 70 | +_**Figure 3**: Interface detail — link info and live-updating counters._ |
| 71 | + |
| 72 | +#### Configuring the device |
| 73 | + |
| 74 | +**Configure** gives you curated pages for the everyday tasks: system |
| 75 | +settings, users and groups, interfaces, routing, firewall zones, and the |
| 76 | +DNS and NTP clients. The interface page, for instance, lays out your |
| 77 | +interfaces and their addressing at a glance (a LAN bridge here, DHCPv4 |
| 78 | +on the uplink there) and lets you edit one at a time instead of |
| 79 | +wrestling a giant form. |
| 80 | + |
| 81 | +Changes are staged, not applied blindly. You build up an edit and then |
| 82 | +choose **Apply** to load it into the running configuration, or **Apply & |
| 83 | +Save** to also persist it to startup: the same `running` versus |
| 84 | +`startup` model you know from the CLI, with an **Abort** to back out. |
| 85 | + |
| 86 | +{: #fig4 width="800" } |
| 87 | +_**Figure 4**: The Configure → Interfaces page, with staged Apply / Apply & Save._ |
| 88 | + |
| 89 | +#### Advanced: the full YANG tree |
| 90 | + |
| 91 | +Curated pages cover the common cases; they do not cover *everything*. |
| 92 | +For the rest there is **Edit all**, a navigable view of the complete |
| 93 | +YANG tree. Pick any node and the panel on the right renders an editor |
| 94 | +for it, generated straight from the model, right down to leaves the |
| 95 | +curated pages never touch. Nothing is hidden. |
| 96 | + |
| 97 | +{: #fig5 width="800" } |
| 98 | +_**Figure 5**: The advanced tree editor, here editing the NTP subtree._ |
| 99 | + |
| 100 | +#### Maintenance |
| 101 | + |
| 102 | +The **Maintenance** section handles the lifecycle bits. **Software** |
| 103 | +shows the two firmware slots with their versions and boot order, and |
| 104 | +installs a new image from a URL or an upload, with an optional reboot |
| 105 | +when it is done. **Backup & Support** downloads a configuration backup, |
| 106 | +restores one (older backups are migrated to the current format |
| 107 | +automatically), and produces a support bundle. Rounding it out are a |
| 108 | +**Logs** viewer, **Diagnostics**, and a guarded **System Control** for |
| 109 | +reboot, shutdown, and factory reset. |
| 110 | + |
| 111 | +Shortcuts to a web console and the network neighbour browser sit in the |
| 112 | +top bar, next to a light/dark theme toggle and the bundled User's Guide. |
| 113 | + |
| 114 | +{: #fig6 width="800" } |
| 115 | +_**Figure 6**: Firmware slots and boot order in the Maintenance section._ |
| 116 | + |
| 117 | +### Built to fit |
| 118 | + |
| 119 | +Infix runs on everything from a Raspberry Pi to industrial switches |
| 120 | +tucked into a cabinet with no Internet in sight, and the WebUI is built |
| 121 | +for that world: |
| 122 | + |
| 123 | +- **One static binary.** Written in Go with [htmx][htmx] for |
| 124 | + interactivity, it ships as a single executable with every template, |
| 125 | + stylesheet, script, and icon embedded. No Node build step, no runtime |
| 126 | + dependencies. |
| 127 | +- **Fully offline.** Every asset is served from the device itself; |
| 128 | + nothing is fetched from a CDN, so it works the same on an air-gapped |
| 129 | + network as it does on your desk. Even the User's Guide is on board. |
| 130 | +- **RESTCONF underneath.** The server is a thin translator: it turns |
| 131 | + page views into RESTCONF requests and renders the responses. Anything |
| 132 | + the WebUI does, you can script over the same API. |
| 133 | + |
| 134 | +### Try it |
| 135 | + |
| 136 | +Grab [**v26.06**][release] or later, then reach the device however suits |
| 137 | +you: point a browser straight at it (say `https://192.168.0.1` or its |
| 138 | +`hostname.local` name), or open <https://network.local> from any host on |
| 139 | +the same LAN. Any Infix device on the segment serves that page; behind |
| 140 | +it, a small neighbour browser walks the network over mDNS and lists every |
| 141 | +Infix device it can see, each linking straight to its web interface and |
| 142 | +console. Flip it to **All** mode and it shows every other mDNS responder |
| 143 | +on the segment too. Log in with your device credentials. |
| 144 | + |
| 145 | +{: #fig7 width="800" } |
| 146 | +_**Figure 7**: `network.local` in **All** mode — the whole mDNS neighbourhood, with the Infix gateway among it._ |
| 147 | + |
| 148 | +This first release lays the groundwork. Expect the curated pages to |
| 149 | +keep growing in the releases ahead. My colleague Mattias will follow up |
| 150 | +with a closer look at another v26.06 highlight, Wi-Fi roaming and mesh, |
| 151 | +so stay tuned. |
| 152 | + |
| 153 | +[rfc8040]: https://datatracker.ietf.org/doc/html/rfc8040 |
| 154 | +[htmx]: https://htmx.org |
| 155 | +[release]: https://github.com/kernelkit/infix/releases/tag/v26.06.0 |
0 commit comments