What Shoal Supports
Shoal is designed to run any containerised application. If it runs in Docker, it runs on Shoal.
Application Types
| Type | Examples |
|---|---|
| Server-rendered web apps | Next.js, Nuxt, SvelteKit, Remix, Rails, Django, Laravel |
| Single-page app backends | Any API serving a React, Vue, Angular, or Svelte frontend |
| Static site generators (with SSR) | Next.js, Astro, Nuxt |
| CMS-backed apps | Headless CMS backends, custom admin panels |
| Internal tools & dashboards | Any web UI served over HTTP |
| Type | Examples |
|---|---|
| REST APIs | Express, FastAPI, Gin, Spring Boot, ASP.NET Core |
| GraphQL APIs | Apollo Server, Strawberry, gqlgen, Hot Chocolate |
| gRPC services | Any language with gRPC support |
| WebSocket servers | Socket.io, ws, Gorilla WebSocket |
| Background workers | Queue consumers, event processors, data pipelines |
| Type | Examples |
|---|---|
| Recurring tasks | Nightly reports, data sync, cache warming |
| Notifications | Slack updates, email digests, alerts |
| Data processing | ETL jobs, aggregations, cleanup tasks |
| Monitoring scripts | Health checks, uptime pings |
Scheduled jobs use standard crontab expressions - see the crontab guide for details.
| Pattern | Description |
|---|---|
| Path-based routing | Route /api/, /payments/, /inventory/ to separate containers |
| Multi-service under one domain | Run multiple independent services behind a single gateway |
| Independent scaling | Each container scales on its own based on load |
| Versioned APIs | /v1/, /v2/ routing for frontend compatibility |
Languages
Shoal supports any language that can be packaged in a Docker container. These are the most commonly used:
| Language | |
|---|---|
| Node.js | Python |
| Go | Java |
| C# / .NET | PHP |
| Ruby | Elixir |
| Kotlin | Rust |
Any other language that runs in a container is supported too. See the Dockerfile guide for how to package your app.
Frameworks
Shoal works with any framework. Common ones across each language:
Express, Fastify, NestJS, Koa, Hapi, Next.js, Remix, Nuxt
Flask, Django, FastAPI, Tornado, Starlette, Litestar
Gin, Echo, Fiber, Chi, net/http
Spring Boot, Quarkus, Micronaut, Vert.x
ASP.NET Core, Minimal API, Blazor Server
Laravel, Symfony, Slim
Rails, Sinatra
Phoenix
Ktor, Spring Boot
Actix-web, Axum, Rocket, Warp
For default ports per framework, see the framework port reference.
Deployment Patterns
| Pattern | Components | Guide |
|---|---|---|
| Web app | Container + Gateway | Deploy an application |
| App with database | Container + Gateway + external DB | Deploy with a database |
| Scheduled job | Container + Scheduler | Deploy with a scheduler |
| Microservices | Multiple containers + Gateway | Deploy with multiple containers |
Included with Every Deployment
What the Shoal gateway gives you out of the box
| Feature | Details |
|---|---|
| SSL / HTTPS | Automatic certificate provisioning and renewal - A grade on SSL Labs |
| IPS | Intrusion Prevention System blocks known attacks before they reach your app |
| Rate limiting | Protects against traffic spikes and abuse |
| Custom domains | Point your own domain at any deployment |
| Instant subdomain | Every app gets a *.eu1.shoal.live address immediately |
| Automatic scaling | Containers scale up under load and back down when quiet |
| Resilience | Containers restart automatically on failure |
Infrastructure
| Now | Coming soon | |
|---|---|---|
| Cloud | Google Cloud Platform (GCP) | AWS, Azure, and others |
| Hosting | Shoal-managed | Deploy to your own private infrastructure |
| Databases | External (e.g. Neon) | Shoal-managed databases |
| Dockerfile | Required | Auto-detection without a Dockerfile |