Skip to content

Releases: deevus/pixels

v0.5.0

02 Mar 12:41

Choose a tag to compare

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.Sandbox composite 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 selectionbackend config key (default "incus"), PIXELS_BACKEND env var, and new [incus] config section with socket, remote, client_cert, client_key, server_cert, and project keys.
  • Typed Status enumsandbox.Status replaces 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. The internal/cache package has been deleted.

Bug Fixes

  • Console zmx command, provisioning executor, and start IP polling.
  • TrueNAS exec respects Root flag 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...v0.5.0

v0.4.0

01 Mar 11:59

Choose a tag to compare

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 persistencepixels console creates a named zmx session (default "console"). Reconnecting re-attaches to the same session. Use -s <name> for named sessions or --no-persist for a plain shell.
  • pixels sessions command — lists active zmx sessions in a container.
  • Detach alias — type detach inside a session as a shortcut for Ctrl+\.
  • Detach hint — sourced from profile.d inside zmx sessions so users know how to detach.
  • Login shell for zmx — zmx sessions use a login shell so profile.d scripts are sourced.

Improvements

  • Extracted Executor interface from provision.Runner for testability.
  • Extracted shared helpers from root.go into resolve.go.
  • Embedded pixels-profile.sh instead of inlining it.
  • Added WriteContainerFile and ReplaceContainerRootfs tests.
  • Added lookupRunningIP tests.
  • Used resolveRunningIP consistently in the sessions command.

Full Changelog

v0.3.0...v0.4.0

v0.3.0

01 Mar 05:03

Choose a tag to compare

Merge pull request 'feat: self-contained zmx provisioning' (#7) from …

v0.2.0

28 Feb 05:03

Choose a tag to compare

refactor: replace manual env overrides with caarlos0/env

v0.1.0

27 Feb 12:21

Choose a tag to compare

ci: add release workflow with GoReleaser and git-cliff changelog gene…