From 363d9435625940a6c988539137b0087732820796 Mon Sep 17 00:00:00 2001 From: Simone <185146821+Lucenx9@users.noreply.github.com> Date: Thu, 20 Aug 2026 20:14:26 +0200 Subject: [PATCH 1/3] release: forktty 0.2.0-alpha.21 --- CHANGELOG.md | 2 ++ Cargo.lock | 12 ++++----- Cargo.toml | 2 +- README.md | 26 +++++++++---------- .../linux/dev.forktty.forktty.metainfo.xml | 1 + 5 files changed, 23 insertions(+), 20 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a12b5e67..94b063d1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,8 @@ All notable changes to ForkTTY are documented here. ## [Unreleased] +## [0.2.0-alpha.21] - 2026-08-20 + ### Added - The workspace sidebar can now be pinned beside terminal content from its header or left in the existing overlay presentation. The choice persists diff --git a/Cargo.lock b/Cargo.lock index cac1eb64..7f25dec5 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -677,7 +677,7 @@ checksum = "77ce24cb58228fbb8aa041425bb1050850ac19177686ea6e0f41a70416f56fdb" [[package]] name = "forktty-core" -version = "0.2.0-alpha.20" +version = "0.2.0-alpha.21" dependencies = [ "chrono", "dirs", @@ -698,7 +698,7 @@ dependencies = [ [[package]] name = "forktty-import" -version = "0.2.0-alpha.20" +version = "0.2.0-alpha.21" dependencies = [ "aes 0.9.1", "cbc 0.2.1", @@ -718,7 +718,7 @@ dependencies = [ [[package]] name = "forktty-socket" -version = "0.2.0-alpha.20" +version = "0.2.0-alpha.21" dependencies = [ "async-channel", "dirs", @@ -738,7 +738,7 @@ dependencies = [ [[package]] name = "forktty-terminal" -version = "0.2.0-alpha.20" +version = "0.2.0-alpha.21" dependencies = [ "forktty-core", "libc", @@ -750,7 +750,7 @@ dependencies = [ [[package]] name = "forktty-ui-gtk" -version = "0.2.0-alpha.20" +version = "0.2.0-alpha.21" dependencies = [ "async-channel", "base64", @@ -3175,7 +3175,7 @@ checksum = "b9cc00251562a284751c9973bace760d86c0276c471b4be569fe6b068ee97a56" [[package]] name = "xtask" -version = "0.2.0-alpha.20" +version = "0.2.0-alpha.21" dependencies = [ "serde_json", "toml", diff --git a/Cargo.toml b/Cargo.toml index 05d581e2..5a4cef18 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -10,7 +10,7 @@ members = [ resolver = "2" [workspace.package] -version = "0.2.0-alpha.20" +version = "0.2.0-alpha.21" edition = "2021" rust-version = "1.96" license = "AGPL-3.0-only" diff --git a/README.md b/README.md index afff5b81..84070920 100644 --- a/README.md +++ b/README.md @@ -13,18 +13,18 @@ place work in dedicated git worktrees without tying the UI to one agent vendor. [![License: AGPL-3.0](https://img.shields.io/badge/license-AGPL--3.0-blue.svg)](LICENSE) [![Build](https://img.shields.io/github/actions/workflow/status/Lucenx9/forktty/ci.yml?branch=main)](https://github.com/Lucenx9/forktty/actions) -[![Release](https://img.shields.io/github/v/release/Lucenx9/forktty?include_prereleases)](https://github.com/Lucenx9/forktty/releases/tag/v0.2.0-alpha.20) +[![Release](https://img.shields.io/github/v/release/Lucenx9/forktty?include_prereleases)](https://github.com/Lucenx9/forktty/releases/tag/v0.2.0-alpha.21) [![Rust](https://img.shields.io/badge/rust-1.96%2B-orange.svg)](https://rustup.rs/) [![GTK4](https://img.shields.io/badge/GTK4%20%2B%20Ghostty-native-blue.svg)](docs/native-gtk-ghostty.md) [Website](https://forktty.dev/) · [Docs](https://forktty.dev/docs) · [Agent context](https://forktty.dev/llms.txt) · -[Download v0.2.0-alpha.20 AppImage](https://github.com/Lucenx9/forktty/releases/download/v0.2.0-alpha.20/forktty-0.2.0-alpha.20-x86_64.AppImage) +[Download v0.2.0-alpha.21 AppImage](https://github.com/Lucenx9/forktty/releases/download/v0.2.0-alpha.21/forktty-0.2.0-alpha.21-x86_64.AppImage) -> **Status**: Early alpha (v0.2.0-alpha.20). ForkTTY is Linux-only and the GTK/Ghostty runtime is now the primary implementation. The AppImage is the primary Linux download for this alpha; the Debian package remains available for Debian/Ubuntu users. +> **Status**: Early alpha (v0.2.0-alpha.21). ForkTTY is Linux-only and the GTK/Ghostty runtime is now the primary implementation. The AppImage is the primary Linux download for this alpha; the Debian package remains available for Debian/Ubuntu users. ![ForkTTY workspace running several coding agents across split terminal panes](docs/assets/forktty-workspace.png) @@ -55,12 +55,12 @@ the linked guides carry the detailed contracts. ## Install The fastest paths are the prebuilt artifacts from the -[v0.2.0-alpha.20 release](https://github.com/Lucenx9/forktty/releases/tag/v0.2.0-alpha.20). +[v0.2.0-alpha.21 release](https://github.com/Lucenx9/forktty/releases/tag/v0.2.0-alpha.21). Each release ships: -- `forktty-0.2.0-alpha.20-x86_64.AppImage` — recommended portable Linux package. -- `forktty-0.2.0-alpha.20-x86_64.AppImage.zsync` — AppImage delta-update metadata for external AppImage managers. -- `forktty_0.2.0.alpha.20_amd64.deb` — Debian/Ubuntu package. +- `forktty-0.2.0-alpha.21-x86_64.AppImage` — recommended portable Linux package. +- `forktty-0.2.0-alpha.21-x86_64.AppImage.zsync` — AppImage delta-update metadata for external AppImage managers. +- `forktty_0.2.0.alpha.21_amd64.deb` — Debian/Ubuntu package. - `SHA256SUMS` — checksums for release artifacts. After downloading, verify checksums: @@ -72,8 +72,8 @@ sha256sum -c SHA256SUMS ### AppImage ```bash -chmod +x forktty-0.2.0-alpha.20-x86_64.AppImage -./forktty-0.2.0-alpha.20-x86_64.AppImage +chmod +x forktty-0.2.0-alpha.21-x86_64.AppImage +./forktty-0.2.0-alpha.21-x86_64.AppImage ``` The AppImage carries ForkTTY's private Ghostty libraries and a bundled @@ -91,9 +91,9 @@ so external AppImage managers remain in control. If the UI renders incorrectly, retry with the alternate GTK OpenGL renderer name: ```bash -GSK_RENDERER=gl ./forktty-0.2.0-alpha.20-x86_64.AppImage +GSK_RENDERER=gl ./forktty-0.2.0-alpha.21-x86_64.AppImage # or -GSK_RENDERER=ngl ./forktty-0.2.0-alpha.20-x86_64.AppImage +GSK_RENDERER=ngl ./forktty-0.2.0-alpha.21-x86_64.AppImage ``` Use `GSK_RENDERER=cairo` only as a slower software-rendering fallback. More @@ -106,9 +106,9 @@ Debian 12/Bookworm is below the package baseline because it does not provide libadwaita 1.4+. ```bash -sudo apt install ./forktty_0.2.0.alpha.20_amd64.deb +sudo apt install ./forktty_0.2.0.alpha.21_amd64.deb # or, if apt cannot read the file path directly: -sudo dpkg -i forktty_0.2.0.alpha.20_amd64.deb +sudo dpkg -i forktty_0.2.0.alpha.21_amd64.deb sudo apt -f install ``` diff --git a/packaging/linux/dev.forktty.forktty.metainfo.xml b/packaging/linux/dev.forktty.forktty.metainfo.xml index 12d1841d..301fe171 100644 --- a/packaging/linux/dev.forktty.forktty.metainfo.xml +++ b/packaging/linux/dev.forktty.forktty.metainfo.xml @@ -18,6 +18,7 @@ Lucenx9 + From 65e6158ae86db2c4e51544ab9556087cdf7a17c6 Mon Sep 17 00:00:00 2001 From: Simone <185146821+Lucenx9@users.noreply.github.com> Date: Thu, 20 Aug 2026 20:26:53 +0200 Subject: [PATCH 2/3] fix: satisfy Rust 1.98 clippy gates --- crates/forktty-terminal/src/spawn.rs | 6 +++--- crates/forktty-ui-gtk/src/browser_pane.rs | 1 - crates/forktty-ui-gtk/src/gtk_app/terminal_renderer.rs | 2 +- 3 files changed, 4 insertions(+), 5 deletions(-) diff --git a/crates/forktty-terminal/src/spawn.rs b/crates/forktty-terminal/src/spawn.rs index b50c007e..aa15ea3c 100644 --- a/crates/forktty-terminal/src/spawn.rs +++ b/crates/forktty-terminal/src/spawn.rs @@ -939,8 +939,8 @@ mod tests { let mut unset_keys = Vec::new(); let mut set_keys = Vec::new(); let mut saw_set = false; - let mut options = helper_options.chunks_exact(2); - for option in &mut options { + let (options, remainder) = helper_options.as_chunks::<2>(); + for option in options { match option[0].as_str() { "--unset" => { assert!(!saw_set, "unsets must precede assignments"); @@ -953,7 +953,7 @@ mod tests { other => panic!("unexpected AppImage helper option {other}"), } } - assert!(options.remainder().is_empty()); + assert!(remainder.is_empty()); let mut sorted_unset_keys = unset_keys.clone(); sorted_unset_keys.sort(); assert_eq!(unset_keys, sorted_unset_keys); diff --git a/crates/forktty-ui-gtk/src/browser_pane.rs b/crates/forktty-ui-gtk/src/browser_pane.rs index c3d1ba7d..9aa396d0 100644 --- a/crates/forktty-ui-gtk/src/browser_pane.rs +++ b/crates/forktty-ui-gtk/src/browser_pane.rs @@ -4,7 +4,6 @@ use gtk4 as gtk; use gtk::glib; -use gtk::prelude::*; use webkit6::prelude::*; use webkit6::WebView; diff --git a/crates/forktty-ui-gtk/src/gtk_app/terminal_renderer.rs b/crates/forktty-ui-gtk/src/gtk_app/terminal_renderer.rs index d1acc2ba..dc0a560f 100644 --- a/crates/forktty-ui-gtk/src/gtk_app/terminal_renderer.rs +++ b/crates/forktty-ui-gtk/src/gtk_app/terminal_renderer.rs @@ -1025,7 +1025,7 @@ fn cairo_argb32_from_rgba(rgba: &[u8], width: u32, height: u32) -> Option().0 { let alpha = u16::from(pixel[3]); let premultiply = |value: u8| ((u16::from(value) * alpha + 127) / 255) as u8; out.extend_from_slice(&[ From 9359c27351d1dc84d9a5e9629f6df9495b4e76c1 Mon Sep 17 00:00:00 2001 From: Simone <185146821+Lucenx9@users.noreply.github.com> Date: Thu, 20 Aug 2026 20:28:52 +0200 Subject: [PATCH 3/3] docs: fix Debian release filename --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 84070920..96b5a8a8 100644 --- a/README.md +++ b/README.md @@ -60,7 +60,7 @@ Each release ships: - `forktty-0.2.0-alpha.21-x86_64.AppImage` — recommended portable Linux package. - `forktty-0.2.0-alpha.21-x86_64.AppImage.zsync` — AppImage delta-update metadata for external AppImage managers. -- `forktty_0.2.0.alpha.21_amd64.deb` — Debian/Ubuntu package. +- `forktty_0.2.0~alpha.21_amd64.deb` — Debian/Ubuntu package. - `SHA256SUMS` — checksums for release artifacts. After downloading, verify checksums: @@ -106,9 +106,9 @@ Debian 12/Bookworm is below the package baseline because it does not provide libadwaita 1.4+. ```bash -sudo apt install ./forktty_0.2.0.alpha.21_amd64.deb +sudo apt install ./forktty_0.2.0~alpha.21_amd64.deb # or, if apt cannot read the file path directly: -sudo dpkg -i forktty_0.2.0.alpha.21_amd64.deb +sudo dpkg -i forktty_0.2.0~alpha.21_amd64.deb sudo apt -f install ```