Open-Source Wikis

/

GitLab

/

Background

/

Migration context

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/compat shim.
  • 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 WorkItem type and widget mutations.
  • Old API: REST Issue, GraphQL Issue still 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.

See Issues and work items.

Cells

Multi-cell sharding is partially in tree. The Cell and Organization models exist; routing helpers exist; data isolation gem exists. The forward path:

  1. Make every controller organization-aware.
  2. Migrate global tables to organization-scoped tables.
  3. Stand up an external Topology Service.
  4. 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 jh database 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.yml lists 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.
  • Gemfile pins 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.

Built by Factory AutoWiki from public repository content. It is a generated preview for codebase exploration, not source-maintained documentation.

Migration context – GitLab wiki | Factory