Skip to content

Latest commit

 

History

History
78 lines (67 loc) · 6.13 KB

File metadata and controls

78 lines (67 loc) · 6.13 KB

Serenade - developer docs

English only. Workspace crates publish through normal PR flow to dev.

Index

Doc Topic
VISION.md Why Symfony-shaped Rust; what Serenade is not (incl. no core admin generator)
KERNEL.md Kernel components; admin / back-office ownership
HTTP_OPS.md Request-id, health/ready probes, graceful drain
CONSOLE.md Console Application, commands, --env / ratatui
RECIPES.md Flex-like recipes, serenade new, Cargo stays PM
SECURITY.md AuthN/Z, firewall, CSRF, password hashing, session login, OAuth/OIDC (oauth), LDAP bind (ldap)
FORMS.md HTML forms, CSRF default-on, XSS-safe render
I18N.md Translator, catalogues, locale, ICU helpers
PROFILER.md Web debug toolbar / per-request profiler
VIEW.md path / asset / partial HTML helpers
SERIALIZER.md JSON + optional TOON (agent context export)
MYFEED.md Beginner demo: open public feed (examples/MyFeed)
CACHE.md Cache pools, ArrayAdapter, RedisAdapter (redis-rs)
SESSION.md Session bag, flash, SessionStore, cookie + HTTP middleware
SEARCH.md Document index contracts, MemorySearchAdapter
MAILER.md Email + Mime multipart, Null/File/SMTP transports, DI
NOTIFIER.md SMS + push channels, Null/Memory transports, DI
STRING.md Slug, case transforms, English Inflector helpers
EXPRESSION.md Safe rule formulas for guards and access checks
WORKFLOW.md Places, transitions, guards, marking store, ExpressionGuard
FILESYSTEM.md Path helpers, dump/mirror, temp files
PROCESS.md Child process spawn, timeout, exit/output
FINDER.md Directory walk, name glob, type/depth filters
HTTP_CLIENT.md Outbound HttpClient, mock + reqwest, DI
MESSENGER.md Sync bus, in-memory transport, Redis wire frames
LOCK.md Named locks, in-memory / filesystem / Redis, DI
RATE_LIMITER.md Rate limiter policies, helpers, HTTP 429, DI
SCHEDULER.md Scheduler triggers, handlers, console, DI
OBSERVABILITY.md Tracing init, channels, var/log file sinks
OPENAPI.md utoipa helpers; Swagger / Redoc / RapiDoc / Scalar
ERRORS.md thiserror / Display / Debug / API error habits
BUNDLES.md Bundle model; admin CRUD is not FrameworkBundle
ADMIN.md Optional serenade-admin CRUD (MyFeed categories dogfood)
WASM.md Wasm host plumbing (wasmtime CM + Wasmer WASIX)
PERSISTENCE.md Adapter pattern, repository traits, UnitOfWork
RUSTASHOP.md Illustrative RustaShop crate map (example, not locked)

Design rules

  1. Choice, not prescription - persistence, ORM, HTTP server for the application are application decisions. Serenade exposes contracts and adapters.
  2. Kernel vs product - Serenade owns cross-cutting infrastructure; products own domain (commerce, CMS, etc.).
  3. Bundles compose components - like Symfony bundles, not monolithic framework magic.
  4. Explicit extension points - events, tagged services, middleware; Wasm host plumbing in Serenade (WASM.md), WIT/sandbox ABI and fixtures at the product layer.

Related product

RustaShop documents its own HTTP house pattern (Actix kernel + Axum MCP) in docs-dev/FOUNDATIONS.md. That is a RustaShop choice, not a Serenade requirement.

Issues

Epic Focus
#1 Meta: framework foundations
#2-#8 Kernel, DI, events, HTTP, routing, config, console
#9-#16 Cache, security, messenger, serializer, validator, contracts, bundles, testing
#17 Cargo workspace and CI
#18-#20 Starter tasks (workspace, bundles, Actix adapter)
#30 Flex-like recipes and app scaffolding
#56 Web Debug Toolbar / Profiler (logs + DB/query panels)
#57 Observability / structured logging (Monolog-like)
#110 Forms, CSRF, HTML escape
#111 View helpers (path / asset / partials)
#122 Admin generator stance (not in kernel / FrameworkBundle)
#177 Implement optional serenade-admin CRUD bundle
#123 Docs: lock admin generator as core non-goal
#124 Parked: optional Admin CRUD bundle (EasyAdmin-shaped)

Config packages prefer TOML; console is the bin/console analogue (optional ratatui for rich TUI). Composer maps to Cargo, not a second package manager.

Consumer: RustaShop #49.