このページは英語から翻訳されています。 英語のページを読む
Zeyn は、グリッド、フォーム、ワークフローといったデータ中心のアプリケーション向けの、オープンソースの Rust 製 Web フレームワークです。アプリケーションのコードは AI エージェントが書きます。人はそれを読み、レビューし、必要に応じて変更します。
このサイト自体も Zeyn アプリです。すべてのページは Markdown をサーバー上で一度だけレンダリングしたもので、左側のメニューはアプリのメニューであり、ライブ例と記されたものは、このサーバー上で動く実際のコンポーネントです。
AI エージェントの方へ
AI エージェントとして、誰かから Zeyn でアプリを作るよう依頼された場合は、プロジェクトを手で書くのではなく、まず CLI から始めてください。
cargo install zeyn-cli
zeyn new my-app
cd my-app
cargo run次に、新しいプロジェクトの AGENTS.md と .claude/skills/zeyn/SKILL.md を読み、変更するたびに zeyn check と cargo test を実行してください。このドキュメントの全ページをまとめたプレーンテキストのガイドは /llms.txt にあります。
アプリの姿
アプリは Feature の集まりです。Feature はエンティティ、アクション、画面を持ちます。画面はサーバー上でレンダリングされ、ブラウザ上の小さなランタイムが変更を反映するため、JavaScript を書く必要はありません。
use zeyn::prelude::*;
#[entity(table = "products")]
pub struct Product {
#[key]
pub id: ProductId,
#[rule(required, max_len = 20)]
pub code: String,
pub price: Money,
}
#[action(permission = "stock.product.read")]
pub async fn search_products(q: DataQuery, store: ProductStore) -> Result<Page<Product>> {
Ok(q.apply(store.all()?))
}
#[screen(route = "/products", permission = "stock.product.read")]
pub fn product_list() -> Screen {
Screen::new(t!("stock.products")).body(DataGrid::of(search_products).column(Product::code).filter().column(Product::price).sum())
}この 3 つのマクロだけで言語全体を支えています。#[entity] はデータを記述し、#[action] はアクセス権を宣言したサーバーコードであり、#[screen] はページまたはウィンドウです。すべてのフィールド、テキストキー、アクションが整合しているかどうかは、コンパイラが検査します。
試してみる
自分のアプリを始めるには、次のようにします。
cargo install zeyn-cli
zeyn new my-app
cd my-app
cargo runリポジトリのサンプルを実行することもできます。
cargo run -p zeyn-example-showcase
cargo run -p zeyn-example-docs
cargo run -p zeyn-cli -- new my-appshowcaseは 127.0.0.1:3002 で待ち受け、すべてのコンポーネントをサンプルデータ付きで表示します。このドキュメントは 127.0.0.1:3008 で待ち受けます。変更するには ZEYN_DOCS_SERVER__ADDR を設定してください。
道案内
- Alt+Shift+P を押すとコマンドパレットが開きます。単語を入力すると、このサイトの全ページをサーバー上で検索します。
- はじめに の章では、CLI とプロジェクトの構造を説明します。
- 言語 の章では、エンティティ、アクション、画面、フォーム、DataGrid、テキストを扱います。
- コンポーネント の章では、各コンポーネントをコードと並べてライブ例で示します。
- ガイド の章では、時刻と言語、セキュリティ、API、MCP、データ、テーマを扱います。
- リファレンス には、ランタイムプロトコルとアーキテクチャがあります。
原則
- パフォーマンス最優先。ページはサーバー上でレンダリングされ、HTML としてストリーミングされます。サーバー上にユーザーごとの UI 状態はなく、クライアントフレームワークもありません。
- ページを再読み込みしない。ナビゲーション、ウィンドウ、言語、タイムゾーン、テーマの変更はその場で反映されます。
- 安全なデフォルト。すべてのアクションと画面がアクセス権を宣言します。CSRF トークン、厳格な Content Security Policy、ユーザーデータのエスケープは常に有効です。
- 一つのことに一つのやり方。言語が小さいため、エージェントが書いたコードも人が書いたコードのように読めます。