The GitLab Docs website is now available in Japanese!
Wikis development guidelines
Wiki functionality in GitLab uses Git repositories as the storage backend and is accessed from the Rails app through Gitaly RPC calls.
You can access wikis through:
- The Web UI
- The REST API
- Git itself
Involved Gems
Some notable gems that are used for wikis are:
| Component | Description | Gem name | GitLab project | Upstream project |
|---|---|---|---|---|
gitlab | Markup renderer, depends on various other gems | gitlab-markup | gitlab-org/gitlab-markup | github/markup |
Wiki rendering
When rendering wiki pages, we use a
custom Banzai pipeline.
This pipeline adds wiki-specific markup,
such as the [[link]] syntax.
Model classes
The Wiki class is the main abstraction around a wiki repository.
You must initialize it with a container, which can be either a Project or Group:
classDiagram
Wiki --> ProjectWiki
Wiki --> GroupWiki
class Wiki {
#container
#repository
}
class ProjectWiki {
#project → #container
}
class GroupWiki {
#group → #container
}
Some models wrap similar classes from Gitaly:
| Rails Model | Gitaly Class |
|---|---|
Wiki | Gitlab::Git::Wiki |
WikiPage | Gitlab::Git::WikiPage, Gitlab::Git::WikiPageVersion |
Gitlab::Git::WikiFile |
Only some data is persisted in the database:
| Model | Description |
|---|---|
WikiPage::Meta | Metadata for wiki pages |
WikiPage::Slug | Current and previous slugs of wiki pages |
ProjectRepository | Gitaly storage data for project wikis |
GroupWikiRepository | Gitaly storage data for group wikis |
Attachments
The web UI uploads attachments through the REST API, which stores the files as commits in the wiki repository.