Event-Driven Enterprise Headless Platform Built with Rust
The stability of a tank. The speed of compiled code. The first CMS designed for the AI-Agent era.
Features • Why Rust? • Comparison • Quick Start • Documentation • Architecture • Roadmap
RusToK is an event-driven, modular highload platform for any product with data. Each module is isolated and microservice-ready, while still shipping as a single, secure Rust binary. It combines the developer experience of Laravel/Rails with the performance of Rust, using a "Tank" strategy for stability and a "CQRS-lite" approach for fast reads.
Modules in RusToK are compiled into a binary for maximum performance and security, but follow a standardized layout (Entities/DTO/Services) for easy maintainability. • Rustok can become the foundation of anything that has any data. !!! .
From an alarm clock with a personal blog to NASA's terabyte storage.
We consume 10-200 times less power than traditional platforms.
We can work on any device with an operational memory of more than 50 MB (Maybe less).
Highload for the poor, salvation for the rich...
Our architecture will be relevant for decades. We won't turn into another WordPress.
From a personal blog or landing page to petabytes of data storage.
FORGET ABOUT OLD PATTERNS, WE'RE BUILDING THE FUTURE. WE HAVE NO LIMITATIONS!
┌─────────────────────────────────────────────────────────────┐ │ RusToK Platform │ ├─────────────────────────────────────────────────────────────┤ │ 🛍️ Storefront (SSR) │ ⚙️ Admin Panel │ 📱 Mobile App │ │ Leptos SSR │ Leptos CSR │ Your Choice │ ├─────────────────────────────────────────────────────────────┤ │ 🔌 GraphQL API │ ├─────────────────────────────────────────────────────────────┤ │ 📦 Commerce │ 📝 Content │ 👥 Community │ ... │ ├─────────────────────────────────────────────────────────────┤ │ 🧠 Core (Loco.rs) │ │ Auth • Tenants • Nodes • Tags • Events │ ├─────────────────────────────────────────────────────────────┤ │ 🐘 PostgreSQL (write) | 🔎 Index Module (read) │ └─────────────────────────────────────────────────────────────┘
Most platforms are either fast but complex (Go/C++) or productive but slow (PHP/Node). RusToK breaks this trade-off using the Loco.rs foundation, giving you "Rails-like" speed of development with "C++-like" runtime performance.
- 🔐 Multi-tenant Isolation — Native support for multiple stores/sites in one deployment.
- 🔑 Enterprise Auth — JWT-based authentication with fine-grained RBAC.
- 📊 Hybrid API — Unified GraphQL for domain data and REST for infrastructure/OpenAPI.
- 🏗️ Standardized Modules — Clean architecture with
entities,dto, andservicesin every crate. - 🎣 Event-Driven Pub/Sub — Async synchronization between write modules and read models.
- 📚 Full OpenAPI Documentation — Comprehensive Swagger UI for all REST controllers.
- 🌍 Global-First — Built-in i18n and localization support.
- 🚀 Loco.rs Framework — Rails-like productivity in Rust
- 🛠️ CLI Generators —
cargo loco generate model/controller/migration - 📝 Type-Safe Everything — From database to frontend, one language
- 🧪 Testing Built-in — Unit, integration, and E2E test support
- 🎨 Storefront UI Stack — Leptos SSR + Next.js starters with Tailwind + DaisyUI
- 📚 Auto-generated Docs — OpenAPI/GraphQL schema documentation
- ⚡ Blazingly Fast — Native compiled binary, no interpreter overhead
- 🛡️ Memory Safe — Rust's ownership model prevents entire classes of bugs
- 📦 Single Binary — Deploy one file, no dependency management
- 🔄 Zero-Downtime Deploys — Graceful shutdown and health checks
- 🔎 CQRS-lite Read Models — Denormalized index tables for fast storefront queries
| Issue | WordPress | Node.js CMS | RusToK |
|---|---|---|---|
| Runtime Errors | Fatal errors crash site | Uncaught exceptions | Compile-time guarantees |
| Memory Leaks | Common with plugins | GC pauses, memory bloat | Ownership model prevents |
| Security | 70% of vulns from plugins | npm supply chain risks | Compiled, auditable deps |
| Performance | ~50 req/s typical | ~1000 req/s | ~50,000+ req/s |
| Scaling | Requires caching layers | Horizontal only | Vertical + Horizontal |
// This code won't compile if you forget to handle an error
let product = Product::find_by_id(db, product_id)
.await? // ? forces you to handle the error
.ok_or(Error::NotFound)?; // Explicit None handling
// Compare to JavaScript:
// const product = await Product.findById(id);
// // What if id is undefined? What if DB fails? Runtime crash!Real-world impact:
- 🐛 Fewer bugs in production — Most errors caught at compile time
- 💰 Lower infrastructure costs — 10x less memory, 50x more throughput
- 😴 Sleep better at night — No 3 AM "site is down" emergencies
While a typical Node.js or Python application requires 256MB-512MB RAM per instance, a RusToK production container starts at just 30MB-50MB.
- Deploy on $5 VPS: Handle traffic that would cost $100/mo on other stacks.
- Serverless Friendly: Native binary starts in milliseconds. Zero "cold start" issues.
| Metrics | WordPress | Strapi | RusToK |
|---|---|---|---|
| Req/sec | 60 | 800 | 45,000+ |
| P99 Latency | 450ms | 120ms | 8ms |
| Cold Boot | N/A | 8.5s | 0.05s |
RusToK is the first platform built with a System Manifest designed specifically for AI Assistants.
- Structured for Agents: Clean directory patterns and exhaustive documentation mean AI (Cursor, Windsurf, Claude) builds features for you with 99% accuracy.
- Zero Boilerplate: Use our CLI and AI-prompts to generate entire modules in minutes.
RusToK is so efficient that it doesn't just run on servers — it survives where others crash:
- Smartwatch Ready: Handle a million requests per second while running on your smart fridge or a digital watch.
- Powered by Vibes: We handle high traffic using less energy than a literal cup of coffee.
- Quantum Speed: Our response times are so low that requests are often served before the user even finishes clicking.
If your current CMS needs a supercomputer just to render a "About Us" page, it's time to upgrade to the Tank.
| Aspect | WordPress | RusToK |
|---|---|---|
| Language | PHP 7.4+ | Rust |
| Typical Response Time | 200-500ms | 5-20ms |
| Memory per Request | 50-100MB | 2-5MB |
| Plugin System | Runtime (risky) | Compile-time (safe) |
| Type Safety | None | Full |
| Multi-tenant | Multisite (hacky) | Native |
| API | REST (bolted on) | GraphQL (native) |
| Admin UI | PHP templates | Leptos SPA |
| Learning Curve | Low | Medium-High |
| Hosting Cost | $20-100/mo | $5-20/mo |
Best for: Teams tired of WordPress security patches and plugin conflicts.
| Aspect | Strapi | RusToK |
|---|---|---|
| Language | JavaScript/TypeScript | Rust |
| Response Time | 50-150ms | 5-20ms |
| Memory Usage | 200-500MB | 30-50MB |
| Type Safety | Optional (TS) | Mandatory |
| Database | Multiple | PostgreSQL |
| Content Modeling | UI-based | Code-based |
| Plugin Ecosystem | npm (large) | Crates (growing) |
| Cold Start | 5-10 seconds | <100ms |
Best for: Teams wanting type safety without sacrificing DX.
| Aspect | Medusa | RusToK |
|---|---|---|
| Focus | E-commerce only | Modular (commerce optional) |
| Language | TypeScript | Rust |
| Architecture | Microservices encouraged | Modular monolith |
| Plugins | Runtime | Compile-time |
| Admin | React | Leptos (Rust) |
| Storefront | Next.js templates | Leptos SSR |
| Multi-tenant | Limited | Native |
Best for: Teams wanting commerce + content in one platform.
| Aspect | Directus/Payload | RusToK |
|---|---|---|
| Approach | Database-first | Schema-first |
| Type Generation | Build step | Native |
| Custom Logic | Hooks (JS) | Rust modules |
| Performance | Good | Excellent |
| Self-hosted | Yes | Yes |
| "Full Rust" | No | Yes |
Best for: Teams committed to Rust ecosystem.
# Rust toolchain
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
rustup target add wasm32-unknown-unknown
# Tools
cargo install loco-cli
cargo install trunk
cargo install cargo-leptos
# Database
docker run -d --name rustok-db \
-e POSTGRES_PASSWORD=postgres \
-e POSTGRES_DB=rustok_dev \
-p 5432:5432 \
postgres:16# Clone
git clone https://github.com/RustokCMS/RusToK.git
cd RusToK
# Setup database
cd apps/server
cargo loco db migrate
# Run backend (terminal 1)
cargo loco start
# Run admin panel (terminal 2)
cd apps/admin
RUSTOK_DEMO_MODE=1 trunk serve --open
# Run storefront (terminal 3)
cargo run -p rustok-storefront
# (Optional) Run Next.js admin (terminal 4)
cd apps/next-admin
npm install
npm run dev
# (Optional) Run Next.js storefront (terminal 5)
cd apps/next-frontend
npm install
npm run dev
# (Optional) Build Tailwind + DaisyUI styles
cd apps/storefront
npm install
npm run build:css
# Visit
# API: http://localhost:3000/api/graphql
# Admin: http://localhost:8080
# Storefront (SSR): http://localhost:3100?lang=en
⚠️ Admin demo mode is disabled by default. SetRUSTOK_DEMO_MODE=1only for local demos. For real authentication, use the backend/api/authendpoints with HttpOnly cookies.
# Create a new module
cargo loco generate model Product \
title:string \
price:int \
status:string
# Run migrations
cargo loco db migrate
# Generate CRUD controller
cargo loco generate controller products --api| Document | Description |
|---|---|
| RUSTOK_MANIFEST.md | Главный манифест — философия, архитектура, стек |
| MODULE_MATRIX.md | Карта всех модулей и зависимостей |
| DATABASE_SCHEMA.md | Все таблицы БД с колонками и ERD |
| ARCHITECTURE_GUIDE.md | Архитектурные принципы и решения |
| ROADMAP.md | Фазы разработки (Forge → Blueprint → Construction) |
| IMPLEMENTATION_STATUS.md | Статус реализации vs документация |
- Architecture & system logic
- Module registry
- Modules overview
- MCP adapter
- Storefront SSR notes
- Testing guidelines
- Admin auth phase 3 scope
- Gap analysis (Leptos + Next.js)
- Architecture (Server + Leptos + Next.js)
- UI parity (admin + storefront)
- Tech parity tracker
- Template integration plan
- Admin libraries parity
For a detailed breakdown of the system logic, event flow, and CQRS-lite implementation, see Detailed Architecture Documentation. MCP adapter details live in docs/mcp.md.
RusToK/
├── apps/
│ ├── server/ # 🚀 Backend API (Loco.rs)
│ │ ├── src/
│ │ │ ├── app.rs # Application setup
│ │ │ ├── controllers/ # HTTP handlers
│ │ │ ├── models/ # SeaORM entities
│ │ │ └── graphql/ # GraphQL resolvers
│ │ ├── config/ # Environment configs
│ │ └── migration/ # Database migrations
│ │
│ ├── admin/ # ⚙️ Admin Panel (Leptos CSR)
│ ├── next-admin/ # ⚙️ Admin Panel (Next.js App Router)
│ │ └── src/
│ │ ├── pages/ # Admin views
│ │ └── components/ # Reusable UI
│ │
│ ├── storefront/ # 🛍️ Public Store (Leptos SSR)
│ ├── next-frontend/ # 🛍️ Public Store (Next.js App Router)
│ │ └── src/
│ │ ├── pages/ # SEO-optimized pages
│ │ └── components/ # Store UI components
│ │
│ └── mcp/ # 🤖 MCP adapter server (stdio)
│
├── crates/
│ ├── rustok-core/ # 🧠 Infrastructure (Auth, Events, RBAC)
│ ├── rustok-content/ # 📝 CMS Core (Nodes, Bodies, Categories)
│ ├── rustok-blog/ # 📰 Blogging (Wraps Content)
│ ├── rustok-commerce/ # 🛒 Shop (Products, Orders, Inventory)
│ ├── rustok-index/ # 🔎 CQRS Read Models & Search
│ ├── rustok-mcp/ # 🤖 MCP adapter (rmcp SDK)
│ └── ...
└── Cargo.toml # Workspace configuration
Modules are Rust crates linked at compile time:
// Adding a module to your build
// 1. Add to Cargo.toml
[dependencies]
rustok-commerce = { path = "../crates/rustok-commerce" }
// 2. Register in app.rs
fn routes(ctx: &AppContext) -> AppRoutes {
AppRoutes::new()
.add_route(rustok_commerce::routes())
.add_route(rustok_community::routes())
}
// 3. Compile — module is now part of your binary
cargo build --release| Runtime Plugins (WordPress) | Compile-time Modules (RusToK) |
|---|---|
| Can crash your site | Errors caught before deploy |
| Security vulnerabilities | Audited at build time |
| Version conflicts | Cargo resolves dependencies |
| Performance overhead | Zero runtime cost |
| "Works on my machine" | Same binary everywhere |
Modules can be enabled/disabled per tenant without recompilation. The server
tracks compiled modules in a registry and calls module lifecycle hooks when
tenants enable or disable a module. See docs/modules/module-registry.md for details.
Storefront SSR notes live in docs/UI/storefront.md.
-- Stored in database
INSERT INTO tenant_modules (tenant_id, module_slug, enabled)
VALUES ('uuid-here', 'commerce', true);// Checked at runtime
if modules.is_enabled(tenant_id, "commerce").await? {
// Show commerce features
}Write models live in normalized module tables. Read models are denormalized index tables that are kept in sync via events. This keeps storefront queries fast and avoids heavy joins in the hot path.
Write → Event Bus → Indexers → Read Models
Phase 1: Foundation ✅
- Project scaffolding
- CI/CD pipeline
- Loco.rs integration
- Basic GraphQL API
- Database migrations
Phase 2: Core (Current)
- Multi-tenant data isolation
- User authentication (JWT)
- Role-based permissions
- Admin panel foundation
- Module registry system
Phase 3: Commerce Module
- Product catalog
- Categories & attributes
- Shopping cart
- Order management
- Inventory tracking
Phase 4: Storefront
- Leptos SSR setup (Tailwind + DaisyUI)
- Product pages
- Cart & checkout flow
- SEO optimization
- Performance tuning
Phase 5: Content
- Blog module
- Page builder basics
- Media library
- SEO fields
Phase 6: Advanced
- Payment integrations
- Email notifications
- Search (MeiliSearch)
- Caching layer
- Admin dashboard widgets
Phase 7: Ecosystem
- Plugin marketplace concept
- Theme system
- CLI improvements
- Documentation site
- Docker images
# All tests
cargo test --workspace
# Specific crate
cargo test -p rustok-core
# With database (integration tests)
DATABASE_URL=postgres://localhost/rustok_test cargo testSee docs/testing-guidelines.md for guidance on layering tests, avoiding flakiness, and mock boundaries.
# Check outdated dependencies (root workspace crates only)
cargo outdated -R
# Update lockfile (keep Cargo.toml unchanged)
cargo update
# Security audit
cargo audit
# License + advisory policy checks
cargo deny check# Format code
cargo fmt --all
# Lint
cargo clippy --workspace -- -D warnings
# Check before commit
cargo fmt --all -- --check && cargo clippy --workspacecargo test --workspace
cargo clippy --workspace --all-targets -- -D warnings
cargo audit
cargo deny check# Generate new model
cargo loco generate model Category title:string position:int
# Generate controller
cargo loco generate controller categories --api
# Run migrations
cargo loco db migrate
# Rollback migration
cargo loco db rollback
# Start with auto-reload
cargo watch -x 'loco start'We welcome contributions! Please see our Contributing Guide for details.
Look for issues labeled good first issue — these are great starting points.
- Fork the repository
- Create a feature branch (git checkout -b feature/amazing-feature)
- Make your changes
- Run tests (cargo test --workspace)
- Run lints (cargo clippy --workspace)
- Commit (git commit -m 'Add amazing feature')
- Push (git push origin feature/amazing-feature)
- Open a Pull Request
This project is licensed under the MIT License — see the LICENSE file for details.
What this means:
- ✅ Free to use for any purpose (commercial or private)
- ✅ Free to modify and sub-license
- ✅ No "copyleft" requirements (keep your proprietary code private)
- ✅ Standard "as-is" liability protection
Built with amazing open-source projects:
- Loco.rs — Rails-like framework for Rust
- Leptos — Full-stack Rust web framework
- SeaORM — Async ORM for Rust
- async-graphql — GraphQL server library
- Axum — Web framework
⬆ Back to Top
Made with 🦀 by the RusToK community
This is an alpha version and requires clarification. Be careful, there may be errors in the text. So that no one thinks that this is an immutable rule.