Перейти к содержимому

Введение

Эта страница переведена с английского. Читать страницу на английском

Zeyn это веб-фреймворк на Rust с открытым исходным кодом для приложений с большим объёмом данных: таблиц, форм и рабочих процессов. Код приложения пишут ИИ-агенты. Люди читают его, проверяют и меняют, когда это нужно.

Этот сайт сам является приложением на Zeyn. Каждая страница это Markdown, один раз отрисованный на сервере, меню слева это меню приложения, а примеры с пометкой Live example (живой пример) это настоящие компоненты, работающие на этом сервере.

Для ИИ-агентов

Если вы ИИ-агент и вас попросили создать приложение на 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 содержит entity (сущности), action (действия) и Screen (экраны). Экраны отрисовываются на сервере; небольшой runtime в браузере применяет изменения, поэтому 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())
}

Одни и те же три макроса описывают весь язык: #[entity] описывает данные, #[action] это серверный код с объявленным доступом, а #[screen] это страница или окно. Компилятор проверяет, что каждое поле, ключ текста и action согласованы.

Попробуйте

Запустите собственное приложение:

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-app

Showcase слушает адрес 127.0.0.1:3002 и показывает каждый компонент на примерах данных. Эта документация слушает адрес 127.0.0.1:3008; чтобы изменить его, задайте ZEYN_DOCS_SERVER__ADDR.

Как ориентироваться

  • Нажмите Alt+Shift+P, чтобы открыть палитру команд. Введите слово, и сервер найдёт его на всех страницах этого сайта.
  • Раздел Getting started (Начало работы) описывает CLI и структуру проекта.
  • Раздел Language (Язык) описывает entity, action, Screen, Form, DataGrid и тексты.
  • Раздел Components (Компоненты) показывает каждый компонент с живым примером рядом с его кодом.
  • Раздел Guides (Руководства) описывает время и языки, безопасность, API, MCP, данные и темы оформления.
  • Раздел Reference (Справочник) содержит протокол runtime и архитектуру.

Принципы

  • Производительность прежде всего. Страницы отрисовываются на сервере и передаются потоком как HTML. На сервере нет состояния интерфейса для каждого пользователя, а на клиенте нет фреймворка.
  • Без перезагрузки страниц. Навигация, окна, смена языка, часового пояса и темы применяются на месте.
  • Безопасные настройки по умолчанию. Каждый action и Screen объявляет свой доступ. Токены CSRF, строгая Content Security Policy и экранирование пользовательских данных включены всегда.
  • Один способ для каждой задачи. Язык небольшой, поэтому код, написанный агентом, читается как код, написанный человеком.