# Choosing an Architecture

---

## Start here

Use this page to pick a topology before you read the rest of the site. The reference architectures are starting points. Combine documented use cases when your situation does not match a single page.

JFrog SaaS is the recommended way to consume the platform when you can use it. Self-managed is the path when SaaS is not possible, for example air-gapped networks or other hosting constraints.

## Decision tree

Read the questions in order. Each leaf is explained in the sections below. Hover a diagram and scroll to zoom; a reset control appears after you zoom.

### Hosting model

```mermaid
flowchart TD
  start["What architecture should I use?"]
  hosting{"Can you use <a href='/reference-architecture/jfrog-saas/'>JFrog SaaS</a>? (recommended)"}
  saasPath["<a href='/reference-architecture/jfrog-saas/'>JFrog SaaS</a>"]
  selfPath["<a href='/reference-architecture/self-managed/'>Self-managed</a> path"]
  start --> hosting
  hosting -->|Yes| saasPath
  hosting -->|No| selfPath
  click hosting "/reference-architecture/jfrog-saas/"
  click saasPath "/reference-architecture/jfrog-saas/"
  click selfPath "/reference-architecture/self-managed/"
```

[JFrog SaaS](/jfrog-saas/) is recommended when you can use it.

### SaaS path

```mermaid
flowchart TD
  saasSites{"More than one site or region?"}
  saasSingle["<a href='/reference-architecture/jfrog-saas/use-cases/single-site/'>SaaS single site</a>"]
  saasWhy{"Why another site?"}
  saasAP["<a href='/reference-architecture/jfrog-saas/use-cases/multi-site/active-passive/'>Active-passive</a>"]
  saasAA["<a href='/reference-architecture/jfrog-saas/use-cases/multi-site/active-active/'>Active-active</a>"]
  saasSplit["<a href='/reference-architecture/jfrog-saas/use-cases/multi-site/ci-cd-separation/'>CI/CD</a>, <a href='/reference-architecture/jfrog-saas/use-cases/multi-site/main-site-with-edges/'>edges</a>, <a href='/reference-architecture/jfrog-saas/use-cases/multi-site/hybrid/'>hybrid</a>, or <a href='/reference-architecture/jfrog-saas/use-cases/multi-site/subsidiaries-and-vendors/'>subsidiaries</a>"]
  saasSites -->|No| saasSingle
  saasSites -->|Yes| saasWhy
  saasWhy -->|Disaster recovery| saasAP
  saasWhy -->|Active traffic in more than one region| saasAA
  saasWhy -->|Other topology| saasSplit
  click saasSingle "/reference-architecture/jfrog-saas/use-cases/single-site/"
  click saasAP "/reference-architecture/jfrog-saas/use-cases/multi-site/active-passive/"
  click saasAA "/reference-architecture/jfrog-saas/use-cases/multi-site/active-active/"
  click saasSplit "/reference-architecture/jfrog-saas/use-cases/multi-site/"
```

### Self-managed path

```mermaid
flowchart TD
  selfAir{"Air-gapped network?"}
  airgap["<a href='/reference-architecture/self-managed/use-cases/air-gapped/'>Air-gapped</a>"]
  selfSites{"More than one site or region?"}
  selfWhy{"Why another site?"}
  selfAP["<a href='/reference-architecture/self-managed/use-cases/multi-site/active-passive/'>Active-passive</a>"]
  selfAA["<a href='/reference-architecture/self-managed/use-cases/multi-site/active-active/'>Active-active</a>"]
  selfSplit["<a href='/reference-architecture/self-managed/use-cases/multi-site/ci-cd-separation/'>CI/CD</a>, <a href='/reference-architecture/self-managed/use-cases/multi-site/main-site-with-edges/'>edges</a>, <a href='/reference-architecture/self-managed/use-cases/multi-site/hybrid/'>hybrid</a>, or <a href='/reference-architecture/self-managed/use-cases/multi-site/subsidiaries-and-vendors/'>subsidiaries</a>"]
  selfDown{"Is downtime critical?"}
  selfHA["<a href='/reference-architecture/self-managed/deployment/considerations/high-availability/'>Single site with HA</a>"]
  selfBackup["<a href='/reference-architecture/disaster-recovery/'>Single site with backups</a>"]
  sizing["<a href='/reference-architecture/self-managed/deployment/sizing/measuring-rpm/'>Measure RPM</a> and pick a <a href='/reference-architecture/self-managed/deployment/sizing/'>t-shirt</a>"]
  selfAir -->|Yes| airgap
  selfAir -->|No| selfSites
  airgap --> sizing
  selfSites -->|No| selfDown
  selfSites -->|Yes| selfWhy
  selfWhy -->|Disaster recovery| selfAP
  selfWhy -->|Active traffic in more than one region| selfAA
  selfWhy -->|Other topology| selfSplit
  selfDown -->|Yes| selfHA
  selfDown -->|No| selfBackup
  selfAP --> sizing
  selfAA --> sizing
  selfSplit --> sizing
  selfHA --> sizing
  selfBackup --> sizing
  click airgap "/reference-architecture/self-managed/use-cases/air-gapped/"
  click selfAP "/reference-architecture/self-managed/use-cases/multi-site/active-passive/"
  click selfAA "/reference-architecture/self-managed/use-cases/multi-site/active-active/"
  click selfSplit "/reference-architecture/self-managed/use-cases/multi-site/"
  click selfHA "/reference-architecture/self-managed/deployment/considerations/high-availability/"
  click selfBackup "/reference-architecture/disaster-recovery/"
  click sizing "/reference-architecture/self-managed/deployment/sizing/"
```

One JFrog Platform site belongs in one region. Do not stretch a single cluster across regions. Cross-region or cross-data-center needs are a [multi-site](/self-managed/use-cases/multi-site/) deployment.

## 1. SaaS or self-managed

| If this is true | Choose | Next |
|---|---|---|
| You can run in a supported JFrog Cloud region | [JFrog SaaS](/jfrog-saas/) (recommended) | Step 2 |
| The network is air-gapped, or SaaS is not allowed | [Self-managed](/self-managed/) | Step 2 |
| You need some sites on SaaS and some on-premises | Hybrid (still pick a primary hosting model, then a hybrid use case) | Step 3 |

SaaS removes install, sizing, upgrades, and most observability work. Self-managed means you operate Kubernetes, PostgreSQL, storage, networking, upgrades, and monitoring.

## 2. Single site or multi-site

| If this is true | Choose |
|---|---|
| One data center or one cloud region is enough | Single site: [SaaS](/jfrog-saas/use-cases/single-site/) or [self-managed](/self-managed/use-cases/single-site/) |
| You need disaster recovery in another region | [Active-passive](/self-managed/use-cases/multi-site/active-passive/) ([SaaS](/jfrog-saas/use-cases/multi-site/active-passive/)) |
| Teams in more than one region must write locally | [Active-active](/self-managed/use-cases/multi-site/active-active/) ([SaaS](/jfrog-saas/use-cases/multi-site/active-active/)) |
| CI and production CD must be isolated | [CI/CD separation](/self-managed/use-cases/multi-site/ci-cd-separation/) ([SaaS](/jfrog-saas/use-cases/multi-site/ci-cd-separation/)) |
| Remote sites consume, but do not publish | [Main site with edges](/self-managed/use-cases/multi-site/main-site-with-edges/) ([SaaS](/jfrog-saas/use-cases/multi-site/main-site-with-edges/)) |
| Mix of SaaS and self-hosted sites | [Hybrid](/self-managed/use-cases/multi-site/hybrid/), [Bridge](/self-managed/use-cases/multi-site/hybrid-jfrog-bridge/), or [manufacturing](/self-managed/use-cases/multi-site/hybrid-manufacturing/) |
| Partners or subsidiaries share a subset of artifacts | [Subsidiaries and vendors](/self-managed/use-cases/multi-site/subsidiaries-and-vendors/) |
| Device fleets pull from many locations | [IoT fleet](/jfrog-saas/use-cases/multi-site/iot-fleet/) (SaaS) |
| No inbound path from the internet | [Air-gapped](/self-managed/use-cases/air-gapped/) (self-managed only) |

Multi-site is the production-grade pattern when failover or geographic performance matters. See [multi-site limitations](/self-managed/use-cases/multi-site/multi-site-limitations/) before you commit to federation.

Single-site SaaS still includes regional disaster recovery. Single-site self-managed recovery depends on [backups](https://docs.jfrog.com/installation/docs/backups) and your [DR playbook](/disaster-recovery/dr-playbook/).

## 3. High availability or backups (self-managed, single site)

High availability multiplies nodes, databases, and operations cost. Use it when an outage of this site would stop software delivery.

| If this is true | Choose |
|---|---|
| Downtime would critically impact delivery | [High availability](/self-managed/deployment/considerations/high-availability/) in one region, then consider multi-site for DR |
| A slower restore from backup is acceptable | Single site plus regular backups. See [Disaster Recovery](/disaster-recovery/) |

SaaS already provides a managed SLA. You do not size or operate HA yourself.

## 4. Pick a sizing template (self-managed)

After you have a topology, choose a t-shirt from [Sizing](/self-managed/deployment/sizing/). The primary Artifactory metric is **requests per minute (RPM)**.

If you do not know your RPM yet, [measure it from Artifactory request logs](/self-managed/deployment/sizing/measuring-rpm/). If you cannot measure, start one template larger than you expect, then adjust after you have data.

Xray is sized separately from Artifactory, by indexed artifacts and scan volume, on the same [Sizing](/self-managed/deployment/sizing/) page.
