返回项目目录
服务端框架精选项目

Elysia

为 Bun 深度优化、强调端到端类型安全与优秀开发体验的 TypeScript 后端框架。

主要语言TypeScript
开源许可MIT
项目类型服务端框架
维护状态活跃维护
OVERVIEW

项目概述

Elysia 将高性能 HTTP 服务、运行时 Schema 验证、生命周期 Hook、插件系统和 Eden 类型客户端组合在一套链式 API 中。它以 Bun 为首选运行时,也可通过适配器运行在 Node.js 等环境。

Elysia 是一个以人体工程学和类型完整性为核心的 TypeScript 后端框架。它会从路由中声明的请求与响应 Schema 同时生成运行时验证、TypeScript 类型和 OpenAPI 信息,减少手写接口类型的重复。框架通过清晰的请求生命周期、可组合 Elysia 实例和作用域明确的插件组织复杂服务,并使用 Eden Treaty 在客户端共享服务端类型。Elysia 对 Bun 的 HTTP 与运行时能力做了深度优化,同时提供 Node.js 和 Web Standard 等适配路径。

首选运行时Bun
类型方案Schema + Eden
当前主线Elysia 1.x
FEATURES

主要特点

Elysia 将运行时验证、静态类型、路由生命周期和客户端契约放在同一条类型链中。

01

端到端类型安全

从路由、参数、请求体到响应状态持续推断类型,并可通过 Eden Treaty 将契约直接提供给客户端。

02

Schema 即单一事实来源

内置 t Schema 基于 TypeBox,可同时完成运行时验证、静态推断和 OpenAPI Schema 生成。

03

支持 Standard Schema

除内置 Schema 外,也能直接使用 Zod、Valibot、ArkType、Effect Schema 等验证库。

04

细粒度请求生命周期

从 Request、Parse、Transform、Validation 到 Before Handle、After Handle、Error 和 Trace 均可插入 Hook。

05

可组合插件实例

每个 Elysia 实例既能独立运行也能作为插件复用,并通过 local、scoped、global 控制生命周期传播范围。

06

为 Bun 深度优化

充分利用 Bun 的服务端、测试、打包和运行时能力,面向低延迟与快速开发反馈进行优化。

07

多运行时适配

除 Bun 外,可通过 @elysia/node 等适配器运行在 Node.js,并提供 Cloudflare、Vercel、Deno 等集成路径。

08

完整的服务端生态

官方提供 OpenAPI、JWT、CORS、Cookie、WebSocket、OpenTelemetry、静态文件和定时任务等插件。

USE CASES

适用场景

适合采用 Bun、重视接口类型完整性,或希望用少量样板代码构建高性能 TypeScript 服务的项目。

Bun 原生 API 服务

适合希望统一运行时、包管理、测试与开发服务器,并充分利用 Bun 性能的新项目。

类型安全的全栈应用

Eden Treaty 可让前端从服务端路由推断参数、请求体、响应数据与错误类型,减少契约漂移。

高性能微服务

较低框架开销、预编译 Schema 和模块化插件适合职责清晰的内部服务与边缘接口。

Schema 驱动 API

适合需要严格验证 JSON、查询、参数、Cookie 和响应,并自动生成 OpenAPI 文档的团队。

实时与流式服务

可结合 WebSocket、SSE、流式响应和 Bun 网络能力构建通知、协作和实时数据应用。

模块化业务后端

具名插件、Guard、Macro 和生命周期作用域适合拆分认证、数据库、领域模块及跨切面逻辑。

EVALUATION

优点与注意事项

技术选型不仅要看能力,也要理解它带来的团队成本。

主要优点

Elysia 擅长的地方

  • Schema 同时服务运行时验证、类型推断与 API 文档
  • 链式 API 能持续保留路由上下文和精确的 TypeScript 类型
  • Eden Treaty 提供无需代码生成的端到端类型客户端
  • 为 Bun 深度优化,开发、测试和运行体验集成度高
  • 生命周期阶段清晰,便于实现认证、转换、错误处理与观测
  • 插件实例可组合,并能显式控制依赖和 Hook 传播范围

需要注意

采用前应考虑的问题

对 Bun 的优势最明显

框架虽然支持多个运行时,但性能特征、插件兼容性和开发体验以 Bun 最完整;选择其他运行时应先做验证。

Node.js 需要额外适配器

在 Node.js 中需要安装并配置 @elysia/node,Bun 专属文件、SQLite 或网络 API 也不能直接跨运行时复用。

类型推断依赖链式结构

不恰当地拆开路由、丢失实例返回类型或使用过宽的显式类型,可能让 Eden 和路由上下文失去精确推断。

插件作用域需要理解

Hook 默认具有封装边界,不会自动影响所有父级路由;local、scoped 和 global 选错可能造成鉴权或日志遗漏。

Schema 需要持续治理

验证规则过宽会削弱安全性,过度复杂则增加编译与响应成本;请求和响应 Schema 都应纳入测试。

生态规模仍小于老牌框架

复杂企业集成、长期运维案例和第三方插件数量不及 Express、Fastify 或 NestJS,关键依赖应提前验证。

QUICK START

快速开始

使用 Bun 创建一个带请求 Schema、响应状态、无端口测试和 Eden Treaty 客户端的任务 API。

1使用官方模板创建项目
bash
bun create elysia elysia-tasks
cd elysia-tasks
bun install
2定义带 Schema 的任务 API
typescript
import { Elysia, t } from "elysia";

export const app = new Elysia({ prefix: "/api" })
  .get("/health", () => ({ status: "ok" }))
  .post(
    "/tasks",
    ({ body, status }) =>
      status(201, {
        id: crypto.randomUUID(),
        title: body.title,
        completed: false,
      }),
    {
      body: t.Object({
        title: t.String({ minLength: 1, maxLength: 120 }),
      }),
    },
  );

export type App = typeof app;
3启动 Bun 服务
typescript
import { app } from "./app";

app.listen(3000);

console.log(
  `Elysia is running at http://localhost:${app.server?.port}`,
);
4通过标准 Request 测试
typescript
import { describe, expect, it } from "bun:test";
import { app } from "../src/app";

describe("tasks API", () => {
  it("creates a task", async () => {
    const response = await app.handle(
      new Request("http://localhost/api/tasks", {
        method: "POST",
        headers: { "Content-Type": "application/json" },
        body: JSON.stringify({ title: "学习 Elysia" }),
      }),
    );

    expect(response.status).toBe(201);
    expect(await response.json()).toMatchObject({
      title: "学习 Elysia",
      completed: false,
    });
  });
});
5使用 Eden Treaty 类型客户端
typescript
import { treaty } from "@elysiajs/eden";
import type { App } from "../server/src/app";

const api = treaty<App>("http://localhost:3000");

const { data, error } = await api.api.tasks.post({
  title: "完成 Elysia 快速开始",
});

if (error) {
  throw new Error(`创建任务失败:${error.status}`);
}

console.log(data.id, data.title);

下一步:先保持路由链和 Schema 可推断,再按业务边界拆分具名插件;跨运行时部署前应验证所用插件、文件 API 和网络能力是否得到目标适配器支持。

ALTERNATIVES

类似项目

这些现代服务端框架也重视性能、类型安全或多运行时开发体验。

COMPARISON

Elysia vs Hono

Elysia 和 Hono 都提供现代 TypeScript API 与端到端类型能力。Elysia 以 Bun、Schema 驱动和丰富生命周期为中心;Hono 则以 Web 标准、小体积和广泛运行时适配为主要优势。

比较维度ElysiaHono
核心定位Bun 优先、Schema 驱动的类型安全后端框架Web 标准优先的轻量多运行时框架
首选运行时Bun,其他运行时通过适配器支持Workers、Deno、Bun、Node 等多运行时并重
请求上下文Context 解构 body、params、query、set、status 等Context 提供 req、env、json、text、header 等 API
验证方式内置 t Schema,并支持 Standard SchemaValidator 中间件,可配合 Zod 等 Schema 库
类型客户端Eden Treaty,从服务端实例推断完整契约hc RPC,从 AppType 推断请求与响应
扩展模型Elysia 插件、生命周期 Hook、Guard 和 Macro洋葱中间件、Helper、路由组合与平台适配器
更适合Bun 服务、严格 Schema 和深度类型推断边缘 API、跨运行时和广泛平台部署
如何选择

如果团队已采用 Bun,希望 Schema、验证、OpenAPI 和客户端类型形成紧密的一体化体验,Elysia 很有吸引力;如果首要目标是跨 Workers、Deno、Bun 与 Node 复用代码,或需要更广泛的中间件和平台适配,Hono 通常更稳妥。最终应以目标运行时、插件兼容性、类型检查速度和真实负载测试选择。

VERIFICATION

资料核验

版本、维护信息与本页采用的官方资料来源。

最后核验2026 年 7 月 26 日
核验版本官方当前稳定版与文档主线
内容维护Docs100 编辑整理
项目维护状态活跃维护

本次核验覆盖 Elysia 的核心定位、主要能力、官方入口与开源许可。项目版本持续更新,具体补丁版本、兼容性和迁移要求请在采用前继续核对官方发布记录。

维护状态核验2026 年 7 月 26 日 · 最近可见代码活动:2026 年 7 月 25 日

官方仓库未归档,核验时最近可见的代码活动日期为 2026 年 7 月 25 日。该状态表示项目近期仍有公开维护活动,不代表固定发布频率或长期支持承诺。

查看官方仓库