{"id":50332522,"url":"https://github.com/lyosu/hortay-android","last_synced_at":"2026-05-29T11:00:16.358Z","repository":{"id":359110982,"uuid":"1244579688","full_name":"LyoSU/hortay-android","owner":"LyoSU","description":"A Twitter-style reader for Telegram channels. Built on TDLib + Jetpack Compose + Material 3 Expressive. No analytics, no Firebase, no third-party push.","archived":false,"fork":false,"pushed_at":"2026-05-28T18:39:34.000Z","size":8039,"stargazers_count":20,"open_issues_count":0,"forks_count":2,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-28T20:22:52.486Z","etag":null,"topics":["android","jetpack-compose","kotlin","material-you","material3","tdlib","telegram","telegram-client"],"latest_commit_sha":null,"homepage":"https://play.google.com/store/apps/details?id=dev.lyo.hortay","language":"Kotlin","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/LyoSU.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-05-20T11:56:52.000Z","updated_at":"2026-05-28T18:39:43.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/LyoSU/hortay-android","commit_stats":null,"previous_names":["lyosu/hortay-android"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/LyoSU/hortay-android","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/LyoSU%2Fhortay-android","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/LyoSU%2Fhortay-android/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/LyoSU%2Fhortay-android/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/LyoSU%2Fhortay-android/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/LyoSU","download_url":"https://codeload.github.com/LyoSU/hortay-android/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/LyoSU%2Fhortay-android/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33648534,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-05-29T02:00:06.066Z","response_time":107,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["android","jetpack-compose","kotlin","material-you","material3","tdlib","telegram","telegram-client"],"created_at":"2026-05-29T11:00:14.862Z","updated_at":"2026-05-29T11:00:16.321Z","avatar_url":"https://github.com/LyoSU.png","language":"Kotlin","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Hortay\n\n*Pronounced **hor-TYE** /ɦorˈtaj/ — Ukrainian for \"scroll!\", the imperative of гортати (to leaf through)*\n\nA Twitter-style reader for Telegram channels. Read your subscribed channels as one chronological feed instead of a chat list.\n\nNo Firebase, no Crashlytics, no analytics, no third-party push. INTERNET permission is used only for Telegram itself and, in guest mode, anonymous `t.me/s/` previews.\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://play.google.com/store/apps/details?id=dev.lyo.hortay\"\u003e\n    \u003cimg alt=\"Get it on Google Play\" src=\"https://play.google.com/intl/en_us/badges/static/images/badges/en_badge_web_generic.png\" height=\"60\"\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"playstore/screens/photos/01-hero.jpg\" alt=\"Hortay feed\" width=\"280\"\u003e\n\u003c/p\u003e\n\n## Highlights\n\n- **Two modes** — full MTProto via TDLib, or guest mode reading public `t.me/s/\u003cchannel\u003e` previews without an account\n- **Reader-first UX** — OldestUnreadFirst boundary, dwell-based read tracking, snap scroll, folder tabs, scroll-to-bottom with unread badge\n- **Full post features** — polls (vote, quiz reveal, multi-answer), reactions, custom emoji, animated stickers (TGS/WebM/WEBP), albums, inline videos, round video messages\n- **Comments overlay** with predictive back, reply chains, and a user-profile sheet\n- **Material 3 Expressive** — dynamic color, motion scheme, reduced-motion aware\n- **13 languages** — English, Ukrainian, Russian, Spanish, German, French, Italian, Portuguese (Brazil), Polish, Turkish, Indonesian, Persian, Arabic — with proper CLDR plural forms throughout\n\n## Building\n\nRequirements: JDK 17, Docker (for the TDLib build), Android SDK\n\n1. Get `api_id` / `api_hash` at \u003chttps://my.telegram.org\u003e → API development tools\n2. Copy `local.properties.example` to `local.properties` and fill in the credentials\n3. Build TDLib (Docker; ~30 min first run, ~10 min after):\n\n   ```bash\n   ./scripts/update-tdlib.sh                  # upstream master (last build is recorded in scripts/tdlib-version.txt)\n   ./scripts/update-tdlib.sh 8fc2344f         # specific commit SHA\n   ```\n\n4. Install a debug build:\n\n   ```bash\n   ./gradlew :app:installDebug\n   ```\n\nThe Gradle wrapper is checked in — no separate `gradle wrapper` step\n\n## Stack\n\nAGP 9.2.0 · Gradle 9.4.1 · Kotlin 2.3.10 (K2) · Compose BOM 2026.04.01 · Material 3 1.5.0-alpha19 · minSdk 26 / targetSdk 36 · TDLib pinned in `scripts/tdlib-version.txt` · Coroutines 1.10.1 · Coil 3.3.0 · SQLDelight 2.3 (guest mode only) · DataStore 1.2.0\n\n## Architecture\n\nSee [ARCHITECTURE.md](ARCHITECTURE.md) for module layout, load-bearing decisions, and TDLib usage rules.\n\nShort version: single-Activity, Compose-only, three modules — `:app`, `:libtdlib` (vendored TDLib JNI), `:baselineprofile`. Manual DI through `AppGraph`. No Hilt, no Retrofit, no Firebase.\n\n## Contributing\n\nIssues and PRs welcome. Read [ARCHITECTURE.md](ARCHITECTURE.md) before non-trivial changes — many decisions are load-bearing and documented inline. Conventional Commits with package scopes: `feat(timeline):`, `fix(media):`, `build(beta):`, etc.\n\n## Security\n\nSee [SECURITY.md](SECURITY.md) for how to report vulnerabilities.\n\n## License\n\n[GPL-3.0-or-later](LICENSE)\n\n---\n\nMade in Ukraine 🇺🇦 · [Українською](README.uk.md)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flyosu%2Fhortay-android","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flyosu%2Fhortay-android","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flyosu%2Fhortay-android/lists"}