Skip to content

SQLite Storage

File-based storage ideal for single-process bots and local development. Uses modernc.org/sqlite (pure Go, no CGO).

Install

bash
go get github.com/mtgo-labs/storage/sqlite

Usage

go
import (
    "github.com/mtgo-labs/storage/sqlite"
    tg "github.com/mtgo-labs/mtgo/telegram"
)

// Open or create a database file
store, err := sqlite.Open("bot.db")
if err != nil {
    log.Fatal(err)
}
defer store.Close()

client, _ := tg.NewClient(apiID, apiHash, &tg.Config{
    BotToken:    botToken,
    SessionName: "my_bot",
    Storage:     store,
    SavePeers:   true,
})

With NewAdapter

go
import "github.com/mtgo-labs/storage"

ext, _ := sqlite.Open("bot.db")
adapter, _ := storage.NewAdapter(ext)
defer ext.Close()

client, _ := tg.NewClient(apiID, apiHash, &tg.Config{
    BotToken:    botToken,
    SessionName: "my_bot",
    Storage:     adapter,
})

API

MethodDescription
Open(path string)Open or create a SQLite database file
OpenInMemory()Create an in-memory SQLite database
Close()Close the database connection

The returned *SQLiteStorage implements storage.Storage and storage.ConversationStore.

Schema

Tables are created automatically on first use:

  • sessions — session data, auth keys, DC info
  • peers — cached peer information
  • kv — key-value metadata
  • conversations — active conversation state

The schema is generated by sqlc from storage/sqlc/sqlite/queries.sql.

In-Memory Mode

For testing or ephemeral bots:

go
store, _ := sqlite.OpenInMemory()
defer store.Close()

JavaScript/WASM

SQLite supports WASM compilation via sqlite_js.go which uses the sql.js driver. This enables running bots in browser environments.

Released under the Apache-2.0 License.