Skip to main content
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 and synchronization are enabled. All three use the same 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 and 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

Experimental.
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:
  • 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.