Under Construction: The site is currently being updated. That means its NOT FINISHED AND IS BEING BUILT!!!!!!
Docs / Development / Database Schema
Development

Database Schema

Prisma schema, migrations, and database operations.

Database Schema

Overview

The database uses PostgreSQL with Prisma ORM. The schema is defined in storage/prisma/schema.prisma.

Models

Role

Roles define permission sets for users.

Field Type Description
id Int Auto-incrementing ID
name String Unique internal name
displayName String Display name
description String? Description
isAdmin Boolean Grants admin privileges
permissions String JSON array of permission strings
isSystem Boolean Prevents deletion
sortOrder Int Display order
createdAt DateTime Creation timestamp
updatedAt DateTime Last update timestamp

Users

Field Type Description
id Int Auto-incrementing ID
email String Unique email
username String? Unique display name
password String bcrypt hash
isAdmin Boolean Admin flag
role String Role name (FK)
description String? Bio
avatar String? Avatar URL
permissions Text? JSON permission overrides
serverLimit Int? Max servers
maxMemory Int? Total memory limit (MB)
maxCpu Int? Total CPU limit
maxStorage Int? Total storage limit (MB)
maxDatabases Int? Total database limit
preferredNodeId Int? Preferred node FK
totpEnabled Boolean TOTP 2FA enabled
totpSecret String? TOTP secret
totpRecoveryCodes Text? Recovery codes JSON
passkeyEnabled Boolean Passkey 2FA enabled
loginAttempts Int Failed login count
lockedUntil DateTime? Lockout expiry
onboardingCompleted Boolean Onboarding finished
onboardingSkipped Boolean Onboarding skipped
createdAt DateTime Creation timestamp
updatedAt DateTime Last update timestamp

Server

Field Type Description
id Int Auto-incrementing ID
UUID String Unique UUID
name String Display name
description String? Description
Ports Text Port allocation JSON
Memory Int Memory limit (MB)
Swap Int Swap limit (MB)
Cpu Int CPU limit
Storage Int Storage limit (MB)
Variables Text? Environment variables JSON
StartCommand String? Custom startup command
dockerImage String? Docker image override
allowStartupEdit Boolean Allow startup editing
Installing Boolean Being installed
Queued Boolean Queued for install
Suspended Boolean Suspended by admin
Running Boolean Container running
backupLimit Int Max backups
backupIgnoreList Text Paths to exclude from backups
databaseLimit Int Max databases
ownerId Int Owner user FK
nodeId Int Node FK
imageId Int Image FK

Node

Field Type Description
id Int Auto-incrementing ID
name String Display name
ram Int Total RAM (MB)
cpu Int Total CPU
disk Int Total disk (MB)
overallocateMemory Int Memory overallocation %
overallocateDisk Int Disk overallocation %
overallocateCpu Int CPU overallocation %
locationId Int? Location FK
address String IP or hostname
port Int Daemon port
key String Shared API key
sftpPort Int SFTP port
maintenanceMode Boolean Maintenance mode

Allocation

Port allocations for servers on nodes.

Field Type Description
id Int Auto-incrementing ID
nodeId Int Node FK
ip String IP address
port Int Port number
serverId String? Assigned server UUID

Backup

Field Type Description
id Int Auto-incrementing ID
UUID String Unique UUID
name String Backup name
serverId String Server UUID FK
filePath String File path on node
size BigInt? File size
checksum String? Integrity checksum
locked Boolean Lock prevents deletion

DatabaseHost

Field Type Description
id Int Auto-incrementing ID
name String Display name
host String Hostname
port Int PostgreSQL port
username String Admin username
password String Admin password
nodeId Int? Associated node

ServerDatabase

Field Type Description
id Int Auto-incrementing ID
serverId String Server UUID FK
hostId Int Database host FK
databaseName String Database name
databaseUser String Database user
databasePassword String Database password

Schedule

Field Type Description
id Int Auto-incrementing ID
serverId String Server UUID FK
name String Schedule name
cron String Cron expression
enabled Boolean Active state
timeOffset Int Time offset
lastRunAt DateTime? Last execution
nextRunAt DateTime? Next scheduled run

ScheduleTask

Field Type Description
id Int Auto-incrementing ID
scheduleId Int Schedule FK
order Int Execution order
action String Task type
payload Text Action data
timeOffset Int Delay before task

Images

Field Type Description
id Int Auto-incrementing ID
UUID String Unique UUID
name String? Display name
description String? Description
author String? Author
dockerImages Text? Allowed Docker images
startup Text? Default startup command
stop Text? Stop command
startup_done Text? Startup completion string
config_files Text? Config file paths
variables Text? Variable definitions
status String approved/pending/rejected

Mount

Field Type Description
id Int Auto-incrementing ID
name String Display name
source String Host path
target String Container path
readOnly Boolean Read-only mount

ApiKey

Field Type Description
id Int Auto-incrementing ID
name String Display name
key String Unique key value
description String? Description
permissions Text JSON capability array
active Boolean Active state
userId Int? Owner user FK

Other Models

  • PasswordReset (password reset tokens)
  • LoginHistory (login audit log)
  • PlayerStats (player count snapshots)
  • Addon (installed addons)
  • AddonSetting (addon configuration)
  • SftpCredential (SFTP connection details)
  • SubUser (server sub-user access)
  • ActivityLog (audit trail)
  • WebAuthnCredential (passkey credentials)
  • ServerFolder (server folders)
  • ServerFolderMember (folder membership)
  • settings (panel settings, singleton)

Migrations

pnpm run migrate:dev      # Development (creates migration files)
pnpm run migrate:deploy   # Production (applies pending migrations)
pnpm run generate         # Regenerate Prisma client

Relations

Relationships:

  • User to Server (one-to-many, via ownerId)
  • Server to Node (many-to-one, via nodeId)
  • Server to Images (many-to-one, via imageId)
  • Server to Backup (one-to-many)
  • Server to ServerDatabase (one-to-many)
  • Server to Schedule (one-to-many)
  • Server to SubUser (one-to-many)
  • Node to Allocation (one-to-many)
  • Node to Location (many-to-one)
  • DatabaseHost to Node (many-to-one)
  • Role to Users (one-to-many, via role name).