tursodatabase/turso
tursodatabase/turso has 25,219 GitHub stars and 1,543 forks. GitHot measured +9 stars in 24 hours and +74 in 7 days. Last checked 2026-11-11 17:59 UTC. Last push 2026-11-03.
用 Rust 编写的 SQL 数据库:兼容 SQLite,现在也支持 Postgres(实验性)。数据库领域的 LLVM。
可以做什么
- SQLite compatibility for SQL dialect, file formats, and the C API, tracking SQLite version 3.50.4 [see document for details]
- BEGIN CONCURRENT for improved write throughput using multi-version concurrency control (MVCC).
- Change data capture (CDC) for real-time tracking of database changes.
- Asynchronous I/O support on Linux with io_uring
实测星标增长
- 24小时
- +9
- 7天
- +74
- 15天
- 正在收集历史
- 1个月
- 正在收集历史
各周期内的星标净变化,周期相互重叠,并非每日新增。缺失的测量保持空白。星标代表关注度,不代表软件质量。
README.zh-CN.md
原文
Turso Database
一个进程内 SQL 数据库,兼容 SQLite,现在还支持 Postgres 前端。
English | 简体中文
关于
Turso 是一个用 Rust 编写的进程内 SQL 数据库,兼容 SQLite,目前已在多个组织的生产环境中运行。
Turso 同时也是一台虚拟机。与 SQLite 一样,它把 SQL 编译成这台机器(即 VDBE)的字节码,然后执行字节码。正是这种设计让一个引擎可以承载多种 SQL 方言:SQLite 是第一个也是主要的前端,而 Postgres 现在也拥有了自己的前端,具备自己的方言和线协议(wire protocol)。未来还会有更多。我们的目标是成为数据库领域的 LLVM——以一个现代、可靠的核心,承载众多编译到其上的前端。
这个核心有多通用?通用到可以在它上面运行 Doom。
查看 FAQ 了解项目迈向 1.0 的进展。
特性与路线图
- SQLite 兼容性:兼容 SQL 方言、文件格式和 C API,跟踪 SQLite 3.50.4 版本,详见兼容性文档
BEGIN CONCURRENT:使用多版本并发控制(MVCC)提升写入吞吐量。- 变更数据捕获(CDC):实时跟踪数据库变更。
- 多语言支持:
- 异步 I/O:在 Linux 上通过
io_uring支持。 - 跨平台:支持 Linux、macOS、Windows 和浏览器(通过 WebAssembly)。
- 向量支持:包括精确搜索和向量操作。
- 改进的模式管理:包括扩展的
ALTER支持和更快的模式变更。
数据库还具有以下实验性特性:
- Postgres 兼容性:兼容 SQL 方言和线协议,详见兼容性参考。
- 静态加密:保护本地数据。
- 增量计算:使用 DBSP 进行增量视图维护和查询订阅。
- 全文搜索:由出色的 tantivy 库驱动。
- 多进程 WAL 协调:通过
.tshmsidecar 文件实现跨进程的 WAL 读写。
以下功能在我们的当前路线图上:
- 向量索引:快速近似向量搜索,类似 libSQL 向量搜索。
快速上手
更多信息请参阅 Turso 数据库手册。
💻 命令行
你可以通过以下命令安装最新的 `turso` 发布版:
curl --proto '=https' --tlsv1.2 -LsSf \
https://github.com/tursodatabase/turso/releases/latest/download/turso_cli-installer.sh | sh
然后启动交互式 shell:
$ tursodb
这将启动 Turso 交互式 shell,你可以在其中执行 SQL 语句:
Turso
Enter ".help" for usage hints.
Connected to a transient in-memory database.
Use ".open FILENAME" to reopen on a persistent database
turso> CREATE TABLE users (id INT, username TEXT);
turso> INSERT INTO users VALUES (1, 'alice');
turso> INSERT INTO users VALUES (2, 'bob');
turso> SELECT * FROM users;
1|alice
2|bob
你也可以通过以下方式构建并运行最新的开发版本:
cargo run
如果你喜欢 Docker,我们也考虑到了。只需在仓库根目录运行:
make docker-cli-build && \
make docker-cli-run
🦀 Rust
cargo add turso
示例用法:
let db = Builder::new_local("sqlite.db").build().await?;
let conn = db.connect()?;
let res = conn.query("SELECT * FROM users", ()).await?;
✨ JavaScript
npm i @tursodatabase/database
示例用法:
import { connect } from '@tursodatabase/database';
const db = await connect('sqlite.db');
const stmt = db.prepare('SELECT * FROM users');
const users = stmt.all();
console.log(users);
🐍 Python
uv pip install pyturso
示例用法:
import turso
con = turso.connect("sqlite.db")
cur = con.cursor()
res = cur.execute("SELECT * FROM users")
print(res.fetchone())
🦫 Go
go get turso.tech/database/tursogo
go install turso.tech/database/tursogo
示例用法:
import (
"database/sql"
_ "turso.tech/database/tursogo"
)
conn, _ = sql.Open("turso", "sqlite.db")
defer conn.Close()
stmt, _ := conn.Prepare("select * from users")
defer stmt.Close()
rows, _ = stmt.Query()
for rows.Next() {
var id int
var username string
rows.Scan(&id, &username)
fmt.Printf("User: ID: %d, Username: %s\n", id, username)
}
️#️⃣ .NET
示例用法:
using Turso;
using var connection = new TursoConnection("Data Source=:memory:");
connection.Open();
connection.ExecuteNonQuery("CREATE TABLE t(a, b)");
var rowsAffected = connection.ExecuteNonQuery("INSERT INTO t(a, b) VALUES (1, 2), (3, 4)");
Console.WriteLine($"RowsAffected: {rowsAffected}");
using var command = connection.CreateCommand();
command.CommandText = "SELECT * FROM t";
using var reader = command.ExecuteReader();
while (reader.Read())
{
var a = reader.GetInt32(0);
var b = reader.GetInt32(1);
Console.WriteLine($"Value1: {a}, Value2: {b}");
}
🤖 MCP 服务器模式
Turso CLI 内置了 Model Context Protocol(MCP) 服务器,可以让 AI 助手与你的数据库交互。
通过以下命令启动 MCP 服务器:
tursodb your_database.db --mcp
配置
将 Turso 添加到你的 MCP 客户端配置中:
{
"mcpServers": {
"turso": {
"command": "/path/to/.turso/tursodb",
"args": ["/path/to/your/database.db", "--mcp"]
}
}
}
可用工具
MCP 服务器提供九个数据库交互工具:
open_database- 打开一个新数据库current_database- 描述当前数据库list_tables- 列出数据库中的所有表describe_table- 描述指定表的结构execute_query- 执行只读 SELECT 查询insert_data- 向表中插入新数据update_data- 更新表中的现有数据delete_data- 删除表中的数据schema_change- 执行模式修改语句(CREATE TABLE、ALTER TABLE、DROP TABLE)
连接后,你可以这样问你的 AI 助手:
- "显示数据库中的所有表"
- "users 表的模式是什么?"
- "找出所有点赞数超过 100 的帖子"
- "插入一个名为 ‘Alice’、邮箱为 ‘[email protected]’ 的新用户"
MCP 客户端
Claude Code
如果你在使用 Claude Code,可以通过内置的 MCP 管理命令轻松连接到你的 Turso MCP 服务器:
快速设置
添加 MCP 服务器到 Claude Code:
claude mcp add my-database -- tursodb ./path/to/your/database.db --mcp重启 Claude Code 以激活连接
开始查询——用自然语言向你的数据库提问!
命令解析
claude mcp add my-database -- tursodb ./path/to/your/database.db --mcp
# ↑ ↑ ↑ ↑
# | | | |
# Name | Database path MCP flag
# Separator
my-database- 为你的 MCP 服务器取任意名称--- Claude 选项与你的命令之间的必需分隔符tursodb- Turso 数据库 CLI./path/to/your/database.db- SQLite 数据库文件路径--mcp- 启用 MCP 服务器模式
使用示例
# For a local project database
cd /your/project
claude mcp add my-project-db -- tursodb ./data/app.db --mcp
# For an absolute path
claude mcp add analytics-db -- tursodb /Users/you/databases/analytics.db --mcp
# For a specific project (local scope)
claude mcp add project-db --local -- tursodb ./database.db --mcp
管理 MCP 服务器
# List all configured MCP servers
claude mcp list
# Get details about a specific server
claude mcp get my-database
# Remove an MCP server
claude mcp remove my-database
Claude Desktop
对于 Claude Desktop,请将配置添加到你的 claude_desktop_config.json 文件中:
{
"mcpServers": {
"turso": {
"command": "/path/to/.turso/tursodb",
"args": ["./path/to/your/database.db", "--mcp"]
}
}
}
Cursor
对于 Cursor,请在设置中配置 MCP:
- 打开 Cursor 设置
- 进入 Extensions → MCP
- 添加一个新服务器:
- Name:
turso - Command:
/path/to/.turso/tursodb - Args:
["./path/to/your/database.db", "--mcp"]
- Name:
或者,你也可以直接将其添加到 Cursor 的配置文件中。
直接使用 JSON-RPC
MCP 服务器以单进程运行,通过标准输入/输出处理多个 JSON-RPC 请求。以下是如何直接与它交互:
内存数据库示例
cat << 'EOF' | tursodb --mcp
{"jsonrpc": "2.0", "id": 1, "method": "initialize", "params": {"protocolVersion": "2024-11-05", "capabilities": {}, "clientInfo": {"name": "client", "version": "1.0"}}}
{"jsonrpc": "2.0", "id": 2, "method": "tools/call", "params": {"name": "schema_change", "arguments": {"query": "CREATE TABLE users (id INTEGER, name TEXT, email TEXT)"}}}
{"jsonrpc": "2.0", "id": 3, "method": "tools/call", "params": {"name": "list_tables", "arguments": {}}}
{"jsonrpc": "2.0", "id": 4, "method": "tools/call", "params": {"name": "insert_data", "arguments": {"query": "INSERT INTO users VALUES (1, 'Alice', '[email protected]')"}}}
{"jsonrpc": "2.0", "id": 5, "method": "tools/call", "params": {"name": "execute_query", "arguments": {"query": "SELECT * FROM users"}}}
EOF
已有数据库示例
# Working with an existing database file
cat << 'EOF' | tursodb mydb.db --mcp
{"jsonrpc": "2.0", "id": 1, "method": "initialize", "params": {"protocolVersion": "2024-11-05", "capabilities": {}, "clientInfo": {"name": "client", "version": "1.0"}}}
{"jsonrpc": "2.0", "id": 2, "method": "tools/call", "params": {"name": "list_tables", "arguments": {}}}
EOF
贡献
我们非常欢迎你为 Turso 数据库做贡献!请查阅[贡献指南]开始。
FAQ
Turso 数据库可以用于生产环境了吗?
是的——Turso 目前已在多个组织的生产应用中提供动力,包括 Turso Cloud、Kin AI 助手 和 Spice.ai。可靠性是我们的首要任务:Turso 经过一系列工具的广泛测试,包括原生的确定性模拟测试(Deterministic Simulation Testing)套件和 Antithesis。
话虽如此,我们尚未达到 1.0。项目仍在积极开发中,部分功能被明确标记为实验性。我们的目标是达到 SQLite 级别的可靠性——它是世界上测试最严格的软件之一——在宣布 1.0 之前,我们建议你像对待任何数据库一样保持严谨:做好独立备份。
Turso 数据库与 SQLite 的兼容性如何?
Turso 在 SQL 方言、文件格式和 C API 层面与 SQLite 兼容,现有的 SQLite 数据库文件可以直接使用。我们尚未达到 100%,因此仍可能存在一些差异——COMPAT.md 会跟踪详情——但差距正在迅速缩小,完全兼容是 1.0 的要求。
Turso 是 SQLite 数据库还是 Postgres 数据库?
它是一个引擎,拥有多个 SQL 前端。SQLite 是最初的主要前端,有自己的方言、文件格式和 C API;如果你使用的就是它,那么对你没有任何变化。Postgres 是一个较新且仍处于实验阶段的前端,使用 Postgres 方言和线协议。它们在 SQL 层面之下共享一切:存储、并发、查询编译器和虚拟机。Postgres 前端是纯附加的——只做新增,不会改变既有行为。
你们说的"数据库界的 LLVM"是什么意思?
与 SQLite 一样,Turso 将查询编译成一台名为 VDBE 的虚拟机的字节码并执行。SQL 只是编译到它的一种语言。我们的目标是让这台虚拟机成为一个通用目标:以一个现代、经过严格测试的核心,承载众多数据库前端——SQLite、Postgres,以及未来更多的前端。LLVM 为编译器做到了这一点:稳定的中间表示让众多语言共享同一个后端,我们认为数据库也应该如此。如果你想要证据,这些字节码通用到可以在上面运行 Doom。
Turso 数据库与 Turso 的 libSQL 有什么区别?
Turso 数据库是一个用 Rust 构建 SQLite 下一代形态的项目,高度注重开放贡献,并具备原生异步支持、向量搜索等特性。libSQL 项目也是为了向类似方向演进 SQLite,但采用的是分叉而非重写的方式。
用 Rust 重写 SQLite 最初只是一个不起眼的实验,但因其巨大的成功,它取代 libSQL 成为我们的既定方向。两者如今都在生产环境中运行:libSQL 经过更长时间的战斗检验,而 Turso 数据库是我们开发投入的重点,正在快速演进。更多详情见此处。
论文发表
- Pekka Enberg, Sasu Tarkoma, Jon Crowcroft Ashwin Rao (2024). Serverless Runtime / Database Co-Design With Asynchronous I/O. In EdgeSys ‘24. [PDF]
- Pekka Enberg, Sasu Tarkoma, and Ashwin Rao (2023). Towards Database and Serverless Runtime Co-Design. In CoNEXT-SW ’23. [PDF] [Slides]
- Alperen Keles, Ethan Chou, Harrison Goldstein, Leonidas Lampropoulos (2026). DIRT: Database-Integrated Random Testing. In DBTest '26. [PDF]
许可证
本项目基于 [MIT 许可证] 发布。
贡献
除非你另有明确声明,否则你为纳入 Turso 数据库而有意提交的任何贡献,均应以 MIT 许可证授权,无任何附加条款或条件。
合作伙伴
感谢 Turso 的所有合作伙伴!
贡献者
感谢 Turso 数据库的所有贡献者!
探索相关项目
Asabeneh/30-Days-Of-Python
30 Days of Python 编程挑战是一份循序渐进的指南,用于在 30 天内学习 Python 编程语言。这项挑战可能需要超过 100 天。请按自己的节奏进行。这些视频或许也有帮助:https://www.youtube.com/channel/UC7PNRuno1rzYPb1xLa4yktw
78,560 星标grafana/grafana
开放且可组合的可观测性与数据可视化平台。可对来自 Prometheus、Loki、Elasticsearch、InfluxDB、Postgres 等众多数据源的指标、日志和追踪进行可视化。
77,830 星标redis/redis
对于正在构建实时数据驱动应用的开发者而言,Redis 是首选、速度最快且功能最丰富的缓存、数据结构服务器和文档与向量查询引擎。
77,395 星标apache/superset
Apache Superset 是一个数据可视化与数据探索平台
75,473 星标
