# ol.busker

> Busker is a Clojure web server that plays live on the open web

![busker docs](https://img.shields.io/badge/ol-docs-orange.svg)
![status: experimental](https://img.shields.io/badge/status-experimental-red.svg)
![built with nixbot](https://img.shields.io/badge/CI-builds-brightgreen,link=)

`ol.busker` is a Clojure web server built on [libh2o](https://github.com/h2o/h2o) (the web server core that powers Fastly’s global CDN).

Busker provides:

* modern HTTP support, including HTTP/1.1, HTTP/2, HTTP/3, 103 Early Hints, 0-RTT TLS, etc.
* automatic HTTPS certificate obtaining and renewal
* simplified deployment by letting you deploy an uberjar directly with `systemd`, without nginx, Caddy, or Docker
* predictable performance under load with production-ready defaults

## Platform requirements

Busker requires JDK 25 or later.

Pre-built jars containing native binaries are available for Linux and macOS on aarch64 and x86-64.

Project status: **[Experimental](https://docs.outskirtslabs.com/open-source-vital-signs#experimental)**.

## Usage

Add the Busker git dependency to `deps.edn`:

```clojure
com.outskirtslabs/busker {:git/url "https://github.com/outskirtslabs/busker"
                          :git/sha "0e2ead5507b03d18fa94c01647a37188b37b25f6"}
```

When using Busker as a git dependency, run `clj -X:deps prep` after bumping the git sha.

Add at least one native dependency for your target platform:

```clojure
;; Choose at least one of the following.
com.outskirtslabs.busker/linux-x86-64 {:mvn/version "0.0.4"}
com.outskirtslabs.busker/linux-aarch64 {:mvn/version "0.0.4"}
com.outskirtslabs.busker/macos-x86-64 {:mvn/version "0.0.4"}
com.outskirtslabs.busker/macos-aarch64 {:mvn/version "0.0.4"}
```

If you include multiple native dependencies, Busker chooses the one matching the current platform.
Including extra native dependencies increases uberjar size.

### Bundled native dependencies

Busker statically links these security-sensitive upstream dependencies into its native shim jars.

|     |     |
| --- | --- |
| Dependency | Upstream date |
| [libh2o](https://github.com/h2o/h2o) | [2026-07-20 (3a5d2cb)](https://github.com/h2o/h2o/commit/3a5d2cb898bdb54795f060be7aba478912f65bb0) |
| [BoringSSL](https://github.com/google/boringssl) | [2026-08-03 (30a26e9)](https://github.com/google/boringssl/commit/30a26e970e14f9d943e3961de49bee5cc7e032d3) |

## Examples

See the example projects in [`examples/`](https://github.com/outskirtslabs/busker/tree/main/examples):

* [`quickstart`](https://github.com/outskirtslabs/busker/tree/main/examples/quickstart) shows a small server with HTTP, TLS, hello, echo, and streaming routes
* [`early-hints`](https://github.com/outskirtslabs/busker/tree/main/examples/early-hints) shows how to emit `103 Early Hints` before a final response
* [`sse`](https://github.com/outskirtslabs/busker/tree/main/examples/sse) shows a long-lived Server Sent Events stream with optional Brotli compression

## Documentation

* [Docs](https://docs.outskirtslabs.com/ol.busker/next/)
* [API Reference](https://docs.outskirtslabs.com/ol.busker/next/api)
* [Support via GitHub Issues](https://github.com/outskirtslabs/busker/issues)

## Roadmap

The project description above is aspirational.
Busker is still a work in progress.

See [Roadmap](roadmap.adoc) for current roadmap ideas.

## Changelog

See [Changelog](changelog.adoc) for notable changes.

## Security

See [Security](security.adoc) for security reporting and policy links.

## License

Busker is distributed under the [EUPL-1.2](https://spdx.org/licenses/EUPL-1.2.html).

Copyright (C) 2025-2026 Casey Link.

Some files included in this project and in binary distributions, including JAR files on Clojars and GitHub releases, are from third-party sources and retain their original licenses as indicated in [NOTICE](https://github.com/outskirtslabs/busker/blob/main/NOTICE).
