Releases: deevus/pixels
v0.5.0
Highlights
Native Incus backend (now the default). Connect directly to a local or remote Incus daemon — no TrueNAS required. Console and exec go through the Incus WebSocket API, eliminating the SSH dependency for the default workflow.
Extensible sandbox architecture. pixels now uses a pluggable backend interface. Container lifecycle, exec, snapshots, and network policy are all defined by the sandbox.Sandbox interface, making it straightforward to add new backends.
TrueNAS remains fully supported as an alternative backend, selected via backend = "truenas" in config or PIXELS_BACKEND=truenas.
What's New
- Sandbox interface — new
sandbox.Sandboxcomposite interface (Backend,Exec,NetworkPolicy) with a registry for self-registering backends (sandbox.Register,sandbox.Open). - Incus backend — manages containers via the native Incus Go client. Supports local unix socket and remote HTTPS connections with TLS client certs. Exec/console uses Incus WebSocket API with terminal resize handling. Snapshots use native Incus snapshot API (storage-backend agnostic). Clone uses
CopyInstance. - Backend selection —
backendconfig key (default"incus"),PIXELS_BACKENDenv var, and new[incus]config section withsocket,remote,client_cert,client_key,server_cert, andprojectkeys. - Typed Status enum —
sandbox.Statusreplaces raw strings for container state.
Breaking Changes
- Removed CLI flags
--host,--api-key, and-u/--username. These were TrueNAS-specific and are now set via config file or environment variables (PIXELS_TRUENAS_HOST,PIXELS_TRUENAS_API_KEY,PIXELS_TRUENAS_USERNAME). - Removed disk cache (
~/.cache/pixels/). The sandbox backends query live state directly. Theinternal/cachepackage has been deleted.
Bug Fixes
- Console zmx command, provisioning executor, and start IP polling.
- TrueNAS exec respects
Rootflag and re-authorizes SSH key on auth failure. - Incus exec runs as configured user with proper shell wrapping and WebSocket IO.
- Network egress setup no longer fails on dpkg conffile prompts.
- Exec runs commands in a login shell with mise activation.
Full Changelog
v0.4.0
Highlights
Persistent sessions with zmx. pixels console now uses zmx for session persistence. Disconnect and reconnect to pick up where you left off — works cleanly with TUIs. Detach with Ctrl+\ or detach.
What's New
- zmx session persistence —
pixels consolecreates a named zmx session (default"console"). Reconnecting re-attaches to the same session. Use-s <name>for named sessions or--no-persistfor a plain shell. pixels sessionscommand — lists active zmx sessions in a container.- Detach alias — type
detachinside a session as a shortcut forCtrl+\. - Detach hint — sourced from
profile.dinside zmx sessions so users know how to detach. - Login shell for zmx — zmx sessions use a login shell so
profile.dscripts are sourced.
Improvements
- Extracted
Executorinterface fromprovision.Runnerfor testability. - Extracted shared helpers from
root.gointoresolve.go. - Embedded
pixels-profile.shinstead of inlining it. - Added
WriteContainerFileandReplaceContainerRootfstests. - Added
lookupRunningIPtests. - Used
resolveRunningIPconsistently in the sessions command.
Full Changelog
v0.3.0
Merge pull request 'feat: self-contained zmx provisioning' (#7) from …
v0.2.0
refactor: replace manual env overrides with caarlos0/env
v0.1.0
ci: add release workflow with GoReleaser and git-cliff changelog gene…