---
title: "Choose how to deploy"
description: "Decide what your production runtime can read, and pick the matching deployment path."
canonical_url: "https://content.comark.dev/deployment"
---
# Choose how to deploy

> Decide what your production runtime can read, and pick the matching deployment path.

Locally, `fs('./content')` reads the folder next to your code. In production, the question is whether the runtime can still reach that source. Answer it and the rest follows.

## Which path fits

| Your situation                                                          | Path                                                                                                                                                 |
| ----------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- |
| A Node server, container, or VM that deploys your whole project         | [Deploy with content files](https://content.comark.dev/deployment/with-content-files). Nothing changes; make sure the folder ships.                  |
| Serverless functions or an edge runtime that bundles only imported code | [Deploy with a content snapshot](https://content.comark.dev/deployment/with-a-snapshot). Parse at build time; the function reads the result.         |
| A static single-page app with no server                                 | The [Vite guide](https://content.comark.dev/integrations/vite): the whole instance runs in the browser from a snapshot.                              |
| Content in a GitHub repository or a storage bucket                      | [Keep remote content up to date](https://content.comark.dev/deployment/remote-content). The runtime reads the source; you decide how edits reach it. |

You can mix them. A serverless app that reads from GitHub can still ship a snapshot as a cold-start seed, and a Node server can read a bucket.

## What each path changes

Only the `source` line and the build script change. `get()`, `list()`, `navigation()`, rendering, and the [handler](https://content.comark.dev/advanced/client-and-handler) stay as they are, so you can start with files and move to a snapshot or a remote source when the hosting decision is made.

## Caching in production

The default in-memory cache is per process. That's fine for one long-running server. For several processes, or for functions that start cold often, [Configure caching](https://content.comark.dev/advanced/caching) explains when a shared driver or a TTL helps. A snapshot removes most of the cold-start cost on its own.


## Sitemap

See the full [sitemap](https://content.comark.dev/sitemap.md) for all pages.
