Skip to content

Lightweight, flexible HTTP server framework written in Swift

License

Notifications You must be signed in to change notification settings

mredig/hummingbird

 
 

Repository files navigation

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.

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:

Documentation

You can find reference documentation and user guides for Hummingbird here. The hummingbird-examples repository has a number of examples of different uses of the library.

Installation

Add the following to your Package.swift file:

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 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 before submitting a pull request.

License

Hummingbird is released under the Apache 2.0 license.

About

Lightweight, flexible HTTP server framework written in Swift

Resources

License

Code of conduct

Security policy

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Swift 98.8%
  • Shell 1.2%