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.
┌────────────── 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.
-
Get Telegram API credentials (2 minutes):
- Log in at my.telegram.org
- Open API development tools, create an app (any name)
- Copy
api_idandapi_hashintoApp/Sources/Config/TelegramConfig.swift
Until you do this, the app boots into a friendly setup screen.
-
Generate the Xcode project (requires XcodeGen):
xcodegen generate open Shiiru.xcodeproj
-
Run the
Shiiruscheme on an iOS 16+ simulator or device. Dependencies (TDLibKit with prebuilt TDLib 1.8.66, Lottie) resolve via SPM. -
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.shiirumust be registered to your team.)
| 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 |
xcodebuild -project Shiiru.xcodeproj -scheme Shiiru \
-destination 'platform=iOS Simulator,name=iPhone 17 Pro' testThe 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.useTestDCswitches TDLib to Telegram's test datacenter (+99966XYYYYtest numbers). Note that Telegram heavily restricts the publicly-documented sample API credentials there — use your own.Scripts/generate_icons.swiftregenerates the app/extension icon sets.
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
- 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.
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:
- TDLib — Boost Software License 1.0
- TDLibKit — MIT
- Lottie — Apache 2.0
- libvpx — BSD-3-Clause (vendored VP9 decoder)
- PhoneNumberKit — MIT (phone number formatting)
- Telegram-iOS — GPL-2.0-or-later (login monkey animations)
Full license texts are shown in-app under Settings → Acknowledgements.
Everything happens on-device; there are no servers, analytics, or tracking. See PRIVACY.md (also shown in-app under Settings → Privacy Policy).