Chapter 01Lesson 01~115 minutes

GitLab Platform Foundations: GitLab.com, Self-Managed, Dedicated, Tiers, and Architecture: Concepts, Architecture, and Mental Model

Build a precise mental model of GitLab: separate Git data from GitLab platform state, understand offerings and tiers, and locate namespace, project, runner, and administration boundaries before changing anything.

Git vs GitLabOfferingsNamespacesProjectsTrust boundaries

Learning objectives

  • Separate Git objects and refs from GitLab-hosted metadata, collaboration, automation, registry, security, and administrative state.
  • Explain the operational boundary among GitLab.com, GitLab Self-Managed, and GitLab Dedicated without treating them as interchangeable deployments.
  • Distinguish Free, Premium, and Ultimate as product entitlements rather than properties of Git repositories.
  • Map personal namespaces, groups, subgroups, projects, repositories, runners, and instance administration into one coherent hierarchy.
  • Use read-only UI, Git, glab, and REST observations to prove which layer owns a piece of state before attempting a change.

1. The problem: one project, several kinds of state

A GitLab project can look like “a repository in a browser,” but that mental model becomes dangerous as soon as CI/CD, permissions, registries, approvals, environments, or administration enter the picture. Git knows about commits, trees, blobs, tags, branches as references, and remotes. GitLab stores and governs many additional objects around that Git repository: project metadata, members, issues and work items, merge requests, pipeline definitions and runs, job logs, runner registrations, releases, packages, container images, vulnerability findings, policies, audit events, and settings.

The first production skill is therefore classification. Before you change anything, ask: Is this state in Git, in the GitLab application, in a runner/executor, in a registry/object store, or in the infrastructure that operates GitLab itself? The answer determines which evidence to inspect, which permission is relevant, what can be rolled back, and which team owns the failure.

2. Git versus GitLab

Question Git GitLab
Primary state Commits, trees, blobs, refs, index, working tree, configured remotes. Projects, namespaces, memberships, merge requests, pipelines, runners, registries, security data, policies, settings.
Where it can exist On a laptop, server, USB drive, or any Git host. On GitLab.com, a Dedicated tenant, or a Self-Managed GitLab instance.
Identity Commit author/committer metadata is recorded in commits; transport authentication is separate. User/service identity, roles, tokens, SSO policy, project/group membership, and administrative authority govern platform actions.
CI/CD Not a Git object. Pipelines/jobs are GitLab platform objects created from configuration and executed by runners.
Project visibility Git itself has no public/private/internal repository visibility policy. Visibility is a GitLab project/namespace access control.

A branch named main is a Git ref. “main is the default branch for this project” is GitLab metadata that points users and platform workflows toward a particular ref. A merge request compares Git refs, but the merge request discussion, approvals, reviewers, pipeline widgets, and merge policy are GitLab state.

3. Three offerings, three responsibility boundaries

Availability — verified 2026-08-21. GitLab documents three offerings: GitLab.com (multi-tenant SaaS), GitLab Dedicated (managed single-tenant SaaS), and GitLab Self-Managed (you install, administer, and maintain the instance). GitLab Dedicated is currently documented as an Ultimate-tier offering. These product rules can change; re-check the official subscription documentation when using this lesson later.
Offering and responsibility mental model
flowchart LR
U[Developer / operator] --> APP[GitLab application resources]
APP --> REPO[Git repository]
APP --> META[MRs / issues / settings / CI metadata]
APP --> REG[Registry / artifacts]
APP --> RUN[Runner execution]
subgraph COM[GitLab.com]
C1[Shared SaaS platform operated by GitLab]
end
subgraph DED[GitLab Dedicated]
D1[Single-tenant SaaS infrastructure operated by GitLab]
end
subgraph SM[GitLab Self-Managed]
S1[Instance infrastructure operated by customer]
end
C1 --> APP
D1 --> APP
S1 --> APP

The same high-level application concepts can appear in all three offerings, but infrastructure ownership, upgrade responsibility, tenant isolation, administrator surfaces, and version timing are different. Never infer an operational control from the product logo alone.

GitLab.com removes server installation and lifecycle work from the learner. It is the mandatory free-path platform for this chapter. GitLab Dedicated isolates a tenant and is managed by GitLab, with customer configuration boundaries that differ from full shell/database access. GitLab Self-Managed moves installation, upgrades, backups, storage, database, network, TLS, monitoring, and many recovery responsibilities to the organization operating it.

4. Offering is not tier

An offering answers “where and under whose operational responsibility does GitLab run?” A tier answers “which product entitlements are available?” GitLab currently names the tiers Free, Premium, and Ultimate. A Git repository is not “Ultimate”; the surrounding GitLab namespace/instance subscription determines whether a gated platform feature is available.

On GitLab.com, paid subscriptions are associated with top-level group namespaces rather than personal namespaces. That matters because the same user can work in different top-level groups with different entitlements. Therefore, “my account is Premium” is often too imprecise. Ask which top-level namespace the project belongs to and which subscription applies there.

Do not memorize prices, included compute, or storage quotas from this lesson. Those are commercial/product policy, not Git semantics, and can change. When a later lab needs a limit, inspect the current billing/usage page and official docs at that time.

5. Namespaces: the addressing and policy hierarchy

Namespaces organize projects and make paths unique. A personal namespace is based on a user identity. A group namespace can contain projects and subgroups, letting access and settings be organized hierarchically. Consider these example paths:

https://gitlab.com/learner-example/platform-lab
https://gitlab.com/acme-platform/payments/api

learner-example           -> personal namespace
acme-platform             -> top-level group namespace
acme-platform/payments    -> subgroup namespace
api                       -> project path inside the subgroup

The full path is more than decoration. APIs, clone URLs, membership inheritance, subscription scope, and many policies depend on it. Moving a project between namespaces can therefore change not only its URL but also the effective governance around it.

6. A project is a platform container around a repository

A GitLab project typically contains a Git repository, but the project is broader than the repository. It also owns or references settings and collaboration/automation resources. This distinction explains a common puzzle: deleting a local clone does not delete the GitLab project; changing the project description does not create a Git commit; and changing the default branch setting does not rewrite commit history.

Object Scope First evidence surface
Commit SHA Git repository git log, GitLab commit page, repository API
Project visibility GitLab project Project settings / Projects API visibility
Namespace User/group hierarchy Project path / Projects API namespace
Pipeline/job GitLab CI/CD control plane Build/CI/CD UI, pipeline API, job logs
Runner Execution resource associated with instance/group/project Runner metadata / admin or project/group runner settings
Container image Registry data plane Registry UI/API plus immutable digest
Instance configuration Self-Managed/Dedicated administration boundary Admin/Switchboard/configuration docs depending on offering

7. Control plane versus data plane

This course uses a practical control-plane/data-plane analogy. GitLab metadata and policy decide what should happen and who may request it; Git repository content, artifacts, packages, images, runner workspaces, and external deployment targets carry the bytes being built or moved. The boundary is not mathematically perfect, but it is useful for diagnostics.

For example, a pipeline record can say a job succeeded, while the job’s actual execution occurred on a runner using an executor on a machine or cluster. A release record can point to assets, while the bytes may live in object storage or a registry. Treating every layer as “GitLab” hides trust boundaries that matter to DevOps.

8. Read-only inspection before mutation

Chapter 01 deliberately starts with observation. In a public project you can inspect useful project metadata without creating a token. If glab is already configured, it can add a second view; authentication setup itself belongs to Chapter 02.

# Cross-platform Git commands inside an existing clone
git remote -v
git branch --show-current
git rev-parse HEAD
git status --short --branch

# Optional: if glab is already installed/configured. Never add --show-token in course labs.
glab auth status --hostname gitlab.com
glab repo view -F json

# Public REST inspection: replace the URL-encoded namespace/project path.
curl --silent --show-error \
  "https://gitlab.com/api/v4/projects/learner-example%2Fplatform-foundations-lab"

In PowerShell, use curl.exe for the final command if you want curl-compatible flags. A successful Projects API response includes fields such as path_with_namespace, default_branch, visibility, and a namespace object. Those fields prove hosted project state; git rev-parse HEAD proves the checked-out commit in your local clone.

9. Why this matters in DevOps

Delivery failures often cross layers. A developer can push a valid commit but see no deployment because the pipeline rule excluded that source. A pipeline can be correct but wait forever because no trusted runner can accept the job. A project can be visible and healthy while the Self-Managed instance is degraded. A security control can exist in documentation but be unavailable because the project is in a different tier or offering.

The durable troubleshooting question is: which object is wrong, in which scope, and who controls it? That question is more valuable than memorizing the current sidebar label.

10. Mini-lab — classify ten observations

Choose any public GitLab project you are allowed to inspect. Do not change it. Record ten observations: full project path, namespace type, visibility, default branch, one commit SHA, clone URL, whether Issues/work items are exposed, whether CI/CD navigation is exposed, whether a container registry link is exposed, and the GitLab host. For each observation, label the owner layer: Git, GitLab project, namespace, CI/CD, registry, or offering/administration.

Verification: at least one Git fact must be independently confirmed from local Git or a repository view, and at least one GitLab project fact must be confirmed through the public Projects API. Cleanup: none; this is read-only.

Knowledge check

A project description changes in the GitLab UI. Should you expect a new Git commit?

A user has a paid subscription in one GitLab.com group. Does that prove a project in the user’s personal namespace has the same paid features?

What is the key operational difference between GitLab Dedicated and Self-Managed?

A job is stuck. Is the Git repository automatically the first place to investigate?

Summary

Git is the version-control engine; GitLab is a DevSecOps platform that surrounds Git repositories with namespaces, collaboration, CI/CD, registries, security controls, and administration. Offering, tier, namespace, project, runner, and infrastructure are different scopes. Treat them separately, inspect current state before mutation, and use exact resource identity—host, namespace, project, ref, pipeline, runner, or artifact—when diagnosing production behavior.

Next lesson

From mental model to a disposable project

Lesson 2 creates one small GitLab.com Free project and follows the same state through the web UI, local Git, optional glab, and the public REST API.

Official references

Keep the academy open

Support free, practical DevOps education.

Every lesson is designed to remain readable in a browser, downloadable from GitHub, and usable without a paid learning platform. Contributions help expand and maintain the curriculum.

Ethereum / ERC-20
0x716c4Ab160C4B66F31a28AE2448BfF68fc3a2ef0Send only Ethereum/ERC-20 compatible assets to this address.