Connect a GitHub repository, a public Docker image or a tarball, and SnapDeploy builds it, runs it on AWS and serves it on its own HTTPS address. The free tier is a real tier, not a trial: it never expires and never asks for a card.
Free: 4 containers of 512 MB, 100 running hours a month, 10 deploys a day. Sleeps after 15 minutes idle, wakes on the next visit. Always-On from $12 a month when a container must never pause.
Last verified 28 September 2026 against the free-tier docs, the pricing page and each competitor's own limits page.
The complete list. Every number below is the same one the platform enforces.
| Limit | Free tier | Notes |
|---|---|---|
| Containers | Up to 4 per account | Each is its own AWS Fargate task with its own HTTPS address |
| Size | Small: 512 MB RAM, 0.25 vCPU | Medium (2 GB) and Large (4 GB) run on Always-On |
| Running time | 100 container-hours a month | Shared across your containers; resets monthly; sleeping time does not count |
| Deploys | 10 a day | 5 per rolling 12 hours; a failed build counts |
| Sleep | After 15 minutes without traffic | Wakes in about 60 seconds on the next browser visit; scripts and bots do not wake it |
| Address | name.containers.snapdeploy.app with HTTPS | Custom domains come with Always-On |
| Build sources | GitHub repository, public Docker image, docker save tarball | Auto-deploy on push for linked repositories |
| Included | Environment variables, build and runtime logs, deployment history, traffic by country | Same dashboard on the web and in the iOS app |
| Card and expiry | No card, no expiry | Sign up with an email address or a GitHub account |
Hours count only while a container is running. A free container stops itself after 15 minutes without traffic and starts again on the next visit, so a project that a few people open a few times a day is running for perhaps one or two hours in that day, not twenty-four. Spread across four containers that is a month of demos, portfolio sites, course projects and internal tools without touching the limit.
The same rule sets the ceiling: 100 hours is a little over three hours of continuous running per day. Anything that must be reachable at 3 a.m., answer a webhook the instant it arrives, or hold a WebSocket open is an Always-On job, and the dashboard says so before you deploy rather than after.
while a container sleeps, and while it runs inside the 100 hours
to wake on the first visit after a sleep; the visitor sees a wake page, then the app
a month for Always-On Small: no sleep, no hour limit, custom domain, WebSockets
Anything that runs in a container. Common stacks build without a Dockerfile; everything else builds from yours.
The platform reads the build files in the root folder (or the folder you point it at) and generates the Dockerfile: package.json for Node.js including Next.js, Vite and Angular builds; requirements.txt or pyproject.toml for Python; pom.xml or Gradle for Java; go.mod for Go; a Gemfile for Ruby; composer.json for PHP; and an index.html for a static site served by nginx.
A repository with a Dockerfile is built exactly as written, for ARM64 (AWS Graviton). A public image from Docker Hub or any registry runs without a build step at all. A docker save tarball covers images that live nowhere public. The container gets a PORT variable and a health check that accepts any HTTP response on the usual paths.
Rust, .NET, Elixir, C++ and anything else run this way. Details, port detection and the health rules are on the Docker hosting page.
Three ways to run the same container. Nothing else changes: same build, same dashboard, same URL.
$0/mo
From $12/mo
$1 once
Web prices. Managed add-ons are separate: Redis from $16, PostgreSQL, MySQL, MongoDB and MariaDB from $29, RabbitMQ from $14 a month; a DB Sprint Pack gives a managed database for $1 for 12 hours.
From each platform's own pricing and limits pages. The full, dated table for every platform is on the state of free hosting page.
| Platform | Free tier | Container | When idle | Card |
|---|---|---|---|---|
| SnapDeploy | 4 containers, 100 container-hours a month, 10 deploys a day; no expiry | 512 MB / 0.25 vCPU | Sleeps after 15 min; about 60 s to wake on a visit | No |
| Render | 750 instance-hours a month per workspace; free Postgres expires after 30 days | 512 MB / 0.1 CPU | Spins down after 15 min; about a minute to wake | No |
| Railway | $5 one-time credit for 30 days, then a $1 monthly credit with no rollover | Up to 0.5 GB per service on the free plan | Credit runs out; sleeping is opt-in | No for the trial |
| Koyeb | 1 free web service per organisation, Frankfurt or Washington only | 512 MB / 0.1 vCPU, 2 GB SSD | Scales to zero after 1 h idle | Yes, $29 hold |
| Fly.io | None; trial of 2 machine-hours or 7 days, whichever comes first | Up to 2 vCPU / 4 GB on the trial | Trial machines auto-stop after 5 min | Yes, to keep anything running |
| Heroku | None since 28 Nov 2022; Eco $5 for 1,000 shared hours | Eco: 512 MB | Eco sleeps after 30 min; Basic ($7) never sleeps | Yes |
Isolation: every SnapDeploy container, free tier included, runs as its own AWS Fargate task with a reserved 0.25 vCPU and 512 MB; AWS runs each task on a single-use, single-tenant compute instance, so your app never shares a host with another customer's. Render's free instance is 0.1 CPU and 512 MB; Railway's trial runs on shared vCPU cores (its own wording); Koyeb's free instance runs in its own microVM and every Fly.io Machine is its own VM; Heroku lists its Eco, Basic and Standard dynos as not dedicated. Sources: aws.amazon.com/fargate/faqs, render.com/docs/compute-plans, docs.railway.com/pricing/free-trial, koyeb.com/docs/reference/instances, docs.fly.io/machines, devcenter.heroku.com/articles/dyno-types.
The catches, stated plainly, so nothing surprises you on launch day.
A browser visit wakes a container; a webhook, an uptime monitor or a cron ping does not. Bots, integrations and anything polled by another server belong on Always-On.
There is no Docker Compose and no sidecar. Databases, caches and queues are managed add-ons, or external services reached by URL.
Files written inside the container are gone after a sleep or a redeploy. Keep state in a database, object storage or an add-on.
Five per rolling 12 hours. Test the build locally when you can; the Sprint Pack lifts the cap for 24 hours if a launch day needs more.
Containers run in AWS US East behind Cloudflare. Fine for most apps; a Europe-only latency budget is a reason to look elsewhere.
GPU workloads run on dedicated NVIDIA T4 and A10G subscriptions, priced on the GPU hosting page.
Yes. Every account gets 4 containers of 512 MB each, 100 container-hours a month shared across them, and 10 deploys a day, with no credit card and no trial clock. Containers sleep after 15 minutes without traffic and wake on the next browser visit, which is how 100 hours cover a whole month of normal use.
Not for Node.js, Python, Java, Go, Ruby, PHP or static HTML projects: the platform generates one from the build files it finds in the repository. Any other project ships with its own Dockerfile, which is built as written. You can also deploy a public Docker image or a docker save tarball.
After 15 minutes without traffic the container stops and its hours stop counting. The next browser visit starts it again, which takes about 60 seconds. Webhooks, cron pings and bots do not wake a sleeping container; an app that must answer those needs Always-On.
Always-On removes the sleep rule and the hour limit for one container: it runs 24/7, keeps WebSocket connections open, can use a custom domain, and runs uploaded Docker images larger than 2 GB (up to 10 GB). It is a per-container subscription from $12 a month for 512 MB, $25 for 2 GB and $45 for 4 GB. A one-time $1 Sprint Pack gives one container 24 hours of Always-On without a subscription.
Not inside the container: a free container sleeps and has no persistent volume, so a database inside it would lose data. Managed add-ons run separately: Redis from $16 a month, PostgreSQL, MySQL, MongoDB and MariaDB from $29, and a $1 DB Sprint Pack gives a managed database for 12 hours. A free container can also connect to an external database by URL when it listens on a port up to 27017 (3333 and 9000 to 9099 excluded), which covers MySQL, PostgreSQL, MongoDB, Redis and TiDB on their standard ports; providers that assign random high ports, such as Aiven, cannot be reached from any plan.
No. The free tier has no expiry date and never asks for a card. The 100 hours reset every month. A card is only needed when you buy Always-On, a Sprint Pack or an add-on.
4 containers, 100 hours a month, 10 deploys a day. No credit card, no expiry.
Create Free AccountThe first managed container PaaS to offer a one-time 24-hour Always-On pass under $5. Everything in Always-On Small for one Small (512 MB) container — runs 24/7, no daily deploy limit, WebSockets & real-time apps. No subscription, no auto-renewal.
Need a managed database too? DB Sprint Pack — $1 / 12h for Postgres, MySQL, MariaDB, Mongo, Redis, or RabbitMQ.