Vapor is a web framework for Swift. It provides a beautifully expressive and easy to use foundation for your next website, API, or cloud project.
Take a look at some of the awesome stuff created with Vapor.
Join the welcoming community of fellow Vapor developers on Discord.
If you find a bug, please create an issue.
If you find a security vulnerability, please contact email@example.com as soon as possible.
💙 Code of Conduct
Our goal is to create a safe and empowering environment for anyone who decides to use or contribute to Vapor. Please help us make the community a better place by abiding to this Code of Conduct during your interactions surrounding this project.
The awesome Vapor community is always adding new tutorials and articles out there, Vapor University is a great place to get started!
Support us with a monthly donation and help us continue our activities. [Become a backer]
- 🥇 Become a Gold sponsor
- 🥈 Become a Silver sponsor
- 🥉 Become a Bronze sponsor
- 👥 Contribute on Open Collective
Help us keep the lights on
3.2.2 - Feb 15, 2019
- Vapor Compatibility Suite: All PRs to vapor/vapor:3 will run against our new compatibility suite that verifies projects built on Vapor continue to compile and pass tests.
- Submit your project here: https://forums.swift.org/t/vapor-compatibility-test-suite/20500
- Reverted retain cycle fix that could cause Application to not deinit. (#1898).
3.2.1 - Feb 14, 2019
Edit: The changes in this tag have been reverted in 3.2.2.
- Fixes a crash introduced in 3.2.0 when using
req.client(). (#1896, #1895, #1894)
⚠️ This patch removes the
Use the following instead:
let client = try container.make(Client.self) let client: Client = try container.make()
Response still have the
let res = try req.client().get("https://vapor.codes")
3.2.0 - Feb 12, 2019
Request.hasSession()for checking if the request has an active session. (#1888)
- Adds a new convenience
Abortinit that accepts
AbortErrorand captures source info. (#1884)
- Adds missing
- Fixed a retain cycle that could cause
Applicationto not deinit. (#1878)
- Edit: This fix has been reverted in 3.2.2
3.1.3 - Feb 7, 2019
- Fixed an issue where WebSocket URLs would not be routed correctly. (#1882)
- Fixed a non-deterministic test.
3.1.2 - Feb 6, 2019
- Default not found response is now an
Abort(.notFound)error instead of