Skip to content

AutoTelegramForward v2.3.0

Choose a tag to compare

@github-actions github-actions released this 22 Oct 02:03
· 44 commits to master since this release
9969999

AutoTelegramForward v2.3.0 — True Single-File Cross-Platform Release

One Single Executable, All 4 Microservices.
AutoTelegramForward is a high-performance Telegram MTProto forwarding and routing suite engineered with clean microservice boundaries. Every platform release is a self-contained, native single executable that embeds and orchestrates all four decoupled services with zero external dependencies (no Python, Go, Rust, Node.js, or compiler toolchains required on host systems):

  1. Python Core Engine (:6001) — Telegram MTProto client pool, rule engine, smart routing, link sanitization, and multi-provider AI text transformations.
  2. Rust Logger Engine (:6002) — High-throughput gRPC log ingestion with secret redaction, queryable structured logs, and a dedicated SQLite archive.
  3. Go REST API (:8080) — Production control-plane, OpenAPI REST endpoints for rules, sessions, and telemetry.
  4. Rust Axum Web Gateway & React Dashboard (:8088) — Zero-dependency web server embedding the React Single Page App, providing security headers, high-throughput reverse proxying to the Go API, and health metrics.

Quick Start Guide (Linux / macOS / WSL)

  1. Download the single-file binary:

    curl -fsSL https://github.com/Opselon/AutoTelegramForward/releases/latest/download/atf-linux-x64 -o atf && chmod +x atf

    (For Apple Silicon macOS, use atf-macos-arm64; for macOS Intel, use atf-macos-x64)

  2. Interactive Onboarding & Setup Wizard:

    ./atf setup

    Only asks for your Telegram Bot Token from @BotFather and optional Admin User ID.
    To run non-interactively (CI/CD):

    ./atf setup --token "123456:ABC-DEF..." --admin 123456789 --lang en --start
  3. Start All Services with One Command:

    ./atf start
  4. Verify Live Status & Health:

    ./atf status
    ./atf health
  5. Open Web Dashboard:
    Open http://localhost:8088 in your browser to access the live React Management Dashboard.


Windows (PowerShell)

curl.exe -fsSL https://github.com/Opselon/AutoTelegramForward/releases/latest/download/atf-windows-x64.exe -o atf.exe
.\atf.exe setup
.\atf.exe start
.\atf.exe status

Production OS Background Service (Auto-Start on Boot)

Run all services continuously in the background managed by your operating system:

# Linux (systemd user unit)
./atf service install

# Check service status
./atf status

# Tail live service logs
./atf logs

Docker & Kubernetes Deployments

Docker Compose (All 4 Microservices):

curl -fsSL https://raw.githubusercontent.com/Opselon/AutoTelegramForward/master/docker-compose.yml -o docker-compose.yml
docker compose up -d
# or via CLI:
./atf docker up

Kubernetes (Production Cluster Manifests):

./atf k8s apply
# or kubectl:
kubectl apply -f https://raw.githubusercontent.com/Opselon/AutoTelegramForward/master/k8s/all-in-one.yaml

Official Single-File Artifacts

Binary Platform Architecture Verification
atf-linux-x64 Linux x86_64 Self-contained single-file executable
atf-linux-arm64 Linux ARM64 / aarch64 Raspberry Pi 4/5, ARM VPS, Graviton
atf-macos-x64 macOS Intel x86_64 Self-contained single-file executable
atf-macos-arm64 macOS Apple Silicon (M1/M2/M3/M4) Self-contained single-file executable
atf-windows-x64.exe Windows x64 Windows native standalone executable
atf-*-portable.tar.gz Cross-platform Portable directory One-directory portable bundle
Android ARM64 Flutter release APK (per-ABI)
Android ARMv7 Flutter release APK (per-ABI)
Android x86_64 Flutter release APK (per-ABI)
Android Universal Play Store App Bundle
Any POSIX Source bundle Source distribution

SHA-256 Checksums Verification

Download SHA256SUMS.txt from the release assets and verify integrity:

sha256sum -c SHA256SUMS.txt

What's Changed

  • High-Performance Redis Integration: rate limiting, leases, Docker-ready deployment, measured QA by @Opselon in #158
  • Fix: Redis lease coordination recovers after a transient startup outage (no restart needed) by @Opselon in #159
  • Fix: Core lease coordination sends the configured Redis password by @Opselon in #160
  • Phase 2: API-first multi-tenant task lifecycle by @Opselon in #161
  • Hardening: session lifecycle, one-time login links with per-user cooldown, /reauth by @Opselon in #162
  • openapi: resolve contract relative to CWD + route-without-auth regression test by @Opselon in #163
  • apikey gate: openapi doc is public by @Opselon in #164
  • postgres: create user_tasks in the bootstrap + split DDL on real statements (claim race, missing tables) by @Opselon in #165
  • tasks: honest cancel/retry, abort on lease loss, claim only runnable kinds by @Opselon in #166
  • core rpc: require a shared credential on the internal gRPC surface by @Opselon in #167
  • tasks: bounded retention sweep for the terminal-task ledger by @Opselon in #168
  • auth flow: make the revision guard real, not decorative by @Opselon in #169
  • login: render a failure as a sentence, never a raw key or a stack trace by @Opselon in #170
  • rows are mappings on both engines; text follows the recipient's language by @Opselon in #171
  • identity: refuse an account-less caller instead of inferring a scope from it by @Opselon in #172
  • ui: a fetched dialog list survives the bounds it is stored under by @Opselon in #174
  • feat(website): premium product surface, documentation guides, and the responsive-hiding fix by @Opselon in #173
  • ui: canonical button styles, catalog-driven input aliases, stricter cross-language tester by @Opselon in #175
  • api: readiness gate — a deploy cannot be recorded as deployed while authentication is down by @Opselon in #176
  • ui: style the dashboard buttons through the same funnel as every other panel by @Opselon in #177
  • fix(sync): make the per-task Edit/Delete/Reply switches decide real engine behaviour by @Opselon in #178
  • fix(i18n): localize the values interpolated into catalog templates by @Opselon in #179
  • fix(header): a deleted header stays deleted, and its button belongs to its owner by @Opselon in #181
  • fix(i18n): render the add-on catalogue from the catalog, not from literals by @Opselon in #182
  • fix(setup): one interpreter range that actually works, and stop calling healthy ports silent by @Opselon in #180
  • website: an API reference, response contract and security surfaces that cannot drift by @Opselon in #184
  • fix(dedupe): a Duplicate Filters claim is only earned by a delivery by @Opselon in #185
  • fix(i18n): name every setting in the user's language, not in English by @Opselon in #186
  • fix(i18n): stop filling localized templates with English bodies by @Opselon in #187
  • refactor(atfcli): layered CLI, full feature surface, wire contracts pinned by @Opselon in #183
  • fix(replace): one authority for replacements, and a delete click that cannot hit its neighbour by @Opselon in #188
  • fix(i18n): explain a setting in the user's language, not in English by @Opselon in #189
  • fix(blacklist,whitelist): the menu now writes where the engine reads by @Opselon in #191
  • fix(i18n): stop naming severities, categories and counters in English by @Opselon in #190
  • fix(cleaner): every cleaner option now changes the outgoing message (STEER 09) by @Opselon in #192
  • fix(i18n): one language list, and a language is named not coded by @Opselon in #193
  • fix(filters): badge, ownership and ReDoS guard now match the engine (STEER 10) by @Opselon in #194
  • fix(i18n): a value has to arrive in the template that shows it by @Opselon in #195
  • fix(i18n): a setting's own words, and the reason it refused a value by @Opselon in #196
  • fix(i18n): the condition logic is named, not coded by @Opselon in #197
  • fix(delay): one validated delay, applied once, durably (STEER 11) by @Opselon in #198
  • fix(i18n): the router's reason is a sentence, not a token by @Opselon in #199
  • test(i18n): nothing says anything to a user without the catalog by @Opselon in #200
  • fix(status): one task state, shown and written atomically (STEER 12) by @Opselon in #202
  • fix(i18n): the fourteen values that were still English everywhere by @Opselon in #201
  • fix(i18n): the escape sequence reached the screen by @Opselon in #203
  • fix(tasks): duplicate a task through create, and prove the tenant boundary (Part 2 STEER 01/02/03) by @Opselon in #205
  • fix(i18n): the English left standing inside a translated sentence by @Opselon in #204
  • fix(api): close the cross-tenant purge, bound every body, publish the whole route table by @Opselon in #206
  • fix(db): deleting a task takes its bookkeeping with it by @Opselon in #207
  • fix(queue): deleted tasks stop forwarding; transient blockers stop burning attempts by @Opselon in #208
  • chore(website): sync architecture, release notes, and cli group schemas by @Opselon in #209
  • feat(cli): professional CLI surface — auth verbs, token store, retries by @Opselon in #210
  • feat: per-task cleaner, media filters, profile recovery, invalid-chat and account-limit handling by @Opselon in #211
  • ci(i18n): fail-closed UI-copy gates for the web dashboard and mobile app by @Opselon in #212
  • fix(mobile): route every hardcoded UI string through the 10-locale catalog by @Opselon in #213
  • feat(web): ten-locale dashboard catalog (795 keys) replacing the fa/en ternaries by @Opselon in #214
  • chore(ci): regenerate the mobile ui copy baseline at zero by @Opselon in #215
  • perf(ui): shared benchmark harness + UI system contract by @Opselon in #216
  • feat(web): responsive shell, design system and route-level code splitting by @Opselon in #217
  • perf(hot-paths): health probe 52ms→0.49ms, log stats 41.8→1.7ms, indexed rule lookups by @Opselon in #218
  • feat(mobile): adaptive shell, measured contrast, virtualized lists, a11y/RTL by @Opselon in #219
  • ci(mobile): publish the debug APK from every run by @Opselon in #220
  • docs(bench): production verification at sha-06a4420 by @Opselon in #221
  • feat(i18n): whole-tree bot audit that catches what the copy gates miss by @Opselon in #222
  • feat(website): v4 visual system, installable surface, technical SEO pass by @Opselon in #223
  • feat: forward every Nth message (bot, dashboard, mobile) by @Opselon in #224
  • fix(release): bake the commit SHA into the published API image by @Opselon in #226
  • feat(autoreply): tenant-isolated AI auto-reply for bot, web and mobile (schema v28) by @Opselon in #225
  • Replace options (regex/case/word), /commands guide, and the FSM step-namespace fix by @Opselon in #227
  • feat(replace): rule manager across bot, dashboard and mobile by @Opselon in #228
  • fix(fsm): arbitrate every command against the pending flow by @Opselon in #229
  • refactor(telegram): handler registry + discovery/forwarding modules by @Opselon in #230
  • feat(forward): one-line task creation with per-task filters by @Opselon in #233
  • feat(telegram): interactive /getchannel catalog + forwarding status console by @Opselon in #232
  • feat(discovery): paged, refreshable chat lists with a cached scan by @Opselon in #234
  • fix(runtime): dedupe the 30.5k-row error/warn sweep and repair its root causes by @Opselon in #235
  • fix(api): exempt the /api-prefixed probe aliases from the API-key gate by @Opselon in #237
  • Version 2.3.0: discovery console, one-line forwarding, and the /api probe fix by @Opselon in #238

Full Changelog: v2.2.4...v2.3.0