Web service
A long-running container that handles HTTP traffic. Source options:- Git repository, Brimble builds from source using Railpack (auto-detected) or a
Dockerfileif one is at the project root. - Docker image, pull a pre-built image from Docker Hub, GHCR, or any container registry. See Deploy from a Docker image.
- The container’s start command must listen on
process.env.PORT. - Listening on
0.0.0.0(notlocalhostor127.0.0.1).
- Install command, build command, start command.
- Health check path (default
/). - Pre-start command (runs once per build, before push).
- Watch paths (monorepo support).
- Build cache toggle.
- Persistent disk (mount path + size from 1, 5, 10, 25, 50, 100 GB).
- Site password / basic auth.
- Auto-deploy on push (Git source).
Static site
A pure asset deploy: Brimble’s frontend builder runs your build, captures the output directory, and ships the files. No container is created and no runtime cost is billed. Required:- A
buildcommand that produces the output directory. - An output directory configured in Settings → Build (e.g.
dist,out,build,public).
next export), Vite, Astro, Hugo, Jekyll, Eleventy, Gatsby, Docusaurus, MkDocs, SvelteKit static, Remix static, plain HTML repos.
How a static-site request is served
A deploy goes through the standard build phases (clone, detect, install, build) and then takes a different path at orchestrate:- The frontend builder uploads the built assets to Brimble’s globally distributed object storage for static artifacts. Each project gets its own prefix; the latest active deployment is what users see.
- The deployment goes live the moment the upload finishes. There’s no health check, no container start, no Nomad scheduling.
- Brimble’s gateway serves requests directly from the storage layer. The static path short-circuits the container-routing logic, requests don’t fan out to a backend, they fan out to objects.
- Cloudflare sits in front of every public request, so most asset hits are answered from the closest Cloudflare data center to the user without ever reaching Brimble.
- When a deploy goes live, Cloudflare’s cache for the project’s hostnames is purged automatically so the new version is visible immediately.
Cache headers
The gateway setsCache-Control per response so Cloudflare and browsers cache the right things for the right durations:
- HTML documents:
no-store, no-cache, must-revalidate, max-age=0(always fresh after a deploy). - Hashed asset paths (
/assets/*,/_assets/*,/static/*) and immutable extensions (.js,.css, fonts, images):public, max-age=31536000, immutable(cached for a year, invalidated automatically by content-hashed filenames). - Other static files:
public, max-age=3600, must-revalidate.
What you don’t need
- A start command. The artifact is files, not a process.
- A
PORT. No HTTP server is spawned. - A health check path. Probes don’t apply.
- Resource sizing. CPU and memory aren’t billed for static sites; storage and bandwidth are.
SPA fallback
If your build is a single-page app (Vite, CRA, Remix static, etc.) and a request path doesn’t match a file in your output directory, the gateway falls back toindex.html so client-side routing works. You don’t need to configure rewrites; this is the default.
Worker
A background container with no inbound HTTP. Identical build pipeline to a web service; the difference is no port is exposed and no HTTP probe runs. Required:- A
startcommand that runs forever. If your start command exits, Brimble restarts it.
- BullMQ / Sidekiq / Celery / RQ workers.
- Long-polling consumers.
- In-process schedulers (
node-cron,APScheduler).
Database
A managed instance of a database engine. You don’t push code; you pick an engine and version. Engines and typical use:
Versions available per engine are listed in the dashboard during provisioning. Brimble carries multiple major versions per engine.
Sizing: CPU, memory, and storage in GB. Storage can grow but not shrink.
Backups: Optional, scheduled.
MCP server
A web service tuned for Model Context Protocol traffic. Build and runtime model are identical to a web service. The dashboard offers MCP-specific helpers (auth presets, common transport patterns). Required:- HTTP transport (Streamable HTTP, SSE, or WebSocket). MCP servers using stdio transport only don’t work for remote deployment.
- Listening on
process.env.PORT.
Choosing the right type
If your repo has a build script that emits a folder of static assets and nothing needs to keep running, pick static site. It’s faster and cheaper than a web service. If your code needs to handle HTTP traffic, pick web service. If your code runs forever but doesn’t serve traffic, pick worker. If you need a data store, pick database. If you’re shipping an MCP server for AI tools, pick MCP server. When in doubt, web service is the safe default, anything that listens on$PORT will work.