Skip to main content

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 trueChooseNext
You can run in a supported JFrog Cloud regionJFrog SaaS (recommended)Step 2
The network is air-gapped, or SaaS is not allowedSelf-managedStep 2
You need some sites on SaaS and some on-premisesHybrid (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 trueChoose
One data center or one cloud region is enoughSingle site: SaaS or self-managed
You need disaster recovery in another regionActive-passive (SaaS)
Teams in more than one region must write locallyActive-active (SaaS)
CI and production CD must be isolatedCI/CD separation (SaaS)
Remote sites consume, but do not publishMain site with edges (SaaS)
Mix of SaaS and self-hosted sitesHybrid, Bridge, or manufacturing
Partners or subsidiaries share a subset of artifactsSubsidiaries and vendors
Device fleets pull from many locationsIoT fleet (SaaS)
No inbound path from the internetAir-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 trueChoose
Downtime would critically impact deliveryHigh availability in one region, then consider multi-site for DR
A slower restore from backup is acceptableSingle 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.