Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
24 commits
Select commit Hold shift + click to select a range
10f4eaa
chore(dev): ignore local development notes
mizorewww Sep 19, 2026
698ea58
fix(sync): keep updates responsive while RPCs are running
mizorewww Sep 19, 2026
ad9236e
fix(sync): recover only stale channels on startup
mizorewww Sep 19, 2026
06f9517
feat(cache): load local conversations before connecting
mizorewww Sep 19, 2026
2d0838b
fix(sync): coordinate cached startup and active group updates
mizorewww Sep 19, 2026
9845c63
docs(wiki): explain cache and synchronization in two languages
mizorewww Sep 19, 2026
3fcd968
feat(keys)!: configure contextual message navigation with Lua
mizorewww Sep 19, 2026
64032e3
feat(folders): synchronize native Telegram chat folders
mizorewww Sep 19, 2026
6ed6d0e
feat(search): search cached messages with regular expressions
mizorewww Sep 19, 2026
b5d90ef
feat(appearance): configure account-specific chat and folder colors
mizorewww Sep 19, 2026
8fff07c
feat(media): reveal attachments with a persistent bounded file cache
mizorewww Sep 19, 2026
f8ef689
fix(cache): reconcile dialog previews and unread counts
mizorewww Sep 19, 2026
25726ef
fix(ux): honor configured navigation and contextual controls
mizorewww Sep 19, 2026
a208ac5
docs(wiki): publish bilingual guides and simplify the README
mizorewww Sep 19, 2026
08df1c5
feat(dialogs): synchronize pinned chats and the Telegram archive
mizorewww Sep 19, 2026
916c2e9
feat(messages): browse and manage native Telegram pins
mizorewww Sep 19, 2026
b5b69eb
fix(pins): invalidate pending reads during sync recovery
mizorewww Sep 19, 2026
50b5135
feat(ui): enable Nerd Font icons through Lua configuration
mizorewww Sep 19, 2026
5fe99c2
build(install): support native Cargo source installation
mizorewww Sep 19, 2026
59abc82
fix(install): isolate Cargo Git build artifacts
mizorewww Sep 19, 2026
78baaec
fix(install): ignore Cargo checkout markers in build identity
mizorewww Sep 19, 2026
0f5f184
test(session): retain concurrent writer failure diagnostics
mizorewww Sep 19, 2026
5f58505
fix(deps): backport libSQL connection close ownership
mizorewww Sep 19, 2026
4bf0a7c
fix(input)!: restore composition and select media before opening
mizorewww Sep 20, 2026
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
26 changes: 20 additions & 6 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -102,6 +102,8 @@ jobs:
- name: Check installer scripts
shell: bash
run: bash -n scripts/install.sh
- name: Validate bilingual Wiki sources
run: python3 scripts/export-wiki.py --check
- name: Parse PowerShell installer
shell: pwsh
run: |
Expand All @@ -119,6 +121,11 @@ jobs:
- run: cargo fmt --all -- --check
- run: cargo clippy --locked --all-targets --all-features -- -D warnings
- run: cargo test --locked --all-targets --all-features
- name: Verify upstream SQLite close-ownership regression
run: >-
cargo test --locked --manifest-path vendor/libsql/Cargo.toml
--no-default-features --features core --lib
drop_closes_the_handle_exactly_once --target-dir target/libsql-regression

build:
name: Build (${{ matrix.platform }})
Expand Down Expand Up @@ -201,7 +208,7 @@ jobs:
set -euo pipefail
[[ "$TELEGRAM_API_ID" =~ ^[0-9]+$ ]]
[[ "$TELEGRAM_API_HASH" =~ ^[0-9a-fA-F]{32}$ ]]
- name: Build and package every pushed commit
- name: Install from Git and package every pushed commit
shell: bash
env:
VERGEN_GIT_BRANCH: ${{ github.head_ref || github.ref_name }}
Expand All @@ -210,6 +217,8 @@ jobs:
run: |
set -euo pipefail
mkdir -p dist
source_url="$(python3 -c 'from pathlib import Path; print(Path.cwd().as_uri())')"
install_root="$(pwd)/dist/cargo-install"
while IFS=$'\t' read -r sha version; do
sha="${sha%$'\r'}"
version="${version%$'\r'}"
Expand All @@ -218,8 +227,13 @@ jobs:
rustup target add "${{ matrix.target }}"
export TERMGRAM_BUILD_VERSION="$version"
cargo test --locked --all-targets --all-features
cargo build --locked --release --target "${{ matrix.target }}"
binary="target/${{ matrix.target }}/release/tg"
# Exercise Cargo's Git checkout, path patches, install tracking and
# release profile. Keep immutable Git-source artifacts separate from
# workspace builds, including build-script executables and metadata.
cargo install --locked --git "$source_url" --rev "$sha" \
--bin tg --target "${{ matrix.target }}" --target-dir target/cargo-install \
--root "$install_root" --force termgram
binary="$install_root/bin/tg"
if [[ "$RUNNER_OS" == Windows ]]; then
binary+=".exe"
fi
Expand All @@ -240,12 +254,12 @@ jobs:

if [[ "$RUNNER_OS" == Windows ]]; then
(
cd "target/${{ matrix.target }}/release"
cd "$install_root/bin"
7z a -tzip \
"../../../dist/termgram-$version-${{ matrix.platform }}.zip" tg.exe
"../../termgram-$version-${{ matrix.platform }}.zip" tg.exe
)
else
tar -C "target/${{ matrix.target }}/release" -czf \
tar -C "$install_root/bin" -czf \
"dist/termgram-$version-${{ matrix.platform }}.tar.gz" tg
fi
done < <(jq -r '.[] | [.sha, .version] | @tsv' <<<"$RELEASE_PLAN")
Expand Down
6 changes: 6 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,7 +1,13 @@
/target/
/.cargo-ok
/dist/
.env
*.session
*.session-*
*.log
.DS_Store
/dev-notes/
*.cache.sqlite3
*.cache.sqlite3-*

*.media/
11 changes: 7 additions & 4 deletions Cargo.lock

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

13 changes: 11 additions & 2 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -15,23 +15,30 @@ path = "src/main.rs"
anstream = "=1.0.0"
anstyle = "=1.0.14"
anyhow = "1.0"
chrono = { version = "0.4.45", default-features = false, features = ["clock"] }
chrono = { version = "0.4.45", default-features = false, features = ["clock", "serde"] }
directories = "6.0"
dotenvy = "0.15"
futures-util = { version = "0.3.32", default-features = false }
grammers-client = { version = "=0.10.0", default-features = false, features = ["fs"] }
grammers-session = { version = "=0.10.0", default-features = false, features = ["sqlite-storage"] }
image = { version = "=0.25.10", default-features = false }
moxcms = "=0.9.1"
mlua = { version = "=0.12.1", features = ["lua55", "vendored", "serde", "error-send"] }
libsql = { version = "=0.9.30", default-features = false, features = ["core"] }
serde = { version = "1", features = ["derive"] }
serde_json = "1"
regex = "=1.13.1"
qrcode = { version = "=0.14.1", default-features = false }
ratatui-image = { version = "=11.1.0", default-features = false }
ratatui = { version = "=0.30.2", default-features = false, features = ["crossterm"] }
sha2 = "=0.11.0"
tempfile = "=3.27.0"
tokio = { version = "1.52", default-features = false, features = ["macros", "rt", "signal", "sync", "time"] }
toml = "=1.1.6"
unicode-segmentation = "1.13.3"
unicode-width = "=0.2.2"

yazi-config = { git = "https://github.com/sxyazi/yazi", rev = "9203fd2604f867ab5ec18f24203b918975c4c00a" }
yazi-adapter = { git = "https://github.com/sxyazi/yazi", rev = "9203fd2604f867ab5ec18f24203b918975c4c00a" }
yazi-emulator = { git = "https://github.com/sxyazi/yazi", rev = "9203fd2604f867ab5ec18f24203b918975c4c00a" }
yazi-term = { git = "https://github.com/sxyazi/yazi", rev = "9203fd2604f867ab5ec18f24203b918975c4c00a" }
Expand Down Expand Up @@ -59,7 +66,9 @@ yazi-term = { path = "vendor/yazi-term" }

[workspace]
members = ["."]
exclude = ["vendor/yazi-term", "vendor/grammers-session"]
exclude = ["vendor/yazi-term", "vendor/grammers-session", "vendor/grammers-client", "vendor/libsql"]

[patch.crates-io]
grammers-session = { path = "vendor/grammers-session" }
grammers-client = { path = "vendor/grammers-client" }
libsql = { path = "vendor/libsql" }
Loading
Loading