
Product
Rust Support Now in Beta
Socket's Rust support is moving to Beta: all users can scan Cargo projects and generate SBOMs, including Cargo.toml-only crates, with Rust-aware supply chain checks.
REPL, hot-reload, keyboards, pagination, and internal dev tools — all in one. That's Raito.
REPL, hot-reload, keyboards, pagination, and internal dev tools — all in one. That's Raito.
$ raito init
creates a ready-to-use bot template in seconds_msg
, _user
, _raito
)pip install -U raito
import asyncio
from aiogram import Bot, Dispatcher
from raito import Raito
async def main() -> None:
bot = Bot(token="TOKEN")
dispatcher = Dispatcher()
raito = Raito(dispatcher, "src/handlers")
await raito.setup()
await dispatcher.start_polling(bot)
if __name__ == "__main__":
asyncio.run(main())
Raito speeds up your bot development by removing the boring parts — no more boilerplate, no more manual restarts, no more duplicated code across projects.
Everything that used to slow you down is already solved.
You can control access to commands using @rt.roles
The @rt.description
decorator adds a description to each command — they will show up in the slash menu automatically.
For commands like /ban 1234
, use @rt.params
to extract and validate the arguments.
Limit command usage with @rt.limiter
and control the rate by mode.
@router.message(filters.Command("ban"), OWNER | ADMINISTRATOR | MODERATOR)
@rt.description("Ban a user")
@rt.limiter(300, mode="chat")
@rt.params(user_id=int)
async def ban(message: types.Message, user_id: int, bot: Bot):
await bot.ban_chat_member(chat_id=message.chat.id, user_id=user_id)
await message.answer(text="✅ User banned successfully!")
Whenever you change a file with handlers, Raito automatically reloads it without restarting the bot.
You can also manage your routers manually using the .rt load
, .rt unload
, .rt reload
, or .rt routers
commands in the bot.
https://github.com/user-attachments/assets/c7ecfb7e-b709-4f92-9de3-efc4982cc926
Use built-in roles to set different access levels for team members.
The simplest, most native and most effective pagination. Unlike many other libraries, it does not use internal storage.
It is very user-friendly and fully customizable.
@router.message(filters.Command("pagination"))
async def pagination(message: Message, raito: Raito, bot: Bot):
if not message.from_user:
return
await raito.paginate(
"button_list",
chat_id=message.chat.id,
bot=bot,
from_user=message.from_user,
limit=5,
)
# mock data
BUTTONS = [
InlineKeyboardButton(text=f"Button #{i}", callback_data=f"button:{i}")
for i in range(10000)
]
@rt.on_pagination(router, "button_list")
async def on_pagination(query: CallbackQuery, paginator: InlinePaginator, offset: int, limit: int):
content = BUTTONS[offset : offset + limit]
await paginator.answer(text="Here is your buttons:", buttons=content)
Sometimes you want quick layouts. Sometimes — full control. You get both.
@rt.keyboard.static(inline=True)
def information():
return [
("📄 Terms of Service", "tos"),
[("ℹ️ About", "about"), ("⚙️ Website", "web")],
]
@rt.keyboard.dynamic(1, 2, adjust=True, inline=False)
def start_menu(builder: ReplyKeyboardBuilder, app_url: str):
builder.button(text="📱 Open App", web_app=WebAppInfo(url=app_url))
builder.button(text="💬 Support")
builder.button(text="📢 Channel")
Define startup and shutdown logic in one place.
@rt.lifespan(router)
async def lifespan(bot: Bot):
user = await bot.get_me()
rt.debug("🚀 Bot [%s] is starting...", user.full_name)
yield
rt.debug("👋🏻 Bye!")
Have an idea, found a bug, or want to improve something?
Contributions are welcome! Feel free to open an issue or submit a pull request.
If you discover a security vulnerability, please report it responsibly.
You can open a private GitHub issue or contact the maintainer directly.
There’s no bounty program — this is a solo open source project.
Use in production at your own risk.
For full details, check out the Security Policy.
Open an issue or start a discussion in the GitHub Discussions tab.
You can also ping @Aidenable for feedback or ideas.
FAQs
REPL, hot-reload, keyboards, pagination, and internal dev tools — all in one. That's Raito.
We found that raito demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Product
Socket's Rust support is moving to Beta: all users can scan Cargo projects and generate SBOMs, including Cargo.toml-only crates, with Rust-aware supply chain checks.
Product
Socket Fix 2.0 brings targeted CVE remediation, smarter upgrade planning, and broader ecosystem support to help developers get to zero alerts.
Security News
Socket CEO Feross Aboukhadijeh joins Risky Business Weekly to unpack recent npm phishing attacks, their limited impact, and the risks if attackers get smarter.