Skip to content

Database Schema

OpenCodeHub uses Drizzle ORM with 38 schema tables defined in src/db/schema/.

FileTablesPurpose
users.tsusersUser accounts, passwords, OAuth, 2FA, admin flags
repositories.tsrepositoriesGit repos, visibility, disk paths, settings
pull-requests.tspullRequestsPRs, states, branches, merge status
issues.tsissuesIssue tracking
projects.tsprojectsProject boards, columns, cards
stacked-prs.tsprStacks, prStackEntriesStacked PR relationships
merge-queue.tsmergeQueueQueue entries with priority, CI status, attempts
workflows.tsworkflows, workflowRuns, workflowJobs, workflowStepsCI/CD pipeline execution
pipeline-runners.tspipelineRunnersRegistered CI runners
ai-reviews.tsaiReviewsAI code review results
ai-review-rules.tsaiReviewRulesAI review rule configurations
developer-metrics.tsdeveloperMetricsPR metrics, cycle time
branch-protection.tsbranchProtection, reviewRequirements, requiredStatusChecksBranch rules
webhooks.tswebhooksOutbound webhook configs
automations.tsautomationsWorkflow automation rules
slack-integration.tsslackIntegrationSlack notification configs
organizations.tsorganizationsOrganizations
teams.tsteamsTeam membership
roles.tsrolesRole-based access control
activity.tsactivityActivity/audit log
security.tssecuritySecurity scan results
security-policies.tssecurityPoliciesSecurity policy definitions
sso.tsssoSSO/OIDC configuration
wiki.tswikiRepository wiki pages
deploy-keys.tsdeployKeysSSH deploy keys
path-permissions.tspathPermissionsFile-level access control
pr-states.tsprStatesCustom PR states
issue-statuses.tsissueStatusesCustom issue statuses
custom-fields.tscustomFieldsCustom issue/project fields
auto-merge-rules.tsautoMergeRulesAuto-merge configuration
external-ci.tsexternalCIConfigs, externalBuildsExternal CI integration
review-rules.tsreviewRulesReview requirements and reviewer routing
integrations.tsintegrationsCode quality, dashboard, deployment integrations
packages.tspackagesPackage registry metadata
inbox-sections.tsinboxSectionsCustom inbox sections
notification-preferences.tsnotificationPreferencesPer-user notification settings
system-config.tssystemConfigSystem-wide configuration

Key relationships between tables:

  • repositoriesusers (owner)
  • pullRequestsrepositories (repo) + users (author)
  • prStacksrepositories + prStackEntriespullRequests
  • mergeQueuepullRequests + repositories
  • workflowRunsworkflows + repositories
  • issuesrepositories + users
  • projectsrepositories

We use drizzle-kit for migrations.

Generate a migration:

Terminal window
npm run db:generate

Apply migrations:

Terminal window
npm run db:migrate

Push schema (prototyping — no migration files):

Terminal window
npm run db:push

Open Drizzle Studio GUI:

Terminal window
npm run db:studio
DriverUse CaseNotes
postgresProductionRequired. All schemas use pgTable
sqliteDevelopmentSimple local setup
tursoEdge (Vercel)LibSQL for serverless deployments