{"id":49742270,"url":"https://github.com/ultimo-rs/ultimo","last_synced_at":"2026-06-07T23:00:38.147Z","repository":{"id":325713426,"uuid":"1101484805","full_name":"ultimo-rs/ultimo","owner":"ultimo-rs","description":"Rust web framework with automatic TypeScript client generation","archived":false,"fork":false,"pushed_at":"2026-06-02T22:18:24.000Z","size":704,"stargazers_count":4,"open_issues_count":26,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-02T23:21:55.697Z","etag":null,"topics":["api-framework","open-api","rpc","rust","type-safe","web-framework"],"latest_commit_sha":null,"homepage":"https://ultimo.dev","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ultimo-rs.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-11-21T18:35:45.000Z","updated_at":"2026-06-02T21:54:13.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/ultimo-rs/ultimo","commit_stats":null,"previous_names":["ultimo-rs/ultimo"],"tags_count":6,"template":false,"template_full_name":null,"purl":"pkg:github/ultimo-rs/ultimo","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ultimo-rs%2Fultimo","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ultimo-rs%2Fultimo/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ultimo-rs%2Fultimo/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ultimo-rs%2Fultimo/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ultimo-rs","download_url":"https://codeload.github.com/ultimo-rs/ultimo/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ultimo-rs%2Fultimo/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34041089,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-07T02:00:07.652Z","response_time":124,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["api-framework","open-api","rpc","rust","type-safe","web-framework"],"created_at":"2026-05-09T20:03:11.427Z","updated_at":"2026-06-07T23:00:38.124Z","avatar_url":"https://github.com/ultimo-rs.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n  \u003cimg src=\"docs-site/docs/public/logo.svg\" alt=\"Ultimo Logo\" width=\"200\" /\u003e\n  \u003ch1\u003eUltimo\u003c/h1\u003e\n  \u003cp\u003e\u003cstrong\u003eType-safe web framework with automatic TypeScript client generation\u003c/strong\u003e\u003c/p\u003e\n\n  \u003cp\u003e\n    \u003ca href=\"https://crates.io/crates/ultimo\"\u003e\u003cimg src=\"https://img.shields.io/crates/v/ultimo.svg?style=flat-square\" alt=\"Crates.io\" /\u003e\u003c/a\u003e\n    \u003ca href=\"https://docs.rs/ultimo\"\u003e\u003cimg src=\"https://img.shields.io/badge/docs-latest-blue.svg?style=flat-square\" alt=\"Documentation\" /\u003e\u003c/a\u003e\n    \u003ca href=\"https://github.com/ultimo-rs/ultimo/blob/main/LICENSE\"\u003e\u003cimg src=\"https://img.shields.io/badge/license-MIT-blue.svg?style=flat-square\" alt=\"License\" /\u003e\u003c/a\u003e\n    \u003ca href=\"https://github.com/ultimo-rs/ultimo/actions\"\u003e\u003cimg src=\"https://img.shields.io/github/actions/workflow/status/ultimo-rs/ultimo/ci.yml?branch=main\u0026style=flat-square\" alt=\"Build Status\" /\u003e\u003c/a\u003e\n    \u003ca href=\"https://github.com/ultimo-rs/ultimo/blob/main/SECURITY.md\"\u003e\u003cimg src=\"https://img.shields.io/badge/unsafe-forbidden-success.svg?style=flat-square\" alt=\"Unsafe forbidden\" /\u003e\u003c/a\u003e\n    \u003cimg src=\"https://img.shields.io/badge/MSRV-1.86-blue.svg?style=flat-square\" alt=\"MSRV 1.86\" /\u003e\n  \u003c/p\u003e\n\n  \u003cp\u003e\n    \u003ca href=\"https://ultimo.dev\"\u003eWebsite\u003c/a\u003e\n    \u003cspan\u003e\u0026nbsp;\u0026nbsp;•\u0026nbsp;\u0026nbsp;\u003c/span\u003e\n    \u003ca href=\"https://docs.ultimo.dev\"\u003eDocumentation\u003c/a\u003e\n    \u003cspan\u003e\u0026nbsp;\u0026nbsp;•\u0026nbsp;\u0026nbsp;\u003c/span\u003e\n    \u003ca href=\"https://docs.ultimo.dev/getting-started\"\u003eGetting Started\u003c/a\u003e\n    \u003cspan\u003e\u0026nbsp;\u0026nbsp;•\u0026nbsp;\u0026nbsp;\u003c/span\u003e\n    \u003ca href=\"https://github.com/ultimo-rs/ultimo/tree/main/examples\"\u003eExamples\u003c/a\u003e\n  \u003c/p\u003e\n\n  \u003cbr /\u003e\n\u003c/div\u003e\n\n---\n\n**Ultimo** is a modern Rust web framework built on **Hyper + Tokio**:\nsecure-by-default, fast, and type-safe end to end — with **automatic TypeScript\nclient generation** from your Rust API. REST and JSON-RPC live in one app, and\nthe framework is 100% safe Rust (`#![forbid(unsafe_code)]`).\n\n## Why Ultimo\n\n- 🚀 **Automatic TypeScript clients** — define your API in Rust, get a fully typed TS client generated for you.\n- 🔄 **REST + JSON-RPC in one app** — plain HTTP routes and RPC procedures side by side.\n- 🔌 **WebSockets** — RFC 6455 with a built-in pub/sub system (zero extra deps).\n- 🔐 **Auth, built in** — JWT and API-key middleware plus scope-based [authorization guards](https://docs.ultimo.dev/authorization).\n- 🛡️ **Secure by default** — 100% safe Rust, secure sessions/cookies, CSRF, security-headers middleware, request body-size limits, and supply-chain CI.\n- ⚡ **Fast** — native Rust on the Hyper + Tokio core, O(1) constant-time routing, benchmarks regression-guarded in CI ([details](https://docs.ultimo.dev/performance)).\n- 🗄️ **Databases** — first-class SQLx and Diesel integration (PostgreSQL / MySQL / SQLite).\n- 🧪 **Testing utilities** — in-process `TestClient`, response assertions, and fixtures.\n\n## Quick start\n\n```toml\n[dependencies]\nultimo = \"0.4\"\ntokio = { version = \"1\", features = [\"full\"] }\nserde = { version = \"1\", features = [\"derive\"] }\n```\n\n```rust\nuse ultimo::prelude::*;\n\n#[derive(Serialize, Deserialize)]\nstruct User {\n    id: u32,\n    name: String,\n}\n\n#[tokio::main]\nasync fn main() -\u003e ultimo::Result\u003c()\u003e {\n    let mut app = Ultimo::new();\n\n    app.get(\"/users/:id\", |ctx: Context| async move {\n        let id: u32 = ctx\n            .req\n            .param(\"id\")?\n            .parse()\n            .map_err(|_| UltimoError::BadRequest(\"invalid id\".into()))?;\n        ctx.json(User { id, name: format!(\"User {id}\") }).await\n    });\n\n    println!(\"→ http://127.0.0.1:3000\");\n    app.listen(\"127.0.0.1:3000\").await\n}\n```\n\n\u003e **MSRV:** Rust 1.86. Everything beyond the core is opt-in via Cargo features (see below).\n\n## Type-safe clients\n\nUltimo's headline feature: define an API once in Rust and generate a typed\nTypeScript client — no hand-written types, no drift.\n\n```bash\n# Generate a TypeScript client from your RPC definitions\ncargo run -p ultimo-cli -- generate --path ./src --output ./client\n```\n\n```typescript\n// Generated, fully typed — autocomplete + compile-time checks\nconst user = await client.getUser({ id: 1 });\nconsole.log(user.name);\n```\n\nSee [TypeScript Clients](https://docs.ultimo.dev/typescript) for the full workflow.\n\n## Feature flags\n\nEverything is opt-in (`default = []`):\n\n| Feature | What it enables |\n|---|---|\n| `websocket` | RFC 6455 WebSocket support + pub/sub |\n| `session` | Cookie-based session management |\n| `jwt` | JWT authentication middleware (HS256) |\n| `api-key` | API-key authentication with a pluggable store |\n| `csrf` | CSRF protection (double-submit cookie) |\n| `testing` | In-process `TestClient`, assertions, fixtures |\n| `test-helpers` | WebSocket test helpers (for integration tests) |\n| `sqlx-postgres` · `sqlx-mysql` · `sqlx-sqlite` | SQLx integration per backend |\n| `diesel-postgres` · `diesel-mysql` · `diesel-sqlite` | Diesel integration per backend |\n\n```toml\nultimo = { version = \"0.4\", features = [\"websocket\", \"jwt\", \"sqlx-postgres\"] }\n```\n\n## CLI\n\n```bash\ncargo install ultimo-cli   # installs the `ultimo` binary\n\nultimo new my-app --template fullstack         # scaffold a new project\nultimo generate --path ./src --output ./client # generate the TypeScript client\nultimo build --profile release                 # production build\n```\n\n\u003e `ultimo dev` (hot-reload dev server) is experimental — see the [roadmap](https://docs.ultimo.dev/roadmap).\n\n## Documentation\n\nFull guides at **[docs.ultimo.dev](https://docs.ultimo.dev)** — getting started,\nrouting, middleware, RPC + TypeScript clients, OpenAPI, sessions, authentication,\nWebSockets, database integration, testing, and [performance](https://docs.ultimo.dev/performance).\n\n## Examples\n\nRunnable examples live in [`examples/`](https://github.com/ultimo-rs/ultimo/tree/main/examples)\n— including `session-auth` and `jwt-auth` full-stack demos. Run one with:\n\n```bash\ncargo run -p jwt-auth-example\n```\n\n## Contributing\n\nIssues and PRs welcome. See [CONTRIBUTING.md](CONTRIBUTING.md) and the\n[roadmap](https://docs.ultimo.dev/roadmap). Security policy: [SECURITY.md](SECURITY.md).\n\n## License\n\nMIT © Ultimo Contributors. See [LICENSE](LICENSE).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fultimo-rs%2Fultimo","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fultimo-rs%2Fultimo","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fultimo-rs%2Fultimo/lists"}