# Darto > A minimal, fast web framework for Dart. Define routes, compose middleware, and ship APIs — everything flows through one concept: Context. Inspired by Express and Hono, built for pure Dart with zero JS bridges. Darto centers on three typedefs — Handler, Middleware, and Next. Handlers receive a Context and return a Response; middleware receives a Context and a Next callback. The framework ships an official ecosystem of plugins (auth, cache, env, jobs, logger, mailer, OpenAPI, rate limiting, static files, testing, validation, view engines, and WebSockets). The docs below cover the core API, helpers, middleware, plugins, advanced topics, and migration guides. ## Getting Started - [Installation](https://darto-docs.vercel.app/docs?section=installation): Add Darto to your pubspec.yaml: - [Quick Start](https://darto-docs.vercel.app/docs?section=quick-start): Spin up a server in under a minute. - [Core Concepts](https://darto-docs.vercel.app/docs?section=core-concepts): Three typedefs are all you need to understand the entire framework: ## API - [Application](https://darto-docs.vercel.app/docs?section=application): By default serve / listen trap SIGINT/SIGTERM and shut down gracefully — pass shutdownSignals: false to opt out. - [Routing](https://darto-docs.vercel.app/docs?section=routing): All verb methods take the middleware list as the second argument (required — pass [] for no middleware) and the handler last. - [Context](https://darto-docs.vercel.app/docs?section=context): The Context (c) is the single object every handler and middleware receives. - [Request (c.req)](https://darto-docs.vercel.app/docs?section=request): Everything about the incoming request lives on c.req — URL, path parameters, query string, headers, body and per-request state. - [Response](https://darto-docs.vercel.app/docs?section=response): Two layers for sending a response. ## Helpers - [Helpers](https://darto-docs.vercel.app/docs?section=helpers): Cookie helpers are standalone functions imported from package:darto/cookie.dart. ## Middlewares - [Middleware](https://darto-docs.vercel.app/docs?section=middleware): use(middleware) registers a global middleware that runs on every request. - [Built-in Middlewares](https://darto-docs.vercel.app/docs?section=middleware-builtin): Darto ships with batteries: logger, CORS, JWT, Basic & Bearer auth, cache, compress, CSRF, body-limit, rate-limit, request ID, ETag, RBAC and more. - [Session](https://darto-docs.vercel.app/docs?section=session): Cookie-based signed sessions. - [Validator (core)](https://darto-docs.vercel.app/docs?section=validator): validator is the core validation middleware (from package:darto/validator.dart) — no extra package needed. ## Database - [Database & ORM](https://darto-docs.vercel.app/docs?section=database): Darto is unopinionated about persistence — it's a web framework, so you can use any database package you like (raw sqlite3, a driver, or any ORM). ## Official Plugins - [CLI Tools](https://darto-docs.vercel.app/docs?section=cli-tools): Install the Darto CLI globally with pub: - [darto_cli](https://darto-docs.vercel.app/docs?section=plugin-cli): Official CLI — scaffold projects, run a hot-reload dev server, build native executables and generate a typed API client. - [darto_validator](https://darto-docs.vercel.app/docs?section=plugin-validator): Request validation powered by zard (Zod-style) via the zValidator middleware. - [darto_openapi](https://darto-docs.vercel.app/docs?section=plugin-openapi): OpenAPI 3.1 spec generation + Scalar API docs. - [darto_zard_openapi](https://darto-docs.vercel.app/docs?section=plugin-zard-openapi): Hono-style zod-openapi for Darto. - [darto_test](https://darto-docs.vercel.app/docs?section=plugin-test): Ergonomic test client — boot an app on an ephemeral port and assert responses without managing a server (supertest-style). - [darto_logger](https://darto-docs.vercel.app/docs?section=plugin-logger): Structured logging — JSON or pretty output, levels, bound fields, and a request-logging middleware with request-id correlation. - [darto_auth](https://darto-docs.vercel.app/docs?section=plugin-auth): Authentication — password hashing (PBKDF2-HMAC-SHA256, no native deps) and session-based auth guards built on Darto's session middleware. - [darto_inject](https://darto-docs.vercel.app/docs?section=plugin-di): Typed dependency injection — Provider factories with app- and request-scope, lifecycle hooks (onDispose), test overrides, and a built-in contextProvider. - [darto_cache](https://darto-docs.vercel.app/docs?section=plugin-cache): Cache primitives — a tiny Cache interface with a zero-dep MemoryCache (LRU + TTL) and a RedisCache adapter for shared / distributed caching. - [darto_rate_limit](https://darto-docs.vercel.app/docs?section=plugin-rate-limit): Distributed RateLimitStore for the core rateLimit() middleware. - [darto_mailer](https://darto-docs.vercel.app/docs?section=plugin-mailer): Email sending — a small Mailer API with an SMTP transport (pure-Dart) plus console and memory transports for development and tests. - [darto_jobs](https://darto-docs.vercel.app/docs?section=plugin-jobs): Background job queue — enqueue work, process it with retries and backoff, backed by an in-memory or Redis store (at-least-once). - [darto_ws](https://darto-docs.vercel.app/docs?section=plugin-ws): WebSocket support — same port, route-integrated. - [darto_view](https://darto-docs.vercel.app/docs?section=plugin-view): Pluggable template engine — ships with Mustache. - [darto_static](https://darto-docs.vercel.app/docs?section=plugin-static): Static file serving middleware — ETag, 304, Range requests, optional gzip and Cache-Control, with built-in path-traversal protection. - [darto_env](https://darto-docs.vercel.app/docs?section=plugin-env): Environment variable loader — reads .env files and Platform.environment with typed accessors. ## Advanced - [Render / Layouts](https://darto-docs.vercel.app/docs?section=render-layouts): Two-step rendering modelled after Hono's setRenderer / c.render. - [View Engine](https://darto-docs.vercel.app/docs?section=view-engine): For file-based templates (Mustache, Jinja…) use the darto_view package. - [File Upload](https://darto-docs.vercel.app/docs?section=file-upload) - [File Download](https://darto-docs.vercel.app/docs?section=file-download) - [WebSocket](https://darto-docs.vercel.app/docs?section=websocket): Use the darto_ws package to upgrade any route to a WebSocket — same port, same middleware pipeline as HTTP routes. - [Error Handling](https://darto-docs.vercel.app/docs?section=error-handling) - [Full Example](https://darto-docs.vercel.app/docs?section=full-example) ## Migration Guide - [v0.x → v2 Overview](https://darto-docs.vercel.app/docs?section=migration-overview): The central concept changed from Express-style (Request, Response, NextFunction) to a Hono-style single Context object. - [Handler & Middleware](https://darto-docs.vercel.app/docs?section=migration-handlers) - [Request API](https://darto-docs.vercel.app/docs?section=migration-request) - [Response API](https://darto-docs.vercel.app/docs?section=migration-response) - [Routing & Middleware Registration](https://darto-docs.vercel.app/docs?section=migration-routing) - [Validation](https://darto-docs.vercel.app/docs?section=migration-validation) ## Optional - [Full documentation](https://darto-docs.vercel.app/llms-full.txt): the entire Darto documentation concatenated into a single file. - [GitHub repository](https://github.com/evandersondev/darto): source code and issues. - [pub.dev package](https://pub.dev/packages/darto): published package.