Releases: keepinfov/2cha
Release list
v1.9.0
What's Changed
- Remove REALITY, add AmneziaWG transport, speed up the datapath (1.9.0) by @keepinfov in #58
Full Changelog: v1.8.0-alpha.6...v1.9.0
v1.8.0-alpha.6
First alpha of the 1.8.0 REALITY line (the rc pre-release naming is retired).
Changes since rc5
- Debug logging across the connect + Noise handshake path (#57). The opaque
Network error: Timeoutis replaced byhandshake failed: <why>, naming the actual failing stage (dead carrier / no server reply / rejected response / early stop, with counts and the underlying error). Go-sidegoreality:lifecycle lines — including each relay direction's byte count + error on close — make a post-handshake carrier drop visible in the server journal.
Built on the REALITY dest self-test (#55) and mobile socket-protect (#56) fixes.
v1.8.0-rc5 — REALITY tun-fd fix + server reject logging
Fixes over rc4:
- #52:
run_mobilenow owns (and always closes) the host's tun fd from its first line, so a failed connect/handshake tears the VPN interface down immediately instead of leaving the phone's network broken until a manual toggle. - #53: the REALITY server now logs the vendored library's actual reject-and-fallback reason (previously silently discarded), so a legitimate client's rejected handshake is diagnosable from
journalctlinstead of invisible.
Install/upgrade:
sudo TWOCHA_VERSION=v1.8.0-rc5 TWOCHA_REALITY=1 sh -c "$(curl -fsSL https://raw.githubusercontent.com/keepinfov/2cha/master/scripts/install.sh)" --no-setup
v1.8.0-rc4 — REALITY hardening + mobile QR onboarding
Fourth REALITY release candidate — first to ship from master (REALITY is now merged, not a separate branch build).
Since rc3:
- Full review pass on the REALITY transport: fixed a CI shell-injection risk, added Go panic recovery across the cgo boundary, fixed a resource leak and an unchecked integer cast, removed dead/wire-incompatible auth code, and unified the TLS/REALITY server loops (which also fixed a blocking-handshake DoS — a REALITY probe relay could previously stall every other connection).
- The setup wizard now offers REALITY as a mobile QR option, not just desktop: the Android app (2cha-mobile#48) already supports
Transport.REALITYend-to-end, so2cha init's mobile export now emits the matchingrealityJSON block.
Assets: static-musl 2cha-universal-linux-* (Go-free) for the general install, plus 2cha-reality-linux-{x86_64,aarch64}.tar.gz (glibc) and the ghcr.io/keepinfov/2cha:v1.8.0-rc4 container image for REALITY.
Install a REALITY server: sudo TWOCHA_REALITY=1 sh -c "$(curl -fsSL https://raw.githubusercontent.com/keepinfov/2cha/master/scripts/install.sh)"
v1.8.0-rc3 — REALITY in the setup wizard
Third REALITY release candidate. Same binaries/assets as rc2, plus:
- The setup wizard (
2cha setup/2cha init) now offers reality as a Transport (reality builds only): it generates the REALITY keypair + short id and writes matching[reality]blocks into the server config and every desktop client config. - Installer:
TWOCHA_REALITY=1fetches the glibc reality tarball.
Assets: static-musl 2cha-universal-linux-* (Go-free) for the general install, plus 2cha-reality-linux-{x86_64,aarch64}.tar.gz (glibc) and the ghcr.io/keepinfov/2cha:v1.8.0-rc3 container image for REALITY.
Install a REALITY server: sudo TWOCHA_REALITY=1 sh -c "$(curl -fsSL https://raw.githubusercontent.com/keepinfov/2cha/master/scripts/install.sh)"
v1.8.0-rc2 — REALITY (glibc tarballs + container image)
Release candidate 2 for the REALITY transport.
rc1's static-musl reality binaries segfaulted — Go's runtime can't run inside a
fully-static musl binary. So REALITY now ships as glibc, and the standard
static binaries stay REALITY-free:
2cha-{server,client,universal}-linux-<arch>.tar.gz— static musl, no REALITY
(unchanged; portable, run on NixOS etc.). Theinstall.shone-liner installs these.- REALITY (glibc):
2cha-reality-linux-{x86_64,aarch64}.tar.gz— glibc 2.31+, runs natively on
Debian 11+/Ubuntu 20.04+.ghcr.io/keepinfov/2cha:v1.8.0-rc2— multi-arch image; runs anywhere with
docker/podman, including NixOS and Alpine.
Test the reality binary directly:
curl -fsSL https://github.com/keepinfov/2cha/releases/download/v1.8.0-rc2/2cha-reality-linux-x86_64.tar.gz \
| tar xz && sudo mv 2cha /usr/local/bin/2cha
2cha reality-keygen # then set transport = "reality" + [reality] in the config
Or the image:
docker run --rm --cap-add NET_ADMIN --device /dev/net/tun \
-v /etc/2cha:/etc/2cha ghcr.io/keepinfov/2cha:v1.8.0-rc2 \
server --config /etc/2cha/server.toml
See docs/reality.md. Pre-release from PR #50.
v1.7.0
What's Changed
- feat(status): server-aware dashboard + fix install one-liner by @keepinfov in #48
- chore(release): 1.7.0 by @keepinfov in #49
Full Changelog: v1.6.0...v1.7.0
v1.6.0
What's Changed
- fix(cli): TTY-safe output, interactive fallbacks, status --watch by @keepinfov in #45
- feat(cli): turn-key '2cha setup', one-liner installer, mobile QR onboarding by @keepinfov in #46
- chore(release): bump version to 1.6.0 by @keepinfov in #47
Full Changelog: v1.5.0...v1.6.0
v1.5.0
What's Changed
- fix(mobile): per-tunnel run flag and handshake-complete signal by @keepinfov in #42
- ci: simplify PR checks to cross-target cargo check, drop Windows by @keepinfov in #43
- perf: fix full-MTU packet loss and rebuild the data plane for throughput by @keepinfov in #44
Full Changelog: v1.4.0...v1.5.0
v1.4.0
What's Changed
- feat: config-management CLI and declarative NixOS module by @keepinfov in #37
- feat: uniffi shared Rust core for Android mobile by @keepinfov in #38
- fix(lib): gate netlink/routing/server off Android so twocha-lib cross-compiles by @keepinfov in #39
- fix(mobile): keep symbol table on twocha-mobile cdylib for uniffi bindgen by @keepinfov in #40
- chore(release): bump version to 1.4.0 by @keepinfov in #41
Full Changelog: v1.2.0...v1.4.0