Skip to content

GramIOCreate your Telegram bots with convenience!

Latest Updates

Testing Gets Richer, CallbackData Gets Safer, TypeScript API Reference Launches — February 18–22, 2026

@gramio/test v0.3.0 adds 9 new methods: edit messages, forward, pin, send media groups, and click inline buttons by label text. @gramio/callback-data v0.1.0 ships safeUnpack() — never crash on stale buttons. The full TypeScript API reference launches at /api/.

All changelogs →

Get started

This command will help you create a project with GramIO (and ORM, linters and plugins) the easiest way.

bash
npm create gramio@latest ./bot
bash
yarn create gramio@latest ./bot
bash
pnpm create gramio@latest ./bot
bash
bun create gramio@latest ./bot
bash
TODO:// Deno is supported but not in scaffolding

For more information, see the «Get started» section.

GramIO in action

Example which uses some interesting features.

ts
import { 
Bot
,
format
,
bold
,
code
} from "gramio";
import {
findOrRegisterUser
} from "./utils";
const
bot
= new
Bot
(
process
.
env
.
BOT_TOKEN
as string)
.
derive
("message", async () => {
const
user
= await
findOrRegisterUser
();
return {
user
,
}; }) .
on
("message", (
context
) => {
context
.
user
;
// // // // // // // return
context
.
send
(
format
`
Hi, ${
bold
(
context
.
user
.
name
)}!
You balance: ${
code
(
context
.
user
.
balance
)}`);
}) .
on
("callback_query", (
context
) => {
// //
context
.user;
Property 'user' does not exist on type 'CallbackQueryContext<Bot<{}, DeriveDefinitions & { message: { user: { id: number; name: string; balance: number; }; }; }>>'.
});
user: {
    id: number;
    name: string;
    balance: number;
}