Skip to content
弯曲文本徽标显示 'Elysia JS'

人体工程学框架 for 人类

具有 端到端类型安全的 TypeScript、类型完整性以及卓越的开发者体验。 由 Bun 超级增强。

开始使用
bun create elysia app

看看为什么开发者喜爱 Elysia

第一个生产就绪的、
并且最受欢迎的 Bun 框架

受以下团队信赖

X/TwitterX/TwitterX/Twitter泰国农业和农业合作社银行X/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 行代码发送实时数据

顶级水平 类型安全

自带 验证器

支持 标准 Schema

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
)
}) ) })

OpenAPI 与您的实际 API 打招呼

我们认真对待 OpenAPI 文档

深度集成 OpenAPI 架构
Elysia 可以开箱即用地生成 API 文档

所有这些只需 1 行

是的,您没看错

只需 1 行代码,您就可以轻松获得完整的 API 文档

借助 OpenAPI Type Gen,Elysia 可以将 TypeScript 类型 转换为 API 文档 (类似于 FastAPI,但基于 TypeScript 类型)

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

new Elysia()
	.use(openapi())
	.listen(3000)
typescript
import { Elysia } from 'elysia'
import { openapi, fromTypes } from '@elysiajs/openapi'

export const app = new Elysia()
	.use(
		openapi({
			references: fromTypes()
		})
	)

11.88ms

POST /character/:id/chat

回放

请求
验证
事务
上传
同步
对于 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 提供从后端到前端的类型安全,而无需代码生成。前端和后端之间的交互在编译时和运行时都经过类型检查。

21x

比 Express 更快

6x

比 Fastify 更快

  1. Elysia Bun
    2,454,631 请求/秒
  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 结果。

自信地 测试

通过 自动补全 实现类型安全

Elysia 提供了一个类型安全的层,用于与服务器交互和测试,从路由到参数。

借助自动补全,您可以轻松编写服务器测试,而无需任何麻烦。

typescript
import { 
treaty
} from '@elysiajs/eden'
import {
app
} from './index'
import {
test
,
expect
} from 'bun:test'
const
server
=
treaty
(
app
)
test
('should handle duplicated user', 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
: 'Username already taken'
}) })

人们对

Elysia 徽标 Elysia

因为有你

Elysia 不是由某个组织拥有 ,而是由志愿者和社区驱动。 Elysia 的存在离不开这些优秀的赞助者。

感谢您让 Elysia 成为可能

我们能够全职开发 Elysia,全靠您的支持。

来自我们社区的爱

Elysia 徽标
Elysia 徽标

Elysia

专为人类设计的框架

速度

顶级性能

类型安全

同类最佳

开发者体验

出色

OpenAPI 支持

独一无二

用 💖 为 构建