コンテンツにスキップ

ロードマップ

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 を対象に、 パッケージ、ドキュメント、互換性表をまとめて更新してください。

移行ユーザーが使い慣れたバーやランチャーを維持しつつ、既定は Tessa Panel の ままにします。

  • layer-shell のバー/ランチャー(Waybar、Wofi、Quickshell)、排他ゾーン、 ポップアップの画面内制約、EXCLUSIVE/ON_DEMAND キーボードフォーカス、 出力切断時の安全な layer teardown。
  • 出力ごとに 9 ワークスペースを持つ ext-workspace-v1 グループと activate 要求。Waybar ext/workspaces と Quickshell WindowManager が 動作。
  • タスクバー向け foreign-toplevel の output enter/leave 追従。
  • Quickshell の任意機能向け: keyboard-shortcuts-inhibit-v1 と wlr-gamma-control-v1。

ゲームや全画面動画のためにコンポジタの差を縮めつつ、既定のデスクトップを 安全に保ちます。

  • 出力別のフレーム時間、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-v1 explicit 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)。

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、ドラッグ並べ替え、 ホイールスクロールを検証(フラクショナルスケーリングとタッチパッド ジェスチャを含む)。

プロセス方式の拡張モデルを維持しつつ、拡張に 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 でビルド・署名されたパッケージとリリース成果物。
  • 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 によるマルチモニタのワークスペース固定と、出力を またぐウィンドウ移動。
  • 宣言的ウィンドウルール(app-id/タイトル/出力パターン、フローティング、 フルスクリーン、ワークスペース、サイズ、位置アクション)。
  • 設定再読み込み時のルール再評価。
  • レイアウト調整: マスター数、モザイク比率/最小サイズ、グリッド固定列数。
  • アクティブ/非アクティブのボーダー色。
  • tessa-ctl config による実効設定と解析済みルールの確認。
  • ワークスペース別のレイアウト/隙間/マスター比率ルール。
  • 出力別のレイアウト/隙間ルール(output-rule、任意の ws=)。 出力+ワークスペース指定はワークスペースルールより優先。
  • タイムアウト、再起動、内蔵フォールバックを備えた常駐外部レイアウト ヘルパープロトコル。
  • 設定可能なアニメーション/エフェクトフック(animation-start、 animation-done、close-animation-start、close-animation-done)。
  • 行番号付きの設定バリデーション、tessa-ctl config-check、 失敗時に旧設定を維持するトランザクショナルなリロード。
  • スキーマ 1 を文書化した JSON 状態/設定出力。
  • 正規表現/論理式によるウィンドウルールと、ルール別の装飾色。
  • 名前付き入力モードとモード固有バインド、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 で拡張できる ことです。プラグインの網羅性ではなく、一貫した表現力と検証可能性を重視します。

  • 分かりやすいエラーとトランザクショナルなリロードを伴う設定 バリデーションと、オフライン事前検証 (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 の方が急いで作ったターミナルより優れており、 ターミナルを外部に任せることは最初から許容されています。