Repository navigation
Releases
Tessa 0.2.4
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 offlinetessa --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, IPCHELLO/VERSION/CAPABILITIESnegotiation, 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=truebuilds compile; the scenefx performance test
passes. tests/fuzz-parsers.shandtests/fuzz-asan.shpass. 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.debThe 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
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=1itself. This also covers a manual
TESSA_DEBUG=1 tessalaunch 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 failedTessa now creates
wl_shmexplicitly and only adds linux-dmabuf when the
platform supports it. On vmwgfx clients fall back towl_shm; Kitty stays
mapped and usable. Alinux_dmabuf = falseconfig option and
TESSA_ALLOW_LINUX_DMABUF=1override are available. -
Earlier 0.2.2 cursor work is included: default cursor restoration on
layer-surface focus anddefault/left_ptr/arrowtheme fallback.
Verified on the actual VM
- Tessa 0.2.3 logs
platform: virtual GPU detected; using software cursors
andlinux-dmabuf-v1 disabled on vmwgfxeven without environment variables. - Kitty maps to
WIN ... tessa-vm-023and 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.debThen 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
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, andarrow
before setting the Xcursor image, and logs the selected name. Legacy
xcursor-themesthemes such as whiteglass only provideleft_ptr. - VM cursor planes:
tessa-sessionsetsWLR_NO_HARDWARE_CURSORS=1
automatically whensystemd-detect-virtreports 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
forDISPLAY, 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
defaultinxcursor-themesalone does not force a NULL cursor in
wlroots 0.19, which falls back toleft_ptr. The explicit name selection and
logging make this reliable and observable. Terminal=truecommands that exit immediately close their terminal by
design; Kitty's desktop entry isTerminal=false.
Verification
- Added
tests/cursor-theme.sh, which synthesizes a theme containing only
arrowand verifies the fallback log. - Existing spawn, XWayland, fractional-scale, Kitty, XIM, input, and smoke
tests pass. - The
.debwas 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.debThen 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
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/SIGTERMmask or ignored signal dispositions such asSIGCHLD.
This applies to terminals, panels, event hooks, layout helpers, and
XWayland. A terminal launched from a binding, the launcher, ortessa-ctl
now starts in the same signal state as one launched from a shell. - DISPLAY readiness: Tessa 0.2.0 exported
DISPLAYbefore
xwayland-satellitehad created its X socket. 0.2.1 waits for the socket and
only then publishesDISPLAY; it does not invent one when the satellite is
missing.XMODIFIERSis likewise exported only with a ready X display and
xim = true. - Initial fractional scale: Tessa now advertises
wl_compositorv6, 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 awlr-randr --scale 1.5change 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 escapesTerminal=truecommands asterminal sh -c '...'.
A command that exits immediately closes its terminal by design. Kitty's own
kitty.desktopisTerminal=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 kittyTessa 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.debThen 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
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署名付きリリース)は今後のリリースで対応します。