ロードマップ
Tessa は意図的に小さく保っています。ロードマップは「日本語で日常的に使える デスクトップ」に必要なものから、その後の磨き込みへと並べています。
ツールチェーン移行(0.2.5 で完了)
Section titled “ツールチェーン移行(0.2.5 で完了)”0.2.4 は Zig 0.16 / wlroots 0.19 でビルドする最後の .deb リリースでした。
0.2.5 のソースツリーは Zig 0.17、wlroots 0.20、scenefx 0.5 を
対象にしています:
-
@cImportを外部のtranslate-cパッケージと、コンポジタ/パネル/ CLI 用の明示的なヘッダーモジュールへ置き換える。 - wlroots 0.20 のシグナル名変更、出力タイムスタンプ、生成された wayland-protocols enum ヘッダーへ対応する。
- scenefx のブラーを、クライアント/レイヤー/IME ポップアップ用の
透過マスク付き
wlr_scene_blurノードとして再実装する。 - Zig 0.17 のビルドシステムへ更新し、削除された標準ライブラリ API を 置き換える。
- Arch パッケージを公式の
zigとwlroots0.20へ更新する。 - 新しいツールチェーンで headless スイート全体を plain/scenefx の 両構成で実行する(Arch Linux、Zig 0.17.0 / wlroots 0.20.2 / scenefx 0.5)。ポータルの ScreenCast、トレイ、通知、ポインタ操作を含む。
- 次のソースリリース前に、新しいツールチェーンで実機の DRM/libinput セッションを実行する。
- パッケージ更新に合わせて CI と互換性表を更新する。
0.2.4 は 0.16/0.19 の保守基準として残ります。新規作業は 0.17/0.20 を対象に、 パッケージ、ドキュメント、互換性表をまとめて更新してください。
外部シェル互換性
Section titled “外部シェル互換性”移行ユーザーが使い慣れたバーやランチャーを維持しつつ、既定は Tessa Panel の ままにします。
- layer-shell のバー/ランチャー(Waybar、Wofi、Quickshell)、排他ゾーン、
ポップアップの画面内制約、
EXCLUSIVE/ON_DEMANDキーボードフォーカス、 出力切断時の安全な layer teardown。 - 出力ごとに 9 ワークスペースを持つ
ext-workspace-v1グループと activate 要求。Waybarext/workspacesと QuickshellWindowManagerが 動作。 - タスクバー向け foreign-toplevel の output enter/leave 追従。
- Quickshell の任意機能向け:
keyboard-shortcuts-inhibit-v1とwlr-gamma-control-v1。
描画・ゲーム機能
Section titled “描画・ゲーム機能”ゲームや全画面動画のためにコンポジタの差を縮めつつ、既定のデスクトップを 安全に保ちます。
- 出力別のフレーム時間、presented/zero-copy/vsync/missed、scanout、
tearing カウンタ。
tessa-ctl perf --watchとtessa-ctl rendering。 - 出力全体を覆うフルスクリーンクライアントの direct scanout。1 エントリ で scanout できる間は背景、下位 layer、他の可視クライアント、対象の blur node を退避。
- オプトインの
wp-tearing-control-v1。ウィンドウルール、ドライバー 向け test-commit、通常 flip へのフォールバック付き。 - renderer/backend の timeline と backend の DRM fd がある場合の
linux-drm-syncobj-v1explicit sync。 - HDR/color management の調査: wlroots 0.20 は color-management v1 と 出力色変換を提供するが、Tessa の GLES2/scenefx 経路と tone mapping の 不在のため、Vulkan renderer の設計が先。
- Vulkan renderer での HDR 出力と tone mapping。
- scanout、tearing、explicit sync の GPU/ドライバー検証マトリクス (Intel i915、AMD、NVIDIA、vmwgfx)。
レイアウトの拡充
Section titled “レイアウトの拡充”Niri や MangoWC とのレイアウト差を埋めつつ、既定の使い勝手は変えません。
従来の 4 モードと 4 モードの Super+T 巡回が既定のままです。
- Scrolling レイアウト: Niri 風の横カラム列。複数窓カラム、割合/固定幅、 幅プリセット、最大化、フォーカス中央寄せ、consume/expel、グループの タブ付きカラムに対応。
- viewport のアニメーション追従(
animation_view_ms)と、ワークスペース/ 出力別のdefault-column-width、center-focused-column調整。 - Monocle レイアウトと Deck 型 Stacking(マスター領域 + 重ねたカード)。
- 挿入による動的並べ替え(
reorder、swap)、方向移動、Scrolling カラム 内のウィンドウ移動。 - マウス操作: Super+左ドラッグでタイルを並べ替え、ドロップ先を ハイライト。Scrolling ではカラム挿入として扱います。Super+ホイールで viewport をスクロール。
-
VIEW/COL状態行、JSON フィールド、カラム・consume/expel・swap・ reorder のtessa-ctlラッパー。 - 実際の DRM/libinput セッションで Scrolling、ドラッグ並べ替え、 ホイールスクロールを検証(フラクショナルスケーリングとタッチパッド ジェスチャを含む)。
拡張 API とシェルの基盤
Section titled “拡張 API とシェルの基盤”プロセス方式の拡張モデルを維持しつつ、拡張に identity、順序、可視状態を 与えます。
- line、JSON-RPC、state/config、layout、effect、extension の
バージョンを
src/api.zigに集約。 - 設定で宣言する監視付き拡張: API バージョン、token スコープ、
requires/afterの依存ソート、pidfd 再起動バックオフ、 ライフサイクルイベント、tessa-ctl extensions、JSON 状態。 -
panel_modulesによる background、bar、launcher、popovers、 notifications、toasts、tray、media、audio の所有権分離。 通知所有者の制御と、マスク変更時の supervisor 再起動を含む。 - 拡張一覧ポップオーバーと実行時 enable/disable。
- 拡張 API v1 の安定化: fail-closed HELLO、トークン回転と失効、 ready timeout、依存の ready 待ちと起動順、JSON 診断、適合テストと 安定性契約。
- effect helper v2: key=value の部分上書き、tint、ウィンドウ別 アニメーション時間/カーブ、v1 互換。
-
animation_view_curve、effect の last-applied キャッシュ、effect_applies/effect_skips/blur_nodesカウンタ。 - uniform 付きの常駐背景シェーダーフレームストリーム。
- custom renderer 設計によるウィンドウ単位 GPU シェーダー。
- スキーマ駆動の拡張設定フォームと実行時設定の永続化。
- サンドボックス、署名、marketplace/更新機構。
0.1.x — 土台を信頼できるものにする
Section titled “0.1.x — 土台を信頼できるものにする”- 対象マシンで DRM + libinput を実行し、レイアウトと入力の問題を直す。 Arch Linux 実機の eDP-1 DRM セッション、キーボード/マウス、IME、 XWayland クライアント、内蔵バーで確認済み。タッチパッドのデバイス別 調整と VRR/Adaptive Sync はハードウェア固有の追加項目として残す。
- バーのワークスペースクリック、ウィンドウチップの右クリック終了、
フローティングのドラッグ/リサイズ、クリックでフォーカス、
ランチャー入力の headless 自動テスト
(
tests/interaction.sh、wlr-virtual-pointer-v1を使用)。 - フルスクリーン、xdg クライアントポップアップ、クリップボード、
複数ウィンドウのフォーカスを
tests/interaction.sh、tests/popups.sh、tests/clipboard.shで検証。実際のマウス/ キーボードは上記の Arch DRM 実機検証で確認済み。 - フローティング/リサイズ後の一時的な再描画漏れを修正する。対話操作の 終了時に再配置して最終ジオメトリを公開するようにはしたが、ドラッグ中 の見た目の検証には実ディスプレイが必要。
- headless コンポジタを起動して状態/IPC と拡張フックを検証する小さな
統合テストを追加する(
tests/smoke.sh)。 - ライセンスを決定する(MIT)。
- Arch PKGBUILD と Debian パッケージ定義。ビルドと依存関係で wlroots のバージョンを明示的に固定。
- CI でビルド・署名されたパッケージとリリース成果物。
0.2 — 入力とアプリケーション
Section titled “0.2 — 入力とアプリケーション”-
zwp_text_input_v3+input-method-v2対応(Fcitx5/Mozc)。入力 ポップアップの配置とランチャーでの IME 入力を含む。 -
xwayland-satelliteによる XWayland。ディスプレイの自動選択、DISPLAYのエクスポート、xdg-decoration、headless 起動用の フォールバックキーボードを含む。 - layer-shell ポップアップの描画(サードパーティ layer クライアントの メニューなど)。
- 設定でのキーボードレイアウト、バリアント、モデル、オプション、 キーリピート設定。
- タッチパッドジェスチャ: ワークスペーススワイプとランチャー スワイプ。指の本数としきい値を調整でき、それ以外のジェスチャは クライアントへ転送。
- タッチ入力(seat の touch capability、シーンのヒットテスト、 パネルのタッチ UI)と tablet-v2 のツール/パッド(筆圧、傾き、 回転、ボタン、リング、ストリップ)。実機のタッチ/タブレットでの 検証は別途必要。
- relative pointer(
relative-pointer-v1)。 - pointer constraints(
pointer-constraints-v1)。フォーカス時の 有効化、locked/confined のポインタ移動、カーソルヒントに対応。 - primary selection(
wlr_primary_selection_v1)。 - X11 アプリケーション向けの XIM 統合。
XMODIFIERSのエクスポート、 X ディスプレイの待機、設定した XIM サーバの起動に対応。
0.3 — シェルとデスクトップ統合
Section titled “0.3 — シェルとデスクトップ統合”- すべての出力にバーを表示し、出力ごとのアクティブワークスペースを 持つ。
- プロセスベースの拡張 API:
tessa-ctl、構造化イベントストリーム、 設定フック、起動コマンド。 - クリックコマンド付きのカスタムバーステータス。
- 設定 include とカスタムランチャー項目。
- バッテリーとネットワーク表示。
- MPRIS メディアチップと操作。
- トレイ / StatusNotifier 連携: watcher/host、項目アイコン、ステータス、 アクティベート、キーボード操作のトレイポップオーバー。DBusMenu は未対応。
-
wpctl/pactl/amixerによる音量操作。バー表示、ポップオーバー、 コマンド上書き設定に対応。 - カレンダー/時計ポップアップ。
- 電源メニュー(ロック/サスペンド/再起動/電源オフのコマンドを設定可能)。
- セッションロック(
ext-session-lock-v1)。 - idle-inhibit、idle 通知、出力電源管理(外部の swayidle/wlopm)。
- スクリーンショット UI(
wlr-screencopyによる範囲/全画面撮影と PNG 保存)。 -
xdg-desktop-portal連携と PipeWire による画面共有: screencopy、 linux-dmabuf、出力キャプチャソース、image-copy capture、 foreign-toplevel リスト、xdg-desktop-portal-wlr用のtessa.portalセレクタ。モニターの ScreenCast は端から端までテスト済み。 ウィンドウ単位のキャプチャはポータルバックエンドのプロトコル対応に依存。 - 通知デーモン(
org.freedesktop.Notifications、トースト、置換/閉じる/ 期限切れ、アクションボタンとdefaultアクティベート、 image-data/icon-name アイコン、Pango マークアップ、フォーカス出力への ルーティング対応)。 - テキストのクリップボード履歴(
wlr-data-control-v1、メモリ上のみ)。
0.4 — 見た目とレイアウトの深化
Section titled “0.4 — 見た目とレイアウトの深化”- ウィンドウの開く/ワークスペース切り替えアニメーション。
animations、animation_ms、reduce_motionで制御。 - コンポジタ起点のウィンドウを閉じるアニメーションと、スケール/フェードの 終了スナップショット。
- 既定の scenefx 0.5 レンダラーによる角丸と背景ブラー
(GLES2。
-Dscenefx=falseで plain wlroots シーン)。 - レイヤー化したシーンジオメトリによるウィンドウのドロップシャドウ
(
shadows = true)。 - バーの高さ、マージン、フォント、パレットのテーマ/設定。
- 設定可能な壁紙グラデーション(
bg_top/bg_bottom)と アート表示の切り替え(wallpaper_art)。 - グリッドと等幅カラムのレイアウト、ワークスペースごとのレイアウト プロファイル、実行中のレイアウト巡回。
- モザイクの最小サイズ時のフォールバックとフローティングの キーボードリサイズ。
- 実行中のワークスペース別レイアウトの永続化と、既存出力への設定 再読み込み反映。
-
wlr-output-management-v1(wlr-randr)による出力モード/位置/スケール設定。 - 整数倍出力スケール向けの HiDPI パネルバッファスケーリング。
- 出力モード、位置、スケール、変換の再起動後の復元。
-
wp_fractional_scale_v1によるフラクショナルなデスクトップ スケーリング(実行中のスケール変更を含む)。XWayland のスケーリングは xwayland-satellite の fractional-scale 対応を利用。 -
workspace_pinによるマルチモニタのワークスペース固定と、出力を またぐウィンドウ移動。
0.5 — 深いカスタマイズ
Section titled “0.5 — 深いカスタマイズ”- 宣言的ウィンドウルール(app-id/タイトル/出力パターン、フローティング、 フルスクリーン、ワークスペース、サイズ、位置アクション)。
- 設定再読み込み時のルール再評価。
- レイアウト調整: マスター数、モザイク比率/最小サイズ、グリッド固定列数。
- アクティブ/非アクティブのボーダー色。
-
tessa-ctl configによる実効設定と解析済みルールの確認。 - ワークスペース別のレイアウト/隙間/マスター比率ルール。
- 出力別のレイアウト/隙間ルール(
output-rule、任意のws=)。 出力+ワークスペース指定はワークスペースルールより優先。 - タイムアウト、再起動、内蔵フォールバックを備えた常駐外部レイアウト ヘルパープロトコル。
- 設定可能なアニメーション/エフェクトフック(
animation-start、animation-done、close-animation-start、close-animation-done)。 - 行番号付きの設定バリデーション、
tessa-ctl config-check、 失敗時に旧設定を維持するトランザクショナルなリロード。 - スキーマ
1を文書化した JSON 状態/設定出力。
0.6 — カスタマイズの深化
Section titled “0.6 — カスタマイズの深化”- 正規表現/論理式によるウィンドウルールと、ルール別の装飾色。
- 名前付き入力モードとモード固有バインド、
enter-mode。 - リーダーキー/コードシーケンスとモードごとのタイムアウト。
- 出力別のテーマルールと、名前付きワークスペース/出力プロファイル。
- レイアウトヘルパー v2: 出力別インスタンス、非同期/合流更新、 フォーカス/緊急度メタデータ、プロトコルバージョンネゴシエーション。
- 設定によるイベント→アクションルール(ポリシー自動化)。
- テーマロールシステムと、視差効果低減設定に対応したアニメーション。
- JSON-RPC/イベントストリームのリクエスト ID とケイパビリティ交渉。
- 差分プレビュー付きの対話型設定エディタ/チェッカー。
0.7 — カスタマイズ性の同等以上
Section titled “0.7 — カスタマイズ性の同等以上”Hyprland/Niri の主要なカスタマイズ面を、単一の検証済み Tessa 設定から表現 できるようにすることを目標にします。JavaScript やプラグイン VM は埋め込まず、 ライブリロードとプロセスプロトコルで拡張します。0.6 の 2 項目 (レイアウトヘルパー v2、差分プレビュー付き設定エディタ)は完了しており、 0.7 はその上に構築します。
- inotify による設定自動リロード。デバウンスとトランザクショナルな検証を 行い、失敗した編集では旧設定を維持する。
- Motion v2 カーブ: 名前付き cubic-bezier、種類別カーブ、開く/ ワークスペースの開始オフセット、閉じる際のスケール/フェード設定。
- Motion v2 拡張: 正規化スプリングカーブ(
spring = name, damping, frequency)と、ウィンドウ単位のアニメーション有効化・時間・カーブ 上書き。 - ウィンドウ/レイヤールール v3: ウィンドウ単位の opacity、角丸、ブラー、 影、ボーダー幅。レイヤーシェル向けルール。タイトル/app-id 変更時の 装飾系アクションの即時再評価。構造系アクションは map/リロード時のみ。
- 名前付きワークスペース: バーのピル、バインド、IPC コマンド、
ウィンドウルールの
workspace=から使えるグローバル名。設定全体を 読み終えてから解決する。 - スクラッチパッドオーバーレイ: 出力ごとの非表示フローティング ウィンドウ。ルールまたはコマンドで割り当て、バインド/IPC で表示切替。 フォーカスと可視状態も処理する。
- スクラッチパッド以外の special 名前付きワークスペース。
- ウィンドウグループ: ワークスペース上のタイルウィンドウをタブ付き
グループにまとめ、
Super+Tabでタブ巡回、グループ追加/削除、IPC 操作。 グループは実行時状態で永続化しない。 - 入力/出力ポリシー: デバイス別のタッチパッド/マウス設定(タップ、 自然スクロール、加速、スクロール方式、ボタンマップ)、make/model/ serial 別モニタールール、VRR/Adaptive Sync、カーソルテーマ/サイズ。 設定/JSON テストで検証済み。実機のタッチパッドと VRR の挙動は ハードウェア検証で確認する。
- 壁紙画像ソース: PNG 背景、cover/contain/stretch、ライブリロード、 生成グラデーション/アートへのフォールバック。
- シェル v2 の残り: 組み合わせ可能なバーモジュール/レイアウト、 サーフェス別フォント/配色、壁紙シェーダー、レイヤールール対応の ポップオーバーとトースト。
- シェル拡張面: ホットリロード対応のディレクトリ型テーマパッケージ、 外部ステータスエントリに紐づく宣言的ウィジェットポップオーバー、 優先度による組み込みバーのオーバーフローと、クリックで開く 非表示モジュール一覧。
- 常駐プロセスプロトコル経由のシェーダー/エフェクトフック。プロセス内 プラグイン VM は使わない。
- 性能ガードレール: blur、角丸、アニメーションのヘッドレスベンチマークと
対象ノート PC でのフレームタイム予算。
tests/performance.shが アニメーションのみと全エフェクトのワークロードを計測する。実機での 予算確認はハードウェア検証で行う。
達成条件は、典型的な Hyprland/Niri のテーマとワークフローを 1 つの Tessa 設定から再現でき、ログインし直さずに変更でき、プロセス API で拡張できる ことです。プラグインの網羅性ではなく、一貫した表現力と検証可能性を重視します。
1.0 — 安定性
Section titled “1.0 — 安定性”- 分かりやすいエラーとトランザクショナルなリロードを伴う設定
バリデーションと、オフライン事前検証
(
tessa --check-config [file])。 - スキーマバージョン 1 の JSON 状態/設定スナップショット。
- IPC 行プロトコルのバージョン交渉と JSON-RPC リクエスト ID。
HELLOで line protocol 1 を交渉し、HELLO なしの従来クライアントも 互換。 - 設定と IPC パーサーの Fuzzing / サニタイザ境界実行。
tests/fuzz-parsers.shが設定ファイルと実 IPC 行パーサーを変異させ、tests/fuzz-asan.shがシステム ASan ランタイムを preload して同じ パスを実行します。現在の Zig はこの構成でコンパイラ ASan 計測を持たない ため、Debug 安全ビルドに対するアロケータ/インターセプタ実行です。 - パネルのクラッシュ復旧。出力ごとのスーパーバイザが pidfd で終了を
検知し、上限付き指数バックオフで再起動します。意図的な終了と出力
取り外しでは再起動しません(
tests/panel-recovery.sh)。 - ヘルパーの厳格なタイムアウト保証: 既定でレイアウト 100 ms、
エフェクト 200 ms。失敗時は内蔵レイアウト/ルール表示へ戻ります
(
tests/helper-timeouts.sh)。 - 完全なユーザーガイドとテーマガイドのドキュメント。
- 再現可能なパッケージとリリースプロセス。
視覚的同等性のための信頼性優先設計
Section titled “視覚的同等性のための信頼性優先設計”Hyprland/Niri/MangoWC/ShojiWM との見た目・動きの同等性は方向性であり、 核となる安全性を犠牲にする理由にはしません:
- 視覚機能はすべて任意かつ宣言的にする。シーンエフェクト、アニメーション カーブ、レイヤールール、プロセスヘルパーには内蔵フォールバックを持たせる。
- 外部ヘルパーは時間制限付きで、Wayland イベントループをブロックしない。 レイアウト 100 ms、エフェクト 200 ms の契約を回帰テストで守る。
- 設定はオフラインで事前検証でき、リロードはトランザクショナル。不正な編集が 実行中設定を置き換えない。
- パネルは監視され、シェル/視覚機能の作業でセッションのバーを失わない。
- 新しいエフェクトはヘッドレス性能テストと fuzz スイートを維持する。
視覚的同等性の作業では、スクリーンショットだけでなく
niri-visual-testsに倣ったテストを追加する。
- TypeScript/JS による設定ランタイムやネイティブプラグイン VM の埋め込み。 ShojiWM 的なコンポジションに対する Tessa の答えは、宣言的ルールと プロセスプロトコルです。拡張コードをコンポジタ内にロードしません。
- Hyprland のすべてのエフェクト/プラグインを追いかけること。Tessa は エフェクトの寄せ集めではなく、一貫した静かなデスクトップであり続けます。
- 内蔵ターミナル。kitty/foot の方が急いで作ったターミナルより優れており、 ターミナルを外部に任せることは最初から許容されています。