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.
Metadata
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 | Provenance | Actions |
|---|---|---|---|---|
| boundless_aiogram-2.0.0.tar.gz | 35.7 kB | Without provenance | Details for boundless_aiogram-2.0.0.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| boundless_aiogram-2.0.0-py3-none-any.whl | Python 3 | none | any | Details for boundless_aiogram-2.0.0-py3-none-any.whl |
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
|
Security for boundless-aiogram 2.0.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.