boundless-aiogram
Production-ready Telegram bot framework with CLI scaffolding — powering bots with 1000s of users
boundless-aiogram is a battle-tested bot framework built on top of aiogram 3.x. It provides a complete project structure, CLI tools, and best practices out of the box — so you can focus on building features, not boilerplate.
2,000+ downloads and counting. Used in production bots serving thousands of users.
🚀 Bots Built With This Framework
| Bot | Users | Monthly Activity |
|---|---|---|
| Smart English HR | 1,200+ | 100+ applications |
| Cake Bot | 200+ | Active daily |
| + More in production | — | — |
✨ Features
- 🛠️ CLI Scaffolding — Generate new bot projects instantly
- 📁 Production Structure — Organized handlers, database, utils, languages
- 🗄️ Database Layer — SQLAlchemy + Alembic migrations built-in
- 🌍 Multi-language — i18n support out of the box
- ⚙️ Core Module — Config and middleware ready to go
- 🧪 Test Setup — Testing structure included
- 📤 File Uploads — Upload handling utilities
📦 Installation
pip install boundless-aiogram
🚀 Quick Start
Create a New Bot Project
# Generate new project
boundless-aiogram init my-awesome-bot
# Navigate to project
cd my-awesome-bot
# Install dependencies
pip install -r requirements.txt
# Configure environment
cp .env.example .env
# Edit .env with your bot token
# Run migrations
alembic upgrade head
# Start your bot
python main.py
That's it. You're ready to build.
📁 Generated Project Structure
my-awesome-bot/
│
├── bot/ # Bot handlers and logic
│ ├── handlers/ # Message & callback handlers
│ ├── keyboards/ # Inline & reply keyboards
│ ├── states/ # FSM states
│ └── filters/ # Custom filters
│
├── core/ # Core configuration
│ ├── config.py # Settings management
│ └── middleware.py # Bot middleware
│
├── database/ # Database layer
│ ├── models.py # SQLAlchemy models
│ ├── crud.py # CRUD operations
│ └── session.py # DB session management
│
├── languages/ # Internationalization
│ ├── en.py # English
│ ├── uz.py # Uzbek
│ └── ru.py # Russian
│
├── migrations/ # Alembic migrations
│ └── versions/ # Migration files
│
├── utils/ # Utility functions
│ └── helpers.py # Common helpers
│
├── tests/ # Test suite
│
├── main.py # Entry point
├── alembic.ini # Alembic config
├── requirements.txt # Dependencies
├── .env.example # Environment template
└── .gitignore # Git ignore
🛠️ CLI Commands
| Command | Description |
|---|---|
boundless-aiogram init <name> |
Create new bot project |
boundless-aiogram --version |
Show version |
boundless-aiogram --help |
Show help |
🏗️ Architecture
┌─────────────────────────────────────────────────┐
│ BOUNDLESS-AIOGRAM STRUCTURE │
├─────────────────────────────────────────────────┤
│ │
│ ┌─────────────────────────────────────────┐ │
│ │ BOT │ │
│ │ Handlers • Keyboards • States │ │
│ └────────────────────┬────────────────────┘ │
│ │ │
│ ┌────────────────────▼────────────────────┐ │
│ │ CORE │ │
│ │ Config • Middleware │ │
│ └────────────────────┬────────────────────┘ │
│ │ │
│ ┌────────┬───────────┴───────────┬────────┐ │
│ │ │ │ │ │
│ ▼ ▼ ▼ ▼ │
│ ┌──────┐ ┌────────┐ ┌───────────┐ ┌──────┐ │
│ │Utils │ │Database│ │ Languages │ │Tests │ │
│ │ │ │Alembic │ │ i18n │ │ │ │
│ └──────┘ └────────┘ └───────────┘ └──────┘ │
│ │
└─────────────────────────────────────────────────┘
📖 Usage Examples
Basic Handler
from aiogram import Router
from aiogram.filters import Command
from aiogram.types import Message
router = Router()
@router.message(Command("start"))
async def cmd_start(message: Message):
await message.answer("Welcome! 🚀")
Using Database
from database.crud import create_user, get_user
from database.session import get_session
async def register_user(telegram_id: int, name: str):
async with get_session() as session:
user = await create_user(session, telegram_id, name)
return user
Multi-language Support
from languages import get_text
async def greet(message: Message, lang: str = "en"):
text = get_text("welcome", lang)
await message.answer(text)
FSM States
from aiogram.fsm.state import State, StatesGroup
class RegistrationStates(StatesGroup):
first_name = State()
last_name = State()
phone = State()
⚙️ Configuration
Environment Variables
# Bot
BOT_TOKEN=your-bot-token-from-botfather
# Database
DATABASE_URL=postgresql://user:pass@localhost:5432/mybot
# Or SQLite:
# DATABASE_URL=sqlite:///bot.db
# Settings
ADMIN_IDS=123456789,987654321
DEFAULT_LANGUAGE=en
DEBUG=False
🗄️ Database Migrations
# Create new migration
alembic revision --autogenerate -m "Add users table"
# Apply all migrations
alembic upgrade head
# Rollback one step
alembic downgrade -1
# View current version
alembic current
🧪 Testing
# Run tests
pytest
# With coverage
pytest --cov=bot --cov=database
🚀 Deployment
systemd (Linux)
[Unit]
Description=My Telegram Bot
After=network.target
[Service]
Type=simple
User=ubuntu
WorkingDirectory=/path/to/my-bot
ExecStart=/path/to/venv/bin/python main.py
Restart=always
RestartSec=10
[Install]
WantedBy=multi-user.target
Docker
FROM python:3.12-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . .
CMD ["python", "main.py"]
📊 Why boundless-aiogram?
| Feature | boundless-aiogram | Starting from scratch |
|---|---|---|
| Project setup | 1 command |
30+ minutes |
| Database layer | ✅ Included | Manual setup |
| Migrations | ✅ Alembic ready | Manual setup |
| Multi-language | ✅ Built-in | Manual setup |
| Best practices | ✅ Enforced | Hope for the best |
| Production tested | ✅ 1000s of users | Unknown |
🤝 Contributing
- Fork the repository
- Create feature branch (
git checkout -b feature/NewFeature) - Commit changes (
git commit -m 'Add NewFeature') - Push to branch (
git push origin feature/NewFeature) - Open a Pull Request
📄 License
MIT License - see LICENSE for details.
📞 Support
- Issues: GitHub Issues
- PyPI: pypi.org/project/boundless-aiogram
Stop writing boilerplate. Start building bots.
Release files for boundless-aiogram 2.0.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| boundless_aiogram-2.0.0.tar.gz | 35.7 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| boundless_aiogram-2.0.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 86.6 kB
Release files / boundless_aiogram-2.0.0.tar.gz
| Download URL | boundless_aiogram-2.0.0.tar.gz |
|---|---|
| Size | 35.7 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
da7d0fef7631bb1c8bca01910cdcc979e0aff1a9fc2f377c7138bcf6145cd3eb
|
|
BLAKE2b-256 checksum How to use checksums |
2d9dab999f1c3e306bc15391639f46ae031e4954fb8dcae6755e21c0bad6a89e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.14.3
|
Release files / boundless_aiogram-2.0.0-py3-none-any.whl
| Download URL | boundless_aiogram-2.0.0-py3-none-any.whl |
|---|---|
| Size | 50.9 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
5bc82831d5792709771667afe74412979453c4b0af3cbf6071791f5722ba99d2
|
|
BLAKE2b-256 checksum How to use checksums |
b5a151f4ade2ec19c66c2928672f5424358c7ac9808198f26bb1eb6b74d6b2dd
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.14.3
|