Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

68 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Shiiru シール

Your Telegram stickers, right inside iMessage.

Shiiru is a native UIKit iOS app that logs into your Telegram account (via TDLib, Telegram's official client library), lets you pick your installed sticker packs, custom emoji, and saved GIFs, converts them to iMessage-compatible formats, and serves them through a bundled iMessage extension — with a Telegram-fluent UI: spring animations, haptics, animated Lottie pack covers, and a sticker panel that behaves exactly like Apple's own.

Shiiru (シール) is simply what Japanese calls stickers.

How it works

┌────────────── Shiiru.app ──────────────┐      ┌── Messages.app ──┐
│ TDLib (MTProto) ── downloads stickers │      │ MessagesExtension │
│ StickerConverter                      │      │ pack tabs + grid  │
│   WEBP → PNG                          │─────▶│ MSStickerView     │
│   TGS  → APNG (Lottie, ≤500 KB)       │ app  │ tap-to-send /     │
│   WEBM → APNG (libvpx VP9+alpha)      │ group│ drag-to-peel      │
│ manifest.json + sticker files         │      │                   │
└───────────────────────────────────────┘      └───────────────────┘
  • The app owns the Telegram session (phone → code → optional 2FA password, registration for new numbers is supported too) and syncs the packs you toggle on into the shared app-group container.
  • The iMessage extension reads the manifest and exposes every synced pack in a Telegram-style panel. Stickers are native MSStickers, so tapping attaches them to the composer and dragging peels them onto any bubble. Animated packs are converted to APNG and animate in the conversation.

Your Telegram session never touches any third-party server — TDLib talks to Telegram directly from the device, and stickers stay on-device.

Setup

  1. Get Telegram API credentials (2 minutes):

    Until you do this, the app boots into a friendly setup screen.

  2. Generate the Xcode project (requires XcodeGen):

    xcodegen generate
    open Shiiru.xcodeproj
  3. Run the Shiiru scheme on an iOS 16+ simulator or device. Dependencies (TDLibKit with prebuilt TDLib 1.8.66, Lottie) resolve via SPM.

  4. In Messages, open any conversation → +Shiiru. (On a real device you'll need your own development team + bundle identifiers for signing; the app group group.dev.alany.shiiru must be registered to your team.)

Sticker conversion

Telegram format iMessage output Notes
WEBP (static) PNG 512 px decoded natively by ImageIO
TGS (animated Lottie) animated APNG rendered with Lottie at up to 512 px/30 fps; a custom median-cut + Floyd–Steinberg indexed APNG encoder (pngquant-style) keeps files under Apple's 500 KB sticker limit at full quality
WEBM (video) animated APNG VP9 (+alpha in BlockAdditions) decoded with a vendored libvpx build and a purpose-built WebM demuxer
Custom emoji (100 px) PNG/APNG cropped to the artwork's alpha bounding box and enlarged to fill the sticker canvas
Saved GIFs GIF / APNG GIFs pass through untouched when within 500 KB; MP4 animations decode via AVFoundation

Testing

xcodebuild -project Shiiru.xcodeproj -scheme Shiiru \
  -destination 'platform=iOS Simulator,name=iPhone 17 Pro' test

The unit tests exercise the conversion pipeline with real fixtures: gzip inflation of TGS, WEBP → PNG compliance (size + dimensions), and TGS → APNG (multi-frame, non-blank, under 500 KB).

Development notes:

  • TelegramConfig.useTestDC switches TDLib to Telegram's test datacenter (+99966XYYYY test numbers). Note that Telegram heavily restricts the publicly-documented sample API credentials there — use your own.
  • Scripts/generate_icons.swift regenerates the app/extension icon sets.

Project layout

project.yml               XcodeGen manifest (targets, entitlements, SPM deps)
App/Sources/Config/       Telegram API credentials
App/Sources/Core/         TelegramService (TDLib), StickerSyncEngine, StickerConverter
App/Sources/UI/           Onboarding, pack list, settings (all UIKit, code-only)
MessagesExtension/        iMessage app: sticker panel with pack tabs
Shared/                   App-group store + manifest, compiled into both targets
Tests/                    Converter unit tests + fixtures

Known limitations

  • Extremely complex or long animated stickers may reduce frame rate or fall back to a static frame to respect Apple's 500 KB limit.
  • Premium-only interactive effects of custom emoji are not reproduced; they sync as regular animated stickers.

License & acknowledgements

Shiiru is open source, released under the GNU General Public License v2.0 or later (SPDX: GPL-2.0-or-later, Copyright © 2026 Alan Ye). It stands on:

Full license texts are shown in-app under Settings → Acknowledgements.

Privacy

Everything happens on-device; there are no servers, analytics, or tracking. See PRIVACY.md (also shown in-app under Settings → Privacy Policy).

About

シール

Resources

Stars

6 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages