light-fw-cli-core 0.6.1

Ядро CLI Light: анализ проекта, управление компонентами и light.lock
docs.rs failed to build light-fw-cli-core-0.6.1
Please check the build logs for more information.
See Builds for ideas on how to fix a failed build, or Metadata for how to configure docs.rs builds.
If you believe this is docs.rs' fault, open an issue.
Visit the last successful build: light-fw-cli-core-0.5.0

Light

CI Docs

Light — декларативный реактивный GUI-фреймворк для Rust. Вы пишете HTML-разметку с директивами (v-if, v-for, v-model), описываете состояние реактивными свойствами (#[proxy]), а Light компилирует шаблоны на этапе сборки в Rust-код, строящий виртуальный DOM. Окна создаются на winit, а программно нарисованный кадр показывается через softbuffer; wgpu доступен отдельной фичей wgpu-backend.

  • Компиляция вместо интерпретации. Шаблоны превращаются в Rust на этапе сборки: в рантайме нет HTML-парсера и интерпретатора разметки.
  • Гранулярная реактивность. Изменение свойства перерисовывает только зависящие узлы виртуального дерева.
  • Нативные окна. Безрамочные окна, кастомный titlebar, модальные окна и несколько окон — из коробки.
  • Платите только за используемое. Каждая подсистема — Cargo-фича; код выключенных возможностей не попадает в бинарник.
  • Компактные бинарники. Программный рендеринг через softbuffer включён по умолчанию: release-сборка демо занимает ~1.7 MB вместо ~7.7 MB с wgpu.

Статус

Текущая версия — 0.6.1. Проект в стадии пре-1.0: публичный API ещё не стабилен и может меняться между минорными версиями.

Быстрый старт

Создать проект с готовыми компонентами и найти сторонние можно через CLI:

cargo install light-fw-cli

light init my-app --with form --with validation

light search datepicker

Вручную проект собирается так:

Cargo.toml:

[package]

name = "my-app"

version = "0.1.0"

edition = "2024"



[dependencies]

light = { git = "https://github.com/gifoff/light" }

src/main.rs:

use light::prelude::*;

#[template("templates/app.html")]
#[proxy]
struct App {
    #[default("Мир".to_owned())]
    name: String,
}

impl App {
    fn greet(&self) {
        self.set_name(format!("Привет, {}!", self.name()));
    }
}

fn main() -> light::Result<()> {
    light::run(App::new())
}

templates/app.html:

<window title="My App" width="480" height="320">
    <div direction="vertical" padding="16">
        <h1>Привет, {{ name }}!</h1>
        <button @click="greet">Поздороваться</button>
    </div>
</window>
cargo run

Создание проекта через CLI

Если установлена утилита light, скелет проекта создаётся одной командой:

cargo install light-fw-cli

light init my-app

Дополнительные компоненты подключаются флагом --with (можно повторять):

light init my-app --with form --with validation

form добавляет light-fw-element-form и фичу light/elements-form, validation — light-fw-behavior-validation и фичу light/validation. В Cargo.toml прописываются и зависимости, и нужные фичи мета-крейта.

Готовые шаблоны

Вместо пустого окна можно взять showcase-приложение:

light init my-app --template counter

light init my-app --template todo

light init my-app --template calculator

Шаблоны и их HTML встроены в бинарник через include_str!, поэтому создание проекта не требует сети. Исходники примеров лежат в examples/.

Добавление компонентов

light search datepicker

light add light-fw-element-form

light search ищет компоненты на crates.io. light add разрешает компонент во встроенном реестре, workspace или vendor/. Если крейта там нет, он ищется на crates.io — это позволяет подключать сторонние компоненты с префиксом light-fw-, например будущий light-fw-datepicker. Фичи самого крейта передаются через --features:

light add light-fw-datepicker --features calendar,timezone

light add обновляет Cargo.toml и light.lock, а light remove удаляет как встроенные, так и внешние компоненты.

Крейты воркспейса

Крейт Назначение
light Мета-крейт: реэкспортирует ядро, макросы и подключённые компоненты.
light-fw-core Ядро: виртуальный DOM, реактивность, раскладка, отрисовка, окно.
light-fw-macros Процедурные макросы #[template] и #[proxy].
light-fw-html Разбор HTML-шаблонов для макросов.
light-fw-element-form Компонент-элемент: <checkbox>, <radio>, <select>/<option>.
light-fw-behavior-validation Компонент-поведение: required, :validator, @validate.
light-fw-cli Утилита light: проверка проекта и управление компонентами.
light-fw-cli-core Ядро CLI: анализ проекта, light.lock, управление компонентами.

Документация

Сайт: gifoff.github.io/light.

Собрать документацию локально:

cargo install mdbook

mdbook serve

Ссылки

  • Основной репозиторий: GitHub
  • Зеркало: GitVerse

Лицензия

Распространяется под лицензией MIT OR Apache-2.0 на ваш выбор. Полные тексты — в файлах LICENSE-MIT и LICENSE-APACHE.