Skip to main content

BYOC vs Managed vs Self-Hosted

RushDB offers three deployment models. This page explains the trade-offs so you can pick the right architecture from the start — or understand what's involved in moving between them.


Three deployment models

ManagedBYOCSelf-Hosted
Who runs RushDBRushDB CloudRushDB CloudYou
Your Neo4j instanceRushDB-managedYours (Aura or local)Yours
Data residencyRushDB infrastructureYour chosen regionYour infrastructure
Setup time< 1 minute~15 minutes30–60 minutes
Ops burdenNoneMinimalFull
Raw Cypher access
Custom embedding endpoint
Managed billingRushDB plansRushDB plans + Neo4j costsInfrastructure costs only
BackupsAutomaticYour responsibilityYour responsibility
SLA / uptimeRushDB SLARushDB SLA (RushDB layer)DIY
Compliance (SOC 2, HIPAA)Contact salesAchievableAchievable

When to choose each

Managed — start here

Choose Managed when:

  • You need to be working in minutes with no infrastructure setup.
  • Your data residency and compliance requirements are flexible.
  • You'd rather not think about Neo4j capacity planning.
  • You're prototyping, running a hobby project, or in early-stage.
from rushdb import RushDB

db = RushDB("rbk_xxxxxxxx")

BYOC — bring your own Neo4j

Choose BYOC when:

  • You already have a Neo4j Aura instance (or plan to).
  • You need raw Cypher access for reporting or migrations.
  • You want your graph data to stay within your cloud account or region.
  • You want RushDB's API layer managed for you but want control over the graph store.

BYOC gives you a RushDB project that connects to your Neo4j credentials. See Connect an Aura Instance for the full setup guide.

from rushdb import RushDB

db = RushDB("rbk_your_byoc_project_key")

Feature unlocked — raw Cypher:

result = db.query.raw("MATCH (n) RETURN count(n) AS total")
print(result)

Self-Hosted — full control

Choose Self-Hosted when:

  • Your data must not leave your own infrastructure.
  • You need custom embedding endpoints (open-source models, private model servers).
  • You want to customize deployment topology (multi-region, air-gapped, private VPC).
  • Regulatory requirements mandate on-premises hosting.

See the Deployment guide for the complete Docker Compose walkthrough.

import os
from rushdb import RushDB

db = RushDB(
os.environ["RUSHDB_API_KEY"],
base_url=os.environ["RUSHDB_API_URL"] # points to your own instance
)

Feature gate reference

The following features are gated by deployment model:

FeatureManagedBYOCSelf-Hosted
POST /api/v1/query/raw (raw Cypher)
Custom embedding base URL
External embedding indexes (BYOV)
Dashboard access
API key management
Rate limiter configuration

Migrating between models

Managed → BYOC

Managed and BYOC share the same RushDB API layer. There is no direct data export between Neo4j instances since BYOC uses your Neo4j that you provision separately. The migration flow is:

1. Document your data shape

Use getOntologyMarkdown() to capture your record labels, property names, and relationship types before migrating:

ontology = db.get_ontology_markdown()
print(ontology)

2. Export your data

Use records.find() with pagination to export records by label:

PAGE_SIZE = 500
skip = 0
all_records = []

while True:
result = db.records.find(
labels=['Product'],
skip=skip,
limit=PAGE_SIZE
)
all_records.extend(result.data)
if len(all_records) >= result.total:
break
skip += PAGE_SIZE

3. Create a BYOC project

In the RushDB Dashboard, create a new project using "Use my own Neo4j instance" and follow the BYOC setup guide.

4. Re-import into the BYOC project

Point your SDK at the new API key and re-ingest:

byoc_db = RushDB('rbk_byoc_project_key')

byoc_db.records.import_json(
label='Product',
data=payload
)

BYOC / Managed → Self-Hosted

Self-hosted uses the same REST API surface as the cloud. The migration steps are:

  1. Deploy your self-hosted instance with RUSHDB_SELF_HOSTED=true.
  2. Create a project and API key via the self-hosted dashboard at http://your-host:3000.
  3. Export records from the cloud using the pagination pattern above.
  4. Point the SDK at your self-hosted URL and re-import.
import os
from rushdb import RushDB

self_hosted_db = RushDB(
os.environ["SELFHOSTED_API_KEY"],
base_url="https://rushdb.your-company.com/api/v1"
)

Self-Hosted → Managed

The same export/re-import pattern applies. In addition, you can leverage raw Cypher on self-hosted to bulk-export complex relationship graphs before re-ingesting them via importJson on managed.


Quick decision tree

Do you need data to stay on your own infrastructure?
└─ Yes → Self-Hosted

Do you already have a Neo4j instance, or need raw Cypher?
└─ Yes → BYOC

Starting fresh with no ops requirements?
└─ Yes → Managed

Next steps