This epic is created to track the current state of migrating the codebase from Vue 2 to Vue 3. We aim to outline here the list of potential blockers and track the ongoing efforts. Please keep in mind this epic is planned to be very general/shallow as we plan to be more detailed in the sub-epics / linked issues
We are proceeding with migrations in each of our entrypoints at https://docs.gitlab.com/development/fe_guide/vue3_migration/#migrate-to-vue-3
---
Hello! :wave:
### If you're just landing here and you're the DRI for a Vue 3 migration on your team. Welcome!
This is what we need from you:
1. Find the entrypoint(s) you and your team maintain. Most entrypoints are defined in `~/pages/**/index.js` and `ee/pages/**/index.js`.
2. List the entrypoints you're going to migrate in an issue. You can use https://gitlab.com/groups/gitlab-org/-/work_items/23084 as a reference.
* Label your issue with ~"vue3-migration"
3. Get familiar with https://docs.gitlab.com/development/fe_guide/vue3_migration/#migrate-to-vue-3
4. Decide which `vue3_migrate_*` feature flags you need. Consider:
* In general, one flag should cover entrypoints that import related Vue code.
* We strongly suggest user-actor feature flags.
* Think about how rolling out many flags will impact your workflow (fewer feature flags might be best).
5. Migrate your first feature flag and test your entrypoints.
* Feature specs already run with the feature flag enabled, so they're part of your safety net.
* Some team members are proposing automation steps using agents for fuzzy testing in the browser. Feel free to use those tools.
* If you hit a problem that could impact other teams, raise it in this channel and your MR.
* Label your MR with ~"vue3-migration"
* Assign the MR to @ntepluhina, @xanf, or @mrincon
* Ultimately, you need to ensure your apps work. :)
6. Roll out your feature flag to gitlab.com, enabled for all users (100% or simply `true`) AND `default_enabled: false`
* WHY? We want to wait until all our applications are migrated before we remove the feature flags to ensure full compatibility.
**Note:** We are still working a good migration experience, let me know if there is anything we can improve and/or document :thumbsup:
### Which entrypoints?
Finding your entrypoints can be difficult, below we have compiled a list of entrypoints by team, the list is being refined as some data is still missing.
**Note :** :exclamation: Don't update this list yourself, it is automatically generated based on a script at (https://gitlab.com/gitlab-org/gitlab/-/merge_requests/247873)
---
Vue 3 page entrypoint migration — EE build
Latest commit: 2026-08-14T07:58:39+02:00
Ownership — inferred from the controller's feature_category
### AI Engineering: agent_foundations
3 entrypoints
| group | fileName | size (components) | status | featureFlag |
|-------|--------------------------------------------------|-------------------|------------|------------------------------------|
| — | `ee/pages/groups/duo_agents_platform/index.js` | L (127) | 🟢 rollout | `vue3_migrate_duo_agents_platform` |
| — | `ee/pages/projects/duo_agents_platform/index.js` | L (127) | 🟢 rollout | `vue3_migrate_duo_agents_platform` |
| — | `ee/pages/explore/ai_catalog/index.js` | L (88) | 🟢 rollout | `vue3_migrate_ai_catalog` |
### AI Engineering: ai_coding
17 entrypoints
| group | fileName | size (components) | status | featureFlag |
|-------------|-----------------------------------------------------------------------------------------------------------------------|-------------------|---------|-------------|
| code_review | `~/pages/projects/merge_requests/show/index.js`<br>`ee/pages/projects/merge_requests/show/index.js` | XL (784) | ⚪ vue2 | |
| code_review | `~/pages/projects/merge_requests/diffs/index.js` | XL (783) | ⚪ vue2 | |
| code_review | `~/pages/projects/merge_requests/reports/index.js` | XL (783) | ⚪ vue2 | |
| code_review | `~/pages/projects/merge_requests/creations/new/index.js`<br>`ee/pages/projects/merge_requests/creations/new/index.js` | XL (530) | ⚪ vue2 | |
| code_review | `~/pages/groups/merge_requests/index.js` | XL (438) | ⚪ vue2 | |
| code_review | `~/pages/projects/merge_requests/index/index.js` | XL (438) | ⚪ vue2 | |
| code_review | `~/pages/projects/merge_requests/edit/index.js`<br>`ee/pages/projects/merge_requests/edit/index.js` | XL (429) | ⚪ vue2 | |
| code_review | `~/pages/projects/merge_requests/conflicts/index.js`<br>`ee/pages/projects/merge_requests/conflicts/index.js` | XL (409) | ⚪ vue2 | |
| code_review | `~/pages/projects/merge_requests/creations/index.js` | XL (405) | ⚪ vue2 | |
| code_review | `ee/pages/groups/comment_templates/index.js` | L (139) | ⚪ vue2 | |
| code_review | `ee/pages/projects/comment_templates/index.js` | L (139) | ⚪ vue2 | |
| code_review | `~/pages/projects/settings/merge_requests/index.js`<br>`ee/pages/projects/settings/merge_requests/index.js` | L (50) | ⚪ vue2 | |
| code_review | `ee/pages/projects/merge_requests/creations/diffs/index.js` | M (29) | ⚪ vue2 | |
| code_review | `~/pages/dashboard/merge_requests/index.js` | M (24) | ⚪ vue2 | |
| code_review | `~/pages/groups/custom_emoji/index.js` | S (7) | ⚪ vue2 | |
| code_review | `~/pages/dashboard/search_merge_requests/index.js` | S (2) | ⚪ vue2 | |
| — | `~/pages/projects/commit/rapid_diffs/index.js` | XL (222) | ⚪ vue2 | |
### AI Engineering: ai_platform
5 entrypoints
| group | fileName | size (components) | status | featureFlag |
|-------|----------------------------------------------------------------|-------------------|------------|-----------------------------------------|
| — | `ee/pages/admin/gitlab_duo/configuration/index.js` | M (45) | ⚪ vue2 | |
| — | `ee/pages/admin/gitlab_duo/show/index.js` | M (39) | ⚪ vue2 | |
| — | `ee/pages/admin/gitlab_duo/model_selection/index.js` | M (29) | 🟢 rollout | `vue3_migrate_instance_model_selection` |
| — | `ee/pages/groups/settings/gitlab_duo/model_selection/index.js` | M (16) | ⚪ vue2 | |
| — | `ee/pages/admin/ai/amazon_q_settings/index.js` | S (7) | ⚪ vue2 | |
### Core DevOps: create
75 entrypoints
| group | fileName | size (components) | status | featureFlag |
|--------------------|---------------------------------------------------------------------------------------------------------------|-------------------|------------|--------------------------------------|
| import | `~/pages/admin/integrations/edit/index.js` | L (54) | ⚪ vue2 | |
| import | `~/pages/groups/settings/integrations/edit/index.js` | L (54) | ⚪ vue2 | |
| import | `~/pages/projects/settings/integrations/edit/index.js` | L (54) | ⚪ vue2 | |
| import | `~/pages/projects/hooks/index.js` | M (20) | ⚪ vue2 | |
| import | `ee/pages/groups/hooks/index.js` | M (20) | ⚪ vue2 | |
| import | `~/pages/admin/integrations/overrides/index.js` | M (18) | ⚪ vue2 | |
| import | `~/pages/import/manifest/new/index.js` | M (18) | ⚪ vue2 | |
| import | `~/pages/admin/hooks/index.js` | M (17) | ⚪ vue2 | |
| import | `~/pages/import/gitlab_projects/new/index.js` | M (16) | ⚪ vue2 | |
| import | `~/pages/import/bulk_imports/status/index.js` | M (14) | ⚪ vue2 | |
| import | `~/pages/import/bitbucket_server/status/index.js` | M (10) | ⚪ vue2 | |
| import | `~/pages/import/github/status/index.js` | M (10) | ⚪ vue2 | |
| import | `~/pages/import/bitbucket/status/index.js` | S (9) | ⚪ vue2 | |
| import | `~/pages/import/bulk_imports/history/index.js` | S (9) | ⚪ vue2 | |
| import | `~/pages/import/fogbugz/status/index.js` | S (8) | ⚪ vue2 | |
| import | `~/pages/import/gitea/status/index.js` | S (8) | ⚪ vue2 | |
| import | `~/pages/import/history/index.js` | S (8) | ⚪ vue2 | |
| import | `~/pages/import/manifest/status/index.js` | S (8) | ⚪ vue2 | |
| import | `~/pages/import/offline/export/index.js` | S (8) | ⚪ vue2 | |
| import | `~/pages/import/bulk_imports/failures/index.js` | S (7) | ⚪ vue2 | |
| import | `~/pages/import/github/details/index.js` | S (7) | ⚪ vue2 | |
| import | `~/pages/import/url/new/index.js` | S (7) | ⚪ vue2 | |
| import | `~/pages/admin/application_settings/integrations/index.js` | S (4) | ⚪ vue2 | |
| import | `~/pages/groups/settings/integrations/index.js` | S (4) | ⚪ vue2 | |
| import | `~/pages/projects/settings/integrations/index/index.js` | S (4) | ⚪ vue2 | |
| import | `~/pages/profiles/slacks/index.js` | S (3) | ⚪ vue2 | |
| import | `~/pages/projects/imports/new/index.js` | S (3) | ⚪ vue2 | |
| import | `~/pages/groups/import_histories/show/index.js` | S (2) | ⚪ vue2 | |
| import | `~/pages/import/fogbugz/new_user_map/index.js` | S (2) | ⚪ vue2 | |
| import | `~/pages/import/bitbucket_server/new/index.js` | S (1) | ⚪ vue2 | |
| import | `~/pages/import/fogbugz/new/index.js` | S (1) | ⚪ vue2 | |
| import | `~/pages/import/gitea/new/index.js` | S (1) | ⚪ vue2 | |
| import | `~/pages/import/github/new/index.js` | S (1) | ⚪ vue2 | |
| import | `~/pages/import/offline/export/history/index.js` | S (1) | ⚪ vue2 | |
| import | `~/pages/import/offline/import/index.js` | S (1) | ⚪ vue2 | |
| import | `~/pages/import/offline/index.js` | S (1) | ⚪ vue2 | |
| import | `~/pages/projects/imports/show/index.js` | S (0) | ⚪ vue2 | |
| remote_development | `ee/pages/remote_development/index.js` | M (32) | ⚪ vue2 | |
| remote_development | `ee/pages/groups/settings/remote_development/workspaces/show/index.js` | M (11) | ⚪ vue2 | |
| source_code | `~/pages/projects/blob/show/index.js`<br>`ee/pages/projects/blob/show/index.js` | XL (240) | 🟢 rollout | `vue3_migrate_repository` |
| source_code | `~/pages/projects/tree/show/index.js` | XL (239) | 🟢 rollout | `vue3_migrate_repository` |
| source_code | `~/pages/projects/snippets/show/index.js` | L (159) | ⚪ vue2 | |
| source_code | `~/pages/snippets/show/index.js` | L (153) | ⚪ vue2 | |
| source_code | `~/pages/projects/snippets/edit/index.js` | L (141) | ⚪ vue2 | |
| source_code | `~/pages/projects/snippets/new/index.js` | L (141) | ⚪ vue2 | |
| source_code | `~/pages/snippets/edit/index.js` | L (141) | ⚪ vue2 | |
| source_code | `~/pages/snippets/new/index.js` | L (141) | ⚪ vue2 | |
| source_code | `~/pages/projects/commits/show/index.js` | L (129) | ⚪ vue2 | |
| source_code | `~/pages/projects/commit/show/index.js` | L (122) | ⚪ vue2 | |
| source_code | `~/pages/projects/blob/edit/index.js` | L (105) | ⚪ vue2 | |
| source_code | `~/pages/projects/blob/new/index.js` | L (105) | ⚪ vue2 | |
| source_code | `~/pages/projects/index.js`<br>`ee/pages/projects/index.js` | L (103) | ⚪ vue2 | |
| source_code | `~/pages/projects/network/show/index.js` | L (101) | ⚪ vue2 | |
| source_code | `~/pages/projects/find_file/show/index.js` | L (100) | ⚪ vue2 | |
| source_code | `~/pages/projects/tags/new/index.js` | L (100) | ⚪ vue2 | |
| source_code | `~/pages/projects/blame/show/index.js`<br>`ee/pages/projects/blame/show/index.js` | L (99) | ⚪ vue2 | |
| source_code | `~/pages/projects/blame/streaming/index.js` | L (98) | ⚪ vue2 | |
| source_code | `~/pages/projects/commit/pipelines/index.js` | M (47) | ⚪ vue2 | |
| source_code | `~/pages/projects/settings/branch_rules/index.js` | M (47) | ⚪ vue2 | |
| source_code | `~/pages/projects/settings/repository/show/index.js`<br>`ee/pages/projects/settings/repository/show/index.js` | M (46) | ⚪ vue2 | |
| source_code | `~/pages/projects/compare/show/index.js` | M (37) | ⚪ vue2 | |
| source_code | `~/pages/projects/branches/index/index.js` | M (24) | ⚪ vue2 | |
| source_code | `~/pages/projects/tags/index/index.js` | M (20) | ⚪ vue2 | |
| source_code | `~/pages/projects/tags/show/index.js` | M (18) | ⚪ vue2 | |
| source_code | `~/pages/projects/compare/index/index.js` | S (8) | ⚪ vue2 | |
| source_code | `~/pages/projects/graphs/show/index.js` | S (6) | 🟢 rollout | `vue3_migrate_contributor_analytics` |
| source_code | `~/pages/projects/forks/new/index.js` | S (5) | ⚪ vue2 | |
| source_code | `~/pages/projects/graphs/charts/index.js` | S (5) | 🟢 rollout | `vue3_migrate_repository_analytics` |
| source_code | `ee/pages/admin/application_settings/templates/index.js` | S (4) | ⚪ vue2 | |
| source_code | `~/pages/projects/branches/new/index.js` | S (3) | ⚪ vue2 | |
| source_code | `~/pages/admin/application_settings/repository/index.js` | S (1) | ⚪ vue2 | |
| source_code | `ee/pages/admin/push_rules/index.js` | S (1) | ⚪ vue2 | |
| source_code | `ee/pages/projects/path_locks/index.js` | S (0) | ⚪ vue2 | |
| — | `~/pages/ide/index/index.js` | S (3) | ⚪ vue2 | |
| — | `~/pages/ide/oauth_redirect/index.js` | S (1) | ⚪ vue2 | |
### Core DevOps: deploy
31 entrypoints
| group | fileName | size (components) | status | featureFlag |
|--------------|---------------------------------------------------------------------------------------------------------------------------------------------|-------------------|---------|-------------|
| environments | `~/pages/projects/environments/k8s/index.js` | L (149) | ⚪ vue2 | |
| environments | `~/pages/projects/environments/show/index.js`<br>`ee/pages/projects/environments/show/index.js` | L (149) | ⚪ vue2 | |
| environments | `~/pages/projects/releases/edit/index.js` | L (146) | ⚪ vue2 | |
| environments | `~/pages/projects/releases/new/index.js` | L (146) | ⚪ vue2 | |
| environments | `~/pages/projects/environments/edit/index.js` | L (137) | ⚪ vue2 | |
| environments | `~/pages/projects/environments/new/index.js` | L (137) | ⚪ vue2 | |
| environments | `~/pages/projects/releases/index/index.js` | L (120) | ⚪ vue2 | |
| environments | `~/pages/projects/releases/show/index.js` | L (117) | ⚪ vue2 | |
| environments | `~/pages/projects/deployments/show/index.js` | L (113) | ⚪ vue2 | |
| environments | `~/pages/projects/settings/repository/create_deploy_token/index.js`<br>`ee/pages/projects/settings/repository/create_deploy_token/index.js` | M (46) | ⚪ vue2 | |
| environments | `ee/pages/organizations/continuous_deployment/show/index.js` | M (39) | ⚪ vue2 | |
| environments | `~/pages/projects/environments/index/index.js` | M (38) | ⚪ vue2 | |
| environments | `~/pages/projects/feature_flags/edit/index.js` | M (33) | ⚪ vue2 | |
| environments | `~/pages/projects/feature_flags/new/index.js` | M (32) | ⚪ vue2 | |
| environments | `~/pages/projects/environments/folder/index.js` | M (31) | ⚪ vue2 | |
| environments | `ee/pages/operations/environments/index.js` | M (21) | ⚪ vue2 | |
| environments | `ee/pages/operations/index/index.js` | M (20) | ⚪ vue2 | |
| environments | `~/pages/projects/feature_flags/index/index.js` | M (12) | ⚪ vue2 | |
| environments | `~/pages/groups/settings/repository/show/index.js`<br>`ee/pages/groups/settings/repository/show/index.js` | S (5) | ⚪ vue2 | |
| environments | `~/pages/projects/feature_flags_user_lists/index/index.js` | S (5) | ⚪ vue2 | |
| environments | `~/pages/admin/deploy_keys/index/index.js` | S (4) | ⚪ vue2 | |
| environments | `~/pages/projects/feature_flags_user_lists/edit/index.js` | S (3) | ⚪ vue2 | |
| environments | `~/pages/projects/feature_flags_user_lists/new/index.js` | S (3) | ⚪ vue2 | |
| environments | `~/pages/projects/feature_flags_user_lists/show/index.js` | S (3) | ⚪ vue2 | |
| environments | `~/pages/groups/settings/repository/create_deploy_token/index.js` | S (1) | ⚪ vue2 | |
| environments | `~/pages/admin/deploy_keys/new/index.js` | S (0) | ⚪ vue2 | |
| environments | `~/pages/projects/environments/terminal/index.js` | S (0) | ⚪ vue2 | |
| — | `~/pages/projects/google_cloud/configuration/index.js` | S (5) | ⚪ vue2 | |
| — | `~/pages/projects/google_cloud/deployments/index.js` | S (3) | ⚪ vue2 | |
| — | `~/pages/projects/google_cloud/gcp_regions/index.js` | S (1) | ⚪ vue2 | |
| — | `~/pages/projects/google_cloud/service_accounts/index.js` | S (1) | ⚪ vue2 | |
### Core DevOps: package
25 entrypoints
| group | fileName | size (components) | status | featureFlag |
|--------------------|---------------------------------------------------------------------------------------------------|-------------------|---------|-------------|
| container_registry | `~/pages/groups/registry/repositories/index.js` | M (48) | ⚪ vue2 | |
| container_registry | `~/pages/projects/registry/repositories/index.js` | M (48) | ⚪ vue2 | |
| container_registry | `ee/pages/groups/virtual_registries/container/index.js` | M (38) | ⚪ vue2 | |
| container_registry | `ee/pages/organizations/artifact_registry_repositories/index/index.js` | M (37) | ⚪ vue2 | |
| container_registry | `~/pages/groups/harbor/repositories/index.js` | M (32) | ⚪ vue2 | |
| container_registry | `~/pages/projects/harbor/repositories/index.js` | M (32) | ⚪ vue2 | |
| container_registry | `ee/pages/groups/virtual_registries/maven/registries/show/index.js` | M (16) | ⚪ vue2 | |
| container_registry | `ee/pages/projects/google_cloud/artifact_registry/index.js` | M (16) | ⚪ vue2 | |
| container_registry | `ee/pages/groups/virtual_registries/maven/registries_and_upstreams/index.js` | M (12) | ⚪ vue2 | |
| container_registry | `~/pages/groups/dependency_proxies/index.js` | M (11) | ⚪ vue2 | |
| container_registry | `ee/pages/groups/virtual_registries/maven/upstreams/show/index.js` | S (9) | ⚪ vue2 | |
| container_registry | `ee/pages/groups/virtual_registries/maven/upstreams/edit/index.js` | S (7) | ⚪ vue2 | |
| container_registry | `ee/pages/organizations/artifact_registry/index/index.js` | S (6) | ⚪ vue2 | |
| container_registry | `ee/pages/organizations/settings/artifact_registry/show/index.js` | S (6) | ⚪ vue2 | |
| container_registry | `ee/pages/groups/virtual_registries/index.js` | S (4) | ⚪ vue2 | |
| container_registry | `ee/pages/groups/settings/packages_and_registries/virtual_registry_cleanup_policy/index/index.js` | S (3) | ⚪ vue2 | |
| container_registry | `ee/pages/groups/virtual_registries/maven/registries/edit/index.js` | S (2) | ⚪ vue2 | |
| package_registry | `~/pages/groups/packages/index.js` | L (64) | ⚪ vue2 | |
| package_registry | `~/pages/projects/packages/packages/index.js` | L (64) | ⚪ vue2 | |
| package_registry | `~/pages/projects/packages/infrastructure_registry/show/index.js` | M (28) | ⚪ vue2 | |
| package_registry | `~/pages/projects/settings/packages_and_registries/show/index.js` | M (24) | ⚪ vue2 | |
| package_registry | `~/pages/groups/infrastructure_registry/index/index.js` | M (21) | ⚪ vue2 | |
| package_registry | `~/pages/projects/packages/infrastructure_registry/index/index.js` | M (21) | ⚪ vue2 | |
| package_registry | `~/pages/groups/settings/packages_and_registries/show/index.js` | M (13) | ⚪ vue2 | |
| package_registry | `~/pages/projects/settings/packages_and_registries/cleanup_tags/index.js` | S (9) | ⚪ vue2 | |
### Core DevOps: plan
72 entrypoints
| group | fileName | size (components) | status | featureFlag |
|--------------------|---------------------------------------------------------------------------------------------|-------------------|------------|-----------------------------------|
| knowledge | `~/pages/projects/wikis/index.js` | L (187) | ⚪ vue2 | |
| knowledge | `~/pages/projects/wikis/show/index.js` | L (187) | ⚪ vue2 | |
| knowledge | `ee/pages/groups/wikis/index.js` | L (187) | ⚪ vue2 | |
| knowledge | `ee/pages/groups/wikis/show/index.js` | L (187) | ⚪ vue2 | |
| knowledge | `~/pages/projects/pages/new/index.js` | M (14) | ⚪ vue2 | |
| knowledge | `~/pages/projects/pages/show/index.js` | M (10) | ⚪ vue2 | |
| knowledge | `~/pages/projects/wikis/pages/index.js` | S (7) | ⚪ vue2 | |
| knowledge | `~/pages/projects/pages/index.js` | S (3) | ⚪ vue2 | |
| knowledge | `~/pages/projects/wikis/diff/index.js` | S (2) | ⚪ vue2 | |
| knowledge | `ee/pages/groups/wikis/diff/index.js` | S (2) | ⚪ vue2 | |
| knowledge | `~/pages/projects/pages_domains/new/index.js` | S (0) | ⚪ vue2 | |
| knowledge | `~/pages/projects/pages_domains/show/index.js` | S (0) | ⚪ vue2 | |
| knowledge | `~/pages/projects/wikis/git_access/index.js` | S (0) | ⚪ vue2 | |
| knowledge | `~/pages/projects/wikis/history/index.js` | S (0) | ⚪ vue2 | |
| knowledge | `ee/pages/groups/wikis/git_access/index.js` | S (0) | ⚪ vue2 | |
| knowledge | `ee/pages/groups/wikis/history/index.js` | S (0) | ⚪ vue2 | |
| planning_views | `~/pages/groups/saved_views/show/index.js` | XL (439) | 🟢 rollout | `vue3_migrate_work_items` |
| planning_views | `~/pages/groups/work_items/index.js` | XL (439) | 🟢 rollout | `vue3_migrate_work_items` |
| planning_views | `~/pages/projects/saved_views/show/index.js` | XL (439) | 🟢 rollout | `vue3_migrate_work_items` |
| planning_views | `~/pages/groups/boards/index.js` | XL (417) | ⚪ vue2 | |
| planning_views | `~/pages/projects/boards/index.js` | XL (417) | ⚪ vue2 | |
| planning_views | `ee/pages/groups/epic_boards/index.js` | XL (417) | ⚪ vue2 | |
| planning_views | `~/pages/dashboard/issues/index.js` | L (51) | ⚪ vue2 | |
| planning_views | `~/pages/dashboard/work_items/index.js` | L (51) | ⚪ vue2 | |
| product_planning | `ee/pages/projects/quality/test_cases/show/index.js` | L (164) | ⚪ vue2 | |
| product_planning | `ee/pages/projects/requirements_management/requirements/index.js` | L (152) | ⚪ vue2 | |
| product_planning | `ee/pages/projects/quality/test_cases/new/index.js` | L (145) | ⚪ vue2 | |
| product_planning | `ee/pages/groups/roadmap/show/index.js` | M (44) | 🟢 rollout | `vue3_migrate_roadmap` |
| product_planning | `ee/pages/projects/quality/test_cases/index.js` | M (29) | ⚪ vue2 | |
| product_planning | `ee/pages/groups/index.js` | M (12) | ⚪ vue2 | |
| project_management | `~/pages/projects/issues/show/index.js`<br>`ee/pages/projects/issues/show/index.js` | XL (616) | 🟢 rollout | `vue3_migrate_work_items` |
| project_management | `~/pages/projects/work_items/index.js` | XL (440) | 🟢 rollout | `vue3_migrate_work_items` |
| project_management | `~/pages/groups/work_items/show/index.js` | XL (439) | 🟢 rollout | `vue3_migrate_work_items` |
| project_management | `~/pages/projects/issues/service_desk/index.js` | XL (439) | 🟢 rollout | `vue3_migrate_work_items` |
| project_management | `ee/pages/projects/integrations/jira/issues/show/index.js` | L (166) | ⚪ vue2 | |
| project_management | `ee/pages/projects/integrations/zentao/issues/show/index.js` | L (165) | ⚪ vue2 | |
| project_management | `ee/pages/groups/iteration_cadences/index.js` | L (157) | ⚪ vue2 | |
| project_management | `ee/pages/projects/iteration_cadences/index.js` | L (157) | ⚪ vue2 | |
| project_management | `~/pages/groups/milestones/show/index.js`<br>`ee/pages/groups/milestones/show/index.js` | L (148) | ⚪ vue2 | |
| project_management | `~/pages/projects/milestones/show/index.js`<br>`ee/pages/projects/milestones/show/index.js` | L (148) | ⚪ vue2 | |
| project_management | `~/pages/groups/milestones/edit/index.js` | L (140) | ⚪ vue2 | |
| project_management | `~/pages/groups/milestones/new/index.js` | L (140) | ⚪ vue2 | |
| project_management | `~/pages/projects/milestones/edit/index.js` | L (140) | ⚪ vue2 | |
| project_management | `~/pages/projects/milestones/new/index.js` | L (140) | ⚪ vue2 | |
| project_management | `~/pages/dashboard/home/index.js` | M (37) | ⚪ vue2 | |
| project_management | `ee/pages/admin/application_settings/work_item/index.js` | M (36) | 🟢 rollout | `vue3_migrate_work_item_settings` |
| project_management | `ee/pages/groups/settings/work_items/show/index.js` | M (36) | 🟢 rollout | `vue3_migrate_work_item_settings` |
| project_management | `ee/pages/projects/settings/work_items/index.js` | M (36) | 🟢 rollout | `vue3_migrate_work_item_settings` |
| project_management | `~/pages/dashboard/todos/index/index.js` | M (28) | ⚪ vue2 | |
| project_management | `ee/pages/projects/integrations/jira/issues/index/index.js` | M (28) | ⚪ vue2 | |
| project_management | `ee/pages/projects/integrations/zentao/issues/index/index.js` | M (28) | ⚪ vue2 | |
| project_management | `~/pages/groups/crm/contacts/index.js` | S (9) | ⚪ vue2 | |
| project_management | `~/pages/groups/crm/organizations/index.js` | S (9) | ⚪ vue2 | |
| project_management | `~/pages/time_tracking/timelogs/index.js` | S (8) | ⚪ vue2 | |
| project_management | `~/pages/admin/broadcast_messages/index/index.js` | S (6) | ⚪ vue2 | |
| project_management | `~/pages/dashboard/milestones/index/index.js` | S (6) | ⚪ vue2 | |
| project_management | `~/pages/admin/labels/edit/index.js` | S (5) | ⚪ vue2 | |
| project_management | `~/pages/admin/labels/index/index.js` | S (5) | ⚪ vue2 | |
| project_management | `~/pages/groups/labels/edit/index.js` | S (5) | ⚪ vue2 | |
| project_management | `~/pages/groups/labels/index/index.js` | S (5) | ⚪ vue2 | |
| project_management | `~/pages/jira_connect/branches/new/index.js` | S (5) | ⚪ vue2 | |
| project_management | `~/pages/profiles/notifications/show/index.js` | S (5) | ⚪ vue2 | |
| project_management | `~/pages/projects/import/jira/index.js` | S (5) | ⚪ vue2 | |
| project_management | `~/pages/projects/labels/edit/index.js` | S (5) | ⚪ vue2 | |
| project_management | `~/pages/projects/labels/index/index.js` | S (5) | ⚪ vue2 | |
| project_management | `~/pages/groups/milestones/index/index.js` | S (4) | ⚪ vue2 | |
| project_management | `~/pages/projects/milestones/index/index.js` | S (4) | ⚪ vue2 | |
| project_management | `~/pages/admin/broadcast_messages/edit/index.js` | S (3) | ⚪ vue2 | |
| project_management | `~/pages/admin/labels/new/index.js` | S (0) | ⚪ vue2 | |
| project_management | `~/pages/groups/labels/new/index.js` | S (0) | ⚪ vue2 | |
| project_management | `~/pages/jira_connect/oauth_callbacks/index.js` | S (0) | ⚪ vue2 | |
| project_management | `~/pages/projects/labels/new/index.js` | S (0) | ⚪ vue2 | |
### Core DevOps: verify
64 entrypoints
| group | fileName | size (components) | status | featureFlag |
|--------------------|-------------------------------------------------------------------------------------------------------------|-------------------|------------|----------------------------------|
| pipeline_authoring | `~/pages/explore/catalog/index.js` | L (135) | ⚪ vue2 | |
| pipeline_authoring | `~/pages/projects/ci/pipeline_editor/show/index.js` | L (65) | ⚪ vue2 | |
| pipeline_authoring | `~/pages/projects/ci/lints/show/index.js` | S (8) | ⚪ vue2 | |
| pipeline_execution | `~/pages/projects/pipelines/builds/index.js`<br>`ee/pages/projects/pipelines/builds/index.js` | XL (298) | ⚪ vue2 | |
| pipeline_execution | `~/pages/projects/pipelines/failures/index.js`<br>`ee/pages/projects/pipelines/failures/index.js` | XL (298) | ⚪ vue2 | |
| pipeline_execution | `~/pages/projects/pipelines/manual_variables/index.js` | XL (298) | ⚪ vue2 | |
| pipeline_execution | `~/pages/projects/pipelines/show/index.js` | XL (298) | 🟢 rollout | `vue3_migrate_pipelines` |
| pipeline_execution | `~/pages/projects/pipelines/test_report/index.js` | XL (298) | ⚪ vue2 | |
| pipeline_execution | `~/pages/projects/settings/ci_cd/show/index.js`<br>`ee/pages/projects/settings/ci_cd/show/index.js` | L (121) | 🟠 manual | `vue3_migrate_admin_runners` |
| pipeline_execution | `~/pages/projects/artifacts/file/index.js` | L (118) | ⚪ vue2 | |
| pipeline_execution | `~/pages/projects/artifacts/browse/index.js` | L (98) | ⚪ vue2 | |
| pipeline_execution | `~/pages/projects/pipelines/index/index.js`<br>`ee/pages/projects/pipelines/index/index.js` | L (62) | 🟢 rollout | `vue3_migrate_pipelines` |
| pipeline_execution | `~/pages/projects/jobs/show/index.js`<br>`ee/pages/projects/jobs/show/index.js` | L (51) | 🟢 rollout | `vue3_migrate_jobs` |
| pipeline_execution | `~/pages/groups/settings/ci_cd/show/index.js`<br>`ee/pages/groups/settings/ci_cd/show/index.js` | M (32) | ⚪ vue2 | |
| pipeline_execution | `~/pages/admin/jobs/index/index.js` | M (27) | 🟢 rollout | `vue3_migrate_jobs` |
| pipeline_execution | `~/pages/projects/jobs/index/index.js` | M (27) | 🟢 rollout | `vue3_migrate_jobs` |
| pipeline_execution | `~/pages/projects/pipelines/new/index.js` | M (22) | ⚪ vue2 | |
| pipeline_execution | `~/pages/projects/pipeline_schedules/edit/index.js` | M (21) | ⚪ vue2 | |
| pipeline_execution | `~/pages/projects/pipeline_schedules/new/index.js` | M (21) | ⚪ vue2 | |
| pipeline_execution | `~/pages/projects/pipelines/charts/index.js` | M (21) | ⚪ vue2 | |
| pipeline_execution | `~/pages/projects/artifacts/index.js` | M (15) | ⚪ vue2 | |
| pipeline_execution | `~/pages/projects/pipeline_schedules/index/index.js` | M (14) | ⚪ vue2 | |
| pipeline_execution | `ee/pages/projects/merge_trains/index.js` | M (12) | ⚪ vue2 | |
| pipeline_execution | `~/pages/projects/settings/index.js` | S (8) | ⚪ vue2 | |
| pipeline_execution | `~/pages/admin/application_settings/ci_cd/index.js`<br>`ee/pages/admin/application_settings/ci_cd/index.js` | S (4) | ⚪ vue2 | |
| pipeline_execution | `~/pages/projects/jobs/viewer/index.js` | S (3) | ⚪ vue2 | |
| pipeline_execution | `~/pages/projects/jobs/terminal/index.js` | S (0) | ⚪ vue2 | |
| runner_core | `~/pages/projects/cluster_agents/show/index.js` | L (88) | ⚪ vue2 | |
| runner_core | `~/pages/admin/runners/index/index.js` | L (61) | 🟢 rollout | `vue3_migrate_admin_runners` |
| runner_core | `~/pages/groups/runners/index/index.js` | L (59) | 🟢 rollout | `vue3_migrate_admin_runners` |
| runner_core | `~/pages/admin/runners/show/index.js` | M (39) | 🟢 rollout | `vue3_migrate_admin_runners` |
| runner_core | `~/pages/groups/runners/show/index.js` | M (39) | 🟢 rollout | `vue3_migrate_admin_runners` |
| runner_core | `~/pages/projects/runners/show/index.js` | M (39) | 🟢 rollout | `vue3_migrate_admin_runners` |
| runner_core | `~/pages/admin/runners/new/index.js` | M (29) | 🟢 rollout | `vue3_migrate_admin_runners` |
| runner_core | `~/pages/admin/clusters/index/index.js` | M (23) | ⚪ vue2 | |
| runner_core | `~/pages/groups/clusters/index/index.js` | M (23) | ⚪ vue2 | |
| runner_core | `~/pages/projects/clusters/index/index.js` | M (23) | ⚪ vue2 | |
| runner_core | `~/pages/admin/runners/register/index.js` | M (20) | 🟢 rollout | `vue3_migrate_admin_runners` |
| runner_core | `~/pages/groups/runners/register/index.js` | M (20) | 🟢 rollout | `vue3_migrate_admin_runners` |
| runner_core | `~/pages/projects/runners/register/index.js` | M (20) | 🟢 rollout | `vue3_migrate_admin_runners` |
| runner_core | `~/pages/clusters/agents/dashboard/index.js` | M (19) | ⚪ vue2 | |
| runner_core | `ee/pages/admin/runners/dashboard/index.js` | M (19) | 🟢 rollout | `vue3_migrate_runners_dashboard` |
| runner_core | `ee/pages/groups/runners/dashboard/index.js` | M (16) | 🟢 rollout | `vue3_migrate_runners_dashboard` |
| runner_core | `~/pages/admin/runners/edit/index.js` | M (14) | 🟢 rollout | `vue3_migrate_admin_runners` |
| runner_core | `~/pages/groups/runners/edit/index.js` | M (14) | 🟢 rollout | `vue3_migrate_admin_runners` |
| runner_core | `~/pages/projects/runners/edit/index.js` | M (14) | 🟢 rollout | `vue3_migrate_admin_runners` |
| runner_core | `~/pages/projects/terraform/index/index.js` | M (10) | ⚪ vue2 | |
| runner_core | `~/pages/admin/clusters/show/index.js` | S (8) | ⚪ vue2 | |
| runner_core | `~/pages/projects/clusters/show/index.js` | S (8) | ⚪ vue2 | |
| runner_core | `ee/pages/admin/application_settings/usage_quotas/index.js` | S (8) | ⚪ vue2 | |
| runner_core | `~/pages/admin/clusters/destroy/index.js` | S (7) | ⚪ vue2 | |
| runner_core | `~/pages/admin/clusters/edit/index.js` | S (7) | ⚪ vue2 | |
| runner_core | `~/pages/groups/clusters/destroy/index.js` | S (7) | ⚪ vue2 | |
| runner_core | `~/pages/groups/clusters/edit/index.js` | S (7) | ⚪ vue2 | |
| runner_core | `~/pages/groups/clusters/show/index.js` | S (7) | ⚪ vue2 | |
| runner_core | `~/pages/groups/runners/new/index.js` | S (7) | 🟢 rollout | `vue3_migrate_admin_runners` |
| runner_core | `~/pages/projects/clusters/destroy/index.js` | S (7) | ⚪ vue2 | |
| runner_core | `~/pages/projects/clusters/edit/index.js` | S (7) | ⚪ vue2 | |
| runner_core | `~/pages/projects/runners/new/index.js` | S (7) | 🟢 rollout | `vue3_migrate_admin_runners` |
| runner_core | `~/pages/admin/index.js` | S (4) | ⚪ vue2 | |
| runner_core | `~/pages/admin/clusters/connect/index.js` | S (1) | ⚪ vue2 | |
| runner_core | `~/pages/groups/clusters/connect/index.js` | S (1) | ⚪ vue2 | |
| runner_core | `~/pages/groups/clusters/index.js` | S (1) | ⚪ vue2 | |
| runner_core | `~/pages/projects/clusters/connect/index.js` | S (1) | ⚪ vue2 | |
### Data / Analytics: analytics
47 entrypoints
| group | fileName | size (components) | status | featureFlag |
|-------------------|---------------------------------------------------------------------------------------------------------------|-------------------|------------|---------------------------------------|
| global_search | `~/pages/search/show/index.js`<br>`ee/pages/search/show/index.js` | L (147) | 🟢 rollout | `vue3_migrate_global_search` |
| global_search | `ee/pages/admin/application_settings/search/index.js` | S (4) | ⚪ vue2 | |
| global_search | `ee/pages/admin/application_settings/semantic_search_embeddings/show/index.js` | S (1) | ⚪ vue2 | |
| global_search | `ee/pages/search/admin/vector_storage/index.js` | S (0) | ⚪ vue2 | |
| optimize | `ee/pages/groups/analytics/dashboards/index.js` | L (171) | 🟢 rollout | `vue3_migrate_analytics_dashboards` |
| optimize | `~/pages/projects/cycle_analytics/show/index.js`<br>`ee/pages/projects/cycle_analytics/show/index.js` | M (37) | 🟢 rollout | `vue3_migrate_value_stream_analytics` |
| optimize | `ee/pages/groups/analytics/cycle_analytics/show/index.js` | M (36) | 🟢 rollout | `vue3_migrate_value_stream_analytics` |
| optimize | `ee/pages/admin/dev_ops_report/show/index.js` | M (16) | 🟢 rollout | `vue3_migrate_devops_adoption` |
| optimize | `ee/pages/groups/analytics/devops_adoption/index.js` | M (16) | 🟢 rollout | `vue3_migrate_devops_adoption` |
| optimize | `ee/pages/groups/analytics/productivity_analytics/index.js` | M (13) | 🟢 rollout | `vue3_migrate_productivity_analytics` |
| optimize | `ee/pages/groups/analytics/cycle_analytics/value_streams/edit/index.js` | M (11) | 🟢 rollout | `vue3_migrate_value_stream_analytics` |
| optimize | `ee/pages/groups/analytics/cycle_analytics/value_streams/new/index.js` | M (11) | 🟢 rollout | `vue3_migrate_value_stream_analytics` |
| optimize | `ee/pages/projects/analytics/cycle_analytics/value_streams/edit/index.js` | M (11) | 🟢 rollout | `vue3_migrate_value_stream_analytics` |
| optimize | `ee/pages/projects/analytics/cycle_analytics/value_streams/new/index.js` | M (11) | 🟢 rollout | `vue3_migrate_value_stream_analytics` |
| optimize | `ee/pages/groups/issues_analytics/index.js` | M (10) | 🟢 rollout | `vue3_migrate_issues_analytics` |
| optimize | `ee/pages/projects/analytics/code_reviews/index/index.js` | M (10) | ⚪ vue2 | |
| optimize | `ee/pages/projects/analytics/issues_analytics/index.js` | M (10) | 🟢 rollout | `vue3_migrate_issues_analytics` |
| optimize | `ee/pages/groups/analytics/repository_analytics/index.js` | S (9) | 🟢 rollout | `vue3_migrate_repository_analytics` |
| optimize | `ee/pages/groups/insights/index.js` | S (8) | 🟢 rollout | `vue3_migrate_insights` |
| optimize | `ee/pages/projects/insights/index.js` | S (8) | 🟢 rollout | `vue3_migrate_insights` |
| optimize | `~/pages/admin/usage_trends/index.js` | S (7) | 🟢 rollout | `vue3_migrate_usage_trends` |
| optimize | `ee/pages/groups/contribution_analytics/show/index.js` | S (7) | 🟢 rollout | `vue3_migrate_contribution_analytics` |
| optimize | `ee/pages/groups/analytics/ci_cd_analytics/index.js` | S (6) | ⚪ vue2 | |
| platform_insights | `~/pages/projects/incidents/show/index.js` | XL (518) | ⚪ vue2 | |
| platform_insights | `~/pages/explore/analytics_dashboards/index.js` | L (178) | 🟢 rollout | `vue3_migrate_analytics_dashboards` |
| platform_insights | `ee/pages/projects/analytics/dashboards/index.js` | L (171) | 🟢 rollout | `vue3_migrate_analytics_dashboards` |
| platform_insights | `ee/pages/projects/logs/index/index.js` | M (34) | ⚪ vue2 | |
| platform_insights | `ee/pages/projects/metrics/show/index.js` | M (32) | ⚪ vue2 | |
| platform_insights | `~/pages/projects/alert_management/details/index.js` | M (26) | ⚪ vue2 | |
| platform_insights | `ee/pages/projects/tracing/show/index.js` | M (26) | ⚪ vue2 | |
| platform_insights | `ee/pages/projects/incident_management/oncall_schedules/index/index.js` | M (20) | ⚪ vue2 | |
| platform_insights | `~/pages/projects/settings/operations/show/index.js`<br>`ee/pages/projects/settings/operations/show/index.js` | M (19) | ⚪ vue2 | |
| platform_insights | `ee/pages/projects/tracing/index/index.js` | M (18) | ⚪ vue2 | |
| platform_insights | `~/pages/projects/error_tracking/details/index.js` | M (11) | ⚪ vue2 | |
| platform_insights | `~/pages/projects/incidents/index/index.js` | M (11) | ⚪ vue2 | |
| platform_insights | `~/pages/projects/alert_management/index/index.js` | M (10) | ⚪ vue2 | |
| platform_insights | `ee/pages/projects/incident_management/escalation_policies/index/index.js` | S (8) | ⚪ vue2 | |
| platform_insights | `ee/pages/projects/metrics/index/index.js` | S (8) | ⚪ vue2 | |
| platform_insights | `~/pages/projects/error_tracking/index/index.js` | S (5) | ⚪ vue2 | |
| platform_insights | `ee/pages/groups/settings/analytics/show/index.js` | S (5) | ⚪ vue2 | |
| platform_insights | `~/pages/groups/observability/index.js` | S (4) | ⚪ vue2 | |
| platform_insights | `~/pages/projects/observability/show/index.js` | S (4) | ⚪ vue2 | |
| platform_insights | `~/pages/experimental/o11y_service_settings/index.js` | S (2) | ⚪ vue2 | |
| platform_insights | `~/pages/groups/observability/setup/show/index.js` | S (2) | ⚪ vue2 | |
| platform_insights | `~/pages/groups/observability/o11y_service_settings/index.js` | S (1) | ⚪ vue2 | |
| — | `ee/pages/admin/application_settings/reporting/index.js` | S (4) | ⚪ vue2 | |
| — | `~/pages/admin/dev_ops_report/index.js` | S (2) | ⚪ vue2 | |
### Data / Analytics: modelops
11 entrypoints
| group | fileName | size (components) | status | featureFlag |
|-------|----------------------------------------------------|-------------------|---------|-------------|
| mlops | `~/pages/projects/ml/model_versions/edit/index.js` | L (176) | ⚪ vue2 | |
| mlops | `~/pages/projects/ml/model_versions/new/index.js` | L (176) | ⚪ vue2 | |
| mlops | `~/pages/projects/ml/model_versions/show/index.js` | L (176) | ⚪ vue2 | |
| mlops | `~/pages/projects/ml/models/edit/index.js` | L (176) | ⚪ vue2 | |
| mlops | `~/pages/projects/ml/models/index/index.js` | L (176) | ⚪ vue2 | |
| mlops | `~/pages/projects/ml/models/new/index.js` | L (176) | ⚪ vue2 | |
| mlops | `~/pages/projects/ml/models/show/index.js` | L (176) | ⚪ vue2 | |
| mlops | `~/pages/projects/ml/candidates/promote/index.js` | L (136) | ⚪ vue2 | |
| mlops | `~/pages/projects/ml/candidates/show/index.js` | M (14) | ⚪ vue2 | |
| mlops | `~/pages/projects/ml/experiments/show/index.js` | M (11) | ⚪ vue2 | |
| mlops | `~/pages/projects/ml/experiments/index/index.js` | S (9) | ⚪ vue2 | |
### Data / Analytics: orbit
3 entrypoints
| group | fileName | size (components) | status | featureFlag |
|-------|------------------------------------------------|-------------------|---------|-------------|
| — | `ee/pages/dashboard/orbit/show/index.js` | M (32) | ⚪ vue2 | |
| — | `ee/pages/admin/orbit/show/index.js` | S (7) | ⚪ vue2 | |
| — | `ee/pages/groups/settings/orbit/show/index.js` | S (7) | ⚪ vue2 | |
### Fulfillment: fulfillment
40 entrypoints
| group | fileName | size (components) | status | featureFlag |
|-------------------------|-----------------------------------------------------------------------------|-------------------|---------|-------------|
| provision | `ee/pages/admin/subscriptions/show/index.js` | M (22) | ⚪ vue2 | |
| seat_management | `~/pages/users/terms/index/index.js` | L (99) | ⚪ vue2 | |
| seat_management | `~/pages/admin/impersonation_tokens/index.js` | L (51) | ⚪ vue2 | |
| seat_management | `~/pages/admin/users/edit/index.js`<br>`ee/pages/admin/users/edit/index.js` | M (38) | ⚪ vue2 | |
| seat_management | `~/pages/admin/users/new/index.js` | M (36) | ⚪ vue2 | |
| seat_management | `~/pages/admin/users/index.js`<br>`ee/pages/admin/users/index.js` | M (32) | ⚪ vue2 | |
| seat_management | `ee/pages/admin/gitlab_duo/seat_utilization/index.js` | M (27) | ⚪ vue2 | |
| seat_management | `ee/pages/admin/application_settings/roles_and_permissions/index.js` | M (25) | ⚪ vue2 | |
| seat_management | `ee/pages/groups/settings/roles_and_permissions/index.js` | M (25) | ⚪ vue2 | |
| seat_management | `~/pages/admin/application_settings/service_accounts/index.js` | M (21) | ⚪ vue2 | |
| seat_management | `~/pages/groups/settings/service_accounts/index/index.js` | M (21) | ⚪ vue2 | |
| seat_management | `~/pages/projects/settings/service_accounts/index/index.js` | M (21) | ⚪ vue2 | |
| seat_management | `ee/pages/admin/application_settings/roles_and_permissions/edit/index.js` | M (14) | ⚪ vue2 | |
| seat_management | `ee/pages/groups/settings/roles_and_permissions/edit/index.js` | M (14) | ⚪ vue2 | |
| seat_management | `ee/pages/admin/application_settings/roles_and_permissions/new/index.js` | S (9) | ⚪ vue2 | |
| seat_management | `ee/pages/groups/settings/roles_and_permissions/new/index.js` | S (9) | ⚪ vue2 | |
| seat_management | `ee/pages/admin/application_settings/roles_and_permissions/show/index.js` | S (8) | ⚪ vue2 | |
| seat_management | `ee/pages/groups/settings/roles_and_permissions/show/index.js` | S (8) | ⚪ vue2 | |
| seat_management | `ee/pages/admin/role_promotion_requests/index.js` | S (5) | ⚪ vue2 | |
| seat_management | `~/pages/admin/credentials/index.js` | S (4) | ⚪ vue2 | |
| seat_management | `~/pages/groups/security/credentials/index.js` | S (4) | ⚪ vue2 | |
| seat_management | `ee/pages/groups/ldap_group_links/index.js` | S (4) | ⚪ vue2 | |
| seat_management | `~/pages/admin/keys/index.js` | S (2) | ⚪ vue2 | |
| seat_management | `ee/pages/groups/saml_group_links/index.js` | S (2) | ⚪ vue2 | |
| seat_management | `ee/pages/groups/usage_quotas/pending_members/index.js` | S (2) | ⚪ vue2 | |
| subscription_management | `ee/pages/groups/billings/index.js` | M (14) | ⚪ vue2 | |
| subscription_management | `ee/pages/profiles/billings/index.js` | M (11) | ⚪ vue2 | |
| subscription_management | `ee/pages/gitlab_subscriptions/groups/new/index.js` | S (3) | ⚪ vue2 | |
| utilization | `~/pages/groups/usage_quotas/root/index.js` | L (60) | ⚪ vue2 | |
| utilization | `~/pages/profiles/usage_quotas/index.js` | M (45) | ⚪ vue2 | |
| utilization | `~/pages/projects/usage_quotas/index.js` | M (32) | ⚪ vue2 | |
| utilization | `ee/pages/admin/gitlab_credits_dashboard/index.js` | M (30) | ⚪ vue2 | |
| utilization | `ee/pages/groups/settings/gitlab_credits_dashboard/index.js` | M (30) | ⚪ vue2 | |
| utilization | `ee/pages/admin/namespace_limits/index.js` | S (7) | ⚪ vue2 | |
| utilization | `ee/pages/admin/gitlab_credits_dashboard/users/show/index.js` | S (6) | ⚪ vue2 | |
| utilization | `ee/pages/groups/settings/gitlab_credits_dashboard/users/show/index.js` | S (6) | ⚪ vue2 | |
| utilization | `ee/pages/profiles/gitlab_credits_dashboard/index.js` | S (6) | ⚪ vue2 | |
| — | `ee/pages/groups/settings/gitlab_duo/configuration/index.js` | M (40) | ⚪ vue2 | |
| — | `ee/pages/groups/settings/gitlab_duo/show/index.js` | M (39) | ⚪ vue2 | |
| — | `ee/pages/groups/settings/gitlab_duo/seat_utilization/index.js` | M (27) | ⚪ vue2 | |
### Growth: growth
23 entrypoints
| group | fileName | size (components) | status | featureFlag |
|-------------|-------------------------------------------------------------------------------------------------|-------------------|---------|-------------|
| acquisition | `ee/pages/projects/get_started/show/index.js` | M (26) | ⚪ vue2 | |
| acquisition | `ee/pages/trial_registrations/new/index.js` | M (23) | ⚪ vue2 | |
| acquisition | `ee/pages/projects/learn_gitlab/show/index.js` | M (15) | ⚪ vue2 | |
| acquisition | `ee/pages/registrations/groups/new/index.js` | S (5) | ⚪ vue2 | |
| acquisition | `ee/pages/gitlab_subscriptions/self_managed/trials/index.js` | S (3) | ⚪ vue2 | |
| acquisition | `ee/pages/gitlab_subscriptions/trials/duo_enterprise/new/index.js` | S (3) | ⚪ vue2 | |
| acquisition | `ee/pages/gitlab_subscriptions/trials/duo_pro/new/index.js` | S (3) | ⚪ vue2 | |
| acquisition | `ee/pages/gitlab_subscriptions/trials/new/index.js` | S (3) | ⚪ vue2 | |
| acquisition | `ee/pages/registrations/company/new/index.js` | S (3) | ⚪ vue2 | |
| acquisition | `ee/pages/registrations/trial_welcome/index.js` | S (3) | ⚪ vue2 | |
| acquisition | `ee/pages/registrations/welcome/index.js` | S (3) | ⚪ vue2 | |
| acquisition | `ee/pages/admin/targeted_messages/edit/index.js` | S (2) | ⚪ vue2 | |
| acquisition | `ee/pages/admin/targeted_messages/new/index.js` | S (2) | ⚪ vue2 | |
| acquisition | `ee/pages/registrations/subscription_welcome/index.js` | S (2) | ⚪ vue2 | |
| acquisition | `~/pages/admin/registrations/groups/new/index.js` | S (1) | ⚪ vue2 | |
| acquisition | `ee/pages/registrations/invite_welcome/index.js` | S (1) | ⚪ vue2 | |
| activation | `ee/pages/groups/discovers/show/index.js` | S (5) | ⚪ vue2 | |
| activation | `ee/pages/projects/security/discover/show/index.js` | S (3) | ⚪ vue2 | |
| engagement | `~/pages/admin/application_settings/appearances/preview_sign_in/index.js` | L (98) | ⚪ vue2 | |
| engagement | `~/pages/admin/application_settings/index.js`<br>`ee/pages/admin/application_settings/index.js` | L (58) | ⚪ vue2 | |
| — | `ee/pages/gitlab_subscriptions/trials/duo_enterprise/index.js` | S (1) | ⚪ vue2 | |
| — | `ee/pages/gitlab_subscriptions/trials/duo_pro/index.js` | S (1) | ⚪ vue2 | |
| — | `ee/pages/gitlab_subscriptions/trials/index.js` | S (1) | ⚪ vue2 | |
### Infrastructure Platforms: database_excellence
4 entrypoints
| group | fileName | size (components) | status | featureFlag |
|-----------------------|----------------------------------------------------------|-------------------|---------|-------------|
| database_architecture | `~/pages/admin/database_diagnostics/index.js` | M (17) | ⚪ vue2 | |
| database_architecture | `~/pages/admin/background_migrations/index.js` | S (1) | ⚪ vue2 | |
| — | `~/pages/projects/google_cloud/databases/index/index.js` | S (4) | ⚪ vue2 | |
| — | `~/pages/projects/google_cloud/databases/new/index.js` | S (1) | ⚪ vue2 | |
### Infrastructure Platforms: production_engineering
1 entrypoints
| group | fileName | size (components) | status | featureFlag |
|-------|---------------------------------------------------------------------|-------------------|---------|-------------|
| — | `~/pages/admin/application_settings/metrics_and_profiling/index.js` | S (2) | ⚪ vue2 | |
### Infrastructure Platforms: tenant_scale
43 entrypoints
| group | fileName | size (components) | status | featureFlag |
|---------------|-------------------------------------------------------------------------------------|-------------------|-----------|---------------------------|
| geo | `ee/pages/admin/geo/nodes/index.js` | M (30) | ⚪ vue2 | |
| geo | `ee/pages/admin/geo/replicables/index/index.js` | M (17) | ⚪ vue2 | |
| geo | `ee/pages/admin/data_management/index.js` | M (16) | ⚪ vue2 | |
| geo | `ee/pages/admin/geo/replicables/show/index.js` | M (11) | ⚪ vue2 | |
| geo | `ee/pages/admin/data_management/show/index.js` | M (10) | ⚪ vue2 | |
| geo | `ee/pages/admin/geo/nodes/edit/index.js` | M (10) | ⚪ vue2 | |
| geo | `ee/pages/admin/geo/nodes/new/index.js` | M (10) | ⚪ vue2 | |
| geo | `ee/pages/admin/geo/settings/index.js` | S (4) | ⚪ vue2 | |
| organizations | `~/pages/projects/show/index.js`<br>`ee/pages/projects/show/index.js` | XL (264) | 🟠 manual | `vue3_migrate_repository` |
| organizations | `~/pages/groups/show/index.js`<br>`ee/pages/groups/show/index.js` | L (152) | ⚪ vue2 | |
| organizations | `~/pages/admin/topics/edit/index.js` | L (136) | ⚪ vue2 | |
| organizations | `~/pages/admin/topics/new/index.js` | L (133) | ⚪ vue2 | |
| organizations | `~/pages/organizations/settings/general/index.js` | L (131) | ⚪ vue2 | |
| organizations | `~/pages/organizations/organizations/new/index.js` | L (123) | ⚪ vue2 | |
| organizations | `~/pages/organizations/projects/edit/index.js` | L (118) | ⚪ vue2 | |
| organizations | `~/pages/projects/activity/index.js` | L (98) | ⚪ vue2 | |
| organizations | `~/pages/groups/edit/index.js`<br>`ee/pages/groups/edit/index.js` | L (90) | ⚪ vue2 | |
| organizations | `~/pages/projects/project_members/index.js` | L (78) | ⚪ vue2 | |
| organizations | `~/pages/groups/group_members/index.js`<br>`ee/pages/groups/group_members/index.js` | L (77) | ⚪ vue2 | |
| organizations | `~/pages/root/index.js`<br>`ee/pages/root/index.js` | L (65) | ⚪ vue2 | |
| organizations | `~/pages/projects/edit/index.js`<br>`ee/pages/projects/edit/index.js` | L (56) | ⚪ vue2 | |
| organizations | `~/pages/dashboard/groups/index/index.js` | M (42) | ⚪ vue2 | |
| organizations | `~/pages/explore/groups/index.js` | M (39) | ⚪ vue2 | |
| organizations | `~/pages/organizations/organizations/groups_and_projects/index.js` | M (38) | ⚪ vue2 | |
| organizations | `~/pages/dashboard/projects/index.js` | M (33) | ⚪ vue2 | |
| organizations | `~/pages/admin/groups/index/index.js` | M (30) | ⚪ vue2 | |
| organizations | `~/pages/admin/projects/index/index.js` | M (30) | ⚪ vue2 | |
| organizations | `~/pages/explore/projects/index.js` | M (30) | ⚪ vue2 | |
| organizations | `~/pages/organizations/organizations/activity/index.js` | M (21) | ⚪ vue2 | |
| organizations | `~/pages/projects/new/index.js`<br>`ee/pages/projects/new/index.js` | M (14) | ⚪ vue2 | |
| organizations | `~/pages/groups/new/index.js`<br>`ee/pages/groups/new/index.js` | M (11) | ⚪ vue2 | |
| organizations | `~/pages/organizations/organizations/users/index.js` | S (8) | ⚪ vue2 | |
| organizations | `~/pages/organizations/groups/edit/index.js` | S (7) | ⚪ vue2 | |
| organizations | `~/pages/organizations/groups/new/index.js` | S (6) | ⚪ vue2 | |
| organizations | `~/pages/organizations/organizations/index/index.js` | S (5) | ⚪ vue2 | |
| organizations | `ee/pages/admin/organizations/index/index.js` | S (5) | ⚪ vue2 | |
| organizations | `~/pages/admin/projects/index.js` | S (4) | ⚪ vue2 | |
| organizations | `~/pages/admin/topics/index.js` | S (4) | ⚪ vue2 | |
| organizations | `~/pages/admin/groups/edit/index.js`<br>`ee/pages/admin/groups/edit/index.js` | S (3) | ⚪ vue2 | |
| organizations | `~/pages/organizations/organizations/show/index.js` | S (3) | ⚪ vue2 | |
| organizations | `~/pages/admin/groups/new/index.js`<br>`ee/pages/admin/groups/new/index.js` | S (2) | ⚪ vue2 | |
| organizations | `~/pages/groups/activity/index.js` | S (1) | ⚪ vue2 | |
| — | `ee/pages/admin/geo/index.js` | S (3) | ⚪ vue2 | |
### Product Security: application_security_testing
11 entrypoints
| group | fileName | size (components) | status | featureFlag |
|------------------|------------------------------------------------------------------|-------------------|---------|-------------|
| dynamic_analysis | `ee/pages/projects/on_demand_scans/edit/index.js` | L (51) | ⚪ vue2 | |
| dynamic_analysis | `ee/pages/projects/on_demand_scans/new/index.js` | L (51) | ⚪ vue2 | |
| dynamic_analysis | `ee/pages/projects/security/dast_configuration/index.js` | M (46) | ⚪ vue2 | |
| dynamic_analysis | `ee/pages/projects/on_demand_scans/index/index.js` | M (28) | ⚪ vue2 | |
| dynamic_analysis | `ee/pages/projects/security/corpus_management/index.js` | M (11) | ⚪ vue2 | |
| dynamic_analysis | `ee/pages/projects/security/dast_profiles/index.js` | M (11) | ⚪ vue2 | |
| dynamic_analysis | `ee/pages/projects/security/api_fuzzing_configuration/index.js` | M (10) | ⚪ vue2 | |
| dynamic_analysis | `ee/pages/projects/security/dast_site_profiles/edit/index.js` | S (8) | ⚪ vue2 | |
| dynamic_analysis | `ee/pages/projects/security/dast_site_profiles/new/index.js` | S (8) | ⚪ vue2 | |
| dynamic_analysis | `ee/pages/projects/security/dast_scanner_profiles/edit/index.js` | S (4) | ⚪ vue2 | |
| dynamic_analysis | `ee/pages/projects/security/dast_scanner_profiles/new/index.js` | S (4) | ⚪ vue2 | |
### Product Security: security_factory
19 entrypoints
| group | fileName | size (components) | status | featureFlag |
|--------------------------|------------------------------------------------------------------------|-------------------|------------|--------------------------------------------|
| code_scanning | `ee/pages/projects/pipelines/codequality_report/index.js` | XL (298) | ⚪ vue2 | |
| code_scanning | `ee/pages/projects/security/sast_configuration/index.js` | M (10) | ⚪ vue2 | |
| composition_analysis | `ee/pages/projects/pipelines/licenses/index.js` | XL (298) | ⚪ vue2 | |
| composition_analysis | `ee/pages/admin/application_settings/security_and_compliance/index.js` | S (3) | ⚪ vue2 | |
| secret_detection | `ee/pages/projects/security/secret_detection_configuration/index.js` | M (11) | 🟢 rollout | `vue3_migrate_secret_detection_exclusions` |
| vulnerability_management | `ee/pages/projects/pipelines/security/index.js` | XL (298) | ⚪ vue2 | |
| vulnerability_management | `ee/pages/projects/security/vulnerabilities/show/index.js` | XL (204) | ⚪ vue2 | |
| vulnerability_management | `ee/pages/projects/security/vulnerabilities/new/index.js` | L (141) | ⚪ vue2 | |
| vulnerability_management | `ee/pages/groups/security/vulnerabilities/index/index.js` | L (74) | ⚪ vue2 | |
| vulnerability_management | `ee/pages/projects/security/vulnerability_report/index.js` | L (74) | ⚪ vue2 | |
| vulnerability_management | `ee/pages/security/vulnerabilities/index/index.js` | L (74) | ⚪ vue2 | |
| vulnerability_management | `ee/pages/groups/security/dashboard/show/index.js` | L (65) | ⚪ vue2 | |
| vulnerability_management | `ee/pages/organizations/security/dashboard/show/index.js` | L (65) | ⚪ vue2 | |
| vulnerability_management | `ee/pages/projects/security/dashboard/index/index.js` | L (65) | ⚪ vue2 | |
| vulnerability_management | `ee/pages/security/dashboard/show/index.js` | L (65) | ⚪ vue2 | |
| vulnerability_management | `ee/pages/groups/dependencies/index.js` | M (37) | ⚪ vue2 | |
| vulnerability_management | `ee/pages/projects/dependencies/index/index.js` | M (37) | ⚪ vue2 | |
| vulnerability_management | `ee/pages/security/dashboard/settings/index.js` | S (7) | ⚪ vue2 | |
| vulnerability_management | `ee/pages/groups/security/discover/show/index.js` | S (3) | ⚪ vue2 | |
### Product Security: security_governance
18 entrypoints
| group | fileName | size (components) | status | featureFlag |
|-------------------|-------------------------------------------------------------|-------------------|------------|--------------------------------------|
| compliance | `ee/pages/projects/security/compliance_violations/index.js` | L (173) | 🟢 rollout | `vue3_migrate_compliance_violations` |
| compliance | `ee/pages/groups/security/compliance_dashboards/index.js` | L (139) | 🟢 rollout | `vue3_migrate_compliance_center` |
| compliance | `ee/pages/projects/security/compliance_dashboards/index.js` | L (139) | 🟢 rollout | `vue3_migrate_compliance_center` |
| compliance | `ee/pages/groups/settings/gitlab_duo/governance/index.js` | M (32) | ⚪ vue2 | |
| compliance | `ee/pages/projects/settings/gitlab_duo/governance/index.js` | M (32) | ⚪ vue2 | |
| compliance | `ee/pages/admin/audit_logs/index.js` | M (30) | ⚪ vue2 | |
| compliance | `ee/pages/groups/audit_events/index.js` | M (30) | ⚪ vue2 | |
| compliance | `ee/pages/projects/audit_events/index.js` | M (30) | ⚪ vue2 | |
| policy_management | `ee/pages/groups/security/policies/edit/index.js` | L (186) | ⚪ vue2 | |
| policy_management | `ee/pages/groups/security/policies/new/index.js` | L (186) | ⚪ vue2 | |
| policy_management | `ee/pages/projects/security/policies/edit/index.js` | L (186) | ⚪ vue2 | |
| policy_management | `ee/pages/projects/security/policies/new/index.js` | L (186) | ⚪ vue2 | |
| policy_management | `ee/pages/groups/security/policies/index/index.js` | L (68) | ⚪ vue2 | |
| policy_management | `ee/pages/projects/security/policies/index/index.js` | L (68) | ⚪ vue2 | |
| policy_management | `ee/pages/groups/security/policy_store/index/index.js` | M (21) | ⚪ vue2 | |
| security_controls | `~/pages/projects/security/configuration/index.js` | L (53) | ⚪ vue2 | |
| security_controls | `ee/pages/groups/security/configuration/index.js` | L (50) | ⚪ vue2 | |
| security_controls | `ee/pages/groups/security/inventory/index.js` | M (42) | ⚪ vue2 | |
### Product Security: security_platform
57 entrypoints
| group | fileName | size (components) | status | featureFlag |
|-----------------------------|---------------------------------------------------------------------------------------------------|-------------------|---------|-------------|
| abuse_engineering | `~/pages/admin/abuse_reports/show/index.js` | L (108) | ⚪ vue2 | |
| abuse_engineering | `~/pages/registrations/new/index.js`<br>`ee/pages/registrations/new/index.js` | L (106) | ⚪ vue2 | |
| abuse_engineering | `ee/pages/users/identity_verification/show/index.js` | M (12) | ⚪ vue2 | |
| abuse_engineering | `ee/pages/users/registrations_identity_verification/show/index.js` | M (12) | ⚪ vue2 | |
| abuse_engineering | `~/pages/admin/abuse_reports/index.js` | M (10) | ⚪ vue2 | |
| abuse_engineering | `~/pages/users/index.js` | S (5) | ⚪ vue2 | |
| abuse_engineering | `ee/pages/groups/settings/reporting/show/index.js` | S (4) | ⚪ vue2 | |
| abuse_engineering | `ee/pages/users/registrations_identity_verification/arkose_labs_challenge/index.js` | S (4) | ⚪ vue2 | |
| abuse_engineering | `~/pages/abuse_reports/index.js` | S (1) | ⚪ vue2 | |
| abuse_engineering | `~/pages/admin/spam_logs/index.js` | S (0) | ⚪ vue2 | |
| authentication | `~/pages/profiles/comment_templates/index.js` | L (139) | ⚪ vue2 | |
| authentication | `~/pages/sessions/new/index.js` | L (107) | ⚪ vue2 | |
| authentication | `ee/pages/groups/sso/index.js` | L (102) | ⚪ vue2 | |
| authentication | `~/pages/passwords/new/index.js` | L (98) | ⚪ vue2 | |
| authentication | `~/pages/users/show/index.js` | L (98) | ⚪ vue2 | |
| authentication | `~/pages/user_settings/personal_access_tokens/index.js` | L (54) | ⚪ vue2 | |
| authentication | `~/pages/user_settings/personal_access_tokens/granular_new/index.js` | M (38) | ⚪ vue2 | |
| authentication | `~/pages/user_settings/personal_access_tokens/legacy_new/index.js` | M (38) | ⚪ vue2 | |
| authentication | `~/pages/admin/identities/index.js` | M (30) | ⚪ vue2 | |
| authentication | `~/pages/user_settings/ssh_keys/index.js` | M (25) | ⚪ vue2 | |
| authentication | `~/pages/groups/settings/access_tokens/index.js` | M (24) | ⚪ vue2 | |
| authentication | `~/pages/projects/settings/access_tokens/index.js` | M (24) | ⚪ vue2 | |
| authentication | `~/pages/user_settings/profiles/show/index.js`<br>`ee/pages/user_settings/profiles/show/index.js` | M (18) | ⚪ vue2 | |
| authentication | `~/pages/admin/sessions/index.js` | M (16) | ⚪ vue2 | |
| authentication | `~/pages/sessions/index.js`<br>`ee/pages/sessions/index.js` | M (16) | ⚪ vue2 | |
| authentication | `ee/pages/groups/omniauth_callbacks/index.js` | M (15) | ⚪ vue2 | |
| authentication | `~/pages/groups/settings/index.js`<br>`ee/pages/groups/settings/index.js` | M (11) | ⚪ vue2 | |
| authentication | `~/pages/profiles/index.js` | M (11) | ⚪ vue2 | |
| authentication | `~/pages/profiles/preferences/show/index.js` | M (11) | ⚪ vue2 | |
| authentication | `~/pages/groups/achievements/index.js` | M (10) | ⚪ vue2 | |
| authentication | `~/pages/profiles/accounts/show/index.js`<br>`ee/pages/profiles/accounts/show/index.js` | M (10) | ⚪ vue2 | |
| authentication | `~/pages/profiles/two_factor_auths/index.js` | M (10) | ⚪ vue2 | |
| authentication | `ee/pages/groups/saml_providers/index.js` | S (9) | ⚪ vue2 | |
| authentication | `~/pages/admin/applications/index.js` | S (7) | ⚪ vue2 | |
| authentication | `~/pages/groups/settings/applications/index.js` | S (4) | ⚪ vue2 | |
| authentication | `~/pages/oauth/index.js` | S (3) | ⚪ vue2 | |
| authentication | `~/pages/profiles/passkeys/new/index.js` | S (3) | ⚪ vue2 | |
| authentication | `ee/pages/groups/settings/domain_verification/new/index.js` | S (3) | ⚪ vue2 | |
| authentication | `ee/pages/groups/settings/domain_verification/show/index.js` | S (3) | ⚪ vue2 | |
| authentication | `ee/pages/admin/initial_setup/index.js` | S (2) | ⚪ vue2 | |
| authentication | `ee/pages/passwords/edit/index.js` | S (2) | ⚪ vue2 | |
| authentication | `ee/pages/user_settings/passwords/edit/index.js` | S (2) | ⚪ vue2 | |
| authentication | `ee/pages/user_settings/passwords/new/index.js` | S (2) | ⚪ vue2 | |
| authentication | `~/pages/dashboard/activity/index.js` | S (1) | ⚪ vue2 | |
| authentication | `~/pages/iam/consent/index.js` | S (0) | ⚪ vue2 | |
| authentication | `ee/pages/admin/identities/edit/index.js` | S (0) | ⚪ vue2 | |
| authentication | `ee/pages/admin/identities/new/index.js` | S (0) | ⚪ vue2 | |
| authentication | `ee/pages/groups/settings/domain_verification/index/index.js` | S (0) | ⚪ vue2 | |
| dependency_firewall | `ee/pages/groups/security/dependency_firewall/show/index.js` | S (7) | ⚪ vue2 | |
| dependency_firewall | `ee/pages/projects/security/dependency_firewall/show/index.js` | S (7) | ⚪ vue2 | |
| dependency_firewall | `ee/pages/groups/settings/secure/show/index.js` | S (1) | ⚪ vue2 | |
| secrets_manager_application | `ee/pages/groups/secrets/index.js` | M (16) | ⚪ vue2 | |
| secrets_manager_application | `ee/pages/projects/secrets/index.js` | M (16) | ⚪ vue2 | |
| — | `~/pages/ldap/omniauth_callbacks/index.js` | M (15) | ⚪ vue2 | |
| — | `~/pages/omniauth_callbacks/index.js` | M (15) | ⚪ vue2 | |
| — | `~/pages/oauth/applications/index.js` | S (4) | ⚪ vue2 | |
| — | `~/pages/admin/application_settings/network/index.js` | S (0) | ⚪ vue2 | |
### No owner
10 entrypoints
| group | fileName | size (components) | status | featureFlag |
|-------|-----------------------------------------------------------------------------------------------------------------|-------------------|---------|-------------|
| — | `~/pages/projects/merge_requests/rapid_diffs/index.js` | XL (783) | ⚪ vue2 | |
| — | `~/pages/help/show/index.js` | L (98) | ⚪ vue2 | |
| — | `~/pages/admin/application_settings/general/index.js`<br>`ee/pages/admin/application_settings/general/index.js` | M (29) | ⚪ vue2 | |
| — | `~/pages/admin/dashboard/index.js`<br>`ee/pages/admin/dashboard/index.js` | S (4) | ⚪ vue2 | |
| — | `~/pages/admin/application_settings/preferences/index.js` | S (2) | ⚪ vue2 | |
| — | `ee/pages/admin/emails/show/index.js` | S (2) | ⚪ vue2 | |
| — | `~/pages/help/index/index.js` | S (0) | ⚪ vue2 | |
| — | `ee/pages/organizations/security/policy_store/edit/index.js` | S (0) | ⚪ vue2 | |
| — | `ee/pages/organizations/security/policy_store/index/index.js` | S (0) | ⚪ vue2 | |
| — | `ee/pages/organizations/security/policy_store/new/index.js` | S (0) | ⚪ vue2 | |
579 entrypoints · 535 across 40 groups in 20 stages · 44 with no owner
---
<details>
<summary>Previous description</summary>
## Process overview
### Graph
Legend
- Gray = GitLab repo task (Not started)
- Green = GitLab repo task (Completed)
- Yellow = GitLab repo task (In progress)
- Blue = GitLab UI task
- Purple = Switchboard task
- Green outline = Non main GitLab repo task (Completed)
- Yellow outline = Non main GitLab repo task (In progress)
```mermaid
%%{init: {'flowchart': { 'nodeSpacing': 20, 'rankSpacing': 20 } } }%%
graph TD
%% Styles
classDef gitlab %% fill:#6f8,color:#fff
classDef gitlab_in_progress fill:#ffef00
classDef gitlab_complete fill:#3dc068
classDef gitlab_ui fill:#00a4ff,color:#fff
classDef gitlab_ui_in_progress fill:#00a4ff,color:#fff,stroke:#ffef00,stroke-width:10px
classDef gitlab_ui_complete fill:#00a4ff,color:#fff,stroke:#3dc068,stroke-width:10px
classDef other fill:#a2a2d0,color:#fff
classDef other_in_progress fill:#a2a2d0,color:#fff,stroke:#ffef00,stroke-width:10px
classDef other_complete fill:#a2a2d0,color:#fff,stroke:#3dc068,stroke-width:10px
classDef optional stroke-dasharray: 5 5
%% Nodes
gitlab_use_gitlab_ui_source["`Make GitLab
consume GitLab UI
source`"]:::gitlab_complete
gitlab_ui_vue_compat_package["`Publish versions
built with @vue/compat
to npm (gitlab-ui#1985)`"]:::gitlab_ui
gitlab_jest_unquarantine["`Fix all GitLab
Jest specs under
@vue/compat quarantine`"]:::gitlab_complete
gitlab_jest_unskip["`Fix all
skipped @vue/compat
GitLab Jest specs`"]:::gitlab_complete
gitlab_gdk["`Add support for
running GDK with
@vue/compat`"]:::gitlab_complete
gitlab_run_rspec["`Add support for
running RSpecs
with @vue/compat`"]:::gitlab_complete
gitlab_run_qa["`Add support for
running QA specs
with @vue/compat`"]:::gitlab
gitlab_fix_rspec["`Fix RSpecs
with @vue/compat`"]:::gitlab_in_progress
gitlab_fix_qa["`Fix QA specs
with @vue/compat`"]:::gitlab
gitlab_prod_build_vite["`Add support for
a Vite
production build
with @vue/compat`"]:::gitlab
gitlab_prod_build_vite_vue2["`Add support for
a Vite
production build
with Vue 2`"]:::gitlab
gitlab_prod_build_webpack["`Add support for
a Webpack
production build
with @vue/compat`"]:::gitlab
gitlab_feature_flagged_builds["`Add support for
feature flagged
asset builds`"]:::gitlab
class gitlab_feature_flagged_builds optional
switchboard_drop_compat_flags["`Drop compat flags
in Switchboard`"]:::other
switchboard_vue3["`Switch to Vue 3
in Switchboard`"]:::other
gitlab_drop_vue2["`Drop support for
Vue 2 in GitLab`"]:::gitlab
gitlab_ui_drop_vue2["`Drop support for
Vue 2 in GitLab UI`"]:::gitlab_ui_in_progress
gitlab_ui_drop_compat_flags["`Drop compat flags
in GitLab UI`"]:::gitlab_ui_in_progress
gitlab_drop_compat_flags["`Drop compat flags
in GitLab`"]:::gitlab
gitlab_vue3["`Switch to Vue 3
in GitLab`"]:::gitlab
gitlab_ui_vue3["`Switch to Vue 3
in GitLab UI`"]:::gitlab_ui
%% Dependencies - kill webpack first
gitlab_gdk --> gitlab_run_rspec
gitlab_gdk --> gitlab_run_qa
gitlab_feature_flagged_builds -.-> vite_or_webpack
switchboard_drop_compat_flags --> switchboard_vue3
switchboard_vue3 --> gitlab_ui_vue3
gitlab_jest_unquarantine --> gitlab_drop_vue2
gitlab_jest_unskip --> gitlab_drop_vue2
gitlab_run_rspec --> gitlab_fix_rspec --> gitlab_drop_vue2
gitlab_run_qa --> gitlab_fix_qa --> gitlab_drop_vue2
vite_or_webpack --> gitlab_drop_vue2
gitlab_drop_vue2 --> gitlab_drop_compat_flags --> gitlab_vue3
gitlab_drop_vue2 --> gitlab_ui_drop_vue2
gitlab_ui_drop_vue2 --> gitlab_vue3 --> gitlab_ui_vue3
gitlab_ui_package ---> gitlab_gdk
gitlab_drop_vue2 --> gitlab_ui_drop_compat_flags --> gitlab_ui_vue3
gitlab_ui_drop_compat_flags --> switchboard_vue3
gitlab_ui_drop_compat_flags --> gitlab_vue3
subgraph gitlab_ui_package["Either"]
direction LR
gitlab_use_gitlab_ui_source
gitlab_ui_vue_compat_package
end
subgraph vite_or_webpack["Either"]
direction LR
subgraph vite["Vite"]
direction LR
gitlab_prod_build_vite_vue2 --> gitlab_prod_build_vite
end
subgraph webpack["Webpack"]
gitlab_prod_build_webpack
end
end
```
### Step 0: pre-migration
- [x] remove the outdated `slot`/`slot-scope` attributes
- [x] main codebase (https://gitlab.com/gitlab-org/gitlab/-/merge_requests/64604 by @ntepluhina)
- [x] GitLab UI
- [ ] Mostly done in https://gitlab.com/gitlab-org/gitlab-ui/-/merge_requests/2269
- [x] Several chart components still use the deprecated slot syntax, and require particular attention due to more complex slot definitions and incomplete test coverage (see https://gitlab.com/gitlab-org/gitlab-ui/-/merge_requests/2269#note_612928917)
- [x] set up linter rules to prevent deprecated APIs from being used (https://gitlab.com/gitlab-org/frontend/eslint-plugin/-/merge_requests/50#note_610914212 by @markrian)
- [x] check how unit tests work with compat build and evaluate the effort for VTU 1 -\> 2 migration
- VTU 1 --\> 2 migration could be mostly automated with codemods, however it is possible only when
- [x] evaluate the effort of making class-based stores reactive
- [x] check how Vuex works in compat build and evaluate the effort for Vuex v3 -\> v4 migration
- [x] check how VueApollo works in compat build and evaluate the effort for VueApollo 3 -\> 4 migration
- [x] check how Vue Router works in compat build and evaluate the effort for v3 -\> v4 migration
- [ ] evaluate Vue-related non-core dependencies in terms of their readiness for migration / working in compat build
### Step 1: "Vue3-friendly". Utilize `@vue/compat` for migration
Child epic: https://gitlab.com/groups/gitlab-org/-/epics/9013+
At this point we want all our Vue-related project use `@vue/compat`:
* [x] https://gitlab.com/gitlab-org/gitlab-ui (epic: https://gitlab.com/groups/gitlab-org/-/epics/7203)
* [ ] https://gitlab.com/gitlab-org/gitlab (epic: TBD)
* [ ] https://gitlab.com/gitlab-org/status-page (epic/issue: TBD)
* [ ] https://gitlab.com/gitlab-org/customers-gitlab-com/ (epic: https://gitlab.com/groups/gitlab-org/-/epics/10121)
* [ ] https://gitlab.com/gitlab-org/gitlab-design (epic: TBD)
* [x] https://gitlab.com/gitlab-com/gl-infra/gitlab-dedicated/switchboard (epic: TBD)
At this point we will be relying on [vue-test-utils-compat](https://www.npmjs.com/package/vue-test-utils-compat) to make our test suite compatible with Vue2 and `@vue/compat`. Our codebase should be tested and verified both with Vue2 and Vue3 with feature flag (or similar approach) flipping usage of vue version when needed
Known blockers outside of GitLab:
* [x] `bootstrap-vue` release with `@vue/compat` https://github.com/bootstrap-vue/bootstrap-vue/pull/6905
* [x] `@vue/test-utils` release with https://github.com/vuejs/test-utils/pull/1804 merged
### Step 2: "Vue3-first". Drop Vue.js 2 support (per project)
After ensuring everything is working with `@vue/compat` each project **independently** will take decision to drop Vue2 support. `gitlab-ui` will be the last one as long as there will be no vue2-based consumers
At this point we will move [vue-test-utils-compat](https://www.npmjs.com/package/vue-test-utils-compat) from being application-wide to specific explicit initialization in each test suite. This will allow us to write tests using `@vue/test-utils v2` while not being forced to rewrite all tests to `@vue/test-utils-v1`. For old tests we will switch compat flags one-by-one, applying codemods with fixes (approx. 80% of test suide could be automatically migrated to `@vue/test-utils v2` automatically)
Also we will start migrating codebase to Vue3 by acting both horizontally and vertically. Under **vertical** migration we are considering disabling **compat flags** in `@vue/compat` one-by-one and performing mostly automated conversions to our codebase. Under **horizontal** migration we're considering migrating existing components to Vue3 by adding: `{ compatConfig: { MODE: 3 }}` to components. These approaches will take place simultaneously and decision will taken on per-case basics
### Step 3: Switch `@vue/compat` to `vue` (per project)
As soon as `@vue/compat` will have all compat flags switched off, we should be able just swap `@vue/compat` with `vue` and be ready to go
</details>