Display preferences

fbxctl

One Freebox control engine across a command line, terminal interface and native Mac app.

fbxctl native Mac interface showing a synthetic Home profile, DHCP resources and an inspector, with Demo labels visible

Native macOS interface · synthetic Demo captured 14 October 2026

Stack · TypeScript · Bun · OpenTUI · Swift · SwiftUI

Problem & context

Administering several Freebox devices means keeping the selected device, access mode and available evidence clear before making a change. A script, a terminal session and a native app need to follow the same operation rules. This is an unofficial tool, unaffiliated with Free or Iliad.

My contribution

Developed a shared typed engine for profiles, resource inspection and reviewed configuration changes. Connected a scriptable CLI and OpenTUI interface to that core, then built a SwiftUI Mac app around the bundled CLI. Added resource-based editing, a review of current and requested settings, and retained results tied to the selected device and access mode.

Decisions & tradeoffs

Keep one operation engine across all three interfaces.

Let each interface use its own presentation while sharing device identity, confirmation and result semantics. The native app delegates operations to its bundled CLI instead of maintaining a second set of router rules.

Bind a change to the exact reviewed device and current state.

Require an unexpired plan and exact confirmation, re-read before dispatch and reject changed or replayed plans. If a dispatched operation cannot be verified, retain an uncertain result that requires checking before another attempt.

Outcome

Implemented a consistent workflow for profiles, resource inspection and reviewed changes across CLI, terminal and native Mac interfaces. The presentation uses synthetic data from the local pre-release application.

Additional images

Synthetic Studio profile in remote mode with denied port redirects and unknown incoming ports shown as separate evidence states
Native Demo · denied and unknown reads remain distinct; no router contacted
Synthetic port-redirect review with before and requested values, exact confirmation and a disabled apply control
Native Demo · synthetic change review; this screen cannot write to a Freebox
Selected work / of 15