# databasifylabs/databasify architecture

> Architecture diagram of the GitHub repository databasifylabs/databasify, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-12). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/databasifylabs/databasify
- Repository: https://github.com/databasifylabs/databasify

## Overview

Databasify is a self-hosted DBaaS control plane for creating and operating database servers and clusters. The main workflow is to provision a server, create a database and its nodes, then expose it through hostnames and TLS; operators can subsequently manage accounts, pools, monitoring, failover, recovery and upgrades. The app also integrates with infrastructure providers, DNS, object storage and pluggable engines. The README documents these capabilities, while the excerpts show parts of the storage-provider workflow and database flow scheduling; many other runtime links are not sampled, so those links are omitted or marked unverified.

Main entry points: [`app/Models/Database.php`](https://github.com/databasifylabs/databasify/blob/0.x/app/Models/Database.php) (Database state), [`app/Actions/Databases/Lifecycle`](https://github.com/databasifylabs/databasify/tree/0.x/app/Actions/Databases/Lifecycle) (Database lifecycle), [`app/Http/Controllers/Databases`](https://github.com/databasifylabs/databasify/tree/0.x/app/Http/Controllers/Databases) (Database controllers), [`app/Actions/Databases/Nodes`](https://github.com/databasifylabs/databasify/tree/0.x/app/Actions/Databases/Nodes) (Cluster nodes)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_control["Control plane"]
  node_db_ui["Database UI<br/>[app.tsx]"]
  node_db_api["Database controllers"]
  node_db_query["Database listing<br/>[DatabaseQuery.php]"]
end

subgraph group_database["Database operations"]
  node_database_model[("Database state<br/>[Database.php]")]
  node_db_lifecycle["Database lifecycle"]
  node_db_nodes["Cluster nodes"]
  node_db_flows["Operation flows<br/>[StartFlow.php]"]
  node_flow_job["Flow worker"]
  node_db_accounts["Accounts and pools"]
  node_db_failover["Failover"]
  node_db_monitor["Metrics and alerts"]
  node_db_migrations["Migrations"]
  node_db_upgrades["Maintenance and upgrades"]
end

subgraph group_engine["Engine integration"]
  node_engine_catalog["Engine catalog<br/>[EngineCatalog.php]"]
  node_engine_protocol["Engine protocol<br/>[Payload.php]"]
end

subgraph group_infrastructure["Infrastructure integrations"]
  node_server_ops["Server provisioning"]
  node_provider_ops["Provider provisioning"]
  node_db_dns["Domains and TLS"]
end

subgraph group_storage["Recovery storage"]
  node_db_recovery[("Point-in-time recovery")]
  node_storage_controller["Storage management"]
  node_storage_actions["Storage provider actions"]
  node_storage_model[("Storage providers")]
  node_storage_access["Bucket access check"]
  node_s3_service["S3 client<br/>[S3.php]"]
end

node_operator(("Operator"))
node_external_engines["Database engines"]
node_external_providers["Cloud providers"]
node_external_dns["DNS providers"]
node_external_s3["S3-compatible storage"]

node_operator -.->|"operates"| node_db_ui
node_db_ui -.->|"requests"| node_db_api
node_db_api -.->|"lists databases"| node_db_query
node_db_query -->|"queries"| node_database_model
node_db_api -.->|"manages"| node_db_lifecycle
node_db_lifecycle -.->|"updates state"| node_database_model
node_db_lifecycle -.->|"provisions nodes"| node_db_nodes
node_db_nodes -.->|"uses servers"| node_server_ops
node_server_ops -->|"provisions on"| node_external_providers
node_db_lifecycle -.->|"starts flow"| node_db_flows
node_db_flows -->|"dispatches"| node_flow_job
node_db_nodes -->|"runs engines"| node_external_engines
node_engine_catalog -->|"describes engines"| node_external_engines
node_db_accounts -.->|"manages accounts"| node_database_model
node_db_dns -->|"publishes records"| node_external_dns
node_db_dns -.->|"configures hostnames"| node_database_model
node_db_failover -.->|"promotes nodes"| node_database_model
node_db_monitor -.->|"records metrics"| node_database_model
node_db_migrations -->|"migrates databases"| node_external_engines
node_db_upgrades -.->|"maintains"| node_database_model
node_db_recovery -->|"uses provider"| node_storage_model
node_storage_controller -->|"invokes actions"| node_storage_actions
node_storage_controller -->|"reads providers"| node_storage_model
node_storage_actions -->|"checks access"| node_storage_access
node_storage_access -->|"tests bucket"| node_s3_service
node_storage_model -.->|"connects to"| node_external_s3
node_engine_catalog -.->|"builds engine data"| node_engine_protocol

click node_db_ui "https://github.com/databasifylabs/databasify/blob/0.x/resources/js/app.tsx"
click node_db_api "https://github.com/databasifylabs/databasify/tree/0.x/app/Http/Controllers/Databases"
click node_database_model "https://github.com/databasifylabs/databasify/blob/0.x/app/Models/Database.php"
click node_db_query "https://github.com/databasifylabs/databasify/blob/0.x/app/Queries/Databases/DatabaseQuery.php"
click node_server_ops "https://github.com/databasifylabs/databasify/tree/0.x/app/Actions/Servers"
click node_provider_ops "https://github.com/databasifylabs/databasify/tree/0.x/app/Actions/Providers"
click node_db_lifecycle "https://github.com/databasifylabs/databasify/tree/0.x/app/Actions/Databases/Lifecycle"
click node_db_nodes "https://github.com/databasifylabs/databasify/tree/0.x/app/Actions/Databases/Nodes"
click node_db_flows "https://github.com/databasifylabs/databasify/blob/0.x/app/Actions/Databases/Flows/StartFlow.php"
click node_flow_job "https://github.com/databasifylabs/databasify/blob/0.x/app/Jobs/Databases/AdvanceDatabaseFlow.php"
click node_db_accounts "https://github.com/databasifylabs/databasify/tree/0.x/app/Actions/Databases/Accounts"
click node_db_dns "https://github.com/databasifylabs/databasify/tree/0.x/app/Actions/Databases/Domains"
click node_db_failover "https://github.com/databasifylabs/databasify/tree/0.x/app/Actions/Databases/Failover"
click node_db_monitor "https://github.com/databasifylabs/databasify/tree/0.x/app/Actions/Databases/Monitoring"
click node_db_migrations "https://github.com/databasifylabs/databasify/blob/0.x/app/Jobs/Databases/RunMigrationJob.php"
click node_db_upgrades "https://github.com/databasifylabs/databasify/tree/0.x/app/Actions/Databases/Upgrades"
click node_db_recovery "https://github.com/databasifylabs/databasify/blob/0.x/app/Models/PointInTimeRecovery.php"
click node_storage_controller "https://github.com/databasifylabs/databasify/blob/0.x/app/Http/Controllers/Storage/StorageProviderController.php"
click node_storage_actions "https://github.com/databasifylabs/databasify/blob/0.x/app/Actions/Storage/UpdateStorageProvider.php"
click node_storage_model "https://github.com/databasifylabs/databasify/blob/0.x/app/Models/StorageProvider.php"
click node_storage_access "https://github.com/databasifylabs/databasify/blob/0.x/app/Actions/Storage/CheckStorageAccess.php"
click node_s3_service "https://github.com/databasifylabs/databasify/blob/0.x/app/Services/Storage/S3.php"
click node_engine_catalog "https://github.com/databasifylabs/databasify/blob/0.x/app/Engines/EngineCatalog.php"
click node_engine_protocol "https://github.com/databasifylabs/databasify/blob/0.x/app/Engines/Payload.php"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_db_ui,node_db_api,node_db_query toneBlue
class node_database_model,node_db_lifecycle,node_db_nodes,node_db_flows,node_flow_job,node_db_accounts,node_db_failover,node_db_monitor,node_db_migrations,node_db_upgrades,node_external_engines,node_external_s3 toneAmber
class node_engine_catalog,node_engine_protocol toneMint
class node_server_ops,node_provider_ops,node_db_dns toneRose
class node_db_recovery,node_storage_controller,node_storage_actions,node_storage_model,node_storage_access,node_s3_service,node_operator,node_external_providers,node_external_dns toneIndigo
```

## Components

### Control plane

- [Database UI](https://github.com/databasifylabs/databasify/blob/0.x/resources/js/app.tsx): `resources/js/app.tsx`
- [Database controllers](https://github.com/databasifylabs/databasify/tree/0.x/app/Http/Controllers/Databases): `app/Http/Controllers/Databases`
- [Database listing](https://github.com/databasifylabs/databasify/blob/0.x/app/Queries/Databases/DatabaseQuery.php): `app/Queries/Databases/DatabaseQuery.php`

### Database operations

- [Database state](https://github.com/databasifylabs/databasify/blob/0.x/app/Models/Database.php): `app/Models/Database.php`
- [Database lifecycle](https://github.com/databasifylabs/databasify/tree/0.x/app/Actions/Databases/Lifecycle): `app/Actions/Databases/Lifecycle`
- [Cluster nodes](https://github.com/databasifylabs/databasify/tree/0.x/app/Actions/Databases/Nodes): `app/Actions/Databases/Nodes`
- [Operation flows](https://github.com/databasifylabs/databasify/blob/0.x/app/Actions/Databases/Flows/StartFlow.php): `app/Actions/Databases/Flows/StartFlow.php`
- [Flow worker](https://github.com/databasifylabs/databasify/blob/0.x/app/Jobs/Databases/AdvanceDatabaseFlow.php): `app/Jobs/Databases/AdvanceDatabaseFlow.php`
- [Accounts and pools](https://github.com/databasifylabs/databasify/tree/0.x/app/Actions/Databases/Accounts): `app/Actions/Databases/Accounts`
- [Failover](https://github.com/databasifylabs/databasify/tree/0.x/app/Actions/Databases/Failover): `app/Actions/Databases/Failover`
- [Metrics and alerts](https://github.com/databasifylabs/databasify/tree/0.x/app/Actions/Databases/Monitoring): `app/Actions/Databases/Monitoring`
- [Migrations](https://github.com/databasifylabs/databasify/blob/0.x/app/Jobs/Databases/RunMigrationJob.php): `app/Jobs/Databases/RunMigrationJob.php`
- [Maintenance and upgrades](https://github.com/databasifylabs/databasify/tree/0.x/app/Actions/Databases/Upgrades): `app/Actions/Databases/Upgrades`

### Engine integration

- [Engine catalog](https://github.com/databasifylabs/databasify/blob/0.x/app/Engines/EngineCatalog.php): `app/Engines/EngineCatalog.php`
- [Engine protocol](https://github.com/databasifylabs/databasify/blob/0.x/app/Engines/Payload.php): `app/Engines/Payload.php`

### Infrastructure integrations

- [Server provisioning](https://github.com/databasifylabs/databasify/tree/0.x/app/Actions/Servers): `app/Actions/Servers`
- [Provider provisioning](https://github.com/databasifylabs/databasify/tree/0.x/app/Actions/Providers): `app/Actions/Providers`
- [Domains and TLS](https://github.com/databasifylabs/databasify/tree/0.x/app/Actions/Databases/Domains): `app/Actions/Databases/Domains`

### Recovery storage

- [Point-in-time recovery](https://github.com/databasifylabs/databasify/blob/0.x/app/Models/PointInTimeRecovery.php): `app/Models/PointInTimeRecovery.php`
- [Storage management](https://github.com/databasifylabs/databasify/blob/0.x/app/Http/Controllers/Storage/StorageProviderController.php): `app/Http/Controllers/Storage/StorageProviderController.php`
- [Storage provider actions](https://github.com/databasifylabs/databasify/blob/0.x/app/Actions/Storage/UpdateStorageProvider.php): `app/Actions/Storage/UpdateStorageProvider.php`
- [Storage providers](https://github.com/databasifylabs/databasify/blob/0.x/app/Models/StorageProvider.php): `app/Models/StorageProvider.php`
- [Bucket access check](https://github.com/databasifylabs/databasify/blob/0.x/app/Actions/Storage/CheckStorageAccess.php): `app/Actions/Storage/CheckStorageAccess.php`
- [S3 client](https://github.com/databasifylabs/databasify/blob/0.x/app/Services/Storage/S3.php): `app/Services/Storage/S3.php`

### Other components

- **Operator**
- **Database engines**
- **Cloud providers**
- **DNS providers**
- **S3-compatible storage**

## Connections

- Operator → Database UI: operates
- Database UI → Database controllers: requests
- Database controllers → Database listing: lists databases
- Database listing → Database state: queries (evidence: `app/Queries/Databases/DatabaseQuery.php`)
- Database controllers → Database lifecycle: manages
- Database lifecycle → Database state: updates state
- Database lifecycle → Cluster nodes: provisions nodes
- Cluster nodes → Server provisioning: uses servers
- Server provisioning → Cloud providers: provisions on (evidence: `README.md`)
- Database lifecycle → Operation flows: starts flow
- Operation flows → Flow worker: dispatches (evidence: `app/Actions/Databases/Flows/StartFlow.php`)
- Cluster nodes → Database engines: runs engines (evidence: `README.md`)
- Engine catalog → Database engines: describes engines (evidence: `README.md`)
- Accounts and pools → Database state: manages accounts
- Domains and TLS → DNS providers: publishes records (evidence: `README.md`)
- Domains and TLS → Database state: configures hostnames
- Failover → Database state: promotes nodes
- Metrics and alerts → Database state: records metrics
- Migrations → Database engines: migrates databases (evidence: `README.md`)
- Maintenance and upgrades → Database state: maintains (evidence: `app/Actions/Databases/Upgrades/FindUnsupportedSdkDatabases.php`)
- Point-in-time recovery → Storage providers: uses provider (evidence: `app/Models/PointInTimeRecovery.php`)
- Storage management → Storage provider actions: invokes actions (evidence: `app/Http/Controllers/Storage/StorageProviderController.php`)
- Storage management → Storage providers: reads providers (evidence: `app/Http/Controllers/Storage/StorageProviderController.php`)
- Storage provider actions → Bucket access check: checks access (evidence: `app/Actions/Storage/UpdateStorageProvider.php`)
- Bucket access check → S3 client: tests bucket (evidence: `app/Actions/Storage/CheckStorageAccess.php`)
- Storage providers → S3-compatible storage: connects to
- Engine catalog → Engine protocol: builds engine data
