Skip to main content


⚡ Indogram

Elegant, modern, and asynchronous Telegram MTProto API Framework in Python

Dual-import support: works with both import indogram and import pyrogram

Python 3.10+ License AsyncIO Ready Pyrogram Compatible


📖 Overview

Indogram is an actively maintained MTProto API framework for Python. It empowers developers to interact effortlessly with the Telegram MTProto API via both user accounts (custom clients/userbots) and bot identities (Bot API alternative).

Indogram is built with Dual-Import Architecture:

  • 🚀 New Projects: Use from indogram import Client, filters, types
  • 🔄 Existing Projects: Drop-in compatible with from pyrogram import Client, filters, types (no code changes needed for existing bots and plugins!)

✨ Features

  • Dual-Import Compatibility: Import as indogram or pyrogram interchangeably with 100% shared module and class identities.
  • Modern Telegram Features: Support for Stories, Topics, Forum Channels, Business Accounts, Star Gifts, Reactions, and more.
  • Async & Fast: Built for asyncio, with optional C-accelerated speedups via TgCrypto and uvloop.
  • Fully Typed: Rich type annotations with PEP 561 compliance (py.typed) for autocomplete in VS Code, PyCharm, and language servers.
  • Easy & Intuitive: Clean decorator-based event handlers (@app.on_message(), @app.on_callback_query(), etc.).

📦 Installation

Stable / Local Package

pip install indogram

High-Performance (TgCrypto & uvloop)

pip install "indogram[fast]"

QR Code Login Support

pip install "indogram[qrcode]"

Development / Direct from Source

git clone https://github.com/kurigram-org/kurigram indogram
cd indogram
pip install .

🚀 Quick Start

1. Simple Echo Bot (using indogram)

from indogram import Client, filters
from indogram.types import Message

# Initialize client (Get api_id and api_hash from https://my.telegram.org)
app = Client(
    "my_bot",
    api_id=1234567,
    api_hash="your_api_hash_here",
    bot_token="your_bot_token_here",
)


@app.on_message(filters.command("start"))
async def start_command(client: Client, message: Message):
    await message.reply_text("👋 Halo! Selamat datang di bot yang ditenagai oleh **Indogram**!")


@app.on_message(filters.text & filters.private)
async def echo(client: Client, message: Message):
    await message.reply_text(f"Anda berkata: {message.text}")


if __name__ == "__main__":
    app.run()

2. Userbot / MTProto Client

import asyncio
from indogram import Client

app = Client(
    "my_account",
    api_id=1234567,
    api_hash="your_api_hash_here",
)


async def main():
    async with app:
        me = await app.get_me()
        print(f"Logged in as: {me.first_name} (@{me.username})")
        await app.send_message("me", "✨ Pesan tes dari Indogram!")


if __name__ == "__main__":
    asyncio.run(main())

3. Existing Pyrogram Code (Zero Changes Required)

Existing code written for Pyrogram continues to work out-of-the-box:

from pyrogram import Client, filters

app = Client("legacy_bot", bot_token="TOKEN")


@app.on_message(filters.text)
async def handler(client, message):
    await message.reply("Still works seamlessly with Indogram!")


app.run()

🛠️ Building & Recompiling MTProto Schemas

If you modify API TL schemas or need to build distribution wheels:

# Compile MTProto API & error definitions
python -c "from compiler.api.compiler import start; start(False); from compiler.errors.compiler import start as start_err; start_err()"

# Build wheel & sdist distributions
python -m build

📄 License & Attribution

Indogram is licensed under the GNU Lesser General Public License v3.0 (LGPL-3.0).

Release files for indogram 2.2.26

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for indogram 2.2.26
File Size Uploaded
indogram-2.2.26.tar.gz 801.5 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for indogram 2.2.26
File Interpreter ABI Platform
indogram-2.2.26-py3-none-any.whl Python 3 none any Details

Total release size: 7.0 MB

Release files / indogram-2.2.26.tar.gz

Download URL indogram-2.2.26.tar.gz
Size 801.5 kB
Tags Source
SHA-256 checksum
How to use checksums
8cf3506ad7df0c25f1cfac462279f57ae50b227f71952ad871fa95d9f64b8774
BLAKE2b-256 checksum
How to use checksums
9964c629918f196d8e4884d74b78221e183660315889029dac460f0626df3ac7
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.11.9

Release files / indogram-2.2.26-py3-none-any.whl

Download URL indogram-2.2.26-py3-none-any.whl
Size 6.2 MB
Tags Python 3
SHA-256 checksum
How to use checksums
a204b27fb4ef7313ece89c0aa499a901e948169587106bb72281d5fc1142f133
BLAKE2b-256 checksum
How to use checksums
0b409bc53f00d3af9ad53fc95b309dde520da844b7a3bd2b6b142250a00c6f19
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.11.9

Release history Release notifications | RSS feed

This release

2.2.26 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page