---
group: Backends
title: Overview
weight: 1
---

A backend is JavaScript code that allows Static CMS to communicate with a service that stores content - typically a Git host like GitHub or GitLab. It provides functions that Static CMS can use to do things like read and update files using API's provided by the service.

## Backend Configuration

Individual backends provide their own configuration documentation, but there are some configuration options that are common to multiple backends. A full reference is below. Note that these are properties of the `backend` field, and should be nested under that field.

| Name          | Type                                                                                                    | Default                                                                                                                                          | Description                                                                                                                                                     |
| ------------- | ------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| name          | 'git-gateway'<br />\| 'github'<br />\| 'gitlab'<br />\| 'bitbucket'<br />\| 'test-repo'<br />\| 'proxy' |                                                                                                                                                  | The backend git provider                                                                                                                                        |
| repo          | string                                                                                                  |                                                                                                                                                  | Required for `github`, `gitlab`, and `bitbucket` backends. Ignored by `git-gateway`. Follows the pattern `[org-or-username]/[repo-name]`                        |
| branch        | string                                                                                                  | `main`                                                                                                                                           | _Optional_. The branch where published content is stored. All CMS commits and PRs are made to this branch                                                       |
| api_root      | string                                                                                                  | GitHub<br />`https://api.github.com`<br /><br />GitLab<br/>`https://gitlab.com/api/v4`<br /><br />Bitbucket<br />`https://api.bitbucket.org/2.0` | _Optional_. The API endpoint. Only necessary in certain cases, like with GitHub Enterprise or self-hosted GitLab                                                |
| site_domain   | string                                                                                                  | `location.hostname`<br /><br />On `localhost`<br />`cms.netlify.com`                                                                             | _Optional_. Sets the `site_id` query param sent to the API endpoint. Non-Netlify auth setups will often need to set this for local development to work properly |
| base_url      | string                                                                                                  | GitHub or Bitbucket<br />`https://api.netlify.com`<br /><br />GitLab<br />`https://gitlab.com`                                                   | _Optional_. OAuth client hostname (just the base domain, no path). **Required** when using an external OAuth server or self-hosted GitLab                       |
| auth_endpoint | string                                                                                                  | GitHub or Bitbucket<br />`auth`<br /><br />GitLab<br />`oauth/authorize`                                                                         | _Optional_. Path to append to `base_url` for authentication requests.                                                                                           |

## Creating a New Backend

Anyone can write a backend, but the API is not yet finalized and documented. If you would like to write your own backend for a service that does not have one currently, Static CMS recommends using the [GitHub backend](https://github.com/StaticJsCMS/static-cms/tree/main/core/src/backends/github) as a reference for API and best practices.