explaingit

lyosu/hortay-android

16KotlinAudience · developerComplexity · 4/5ActiveLicenseSetup · hard

TLDR

Android app that shows your Telegram channel subscriptions as one chronological feed instead of a chat list, with no analytics or third-party push.

Mindmap

mindmap
  root((hortay-android))
    Inputs
      Telegram account via MTProto
      Public channel previews
      Folder tabs
    Outputs
      Chronological feed
      Read tracking
      Comments overlay
    Use Cases
      Read channels like a timeline
      Browse channels without login
      Privacy focused Telegram reader
    Tech Stack
      Kotlin
      Jetpack Compose
      TDLib
      Material 3

Things people build with this

USE CASE 1

Read your Telegram channel subscriptions as a single timeline feed

USE CASE 2

Browse public Telegram channels anonymously in guest mode

USE CASE 3

Self-build a privacy-respecting Telegram reader with no trackers

Tech stack

KotlinJetpack ComposeTDLibMaterial 3DockerGradle

Getting it running

Difficulty · hard Time to first run · 1day+

Building TDLib in Docker takes about 30 minutes the first time, plus you need JDK 17, Android SDK, and Telegram API credentials before gradle can install the debug build.

GPL-3.0: free to use and modify, but derivative apps must also be open source under GPL.

In plain English

Hortay is an Android app that lets you read your subscribed Telegram channels as a single chronological feed, in the style of a Twitter timeline, rather than the usual chat-list view. The name is Ukrainian for "scroll!", borrowed from the verb meaning to leaf through. It is open source under GPL-3.0 and is also published on Google Play. The app deliberately avoids common tracking and notification systems. There is no Firebase, no Crashlytics, no analytics, and no third-party push service. According to the README, the internet permission is used only for talking to Telegram itself, and in guest mode for anonymous previews from t.me/s/ channel pages. Hortay offers two reading modes. The full mode uses MTProto through TDLib, the official Telegram client library, so you sign in as you would with the regular Telegram app. The guest mode lets you browse public channel previews without an account. The reading experience is built around an OldestUnreadFirst boundary, dwell-based read tracking, snap scrolling, folder tabs, and a scroll-to-bottom control with an unread badge. Posts support polls including quiz reveal and multi-answer votes, reactions, custom emoji, animated stickers in TGS, WebM, and WEBP formats, albums, inline videos, and round video messages. A comments overlay with predictive back navigation handles reply chains and a user-profile sheet. The interface uses Material 3 Expressive with dynamic color and a motion scheme that respects reduced-motion settings, and ships with English and Ukrainian translations including full plurals. To build the app you need JDK 17, Docker for the TDLib build step, and the Android SDK. You first request an api_id and api_hash from Telegram's developer portal, copy local.properties.example to local.properties, fill in the credentials, then run a script that builds TDLib in Docker, which takes about thirty minutes the first time and around ten minutes after that. Once TDLib is built, running ./gradlew :app:installDebug produces a debug install. The codebase is single-Activity, Compose-only, and split into three modules: the main app, a vendored TDLib JNI module, and a baseline profile module. Dependency injection is manual through an AppGraph object, with no Hilt or Retrofit. Contribution guidelines ask for Conventional Commits with package scopes and reading ARCHITECTURE.md before non-trivial changes, since many decisions in the architecture document are described as load-bearing.

Copy-paste prompts

Prompt 1
Walk me through getting api_id and api_hash from Telegram and wiring them into local.properties for hortay-android
Prompt 2
Explain the OldestUnreadFirst boundary and dwell-based read tracking in hortay-android with a code example
Prompt 3
Show me how to add a new folder tab to the hortay-android Compose UI
Prompt 4
What changes do I need to make in AppGraph to swap in my own dependency for the TDLib client?
Open on GitHub → Explain another repo

Generated 2026-05-22 · Model: sonnet-4-6 · Verify against the repo before relying on details.