Highlights
This release reworks the easywall web interface from the ground up. The hand-rolled CSS components have been replaced with DaisyUI 5.5 primitives, HTMX 2.0 powers a new generation of in-place interactions, and the visual palette has been redesigned for cohesion.
A new color concept
The previous orange-on-navy combination was complementary — striking, but visually noisy. The new "Aurora Operator" palette uses analogous cool tones throughout: deep slate-blue chrome with cyan-400 / teal-400 accents in dark mode, or white with cyan-600 / teal-600 in light mode. Status colors (emerald, amber, rose, sky) stay clearly distinct from the accent.
Live validation everywhere
Three editors now validate input as you type:
- Custom rules (
/custom) —nft --checkruns server-side viaPOST /custom/validate, per-line syntax errors surface inline - Blacklist & whitelist (
/blacklist,/whitelist) —net.ParseIP/net.ParseCIDRvalidate every line via the sharedPOST /iplist/validate - All editors fall back to a soft notice when the core daemon is offline
Auto-save and toast feedback
The Options, Network, and System pages no longer require clicking Save. Toggle a switch or change a numeric input and the form posts in the background; a small toast in the bottom-right confirms ("Saved" / "Save failed"). The Save button is preserved for graceful degradation when JavaScript is disabled.
Audit log filter
The audit log page now has a search box that filters rows live (case-insensitive substring across action / rule type / detail / user) via GET /log/filter.
Component overhaul
All 15 templates were migrated to DaisyUI primitives — cards, buttons, alerts, fieldsets, toggles, tables, badges, tabs, steps. The custom CSS in web/src/app.css now contains only layout-specific chrome (sidebar, topbar, auth pages, status dots, audit log action tags).
Fixed
- Custom rules in
state.Current.Customare now actually applied to the nftables kernel after the typed-rules flush
Compatibility
No breaking changes. Configuration files, IPC protocol, and on-disk state are compatible with v2.2.0.
Full changelog
See CHANGELOG.md for the complete list, or browse the v2.2.0…v2.3.0 diff.
🤖 Generated with Claude Code