Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 19 additions & 0 deletions frameworks/hummingbird/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
FROM swift:6.2-jammy AS build
RUN apt-get update && apt-get install -y --no-install-recommends libsqlite3-dev && rm -rf /var/lib/apt/lists/*
WORKDIR /app
COPY Package.swift .
COPY Sources ./Sources
RUN mkdir -p src && echo 'import CSQLite\nprint("stub")' > src/main.swift && \
swift build -c release 2>/dev/null || true && \
rm -rf src/
COPY src ./src
RUN swift build -c release -Xswiftc -O -Xswiftc -cross-module-optimization

FROM ubuntu:22.04
RUN apt-get update && apt-get install -y --no-install-recommends \
libsqlite3-0 libcurl4 libxml2 && \
rm -rf /var/lib/apt/lists/*
COPY --from=build /usr/lib/swift/linux/lib*.so /usr/lib/swift/linux/
COPY --from=build /app/.build/release/Server /server
EXPOSE 8080
CMD ["/server"]
33 changes: 33 additions & 0 deletions frameworks/hummingbird/Package.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
// swift-tools-version:6.0
import PackageDescription

let package = Package(
name: "httparena-hummingbird",
platforms: [.macOS(.v14)],
dependencies: [
.package(url: "https://github.com/hummingbird-project/hummingbird.git", from: "2.0.0"),
.package(url: "https://github.com/hummingbird-project/hummingbird-compression.git", from: "2.0.0"),
.package(url: "https://github.com/apple/swift-nio.git", from: "2.65.0"),
],
targets: [
.systemLibrary(
name: "CSQLite",
path: "Sources/CSQLite",
pkgConfig: "sqlite3",
providers: [
.apt(["libsqlite3-dev"]),
]
),
.executableTarget(
name: "Server",
dependencies: [
"CSQLite",
.product(name: "Hummingbird", package: "hummingbird"),
.product(name: "HummingbirdCompression", package: "hummingbird-compression"),
.product(name: "NIOCore", package: "swift-nio"),
.product(name: "NIOPosix", package: "swift-nio"),
],
path: "src"
),
]
)
17 changes: 17 additions & 0 deletions frameworks/hummingbird/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
# Hummingbird — Swift HTTP Framework

[Hummingbird](https://github.com/hummingbird-project/hummingbird) is a lightweight, flexible HTTP server framework written in Swift, built on top of [SwiftNIO](https://github.com/apple/swift-nio).

## Why Hummingbird?

- **SwiftNIO-based**: Non-blocking I/O with Swift's structured concurrency
- **Minimal dependencies**: Designed to be lightweight with opt-in extensions
- **Modern Swift**: Uses async/await throughout
- **SSWG incubated**: Part of the Swift Server Work Group ecosystem

## Implementation Notes

- Uses Swift 5.10 with whole-module optimization
- SQLite via [SQLite.swift](https://github.com/stephencelis/SQLite.swift) for the `/db` endpoint
- Pre-cached JSON responses for `/json` and `/compression` endpoints
- Static files loaded into memory at startup
5 changes: 5 additions & 0 deletions frameworks/hummingbird/Sources/CSQLite/module.modulemap
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
module CSQLite [system] {
header "shim.h"
link "sqlite3"
export *
}
2 changes: 2 additions & 0 deletions frameworks/hummingbird/Sources/CSQLite/shim.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
#pragma once
#include <sqlite3.h>
19 changes: 19 additions & 0 deletions frameworks/hummingbird/meta.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
{
"display_name": "hummingbird",
"language": "Swift",
"type": "framework",
"engine": "Hummingbird",
"description": "Lightweight, flexible HTTP server framework written in Swift, built on SwiftNIO with minimal dependencies.",
"repo": "https://github.com/hummingbird-project/hummingbird",
"enabled": true,
"tests": [
"baseline",
"noisy",
"pipelined",
"limited-conn",
"json",
"upload",
"compression",
"mixed"
]
}
Loading
Loading