Skip to content

hummingbird-project/hummingbird

Folders and files

NameName
Last commit message
Last commit date

Latest commit

489f10f · Mar 26, 2025
Jan 29, 2025
Nov 28, 2024
Mar 18, 2025
Mar 15, 2025
Oct 17, 2023
Jan 27, 2025
Apr 29, 2021
Nov 15, 2024
Dec 5, 2024
Jan 29, 2025
Oct 13, 2024
Nov 28, 2024
Jan 28, 2021
Nov 28, 2024
Jan 29, 2025
Sep 18, 2024
Jan 11, 2021
Jan 13, 2025
Mar 26, 2025
Mar 5, 2025
Jul 29, 2023

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: [
        .product(name: "Hummingbird", package: "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.