> ## Documentation Index
> Fetch the complete documentation index at: https://docs.formae.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Ways to work with formae

> Three operating models, from Git as the strict source of truth to formae as the system of record.

formae supports three ways to work, depending on how much you want Git versus
formae to be the source of truth for your infrastructure. They differ on two
things: how strictly Git controls what is deployed, and whether
[discovery](/documentation/concepts/discovery) and
[synchronization](/documentation/concepts/synchronization) are enabled. All three
use the same [apply modes](/documentation/concepts/apply-modes) (reconcile and
patch) underneath.

## Classic GitOps

Git is the single source of truth. Anything changed outside formae is rejected or
overwritten on the next reconcile, so what is in your repository is exactly what
runs in the cloud.

Best for teams with strict change control and automated CI/CD pipelines, where
every change should go through a pull request.

## Always up-to-date GitOps

Extends Classic by turning on [discovery](/documentation/concepts/discovery) and
[synchronization](/documentation/concepts/synchronization). Your code stays
authoritative, but formae continuously tracks out-of-band changes so you can
review them and decide whether to absorb them into your code or overwrite them.

Best for mixed environments and gradual adoption, where not everything goes
through formae yet and you want visibility into drift rather than hard rejection.

## No-Git GitOps

<Note>Experimental.</Note>

formae itself is the system of record. You work with temporary forma files,
extracting and applying at any granularity you like. Git becomes optional, and an
up-to-date representation of your infrastructure can be restored from formae at any
time.

Best for exploratory or short-lived work where maintaining a repository would be
overhead.

## How they relate

The three models are about *where the source of truth lives*, not *how changes are
applied*. Every model still uses the same two [apply modes](/documentation/concepts/apply-modes):

* **Reconcile** makes the cloud match your forma exactly, removing anything not
  declared.
* **Patch** applies only the changes you specify, leaving everything else alone.

Moving from Classic to Always-up-to-date is a matter of enabling discovery and
synchronization; moving to No-Git is a matter of how you treat your forma files,
not a different apply mechanism.
