Skip to content
Curved text logo saying 'Elysia JS'

人体工程学 框架

带有 端到端类型安全的后端 TypeScript 框架,强大的速度,以及卓越的开发者体验。
由 Bun 提供强大动力

开始使用
bun create elysia app

了解为什么开发人员喜欢 Elysia

第一个生产准备就绪
以及最受欢迎的 Bun 框架

受到团队的信任

X/TwitterX/TwitterX/TwitterBank for Agriculture and Agricultural Cooperatives ThailandX/TwitterX/TwitterDecidable logo

我们的原则

设计以人为本

我们的目标是设计一个符合人体工程学、合理且高效的工作框架,即使是初学者也能轻松使用。

设计以避免不必要的复杂性,并为您简化类型复杂性,以便您专注于构建。

一个感觉就像 JavaScript 的框架

typescript
import { Elysia, file } from 'elysia'

new Elysia()
	.get('/', 'Hello World')
	.get('/image', file('mika.webp'))
	.get('/stream', function* () {
		yield 'Hello'
		yield 'World'
	})
	.ws('/realtime', {
		message(ws, message) {
			ws.send('got:' + message)
		}
	})
	.listen(3000)

返回值

一个字符串、数字或复杂的 JSON

我们所需要做的就是返回。

内置文件支持

要发送文件或图像,只需返回

没有什么更多或更少

流响应

使用 yield 流响应

我们所需要做的就是返回

实时数据

内置 µWebSocket

发送实时数据只需 3 行代码

21x

比 Express 更快

6x

比 Fastify 更快

  1. Elysia Bun
    2,454,631 reqs/s
  2. Gin Go

    676,019

  3. Spring Java

    506,087

  4. Fastify Node

    415,600

  5. Express Node

    113,117

  6. Nest Node

    105,064

以每秒请求次数进行测量。数据来源于官方 TechEmpower 基准测试 第 22 轮(2023-10-17)的 PlainText 结果。

这就是关于

唯一事实来源

Schema 是整个服务器的唯一事实来源。从 请求验证、类型推断、OpenAPI 文档, 客户端-服务器通信。Elysia 的每个部分都设计为 完整的类型完整性。

请求验证

Elysia 会根据你的 schema 验证并规范请求,确保只有有效数据到达你的处理程序。

Elysia 还会 直接从你的 schema 推断类型,确保你的处理程序在运行时和类型级别始终接收正确的类型。

typescript
import { 
Elysia
,
t
} from 'elysia'
new
Elysia
()
.
put
('/', ({
body
: {
file
} }) =>
file
, {
body
:
t
.
Object
({
file
:
t
.
File
({
type
: 'image' })
}) })

高级类型推断

Elysia 的每个部分都设计为完全类型安全,拥有比其他任何框架都更先进的类型推断。

Elysia 还会直接从你的 schema 推断类型,为模型提供自动补全,或者使用你自己的自定义属性扩展 Elysia,同时确保完整的类型完整性。

typescript
import { 
Elysia
} from 'elysia'
import {
auth
} from './auth'
new
Elysia
()
.
use
(
auth
)
.
get
('/profile', ({
user
}) =>
user
, {
auth
: true
})
typescript
import { 
Elysia
,
t
} from 'elysia'
export const
auth
= new
Elysia
()
.
macro
('auth', {
cookie
:
t
.
Object
({
ssid
:
t
.
String
()
}),
resolve
({
cookie
,
status
}) {
if(!
cookie
.
ssid
.
value
) return
status
(401)
return {
user
:
cookie
.
ssid
.
value
} } })

客户端-服务器通信

Elysia 可以像 tRPC 一样在客户端和服务器之间共享类型,确保双方始终保持同步。

更进一步,Elysia 还处理多个 HTTP 状态,并使用判别联合进行排列,允许你 轻松处理所有可能的错误情况

typescript
import { 
treaty
} from '@elysiajs/eden'
import type {
App
} from 'server'
const
api
=
treaty
<
App
>('api.elysiajs.com')
const {
data
} = await
api
.
profile
.
patch
({
age
: 21
})

OpenAPI 文档

Elysia 只需一行代码 即可根据您的模式生成 OpenAPI 文档,确保您的 API 文档始终准确且最新。

typescript
import { 
Elysia
} from 'elysia'
import {
openapi
} from '@elysiajs/openapi'
new
Elysia
()
.
use
(
openapi
())
OpenAPI Type Gen

介绍我们迄今为止最强大的功能

TypeScript 转 OpenAPI

Elysia 可以直接从您的 TypeScript 代码生成 OpenAPI 规范 无需任何注释,无需任何配置和 CLI 运行。

允许您将实际代码从 任何库 如 Prisma、Drizzle 以及所有 TypeScript 库转换为您自己的 API 文档。

typescript
import { Elysia } from 'elysia'
import { openapi, fromTypes } from '@elysiajs/openapi'

export const app = new Elysia()
	.use(
		openapi({
			// ↓ Where magic happens 
			references: fromTypes()
		})
	)

带上你自己的 验证器

支持 标准模式

Elysia 提供了强大的内置验证,但您也可以 带上您喜欢的验证器,如 Zod, Valibot, ArkType, Effect 等等

无缝支持类型推断和 OpenAPI。您会感到宾至如归。

ts
import { 
Elysia
,
t
} from 'elysia'
new
Elysia
()
// Try hover body ↓ .
post
('/user', ({
body
}) =>
body
, {
body
:
t
.
Object
({
name
:
t
.
Literal
('SaltyAom'),
age
:
t
.
Number
(),
friends
:
t
.
Array
(
t
.
String
())
}) })
ts
import { 
Elysia
} from 'elysia'
import {
z
} from 'zod'
new
Elysia
()
// Try hover body ↓ .
post
('/user', ({
body
}) =>
body
, {
body
:
z
.
object
({
name
:
z
.
literal
('SaltyAom'),
age
:
z
.
number
(),
friends
:
z
.
array
(
z
.
string
())
}) })
ts
import { 
Elysia
} from 'elysia'
import * as
v
from 'valibot'
new
Elysia
()
// Try hover body ↓ .
post
('/user', ({
body
}) =>
body
, {
body
:
v
.
object
({
name
:
v
.
literal
('SaltyAom'),
age
:
v
.
number
(),
friends
:
v
.
array
(
v
.
string
())
}) })
ts
import { 
Elysia
} from 'elysia'
import {
type
} from 'arktype'
new
Elysia
()
// Try hover body ↓ .
post
('/user', ({
body
}) =>
body
, {
body
:
type
({
name
: '"Elysia"',
age
: 'number',
friends
: 'string[]'
}) })
ts
import { 
Elysia
} from 'elysia'
import {
Schema
} from 'effect'
new
Elysia
()
// Try hover body ↓ .
post
('/user', ({
body
}) =>
body
, {
body
:
Schema
.
standardSchemaV1
(
Schema
.
Struct
({
name
:
Schema
.
Literal
('Elysia'),
age
:
Schema
.
Number
,
friends
:
Schema
.
Array
(
Schema
.
String
)
}) ) })

11.88ms

POST /character/:id/chat

Playback

Request
Validation
Transaction
Upload
Sync
对于 DevOps

OpenTelemetry

Elysia 原生支持 OpenTelemetry。监控功能内置,因此您可以轻松监控您的服务,无论平台如何。

typescript
import { 
treaty
} from '@elysiajs/eden'
import type {
App
} from 'server'
const
api
=
treaty
<
App
>('api.elysiajs.com')
const {
data
} = await
api
.
profile
.
patch
({
age
: 21
})
对于前端

端到端类型安全

像 tRPC 一样,Elysia 提供从后端到前端的类型安全,而无需代码生成。前端和后端之间的交互在编译时和运行时都经过类型检查。

充满信心地 进行测试

类型安全带有 自动完成功能

Elysia 提供了一个类型安全层,用于与您的服务器进行交互和测试,涵盖从路由到参数的各个环节。

借助自动补全功能,您可以轻松为服务器编写测试,无需任何繁琐操作。

typescript
import { 
treaty
} from '@elysiajs/eden'
import {
app
} from './index'
import {
test
,
expect
} from 'bun:test'
const
server
=
treaty
(
app
)
test
('应处理重复用户', async () => {
const {
error
} = await
server
.
user
.
put
({
Argument of type '{ username: string; }' is not assignable to parameter of type '{ username: string; password: string; }'. Property 'password' is missing in type '{ username: string; }' but required in type '{ username: string; password: string; }'.
username
: 'mika',
})
expect
(
error
?.
value
).
toEqual
({
success
: false,
message
: '用户名已被占用'
}) })

你的代码, 你的运行时

Elysia 针对 Bun 进行了优化,

不锁定于 Bun

Elysia 构建于 Web 标准之上

允许您在任何地方运行 Elysia

人们怎么说

Elysia Logo Elysia

由你实现

Elysia 不属于任何组织 ,由志愿者和社区驱动。 Elysia 的实现得益于这些出色的赞助商。

感谢您让 Elysia 成为可能

我们只能全职开发 Elysia,感谢您的支持。

来自我们社区的爱

Got more questions?

Just Ask!

Can I use Zod with Elysia?

Elysia validates incoming request data (params, query, body, headers, cookies, response) before your handler runs.

It ships with a built‑in schema builder (Elysia.t) based on TypeBox, but it also natively supports any “Standard Schema” library – that includes Zod, Valibot, Yup, Joi, ArkType, Effect‑Schema, and many more.

Elysia Logo
Elysia Logo

Elysia

Ergonomic Framework for Humans

Speed

Top Performance

Type Safety

Best in class

Developer Experience

Exceptional

OpenAPI Support

One of a kind