[package]
edition = "2021"
rust-version = "1.82"
name = "boatramp"
version = "0.2.2"
authors = ["Uranion <boatramp@uranion.ai>"]
build = false
autolib = false
autobins = false
autoexamples = false
autotests = false
autobenches = false
default-run = "boatramp"
description = "boatramp — self-hosted, streaming-first static site publishing (server + CLI in one binary)"
homepage = "https://boatramp.dev"
documentation = "https://docs.boatramp.dev"
readme = "README.md"
keywords = [
"serverless",
"wasm",
"faas",
"web-server",
"static-site",
]
categories = [
"web-programming::http-server",
"wasm",
"network-programming",
"command-line-utilities",
]
license = "MIT OR Apache-2.0"
repository = "https://github.com/BoatRamp/BoatRamp"
[package.metadata.deb]
maintainer = "Giacomo Cariello <info@giacomocariello.com>"
copyright = "2026, Giacomo Cariello <info@giacomocariello.com>"
license-file = [
"../../LICENSE-MIT",
"0",
]
extended-description = "boatramp is a self-hosted, streaming-first alternative to Vercel: one binary that publishes and serves static sites with atomic deploys, runs WebAssembly edge handlers, terminates TLS, and forms a self-hosted cluster. The Linux-only compute backends (microVM/container) require a relaxed systemd sandbox — see the drop-in note in the shipped unit."
section = "web"
priority = "optional"
depends = "$auto"
assets = [
[
"target/release/boatramp",
"usr/bin/",
"755",
],
[
"../../packaging/systemd/boatramp.service",
"lib/systemd/system/boatramp.service",
"644",
],
[
"../../packaging/systemd/boatramp.sysusers",
"usr/lib/sysusers.d/boatramp.conf",
"644",
],
[
"../../packaging/systemd/boatramp.tmpfiles",
"usr/lib/tmpfiles.d/boatramp.conf",
"644",
],
[
"../../boatramp.cfg.example",
"etc/boatramp/boatramp.cfg",
"644",
],
[
"../../README.md",
"usr/share/doc/boatramp/README.md",
"644",
],
[
"../../LICENSE-MIT",
"usr/share/doc/boatramp/LICENSE-MIT",
"644",
],
[
"../../LICENSE-APACHE",
"usr/share/doc/boatramp/LICENSE-APACHE",
"644",
],
]
conf-files = ["/etc/boatramp/boatramp.cfg"]
maintainer-scripts = "../../packaging/deb/"
[package.metadata.generate-rpm]
summary = "Self-hosted, streaming-first static site publishing + edge compute"
post_install_script = """
systemd-sysusers /usr/lib/sysusers.d/boatramp.conf >/dev/null 2>&1 || :
systemd-tmpfiles --create /usr/lib/tmpfiles.d/boatramp.conf >/dev/null 2>&1 || :
systemctl daemon-reload >/dev/null 2>&1 || :
"""
pre_uninstall_script = """
if [ "$1" = "0" ]; then
systemctl --quiet stop boatramp.service >/dev/null 2>&1 || :
systemctl --quiet disable boatramp.service >/dev/null 2>&1 || :
fi
"""
post_uninstall_script = """
systemctl daemon-reload >/dev/null 2>&1 || :
"""
[[package.metadata.generate-rpm.assets]]
source = "target/release/boatramp"
dest = "/usr/bin/boatramp"
mode = "0755"
[[package.metadata.generate-rpm.assets]]
source = "packaging/systemd/boatramp.service"
dest = "/usr/lib/systemd/system/boatramp.service"
mode = "0644"
[[package.metadata.generate-rpm.assets]]
source = "packaging/systemd/boatramp.sysusers"
dest = "/usr/lib/sysusers.d/boatramp.conf"
mode = "0644"
[[package.metadata.generate-rpm.assets]]
source = "packaging/systemd/boatramp.tmpfiles"
dest = "/usr/lib/tmpfiles.d/boatramp.conf"
mode = "0644"
[[package.metadata.generate-rpm.assets]]
source = "boatramp.cfg.example"
dest = "/etc/boatramp/boatramp.cfg"
mode = "0644"
config = true
[[package.metadata.generate-rpm.assets]]
source = "LICENSE-MIT"
dest = "/usr/share/licenses/boatramp/LICENSE-MIT"
mode = "0644"
doc = true
[[package.metadata.generate-rpm.assets]]
source = "LICENSE-APACHE"
dest = "/usr/share/licenses/boatramp/LICENSE-APACHE"
mode = "0644"
doc = true
[[package.metadata.generate-rpm.assets]]
source = "README.md"
dest = "/usr/share/doc/boatramp/README.md"
mode = "0644"
doc = true
[features]
acme-dns = [
"tls",
"boatramp-node/acme-dns",
"dep:boatramp-acme",
"boatramp-acme/acme",
"boatramp-acme/cloudflare",
"boatramp-acme/route53",
"boatramp-acme/oci",
"boatramp-acme/digitalocean",
"boatramp-acme/hetzner",
"boatramp-acme/ns1",
"boatramp-acme/dnsimple",
"boatramp-acme/gcp-dns",
"boatramp-acme/azure-dns",
"boatramp-acme/akamai",
]
azure = [
"boatramp-storage/azure",
"boatramp-node/azure",
]
bundler = [
"dep:rolldown",
"dep:lightningcss",
]
cloudflare-kv = [
"boatramp-storage/cloudflare-kv",
"boatramp-node/cloudflare-kv",
]
cluster = [
"handlers",
"fs",
"boatramp-node/cluster",
"slatedb",
"tls",
"dep:boatramp-cluster",
"boatramp-cluster/http",
"dep:axum",
"dep:axum-server",
"dep:async-trait",
]
compression = ["boatramp-server/compression"]
console = [
"boatramp-server/console",
"boatramp-node/console",
]
default = [
"fs",
"slatedb",
"console",
"s3",
"gcs",
"azure",
"cloudflare-kv",
"sql-postgres",
"sql-mysql",
"tls",
"http3",
"acme-dns",
"domain-verify-dns",
"oidc",
"signer-vault",
"signer-gcp",
"signer-azure",
"signer-aws",
"signer-pkcs11",
"compression",
"bundler",
"handlers",
"cluster",
"operator",
"mcp",
]
domain-verify-dns = ["boatramp-server/domain-verify-dns"]
fs = [
"boatramp-storage/fs",
"boatramp-node/fs",
]
gcs = [
"boatramp-storage/gcs",
"boatramp-node/gcs",
]
handlers = [
"boatramp-node/handlers",
"dep:wit-component",
"dep:wit-parser",
"dep:boatramp-handlers",
"boatramp-handlers/engine",
"boatramp-server/handlers",
"boatramp-storage/sql",
"dep:http",
"dep:http-body-util",
"dep:bytes",
"dep:hyper",
"dep:hyper-util",
]
http3 = [
"tls",
"boatramp-server/http3",
]
mcp = [
"dep:boatramp-mcp",
"boatramp-server/mcp",
]
oidc = ["boatramp-server/oidc"]
operator = [
"dep:kube",
"dep:k8s-openapi",
"dep:schemars",
"dep:serde_yaml",
"dep:rustls",
"cluster",
]
s3 = [
"boatramp-storage/s3",
"boatramp-node/s3",
]
signer-aws = ["boatramp-server/signer-aws"]
signer-azure = ["boatramp-server/signer-azure"]
signer-gcp = ["boatramp-server/signer-gcp"]
signer-pkcs11 = ["boatramp-server/signer-pkcs11"]
signer-vault = ["boatramp-server/signer-vault"]
slatedb = [
"boatramp-storage/slatedb",
"boatramp-node/slatedb",
]
sql-mysql = [
"handlers",
"boatramp-storage/sql-mysql",
"boatramp-node/sql-mysql",
]
sql-postgres = [
"handlers",
"boatramp-storage/sql-postgres",
"boatramp-node/sql-postgres",
]
tls = [
"dep:axum-server",
"dep:rustls-acme",
"dep:rustls",
"dep:rustls-pemfile",
"boatramp-node/tls",
]
[[bin]]
name = "boatramp"
path = "src/main.rs"
[[test]]
name = "rpk_pinning"
path = "tests/rpk_pinning.rs"
[dependencies.async-trait]
version = "0.1"
optional = true
[dependencies.axum]
version = "0.8"
optional = true
[dependencies.axum-server]
version = "0.8"
features = ["tls-rustls"]
optional = true
[dependencies.base64]
version = "0.22"
[dependencies.boatramp-acme]
version = "0.2.2"
optional = true
[dependencies.boatramp-cluster]
version = "0.2.2"
optional = true
[dependencies.boatramp-container]
version = "0.2.2"
[dependencies.boatramp-core]
version = "0.2.2"
features = ["authz"]
[dependencies.boatramp-docker]
version = "0.2.2"
[dependencies.boatramp-firecracker]
version = "0.2.2"
features = [
"build",
"backend",
"embedded",
]
[dependencies.boatramp-handlers]
version = "0.2.2"
optional = true
[dependencies.boatramp-mcp]
version = "0.2.2"
optional = true
[dependencies.boatramp-node]
version = "0.2.2"
features = ["clap"]
[dependencies.boatramp-rpktls]
version = "0.2.2"
[dependencies.boatramp-server]
version = "0.2.2"
[dependencies.boatramp-storage]
version = "0.2.2"
[dependencies.brotli]
version = "7"
[dependencies.bytes]
version = "1"
optional = true
[dependencies.clap]
version = "4"
features = [
"derive",
"env",
]
[dependencies.clap_complete]
version = "4"
[dependencies.clap_mangen]
version = "0.2"
[dependencies.flate2]
version = "1"
[dependencies.futures]
version = "0.3"
[dependencies.hex]
version = "0.4"
[dependencies.http]
version = "1"
optional = true
[dependencies.http-body-util]
version = "0.1"
optional = true
[dependencies.hyper]
version = "1"
features = [
"server",
"http1",
]
optional = true
[dependencies.hyper-util]
version = "0.1"
features = [
"tokio",
"tokio",
]
optional = true
[dependencies.include_dir]
version = "0.7"
[dependencies.k8s-openapi]
version = "0.25"
features = ["latest"]
optional = true
[dependencies.kube]
version = "1"
features = [
"client",
"runtime",
"derive",
"rustls-tls",
]
optional = true
default-features = false
[dependencies.lightningcss]
version = "1.0.0-alpha.71"
optional = true
[dependencies.reqwest]
version = "0.12"
features = [
"rustls-tls",
"stream",
"json",
]
default-features = false
[dependencies.rolldown]
version = "1.1"
optional = true
[dependencies.ron]
version = "0.10"
[dependencies.rustls]
version = "0.23"
optional = true
[dependencies.rustls-acme]
version = "0.15"
features = [
"axum",
"tokio",
]
optional = true
[dependencies.rustls-pemfile]
version = "2"
optional = true
[dependencies.schemars]
version = "0.8"
optional = true
[dependencies.serde]
version = "1"
features = ["derive"]
[dependencies.serde_json]
version = "1"
[dependencies.serde_yaml]
version = "0.9"
optional = true
[dependencies.sha2]
version = "0.10"
[dependencies.thiserror]
version = "2"
[dependencies.tokio]
version = "1"
features = [
"rt-multi-thread",
"macros",
"fs",
"io-util",
"io-std",
"net",
"process",
"signal",
]
[dependencies.tokio-util]
version = "0.7"
features = ["io"]
[dependencies.tracing]
version = "0.1"
[dependencies.tracing-subscriber]
version = "0.3"
features = [
"env-filter",
"json",
]
[dependencies.walkdir]
version = "2"
[dependencies.wit-component]
version = "0.252"
features = ["dummy-module"]
optional = true
[dependencies.wit-parser]
version = "0.252"
optional = true
[dev-dependencies.axum]
version = "0.8"
[dev-dependencies.rcgen]
version = "0.13"
[lints.clippy]
explicit_into_iter_loop = "warn"
explicit_iter_loop = "warn"
manual_string_new = "warn"
redundant_closure_for_method_calls = "warn"
semicolon_if_nothing_returned = "warn"
use_self = "warn"