gitlab-org/gitlab
Migration context
Long-running migrations in flight. Knowing where they stand helps explain "why is this code half-old, half-new?"
Vue 2 → Vue 3
Vue 2 reached end-of-life in late 2023. The migration is per-component, tracked in config/vue3migration/. Mechanics:
- Components opt into Vue 3 mode via the
@vue/compatshim. - Tests must run on both modes during the transition.
vue3migration/lists components still pending.
Most new components are written against Vue 3.
Work items framework
Issues, MRs, epics, requirements, test cases, OKRs are being unified into the work items framework. Each old type is a "work item type" with widgets attached. The migration:
- New API: GraphQL
WorkItemtype and widget mutations. - Old API: REST
Issue, GraphQLIssuestill work and will for years. - New UI surfaces are work-item-first; legacy pages still exist behind feature flags.
Pending milestones: full epic and requirements rollover.
Cells
Multi-cell sharding is partially in tree. The Cell and Organization models exist; routing helpers exist; data isolation gem exists. The forward path:
- Make every controller organization-aware.
- Migrate global tables to organization-scoped tables.
- Stand up an external Topology Service.
- Light up the first additional cell on GitLab.com.
The gitlab_com_derisk and wip feature-flag families gate cells-related changes.
See Cells.
Database decomposition
The ci and sec databases are split. Pending:
- The
jhdatabase is downstream-only. - Some tables are still cross-database via loose foreign keys; the migration to fully resolved boundaries continues per-table.
db/integer_ids_not_yet_initialized_to_bigint.ymllists tables still on integer PKs being migrated to bigint.
Rails / Ruby upgrades
The Gemfile / Gemfile.next pattern and the rails-next branch let the team test the next Rails version without a long-lived branch. Current state:
- Ruby 3.3.10 is the production version.
Gemfilepins Rails 7.2;Gemfile.next(when active) tests the next minor.
Search backends
The migration from Postgres trigram search to Elasticsearch happened ~2018. The current migration is from Elasticsearch to Zoekt for code search and to Active Context for retrieval. Each backend coexists; the dispatcher in Search::Service picks the right one per query type.
See Search.
OAuth / SSO
The OmniAuth → Doorkeeper consolidation is mostly done; remaining work is in token model unification and SCIM / SAML group sync improvements.
Markdown rendering (CommonMark)
The migration from kramdown to a CommonMark-compliant renderer landed years ago. Per-feature exceptions remain in lib/gitlab/asciidoc/ and lib/banzai/, mostly for AsciiDoc and other markups.
Frontend bundling: Webpack → Vite
New code targets Vite ("frontend islands"). The main bundle still uses Webpack. There's no immediate plan to fully migrate the main bundle.
Related
Built by Factory AutoWiki from public repository content. It is a generated preview for codebase exploration, not source-maintained documentation.