hummingbird-project / hummingbird

Lightweight, flexible HTTP server framework written in Swift
https://hummingbird.codes/
Apache License 2.0
1.21k stars 53 forks source link
http http-server server server-side-swift swift swift-nio web web-server

Lightweight, flexible, modern server framework written in Swift. ## Hummingbird Hummingbird is a lightweight, flexible modern web application framework that runs on top of a SwiftNIO based server implementation. It is designed to require the minimum number of dependencies. It provides a router for directing different endpoints to their handlers, middleware for processing requests before they reach your handlers and processing the responses returned, custom encoding/decoding of requests/responses, TLS and HTTP2. ```swift import Hummingbird // create router and add a single GET /hello route let router = Router() router.get("hello") { request, _ -> String in return "Hello" } // create application using router let app = Application( router: router, configuration: .init(address: .hostname("127.0.0.1", port: 8080)) ) // run hummingbird application try await app.runService() ``` ### Extending Hummingbird Hummingbird's core is designed to be minimal, with additional features provided through extensions. Here are some official extensions: ### Built-in Extensions - `HummingbirdRouter`: An alternative router using result builders - `HummingbirdTLS`: TLS support - `HummingbirdHTTP2`: HTTP2 upgrade support - `HummingbirdTesting`: Helper functions for testing Hummingbird projects ### Additional Extensions The following extensions are available in separate repositories: - [HummingbirdAuth](https://github.com/hummingbird-project/hummingbird-auth): Authentication framework - [HummingbirdFluent](https://github.com/hummingbird-project/hummingbird-fluent): Integration with Vapor's FluentKit ORM - [HummingbirdRedis](https://github.com/hummingbird-project/hummingbird-redis): Redis support via RediStack - [HummingbirdWebSocket](https://github.com/hummingbird-project/hummingbird-websocket): WebSocket support - [HummingbirdLambda](https://github.com/hummingbird-project/hummingbird-lambda): Run Hummingbird on AWS Lambda - [Jobs](https://github.com/hummingbird-project/swift-jobs): Job Queue Framework - [Mustache](https://github.com/hummingbird-project/swift-mustache): Mustache templating engine ## Documentation You can find reference documentation and user guides for Hummingbird [here](https://docs.hummingbird.codes/2.0/documentation/hummingbird/). The [hummingbird-examples](https://github.com/hummingbird-project/hummingbird-examples/tree/main) repository has a number of examples of different uses of the library. ## Installation Add the following to your `Package.swift` file: ```swift dependencies: [ .package(url: "https://github.com/hummingbird-project/hummingbird.git", from: "2.0.0") ], targets: [ .executableTarget( name: "MyApp", dependencies: [ .target(name: "Hummingbird"), ]), ] ``` Or run the following commands on your package using SwiftPM, replacing `MyApp` with the name of your target: ```swift swift package add-dependency https://github.com/hummingbird-project/hummingbird.git --from 2.0.0 swift package add-target-dependency Hummingbird MyApp ``` ## Contributing We welcome contributions to Hummingbird! Please read our [contributing guidelines](CONTRIBUTING.md) before submitting a pull request. ## License Hummingbird is released under the [Apache 2.0 license](LICENSE).