On Render, you deploy and run your code as one or more **services**:

Render deploys your service's code to one or more **instances**: containerized environments on Render infrastructure. A service's compute plan determines the CPU and RAM for each of its instances.

## Service types

Whenever you [create a new service](/content/docs/your-first-deploy/index.html), you first specify its **service type**, based on what your code will do:

Render provides six different service types for running code:

- Web service (most common for your first service)
- Static site
- Private service
- Background worker
- Cron job
- Workflow

You can also create **fully managed datastores** alongside your other services:

- Render Postgres databases
- Render Key Value instances

- Render Key Value is compatible with virtually all Redis®* clients.

### Which service type is right for my code?

Will your code receive incoming traffic?

Will any of that traffic come from the public internet?

Does your code perform any server-side logic?

Are you running simple tasks on a schedule?

Do you want Render to handle job queuing and provisioning?

### Summary of service types

#### For running code

| Service Type | Description |
| --- | --- |
| [**Web service**](/content/docs/web-services/index.html) | **The most common service type.** Dynamic web apps with a public `onrender.com` subdomain for receiving HTTP traffic.<br>If you're building a public web app using Express, FastAPI, Rails, or something similar, use this service type.<br>To get started, you can create a [free instance](/content/docs/free#free-web-services/index.html). |
| [**Static site**](/content/docs/static-sites/index.html) | Websites that consist entirely of statically served assets (commonly HTML, CSS, and JS). Static sites have a public `onrender.com` subdomain and are served over a global CDN.<br>Use static sites to deploy frontends created with frameworks such as:<br>- [Vue.js](/content/docs/deploy-vue-js/index.html)<br>- [Hugo](/content/docs/deploy-hugo/index.html)<br>- [Svelte](/content/docs/deploy-svelte/index.html)<br>- [Jekyll](/content/docs/deploy-jekyll/index.html) |
| [**Private service**](/content/docs/private-services/index.html) | Dynamic web apps that _don't_ have a public URL. Private services do expose an _internal_ hostname for receiving traffic from your other Render services over their shared [private network](/content/docs/private-network/index.html).<br>Private services are great for deploying tools like:<br>- [Elasticsearch](/content/docs/deploy-elasticsearch/index.html)<br>- [ClickHouse](/content/docs/deploy-clickhouse/index.html) |
| [**Background worker**](/content/docs/background-workers/index.html) | Internal apps that run continuously, often to process jobs from a shared queue.<br>Background workers do _not_ expose a URL or internal hostname, but they can send outbound requests to other service types.<br>Use background workers with a framework like:<br>- [Sidekiq](/content/docs/deploy-sidekiq-worker/index.html)<br>- [Celery](/content/docs/deploy-celery/index.html) |
| [**Cron job**](/content/docs/cronjobs/index.html) | Internal apps that run—and then exit—on a defined schedule. A cron job might run a single bash command, a script with multiple commands, or a compiled executable.<br>Cron jobs do _not_ expose a URL or internal hostname, but they can send outbound requests to other service types. |
| [**Workflow**](/content/docs/workflows/index.html) | Define collections of composable, long-running tasks that execute across distributed compute. Ideal for agents, ETL pipelines, and on-demand background jobs.<br>Workflow task runs do _not_ expose a URL or internal hostname, but they can send outbound requests to other service types. |

#### For storing data

In addition to the managed datastores below, Render supports attaching a [persistent disk](/content/docs/disks/index.html) to web services, private services, and background workers.

| Service Type | Description |
| --- | --- |
| [**Render Postgres**](/content/docs/postgresql/index.html) | A powerful, open-source relational database. To get started, you can create a [free instance](/content/docs/free#free-postgres/index.html) that expires after 30 days.<br>Render continually backs up all paid Render Postgres instances to provide [point-in-time recovery](/content/docs/postgresql-backups/index.html). Larger instances support additional reliability features like [read replicas](/content/docs/postgresql-read-replicas/index.html) and [high availability](/content/docs/postgresql-high-availability/index.html). |
| [**Render Key Value**](/content/docs/key-value/index.html) | An in-memory key-value store that's ideal for use as a job queue or a shared cache. To get started, you can create a [free instance](/content/docs/free#free-key-value/index.html). Render Key Value is compatible with virtually all Redis clients.<br>Paid Key Value instances continuously write to disk to persist data across restarts.
