Skip to content

Releases

Tessa 0.2.4

Choose a tag to compare

@Keychrom Keychrom released this 31 Oct 16:57

Tessa 0.2.4

Tessa 0.2.4 is the final planned .deb release built against Zig 0.16 and
wlroots 0.19, and it may be the last Debian package release. Subsequent
Tessa versions target Zig 0.17 and wlroots 0.20; source and Arch
packaging continue after that transition.

This release rolls up the customization work through the 0.7 roadmap and the
first reliability-focused 1.0 work.

Highlights

  • Special workspaces: named hidden overlays independent of the scratchpad,
    with rule assignment, toggle/move bindings, IPC control, and per-output
    visibility.
  • Shell v2: composable bar modules and ordering, per-surface
    bar/launcher/popover/toast fonts and colors, PPM wallpaper shader sources,
    and layer-rule styling for the bar, popovers, and toasts.
  • Effect helper: a long-lived process protocol for per-window opacity,
    corner radius, blur, shadow, and border-width overrides, with ID/range
    validation, request coalescing, and fallback to rule visuals.
  • Config tooling: tessa-ctl config-check, config-diff, config-edit,
    and offline tessa --check-config [file].
  • Performance guardrails: tessa-ctl perf, frame_time_budget, and
    headless animation/full-effect benchmarks.
  • Reliability: pidfd-based built-in panel crash recovery with bounded
    backoff, IPC HELLO/VERSION/CAPABILITIES negotiation, strict 100 ms
    layout / 200 ms effect helper timeouts, parser fuzzing, and an ASan runtime
    pass.
  • Arch Linux validation: real eDP-1 DRM session, keyboard/mouse, IME, and
    XWayland clients; touchpad tuning and VRR remain hardware-specific follow-ups.

Verification

  • Full headless test suite passes, including the new panel recovery, IPC
    version, helper timeout, fuzz, shell v2, effect helper, performance, and
    config editor tests.
  • Plain and -Dscenefx=true builds compile; the scenefx performance test
    passes.
  • tests/fuzz-parsers.sh and tests/fuzz-asan.sh pass. Zig 0.16 has no
    compiler-level ASan instrumentation, so the ASan test is an allocator/
    interceptor pass over the Debug-safety build.

Install (Ubuntu 26.04 amd64)

curl -fLO https://github.com/Keychrom/Tessa/releases/download/v0.2.4/tessa_0.2.4_amd64.deb
curl -fLO https://github.com/Keychrom/Tessa/releases/download/v0.2.4/SHA256SUMS
grep ' tessa_0.2.4_amd64.deb$' SHA256SUMS | sha256sum -c -
sudo apt install ./tessa_0.2.4_amd64.deb

The binaries are unsigned; verify SHA256SUMS before installing.

Toolchain note

0.2.4 is the maintenance point for Zig 0.16 / wlroots 0.19. The next version
will update the build, packaging, CI, and compatibility matrix for Zig 0.17 and
wlroots 0.20. Users who need a newer toolchain after this release should build
from source or use the Arch package.

SHA-256:
4a4baabe05df23792294150eadf33ef8772bf87a98b7098135019b9bf0ee4486 tessa_0.2.4_amd64.deb

Tessa 0.2.3

Choose a tag to compare

@Keychrom Keychrom released this 29 Oct 09:29

Tessa 0.2.3

Tessa 0.2.3 fixes the VM-specific failures found on the Ubuntu 26.04
VirtualBox/vmwgfx test machine. The journal showed two independent problems:
the DRM hardware cursor plane was invisible, and client linux-dmabuf imports
failed with a fatal Wayland protocol error. The second problem made Kitty and
Firefox disconnect immediately after mapping.

Fixed

  • Invisible hardware cursor on VMs: Tessa now detects vmwgfx, vboxvideo,
    bochs, qxl, cirrus, and virtio_gpu before creating the backend and sets
    WLR_NO_HARDWARE_CURSORS=1 itself. This also covers a manual
    TESSA_DEBUG=1 tessa launch from a TTY, not just the GDM session script.
    The VM screenshot now shows the pointer over the Tessa panel and Kitty.

  • linux-dmabuf on vmwgfx: wlroots' wlr_renderer_init_wl_display() was
    silently creating linux-dmabuf v4 before Tessa's own guard ran. On vmwgfx,
    imports then failed with:

    Failed to close buffer handle for plane 0: Invalid argument
    importing the supplied dmabufs failed
    

    Tessa now creates wl_shm explicitly and only adds linux-dmabuf when the
    platform supports it. On vmwgfx clients fall back to wl_shm; Kitty stays
    mapped and usable. A linux_dmabuf = false config option and
    TESSA_ALLOW_LINUX_DMABUF=1 override are available.

  • Earlier 0.2.2 cursor work is included: default cursor restoration on
    layer-surface focus and default/left_ptr/arrow theme fallback.

Verified on the actual VM

  • Tessa 0.2.3 logs platform: virtual GPU detected; using software cursors
    and linux-dmabuf-v1 disabled on vmwgfx even without environment variables.
  • Kitty maps to WIN ... tessa-vm-023 and remains alive; no dmabuf import
    error follows.
  • A VirtualBox screenshot captured the Tessa panel and visible pointer.
  • Ubuntu rootfs runtime test, plain/scenefx builds, cursor-theme, spawn,
    XWayland, fractional-scale, Kitty, XIM, input, and smoke tests pass.

Install (Ubuntu 26.04 amd64)

curl -fLO https://github.com/Keychrom/Tessa/releases/download/v0.2.3/tessa_0.2.3_amd64.deb
curl -fLO https://github.com/Keychrom/Tessa/releases/download/v0.2.3/SHA256SUMS
grep ' tessa_0.2.3_amd64.deb$' SHA256SUMS | sha256sum -c -
sudo apt install ./tessa_0.2.3_amd64.deb

Then log out and select Tessa in the display manager, or run tessa from
the TTY. The WLR_NO_HARDWARE_CURSORS and dmabuf workarounds are automatic on
the affected virtual GPUs.

The binaries are unsigned; verify SHA256SUMS before installing.

SHA-256:
62c2b712bc1ce6efdb434a6f6fdada3a8a787a95f2e2ad0c50e1821c2c70fe36 tessa_0.2.3_amd64.deb

Tessa 0.2.2

Choose a tag to compare

@Keychrom Keychrom released this 28 Oct 20:34

Tessa 0.2.2

Tessa 0.2.2 fixes the remaining ways the pointer can become invisible over the
desktop and panel. It also handles virtual machines whose DRM cursor plane does
not render.

Fixed

  • Panel and wallpaper cursor: the compositor now restores the default
    cursor when pointer focus moves to a new layer surface. Previously a client
    could clear its cursor while leaving, and the panel (which does not set
    wl_pointer.set_cursor) would inherit the empty image indefinitely.
    Restoring on layer focus does not override a normal window's own cursor.
  • Cursor name fallback: Tessa checks for default, left_ptr, and arrow
    before setting the Xcursor image, and logs the selected name. Legacy
    xcursor-themes themes such as whiteglass only provide left_ptr.
  • VM cursor planes: tessa-session sets WLR_NO_HARDWARE_CURSORS=1
    automatically when systemd-detect-virt reports a virtual machine. Hardware
    cursors remain enabled on physical machines. Direct launches can use
    WLR_NO_HARDWARE_CURSORS=1 tessa.
  • Earlier 0.2.1 fixes are included: child signal reset, XWayland readiness
    for DISPLAY, startup-hook ordering, initial fractional scale, output
    policies on hotplug, and tracked-input cleanup.

What was not the cause

  • Setting the cursor before an output exists is safe: wlroots stores the
    xcursor manager/name and applies the image when the output layout gains an
    output.
  • Missing default in xcursor-themes alone does not force a NULL cursor in
    wlroots 0.19, which falls back to left_ptr. The explicit name selection and
    logging make this reliable and observable.
  • Terminal=true commands that exit immediately close their terminal by
    design; Kitty's desktop entry is Terminal=false.

Verification

  • Added tests/cursor-theme.sh, which synthesizes a theme containing only
    arrow and verifies the fallback log.
  • Existing spawn, XWayland, fractional-scale, Kitty, XIM, input, and smoke
    tests pass.
  • The .deb was installed in an Ubuntu 26.04 rootfs and runtime-tested with
    Kitty and a missing XWayland satellite.

Install (Ubuntu 26.04 amd64)

curl -fLO https://github.com/Keychrom/Tessa/releases/download/v0.2.2/tessa_0.2.2_amd64.deb
curl -fLO https://github.com/Keychrom/Tessa/releases/download/v0.2.2/SHA256SUMS
grep ' tessa_0.2.2_amd64.deb$' SHA256SUMS | sha256sum -c -
sudo apt install ./tessa_0.2.2_amd64.deb

Then log out and select Tessa in the display manager.

The binaries are unsigned; verify SHA256SUMS before installing.

SHA-256:
c09f2c57bcba450415ad9cc1362ba41038a32b458058e68c7c29f6abd9336b08 tessa_0.2.2_amd64.deb

Tessa 0.2.1

Choose a tag to compare

@Keychrom Keychrom released this 28 Oct 19:29

Tessa 0.2.1

Tessa 0.2.1 is a startup-environment patch release. It fixes how Tessa hands
signals, DISPLAY/XMODIFIERS, and the initial fractional scale to new
clients. It also adds regressions for spawn state, fake and real XWayland
readiness, late fractional scale, and Kitty startup.

Fixed

  • Spawn signal state: children no longer inherit Tessa's blocked
    SIGINT/SIGTERM mask or ignored signal dispositions such as SIGCHLD.
    This applies to terminals, panels, event hooks, layout helpers, and
    XWayland. A terminal launched from a binding, the launcher, or tessa-ctl
    now starts in the same signal state as one launched from a shell.
  • DISPLAY readiness: Tessa 0.2.0 exported DISPLAY before
    xwayland-satellite had created its X socket. 0.2.1 waits for the socket and
    only then publishes DISPLAY; it does not invent one when the satellite is
    missing. XMODIFIERS is likewise exported only with a ready X display and
    xim = true.
  • Initial fractional scale: Tessa now advertises wl_compositor v6, and
    new toplevels/layer surfaces receive their output's preferred fractional
    scale on their initial commit. Previously a window mapped after startup could
    start at scale 1 until an unrelated output scale change. Clients created
    after a wlr-randr --scale 1.5 change now receive 180/120
    (preferred_scale(180)) immediately.
  • Hotplug cleanup: output rules are applied when an output is added, and
    tracked libinput device listeners are detached during shutdown. These fixes
    were present in the 0.2.0 package build but missing from the matching source
    tree.
  • Launcher terminal commands: no code change was needed for quote handling;
    Tessa already escapes Terminal=true commands as terminal sh -c '...'.
    A command that exits immediately closes its terminal by design. Kitty's own
    kitty.desktop is Terminal=false.

Why Kitty can still disappear

Kitty needs a working EGL/GL stack. On a VM without 3D acceleration it can map a
window and then exit when EGL setup fails, even though Tessa is healthy. This is
the same limitation documented for 0.2.0. Use foot in that environment, or
install Mesa's software EGL and try LIBGL_ALWAYS_SOFTWARE=1. To confirm which
side exited, run Kitty from a foot terminal inside Tessa:

tessa-ctl spawn foot
WAYLAND_DEBUG=1 kitty

Tessa logs new toplevel when the window reaches the compositor; if the window
still closes, the client or its shell exited. See the terminal troubleshooting
section in the guide.

Install (Ubuntu 26.04 amd64)

curl -fLO https://github.com/Keychrom/Tessa/releases/download/v0.2.1/tessa_0.2.1_amd64.deb
curl -fLO https://github.com/Keychrom/Tessa/releases/download/v0.2.1/SHA256SUMS
grep ' tessa_0.2.1_amd64.deb$' SHA256SUMS | sha256sum -c -
sudo apt install ./tessa_0.2.1_amd64.deb

Then log out and select Tessa in the display manager.

The binaries are unsigned; verify SHA256SUMS before installing. Include
TESSA_DEBUG=1 logs, tessa-ctl state, tessa-ctl config, and GPU/distribution
details in bug reports.

SHA-256:
50ccec6d7d24133487d23d96de6c39e7c3590666041351d2150e59f8c4305b41 tessa_0.2.1_amd64.deb

Tessa 0.1.0

Choose a tag to compare

@Keychrom Keychrom released this 27 Oct 14:46

Tessa 0.1.0

Tessa の最初の公開リリースです。Zig + wlroots で書かれたタイル型 Wayland コンポジタで、専用のタスクバー、ランチャー、壁紙、通知、トレイ、クリップボード履歴、スクリーンショット UI を含みます。

主な内容

  • wlroots 0.19 / Zig 0.16
  • master、mosaic、grid、columns、custom レイアウト
  • 出力ごとのワークスペース、パネル、壁紙
  • 正規表現・論理式対応のウィンドウルール、ルール別ボーダー色
  • 出力別テーマ、名前付きレイアウトプロファイル
  • リーダーキー、名前付き入力モード、モードタイムアウト
  • 設定イベントルール、フック、JSON-RPC、JSON イベントストリーム
  • テーマロール、種類別アニメーション時間、視差効果低減フェード
  • XWayland(xwayland-satellite)、IME、タッチ/タブレット、ポインタ制約
  • セッションロック、idle、出力電源管理、出力設定の永続化

インストール

Ubuntu 26.04 amd64 用のバイナリパッケージを添付しています。

sudo apt install ./tessa_0.1.0_amd64.deb

ログアウトし、ディスプレイマネージャーのセッション選択で Tessa を選びます。手動で /usr/local にインストール済みの場合は、/usr/bin のパッケージ版と併存するため、どちらか一方に揃えてください。

必要に応じて xwayland-satellite、Fcitx5、PipeWire、xdg-desktop-portal-wlr を追加してください。詳細は同梱の GUIDE.md と README.ja.md にあります。

アセット

  • tessa_0.1.0_amd64.deb: バイナリパッケージ
  • tessa_0.1.0_amd64.buildinfo: ビルド情報
  • tessa_0.1.0_amd64.changes: Debian changes ファイル
  • SHA256SUMS: 上記アセットのチェックサム

ソースコードは GitHub の自動生成アーカイブから取得できます。

注意

  • このリリースのバイナリは署名されていません。SHA256SUMS を確認してからインストールしてください。
  • 実機の DRM/libinput 検証は継続中です。不具合報告には TESSA_DEBUG=1 のログ、tessa-ctl state、tessa-ctl config、GPU/ディストリビューション情報を添えてください。
  • 0.1.x の残項目(レイアウトヘルパー v2、設定差分エディタ、CI署名付きリリース)は今後のリリースで対応します。