Blog

April 22, 2026

What is TGS? The Telegram sticker format explained

TGS is gzipped Lottie JSON. Here's why Telegram chose it, the strict 64 KB limit, the 512×512 canvas, and how to fit a complex sticker without going over.

If you've ever tried to make an animated Telegram sticker, you've met TGS. It's a small, weird, opinionated format — and once you understand the trade-offs, designing for it gets a lot easier.

TGS = Lottie + gzip

TGS is just gzip-compressed Lottie JSON. Lottie is Airbnb's open animation format — a JSON description of vector shapes, transforms, and keyframes. When After Effects or a code generator emits Lottie, the player walks through keyframes and renders SVG. Telegram chose it because it ticks every box: pure vector, animated, tiny, framework-agnostic, and replayable on phones from 2014.

Why gzip? Because raw Lottie JSON for a complex sticker easily hits 200–500 KB. Gzip squeezes it down by 60–80% on typical content. After compression, a rich animated sticker fits comfortably under Telegram's hard ceiling.

The 64 KB limit, where it comes from

Telegram's server rejects any TGS larger than 64 KB. This isn't arbitrary — it's the budget for instant playback. Stickers stream over a thumbnail-style channel, get cached aggressively, and have to start animating before the user finishes pressing send. 64 KB is the threshold under which every device — including a 2017 Android with 1 GB of RAM — can decode and play without jank.

If you go over, your sticker simply won't upload. There's no warning in the Telegram client; you just get a generic error. Tools like SticKit show the live size while you edit so you can rein in complexity before you hit the wall.

What inflates TGS size

  • Bezier paths with hundreds of points (a complex font glyph at large size)
  • Many independent layers each with their own keyframes
  • Long animations — every keyframe adds bytes
  • High-precision floats — Telegram's TGS validator clamps decimals, but your generator might not
  • Raster images embedded as base64 — these are not allowed and rejected

Canvas: 512×512 for stickers, 100×100 for emoji

Regular stickers render in a 512×512 square. Custom emoji are 100×100 — Telegram tightened this to keep emoji rows scannable in a chat. If you make a sticker at 512 and convert to emoji at 100, line widths and small details vanish. Designing for emoji from the start works better: chunkier strokes, fewer layers, simpler shapes.

Practical takeaways

  • Always check the live size meter — 64 KB is hard, not soft
  • One layer beats five whenever the visual works the same
  • Keep animations short: most readable stickers loop in under 2 seconds
  • Heavy fonts (Bungee Outline, Tilt Prism) inflate paths fast — pick simpler fonts for long words
  • Vector shadows are cheap; raster shadows are impossible

TGS is a constraint that pushes you toward better design. The 64 KB ceiling forces every sticker to earn its weight, and animations that respect it — short, focused, vector — are the ones people actually use.