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
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 is recommended when you can use it.
SaaS path
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
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 deployment.
1. SaaS or self-managed
| If this is true | Choose | Next |
|---|---|---|
| You can run in a supported JFrog Cloud region | JFrog SaaS (recommended) | Step 2 |
| The network is air-gapped, or SaaS is not allowed | 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 or self-managed |
| You need disaster recovery in another region | Active-passive (SaaS) |
| Teams in more than one region must write locally | Active-active (SaaS) |
| CI and production CD must be isolated | CI/CD separation (SaaS) |
| Remote sites consume, but do not publish | Main site with edges (SaaS) |
| Mix of SaaS and self-hosted sites | Hybrid, Bridge, or manufacturing |
| Partners or subsidiaries share a subset of artifacts | Subsidiaries and vendors |
| Device fleets pull from many locations | IoT fleet (SaaS) |
| No inbound path from the internet | Air-gapped (self-managed only) |
Multi-site is the production-grade pattern when failover or geographic performance matters. See multi-site limitations before you commit to federation.
Single-site SaaS still includes regional disaster recovery. Single-site self-managed recovery depends on backups and your 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 in one region, then consider multi-site for DR |
| A slower restore from backup is acceptable | Single site plus regular backups. See 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. The primary Artifactory metric is requests per minute (RPM).
If you do not know your RPM yet, measure it from Artifactory request logs. 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 page.