2020-10-30 14:08:56 -04:00
---
stage: none
group: unassigned
2020-11-26 01:09:20 -05:00
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments
2020-10-30 14:08:56 -04:00
---
2019-05-27 04:33:40 -04:00
# Routing
The GitLab backend is written primarily with Rails so it uses [Rails
routing](https://guides.rubyonrails.org/routing.html). Beside Rails best
practices, there are few rules unique to the GitLab application. To
support subgroups, GitLab project and group routes use the wildcard
character to match project and group routes. For example, we might have
a path such as:
2020-03-25 02:07:58 -04:00
```plaintext
2019-07-09 03:16:17 -04:00
/gitlab-com/customer-success/north-america/west/customerA
```
2019-05-27 04:33:40 -04:00
However, paths can be ambiguous. Consider the following example:
2020-03-25 02:07:58 -04:00
```plaintext
2019-07-09 03:16:17 -04:00
/gitlab-com/edit
```
2019-05-27 04:33:40 -04:00
It's ambiguous whether there is a subgroup named `edit` or whether
this is a special endpoint to edit the `gitlab-com` group.
To eliminate the ambiguity and to make the backend easier to maintain,
we introduced the `/-/` scope. The purpose of it is to separate group or
project paths from the rest of the routes. Also it helps to reduce the
number of [reserved names ](../user/reserved_names.md ).
2022-05-10 11:09:19 -04:00
## View all available routes
You can view and find routes from the console by running:
```shell
rails routes | grep crm
```
You can also view routes in your browser by going to [http://gdk.test:3000/rails/info/routes ](http://gdk.test:3000/rails/info/routes ).
2019-05-27 04:33:40 -04:00
## Global routes
We have a number of global routes. For example:
2020-03-25 02:07:58 -04:00
```plaintext
2019-07-09 03:16:17 -04:00
/-/health
/-/metrics
```
2019-05-27 04:33:40 -04:00
## Group routes
Every group route must be under the `/-/` scope.
Examples:
2020-03-25 02:07:58 -04:00
```plaintext
2019-07-09 03:16:17 -04:00
gitlab-org/-/edit
gitlab-org/-/activity
gitlab-org/-/security/dashboard
gitlab-org/serverless/-/activity
```
2019-05-27 04:33:40 -04:00
To achieve that, use the `scope '-'` method.
## Project routes
Every project route must be under the `/-/` scope, except cases where a Git
client or other software requires something different.
Examples:
2020-03-25 02:07:58 -04:00
```plaintext
2019-09-18 14:06:14 -04:00
gitlab-org/gitlab/-/activity
gitlab-org/gitlab/-/jobs/123
gitlab-org/gitlab/-/settings/repository
2019-07-09 03:16:17 -04:00
gitlab-org/serverless/runtimes/-/settings/repository
```
2019-05-27 04:33:40 -04:00
2021-06-11 17:09:58 -04:00
## Changing existing routes
Don't change a URL to an existing page, unless it's necessary. If you must make a change,
make it unnoticeable for users, because we don't want them to receive `404 Not Found`
if we can avoid it. This table should help:
| URL description | Example | What to do |
|---|---|---|
| Can be used in scripts and automation | `snippet#raw` | Support both an old and new URL for one major release. Then, support a redirect from an old URL to a new URL for another major release. |
| Likely to be saved or shared | `issue#show` | Add a redirect from an old URL to a new URL until the next major release. |
| Limited use, unlikely to be shared | `admin#labels` | No extra steps required. |
2020-06-10 17:09:29 -04:00
## Migrating unscoped routes
Currently, the majority of routes are placed under the `/-/` scope. However,
you can help us migrate the rest of them! To migrate routes:
2019-05-27 04:33:40 -04:00
1. Modify existing routes by adding `-` scope.
1. Add redirects for legacy routes by using `Gitlab::Routing.redirect_legacy_paths` .
1. Create a technical debt issue to remove deprecated routes in later releases.
2020-02-06 10:09:11 -05:00
To get started, see an [example merge request ](https://gitlab.com/gitlab-org/gitlab-foss/-/merge_requests/28435 ).
2020-06-10 17:09:29 -04:00
## Useful links
2020-06-11 17:08:37 -04:00
- [Routing improvements master plan ](https://gitlab.com/gitlab-org/gitlab/-/issues/215362 )
2020-06-10 17:09:29 -04:00
- [Scoped routing explained ](https://gitlab.com/gitlab-org/gitlab/-/issues/214217 )
- [Removal of deprecated routes ](https://gitlab.com/gitlab-org/gitlab/-/issues/28848 )