Handler-first.
Runtime-aware.
Application-ready.
Build typed Rust APIs, background work, cron, channels, commands, services, OpenAPI, and console visibility from one coherent application model.
Build typed Rust APIs, background work, cron, channels, commands, services, OpenAPI, and console visibility from one coherent application model.
Typed async handlers with explicit data and error boundaries.
Typed inputs, validation, and responses stay together.
Routes, tasks, cron, channels, commands, and services share a model.
Schemas and docs come from registered handlers.
Operations, config, runtime health, and tasks are inspectable.
Application features compose without scattered registries.
Routes, tasks, signals, emitters, services, schemas, OpenAPI, runtime config, and system health are registered into one inspectable surface.
See the whole application shape without stitching together separate dashboards for routes, workers, docs, and services.
Vyuh treats application behavior as typed handlers, not scattered subsystems. The same signatures, data model, errors, auth, validation, and observability apply across them.
Run emails, imports, reports, retries, approvals, and polling as typed handlers registered beside your APIs.
Tasks can sleep, suspend, resume, retry, fail, and store typed results while staying visible in the console.
Submit Data<T> by task type and reuse route-style data.
Sleep or suspend work without keeping a Rust future alive.
Return retry state when work should run again later.
Inspect state, payloads, retries, results, and failures.
Run cron, intervals, polling, retries, and external notifications as registered typed emitters.
Emitters keep trigger logic close to the bundle and hand off to tasks, signals, or channels.
Register recurring work as named runtime behavior.
Produce typed data for tasks, signals, channels, or services.
Keep schedules beside the feature that owns them.
Inspect registered emitters from the same console.
Publish typed events to browsers, services, and subscribers through channels beside routes and tasks.
Channels make pub/sub and SSE-style delivery part of the explicit application model.
Keep live payloads in the same typed data model.
Expose streams through the same routing surface.
Connect signals, tasks, emitters, and external clients.
Keep channels discoverable beside every runtime path.
Generate OpenAPI from handlers, schemas, auth, permissions, and middleware registered in the app.
Override generated docs through macros or direct APIs when contracts need extra precision.
Routes, inputs, outputs, and schemas feed the document.
Use macros or direct APIs for exact operations.
Model API key and JWT schemes beside route metadata.
Surface permissions and middleware in generated docs.
Package handlers, assets, templates, docs, and runtime surfaces near the feature code.
Bundles can be imported from crates, prefixed, layered, validated, and mounted.
Keep handlers, docs, assets, and surfaces together.
Merge, prefix, tag, layer, and validate before startup.
Carry assets, templates, services, and migrations.
Import from another crate without losing APIs or assets.
Web framework
Async SQL toolkit
Async runtime
Serialization
Templates
JSON Schema
Start with a framework that keeps your project organized from the first route to the last background task.