Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
12 changes: 6 additions & 6 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down
26 changes: 13 additions & 13 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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)

</div>

> **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.
Comment thread
Lucenx9 marked this conversation as resolved.

![ForkTTY workspace running several coding agents across split terminal panes](docs/assets/forktty-workspace.png)

Expand Down Expand Up @@ -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:
Expand All @@ -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
Expand All @@ -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
Expand All @@ -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
```

Expand Down
6 changes: 3 additions & 3 deletions crates/forktty-terminal/src/spawn.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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");
Expand All @@ -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);
Expand Down
1 change: 0 additions & 1 deletion crates/forktty-ui-gtk/src/browser_pane.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@
use gtk4 as gtk;

use gtk::glib;
use gtk::prelude::*;
use webkit6::prelude::*;
use webkit6::WebView;

Expand Down
2 changes: 1 addition & 1 deletion crates/forktty-ui-gtk/src/gtk_app/terminal_renderer.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1025,7 +1025,7 @@ fn cairo_argb32_from_rgba(rgba: &[u8], width: u32, height: u32) -> Option<Vec<u8
if out.try_reserve_exact(len).is_err() {
return None;
}
for pixel in rgba[..len].chunks_exact(4) {
for pixel in rgba[..len].as_chunks::<4>().0 {
let alpha = u16::from(pixel[3]);
let premultiply = |value: u8| ((u16::from(value) * alpha + 127) / 255) as u8;
out.extend_from_slice(&[
Expand Down
1 change: 1 addition & 0 deletions packaging/linux/dev.forktty.forktty.metainfo.xml
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
<name>Lucenx9</name>
</developer>
<releases>
<release version="0.2.0-alpha.21" date="2026-08-20" type="development" />
<release version="0.2.0-alpha.20" date="2026-07-28" type="development" />
<release version="0.2.0-alpha.19" date="2026-07-18" type="development" />
<release version="0.2.0-alpha.18" date="2026-07-06" type="development" />
Expand Down
Loading