{"id":13478327,"url":"https://github.com/http-rs/tide","last_synced_at":"2025-05-11T17:43:01.997Z","repository":{"id":37493234,"uuid":"144025834","full_name":"http-rs/tide","owner":"http-rs","description":"Fast and friendly HTTP server framework for async Rust","archived":false,"fork":false,"pushed_at":"2024-01-05T01:12:04.000Z","size":1529,"stargazers_count":5106,"open_issues_count":135,"forks_count":324,"subscribers_count":92,"default_branch":"main","last_synced_at":"2025-05-05T22:49:22.450Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://docs.rs/tide","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/http-rs.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":".github/CONTRIBUTING.md","funding":null,"license":"LICENSE-APACHE","code_of_conduct":".github/CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null}},"created_at":"2018-08-08T14:32:04.000Z","updated_at":"2025-04-28T10:25:54.000Z","dependencies_parsed_at":"2023-02-01T02:00:33.698Z","dependency_job_id":"5d721a7b-6ad1-4a43-90f2-58d4f8164fe2","html_url":"https://github.com/http-rs/tide","commit_stats":{"total_commits":939,"total_committers":135,"mean_commits":6.955555555555556,"dds":0.703940362087327,"last_synced_commit":"e79e4f6c0e7cd3d264536cee886619c7b704502e"},"previous_names":["yoshuawuyts/rise"],"tags_count":24,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/http-rs%2Ftide","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/http-rs%2Ftide/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/http-rs%2Ftide/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/http-rs%2Ftide/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/http-rs","download_url":"https://codeload.github.com/http-rs/tide/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":253609523,"owners_count":21935552,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":[],"created_at":"2024-07-31T16:01:55.590Z","updated_at":"2025-05-11T17:43:01.937Z","avatar_url":"https://github.com/http-rs.png","language":"Rust","funding_links":[],"categories":["Rust","others"],"sub_categories":[],"readme":"\u003ch1 align=\"center\"\u003eTide\u003c/h1\u003e\n\u003cdiv align=\"center\"\u003e\n \u003cstrong\u003e\n   Serve the web\n \u003c/strong\u003e\n\u003c/div\u003e\n\n\u003cbr /\u003e\n\n\u003cdiv align=\"center\"\u003e\n  \u003c!-- Crates version --\u003e\n  \u003ca href=\"https://crates.io/crates/tide\"\u003e\n    \u003cimg src=\"https://img.shields.io/crates/v/tide.svg?style=flat-square\"\n    alt=\"Crates.io version\" /\u003e\n  \u003c/a\u003e\n  \u003c!-- Downloads --\u003e\n  \u003ca href=\"https://crates.io/crates/tide\"\u003e\n    \u003cimg src=\"https://img.shields.io/crates/d/tide.svg?style=flat-square\"\n      alt=\"Download\" /\u003e\n  \u003c/a\u003e\n  \u003c!-- docs.rs docs --\u003e\n  \u003ca href=\"https://docs.rs/tide\"\u003e\n    \u003cimg src=\"https://img.shields.io/badge/docs-latest-blue.svg?style=flat-square\"\n      alt=\"docs.rs docs\" /\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\u003cdiv align=\"center\"\u003e\n  \u003ch3\u003e\n    \u003ca href=\"https://docs.rs/tide\"\u003e\n      API Docs\n    \u003c/a\u003e\n    \u003cspan\u003e | \u003c/span\u003e\n    \u003ca href=\"https://github.com/http-rs/tide/blob/main/.github/CONTRIBUTING.md\"\u003e\n      Contributing\n    \u003c/a\u003e\n    \u003cspan\u003e | \u003c/span\u003e\n    \u003ca href=\"https://discord.gg/x2gKzst\"\u003e\n      Chat\n    \u003c/a\u003e\n  \u003c/h3\u003e\n\u003c/div\u003e\n\nTide is a minimal and pragmatic Rust web application framework built for\nrapid development. It comes with a robust set of features that make building\nasync web applications and APIs easier and more fun.\n\n## Getting started\n\nIn order to build a web app in Rust you need an HTTP server, and an async\nruntime. After running `cargo init` add the following lines to your\n`Cargo.toml` file:\n\n```toml\n# Example, use the version numbers you need\ntide = \"0.17.0\"\nasync-std = { version = \"1.8.0\", features = [\"attributes\"] }\nserde = { version = \"1.0\", features = [\"derive\"] }\n```\n\n## Examples\n\nCreate an HTTP server that receives a JSON body, validates it, and responds\nwith a confirmation message.\n\n```rust\nuse tide::Request;\nuse tide::prelude::*;\n\n#[derive(Debug, Deserialize)]\nstruct Animal {\n    name: String,\n    legs: u16,\n}\n\n#[async_std::main]\nasync fn main() -\u003e tide::Result\u003c()\u003e {\n    let mut app = tide::new();\n    app.at(\"/orders/shoes\").post(order_shoes);\n    app.listen(\"127.0.0.1:8080\").await?;\n    Ok(())\n}\n\nasync fn order_shoes(mut req: Request\u003c()\u003e) -\u003e tide::Result {\n    let Animal { name, legs } = req.body_json().await?;\n    Ok(format!(\"Hello, {}! I've put in an order for {} shoes\", name, legs).into())\n}\n```\n\n```sh\n$ curl localhost:8080/orders/shoes -d '{ \"name\": \"Chashu\", \"legs\": 4 }'\n```\n```text\nHello, Chashu! I've put in an order for 4 shoes\n```\n\n```sh\n$ curl localhost:8080/orders/shoes -d '{ \"name\": \"Mary Millipede\", \"legs\": 750 }'\n```\n```text\nHello, Mary Millipede! I've put in an order for 750 shoes\n```\n\nSee more examples in the [examples](https://github.com/http-rs/tide/tree/main/examples) directory.\n\n## Tide's design:\n- [Rising Tide: building a modular web framework in the open](https://rustasync.github.io/team/2018/09/11/tide.html)\n- [Routing and extraction in Tide: a first sketch](https://rustasync.github.io/team/2018/10/16/tide-routing.html)\n- [Middleware in Tide](https://rustasync.github.io/team/2018/11/07/tide-middleware.html)\n- [Tide's evolving middleware approach](https://rustasync.github.io/team/2018/11/27/tide-middleware-evolution.html)\n- [Tide, the present and future of](https://blog.yoshuawuyts.com/tide/)\n- [Tide channels](https://blog.yoshuawuyts.com/tide-channels/)\n\n## Community Resources\n\u003csub\u003eTo add a link to this list, [edit the markdown\nfile](https://github.com/http-rs/tide/edit/main/README.md) and\nsubmit a pull request (github login required)\u003c/sub\u003e\u003cbr/\u003e\u003csup\u003eListing here\ndoes not constitute an endorsement or recommendation from the tide\nteam. Use at your own risk.\u003c/sup\u003e\n\n### Listeners\n* [tide-rustls](https://github.com/http-rs/tide-rustls) TLS for tide based on async-rustls\n* [tide-acme](https://github.com/http-rs/tide-acme) HTTPS for tide with automatic certificates, via Let's Encrypt and ACME tls-alpn-01 challenges\n\n### Template engines\n* [tide-tera](https://github.com/jbr/tide-tera)\n* [tide-handlebars](https://github.com/No9/tide-handlebars)\n* [askama](https://github.com/djc/askama) (includes support for tide)\n\n### Routers\n* [tide-fluent-routes](https://github.com/mendelt/tide-fluent-routes)\n\n### Auth\n* [tide-http-auth](https://github.com/chrisdickinson/tide-http-auth)\n* [tide-openidconnect](https://github.com/malyn/tide-openidconnect)\n* [tide-jwt](https://github.com/nyxtom/tide-jwt)\n\n### Testing\n* [tide-testing](https://github.com/jbr/tide-testing)\n\n### Middleware\n* [tide-compress](https://github.com/Fishrock123/tide-compress)\n* [tide-sqlx](https://github.com/eaze/tide-sqlx) - _SQLx pooled connections \u0026 transactions_\n* [tide-trace](https://github.com/no9/tide-trace)\n* [tide-tracing](https://github.com/ethanboxx/tide-tracing)\n* [opentelemetry-tide](https://github.com/asaaki/opentelemetry-tide)\n* [driftwood](https://github.com/jbr/driftwood) http logging middleware\n* [tide-compressed-sse](https://github.com/Yarn/tide_compressed_sse)\n* [tide-websockets](https://github.com/http-rs/tide-websockets)\n* [tide-csrf](https://github.com/malyn/tide-csrf)\n* [tide-flash](https://github.com/nyxtom/tide-flash)\n\n### Session Stores\n* [async-redis-session](https://github.com/jbr/async-redis-session)\n* [async-sqlx-session](https://github.com/jbr/async-sqlx-session) (sqlite, mysql, postgres, ...)\n* [async-mongodb-session](https://github.com/yoshuawuyts/async-mongodb-session/)\n\n### Example applications\n* [dot dot vote](https://github.com/rtyler/dotdotvote/)\n* [tide-example](https://github.com/jbr/tide-example) (sqlx + askama)\n* [playground-tide-mongodb](https://github.com/yoshuawuyts/playground-tide-mongodb)\n* [tide-morth-example](https://github.com/No9/tide-morth-example/)\n* [broker](https://github.com/apibillme/broker/) (backend as a service)\n* [tide-basic-crud](https://github.com/pepoviola/tide-basic-crud) (sqlx + tera)\n* [tide-graphql-mongodb](https://github.com/zzy/tide-graphql-mongodb)\n  - Clean boilerplate for graphql services using tide, rhai, async-graphql, surf, graphql-client, handlebars-rust, jsonwebtoken, and mongodb.\n  - Graphql Services: User register, Salt and hash a password with PBKDF2 , Sign in， JSON web token authentication, Change password， Profile Update, User's query \u0026 mutation, and Project's query \u0026 mutation.\n  - Web Application: Client request, bring \u0026 parse GraphQL data, Render data to template engine(handlebars-rust)， Define custom helper with Rhai scripting language.\n* [surfer](https://github.com/zzy/surfer)\n  - The Blog built on Tide stack, generated from [tide-graphql-mongodb](https://github.com/zzy/tide-graphql-mongodb).\n  - Backend for graphql services using tide, async-graphql, jsonwebtoken, mongodb and so on.\n  - Frontend for web application using tide, rhai, surf, graphql_client, handlebars-rust, cookie and so on.\n* [tide-server-example](https://github.com/Lomect/tide-server-example)\n\n## Contributing\nWant to join us? Check out our [The \"Contributing\" section of the\nguide][contributing] and take a look at some of these issues:\n\n- [Issues labeled \"good first issue\"][good-first-issue]\n- [Issues labeled \"help wanted\"][help-wanted]\n\n#### Conduct\n\nThe Tide project adheres to the [Contributor Covenant Code of\nConduct](https://github.com/http-rs/tide/blob/main/.github/CODE_OF_CONDUCT.md).\nThis describes the minimum behavior expected from all contributors.\n\n## License\n\nLicensed under either of\n\n- Apache License, Version 2.0 ([LICENSE-APACHE](LICENSE-APACHE) or https://www.apache.org/licenses/LICENSE-2.0)\n- MIT license ([LICENSE-MIT](LICENSE-MIT) or https://opensource.org/licenses/MIT)\n\nat your option.\n\n#### Contribution\n\nUnless you explicitly state otherwise, any contribution intentionally submitted\nfor inclusion in the work by you, as defined in the Apache-2.0 license, shall be\ndual licensed as above, without any additional terms or conditions.\n\n[releases]: https://github.com/http-rs/tide/releases\n[contributing]: https://github.com/http-rs/tide/blob/main/.github/CONTRIBUTING.md\n[good-first-issue]: https://github.com/http-rs/tide/labels/good%20first%20issue\n[help-wanted]: https://github.com/http-rs/tide/labels/help%20wanted\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhttp-rs%2Ftide","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhttp-rs%2Ftide","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhttp-rs%2Ftide/lists"}