Pure Rust библиотека для рендеринга UML диаграмм, полностью совместимая с PlantUML
- 100% совместимость с PlantUML — поддержка полного синтаксиса PlantUML
- Pure Rust — без зависимостей от C/C++ библиотек
- WASM поддержка — работает в браузере через WebAssembly
- SVG вывод — векторная графика высокого качества
- PNG вывод — растеризация через resvg/tiny-skia
- Все типы диаграмм — UML и non-UML диаграммы
- Sequence Diagram
- Class Diagram
- Activity Diagram
- State Diagram
- Component Diagram
- Deployment Diagram
- Use Case Diagram
- Object Diagram
- Timing Diagram
- Gantt Chart
- MindMap
- WBS (Work Breakdown Structure)
- JSON/YAML визуализация
- Network Diagram (nwdiag)
- Salt (Wireframe)
- ER Diagram
- Archimate
Добавьте в Cargo.toml:
[dependencies]
plantuml-rs = "0.1"use plantuml_rs::render;
fn main() {
let source = r#"
@startuml
Alice -> Bob: Привет!
Bob --> Alice: Привет!
@enduml
"#;
let svg = render(source).unwrap();
println!("{}", svg);
}use plantuml_rs::render;
let source = r#"
@startuml
participant Alice
participant Bob
participant Charlie
Alice -> Bob: Запрос авторизации
activate Bob
Bob -> Charlie: Проверка токена
activate Charlie
Charlie --> Bob: Токен валиден
deactivate Charlie
Bob --> Alice: Авторизация успешна
deactivate Bob
alt Успех
Alice -> Bob: Получить данные
Bob --> Alice: Данные
else Ошибка
Alice -> Bob: Повторить запрос
end
@enduml
"#;
let svg = render(source).unwrap();use plantuml_rs::render;
let source = r#"
@startuml
abstract class Animal {
+ name: String
+ age: int
+ {abstract} speak(): void
}
class Dog extends Animal {
+ breed: String
+ speak(): void
}
class Cat extends Animal {
+ indoor: bool
+ speak(): void
}
interface Trainable {
+ train(): void
}
Dog ..|> Trainable
@enduml
"#;
let svg = render(source).unwrap();import init, { render } from 'plantuml-rs';
async function main() {
await init();
const source = `
@startuml
Alice -> Bob: Hello
@enduml
`;
const svg = render(source);
document.getElementById('diagram').innerHTML = svg;
}
main();┌─────────────┐ ┌──────────────┐ ┌────────┐ ┌──────────┐
│ Source │───▶│ Preprocessor │───▶│ Parser │───▶│ AST │
│ Text │ │ │ │ │ │ │
└─────────────┘ └──────────────┘ └────────┘ └────┬─────┘
│
▼
┌─────────────┐ ┌──────────────┐ ┌────────┐ ┌──────────┐
│ SVG │◀───│ Renderer │◀───│ Layout │◀───│ Model │
│ Output │ │ │ │ │ │ │
└─────────────┘ └──────────────┘ └────────┘ └──────────┘
| Операция | plantuml-rs | PlantUML (Java) |
|---|---|---|
| Простая sequence | ~5ms | ~500ms |
| Сложная class | ~20ms | ~1000ms |
| WASM загрузка | ~50ms | N/A |
Бенчмарки проводились на M1 MacBook Pro
- Rust 1.75+
- wasm-pack (для WASM сборки)
# Интерактивное меню со всеми командами
./run.sh
# Или выполнить конкретную команду:
./run.sh build # Сборка проекта
./run.sh test # Запуск тестов
./run.sh wasm # Сборка WASM
./run.sh server # Локальный сервер
./run.sh help # Справка по командамПроект содержит набор скриптов в папке scripts/ для автоматизации рабочих процессов:
| Скрипт | Описание |
|---|---|
run.sh |
Главное меню (интерактивный выбор действий) |
scripts/build.sh |
Полная сборка проекта (clippy + fmt + build + wasm + docs) |
scripts/test.sh |
Запуск тестов (all/unit/integration/quick) |
scripts/wasm.sh |
Сборка WASM модуля через wasm-pack |
scripts/server.sh |
Локальный HTTP-сервер для тестирования |
scripts/clean.sh |
Очистка временных файлов и артефактов |
scripts/docs.sh |
Генерация документации |
scripts/examples.sh |
Запуск примеров диаграмм |
scripts/release.sh |
Создание нового релиза |
# Полная сборка с проверками
./run.sh build
# Только проверка кода (без сборки)
./run.sh check
# Запуск конкретных тестов
./run.sh test plantuml-parser
# WASM сборка и локальный сервер
./run.sh wasm && ./run.sh server 3000
# Создание релиза
./run.sh release 0.3.0
# Очистка всех артефактов
./run.sh clean all# Сборка библиотеки
cargo build --workspace
# Запуск тестов
cargo test --workspace
# Сборка WASM
cargo build --target wasm32-unknown-unknown -p plantuml-wasm
# Документация
cargo doc --workspace --opencrates/
├── plantuml-core/ # Главный фасад
├── plantuml-parser/ # Лексер + парсер
├── plantuml-ast/ # AST типы
├── plantuml-preprocessor/ # Препроцессор
├── plantuml-model/ # Модели диаграмм
├── plantuml-layout/ # Layout engines
├── plantuml-renderer/ # SVG/PNG рендеринг
├── plantuml-themes/ # Темы
├── plantuml-stdlib/ # Стандартная библиотека
└── plantuml-wasm/ # WASM биндинги
- Фаза 0: Инфраструктура
- Фаза 1: Sequence + Class Diagrams
- Фаза 2: Activity + State + Component
- Фаза 3: Остальные UML диаграммы
- Фаза 4: Non-UML диаграммы
- Фаза 5: WASM биндинги
- Playground с GitHub Pages
- Визуальная верификация с оригинальным PlantUML
- Публикация на crates.io
Подробный план: docs/PLAN.md
| Компонент | Статус |
|---|---|
| Парсинг (18 типов диаграмм) | ✅ |
| Layout engines | ✅ |
| SVG рендеринг | ✅ |
| PNG рендеринг | ✅ |
| WASM сборка | ✅ |
| Темы (6 тем) | ✅ |
| Препроцессор | ✅ |
| Визуальная сверка | 🔄 В процессе |
Проект доступен под двойной лицензией:
Выберите любую на ваше усмотрение.
- PlantUML — за создание отличного инструмента и синтаксиса
- pest — за мощный PEG парсер
- resvg — за качественный SVG рендеринг
Приветствуются любые вклады! Пожалуйста, ознакомьтесь с CONTRIBUTING.md перед отправкой pull request.