Event store event index
This page lists all domain events published through the GitLab EventStore, grouped by domain.
Each event is defined in app/events/ and carries a JSON Schema-validated payload.
To find subscribers, search the subscription files under
lib/gitlab/event_store/subscriptions/ and ee/lib/gitlab/event_store/subscriptions/.
Ai
| Event | Feature category | Edition | Description |
|---|---|---|---|
Ai::ActiveContext::Code::CreateEnabledNamespaceEvent |
global_search |
EE | Published to trigger creation of Ai::ActiveContext::Code::EnabledNamespace records for namespaces eligible for code indexing. Re-emitted by the subscriber worker to continue batched processing across event invocations. |
Ai::ActiveContext::Code::MarkRepositoryAsPendingDeletionEvent |
global_search |
EE | Published to mark Ai::ActiveContext::Code::Repository records as pending deletion when their enabled namespace is gone, Duo features are disabled, or there has been no recent activity. Re-emitted by the subscriber worker to continue batched processing. |
Ai::ActiveContext::Code::MarkRepositoryAsReadyEvent |
global_search |
EE | Published to mark Ai::ActiveContext::Code::Repository records whose embedding indexing has completed as ready, by checking the search index for the presence of expected embedding fields. |
Ai::ActiveContext::Code::ProcessInvalidEnabledNamespaceEvent |
global_search |
EE | Published to remove Ai::ActiveContext::Code::EnabledNamespace records that are no longer eligible (e.g. expired SaaS subscriptions or instances without AI features). Re-emitted by the subscriber worker to continue batched processing. |
Ai::ActiveContext::Code::ProcessPendingEnabledNamespaceEvent |
global_search |
EE | Published to process the next pending Ai::ActiveContext::Code::EnabledNamespace by enrolling its eligible projects as Ai::ActiveContext::Code::Repository records. Re-emitted by the subscriber worker while pending namespaces remain. |
Ai::DuoWorkflows::WorkflowFinishedEvent |
duo_agent_platform |
EE | Published when a Duo workflow transitions to :finished (the agent completed successfully). Only emitted for messaging-triggered workflows. Deferred via run_after_commit. |
Ai::DuoWorkflows::WorkflowStartedEvent |
duo_agent_platform |
EE | Published when a Duo workflow first transitions to :running (the agent has begun executing). Only emitted for messaging-triggered workflows. Deferred via run_after_commit. |
Analytics
| Event | Feature category | Edition | Description |
|---|---|---|---|
Analytics::ClickHouseForAnalyticsEnabledEvent |
value_stream_management |
EE | Published when the instance-wide setting use_clickhouse_for_analytics is toggled on, signalling that ClickHouse-backed analytics has just been enabled so downstream backfill jobs can run. |
Cd
| Event | Feature category | Edition | Description |
|---|---|---|---|
Cd::ArtifactPublishedEvent |
continuous_delivery |
EE | Published when a new artifact version is available for a GitLab CD artifact source, so subscribers can create the corresponding cd_versions. Source-agnostic by design - today it is bridged from container registry pushes, but external artifact sources can publish the same event later. |
Ci
| Event | Feature category | Edition | Description |
|---|---|---|---|
Ci::JobArtifactsDeletedEvent |
job_artifacts |
CE | Published after a batch of CI job artifacts is deleted. Wrapped in Sidekiq::Worker.skipping_transaction_check so it can be emitted outside a transaction context. |
Ci::JobSecurityScanCompletedEvent |
vulnerability_management |
EE | Published when a CI build that runs a security scan reaches a completed status, signalling that its security artifacts are ready to be ingested. |
Ci::PipelineCreatedEvent |
continuous_integration |
CE | Published when a CI pipeline is successfully created and persisted. |
Ci::PipelineFinishedEvent |
continuous_integration |
CE | Published when a CI pipeline transitions to a terminal state (success, failed, canceled, skipped, or manual). Deferred via run_after_commit, so it fires only after the status change is committed. |
Ci::Workloads::WorkloadFinishedEvent |
continuous_integration |
CE | Published when a CI workload transitions to :finished or :failed. Deferred via run_after_commit. |
Container Registry
| Event | Feature category | Edition | Description |
|---|---|---|---|
ContainerRegistry::ImagePushedEvent |
container_registry |
EE | Published when the container registry notifies GitLab of a successful image push, so subscribers (e.g. container scanning) can react to the new image. |
GitLab
| Event | Feature category | Edition | Description |
|---|---|---|---|
Gitlab::FeatureFlags::FeatureFlagModifiedEvent |
feature_flags |
CE | Published when a feature flag is modified via Feature.enable() or Feature.disable(). The event is emitted whenever Flipper confirms a state change occurred, indicating a global enable/disable, or an actor being added/removed from the feature flag. The operation field indicates the type of change - enabled_globally, disabled_globally, enabled_actor, or disabled_actor. For actor operations, the actor field contains the specific actor’s flipper ID (for example, User:123, Group:456). |
GitLab Subscriptions
| Event | Feature category | Edition | Description |
|---|---|---|---|
GitlabSubscriptions::RenewedEvent |
subscription_management |
CE | Published when a GitLab subscription is renewed. Fires only on genuine renewals - both start_date and end_date must change in the same update, with the new start_date >= the previous end_date. Deferred via run_after_commit. |
Groups
| Event | Feature category | Edition | Description |
|---|---|---|---|
Groups::GroupDeletedEvent |
groups_and_projects |
CE | Published after a group and all its contents are permanently destroyed. |
Groups::GroupTransferedEvent |
groups_and_projects |
CE | Published after a group is transferred to a different parent namespace. |
Mcp
| Event | Feature category | Edition | Description |
|---|---|---|---|
Mcp::ServerSettingsChangedEvent |
mcp_server |
EE | Published when a group’s MCP server namespace settings (e.g. mcp_server_enabled) change, so consumers such as the MCP server cache can be refreshed. |
Members
| Event | Feature category | Edition | Description |
|---|---|---|---|
Members::AcceptedInviteEvent |
user_management |
CE | Published when a user accepts a membership invitation to a group or project. |
Members::DestroyedEvent |
user_management |
CE | Published after a member record is removed from a group or project. Fires once per user per destroy operation; not published on recursive cascades (for example, when a parent group destroy removes child memberships). Deferred via run_after_commit_or_now. |
Members::MembersAddedEvent |
user_management |
CE | Published after one or more members are added to a group or project. A single event carries all successfully created user IDs; skipped entirely when every invited user fails validation. |
Members::MembershipModifiedByAdminEvent |
seat_cost_management |
EE | Published when an admin creates or promotes a member to a billable role while member-promotion-management is enabled, so pending approval workflows can be processed. |
Members::UpdatedCloudEvent |
user_management |
CE | CloudEvent published after one or more member access levels are updated. Skipped on no-op updates (empty members array). |
Members::UpdatedEvent |
user_management |
CE | Published after one or more member access levels are updated. Skipped on no-op updates (empty members array). |
Merge Requests
| Event | Feature category | Edition | Description |
|---|---|---|---|
MergeRequests::ApprovalsResetEvent |
code_review_workflow |
EE | Published when existing approvals on a merge request are reset, typically because new commits were pushed or other state changes invalidated prior approvals. |
MergeRequests::ApprovedCloudEvent |
code_suggestions |
CE | Published when a merge request receives all required approvals. CloudEvent counterpart of the legacy ApprovedEvent, using the CloudEvents v1.0 envelope with a richer payload that includes merge_request IID, project ID, and organization context. |
MergeRequests::ApprovedEvent |
code_review_workflow |
CE | Published when a user approves a merge request. Fires only when the approving user is eligible (not the author, satisfies any approval rules), the MR is not already merged, and the approval record is persisted. |
MergeRequests::AssignedReviewersEvent |
code_review_workflow |
CE | Published when new reviewers are assigned to a merge request. Carries the list of newly assigned reviewers with their IDs and user types. |
MergeRequests::AutoMerge::TitleDescriptionUpdateEvent |
code_review_workflow |
CE | Published when an MR title or description changes while auto-merge is enabled and the project has merge_request_title_regex configured. Does not fire for description-only changes unless EE Jira-key detection also triggers. |
MergeRequests::ClosedEvent |
code_review_workflow |
EE | Published when a merge request is closed, so EE subscribers (such as security policy workers) can react to the state change. |
MergeRequests::CodeConflictEvent |
code_review_workflow |
CE | Published when a merge request cannot be merged due to a code conflict. Only fires when the conflict notification condition is met. |
MergeRequests::CreatedEvent |
code_review_workflow |
EE | Published when a new merge request is created and prepared, so EE subscribers can react to the new merge request. |
MergeRequests::DiscussionsResolvedEvent |
code_review_workflow |
CE | Published when resolving a discussion brings an auto-merge-enabled MR to a fully resolved state (mergeable_discussions_state? becomes true). Does not fire on every resolution - only when the resolution unblocks auto-merge. |
MergeRequests::DraftNotePublishedEvent |
code_review_workflow |
CE | Published when a draft note (pending review comment) is published on a merge request. |
MergeRequests::DraftStateChangeEvent |
code_review_workflow |
CE | Published when an MR title update toggles the “Draft:” prefix and the draft status actually changes. Title updates that leave the draft state unchanged do not fire it. |
MergeRequests::ExternalStatusCheckPassedEvent |
compliance_management |
EE | Published when an external status check response transitions to the passed state for a merge request. |
MergeRequests::MergeRequestPreparedEvent |
code_review_workflow |
CE | Represents a merge request ref being prepared after a push. Carries the project, user, old/new revisions, and the ref name. Not currently published anywhere in the codebase. |
MergeRequests::MergeableEvent |
code_review_workflow |
CE | Published when an asynchronous mergeability check completes with both auto_merge_enabled? and mergeability_checks_pass? true (typically after approvals become sufficient). |
MergeRequests::MergedEvent |
code_review_workflow |
EE | Published when a merge request has been merged and post-merge processing runs, allowing EE subscribers (such as compliance, security policy, and audit workers) to react. |
MergeRequests::OverrideRequestedChangesStateEvent |
code_review_workflow |
CE | Published when a reviewer’s “requested changes” status is overridden on a merge request. |
MergeRequests::PipelineCreationCompletedEvent |
code_review_workflow |
CE | Published when an asynchronous MR-scoped pipeline creation attempt finishes. pipeline_id is set if a Ci::Pipeline row was persisted, nil if creation produced no pipeline (workflow:rules dropped, missing CI config, etc.). Used to re-trigger auto-merge when no Ci::Pipeline.after_transition will fire. |
MergeRequests::ReadyEvent |
code_suggestions |
CE | Published when a merge request transitions from draft to ready status, indicating it is no longer a work in progress. |
MergeRequests::ReopenedEvent |
code_review_workflow |
EE | Published when a closed merge request is reopened, so EE subscribers can react to the state change. |
MergeRequests::UnblockedStateEvent |
code_review_workflow |
CE | Published when the set of blocking merge requests changes (for example, a blocking MR is merged, unlinked, or added). Requires the :blocking_merge_requests feature on the target project, and only fires when the set actually differs from the previous state. |
MergeRequests::UpdatedEvent |
code_review_workflow |
EE | Published when a merge request is updated, so EE subscribers can react to changes on the merge request. |
MergeRequests::ViolationsUpdatedEvent |
security_policy_management |
EE | Published when scan result / approval policy violations on a merge request have been recalculated and persisted, so subscribers can refresh policy state. |
Milestones
| Event | Feature category | Edition | Description |
|---|---|---|---|
Milestones::MilestoneUpdatedEvent |
team_planning |
CE | Published when a milestone’s attributes (title, dates, etc.) are updated. Skipped for no-op saves; the updated_attributes payload lists which attributes actually changed. |
Namespace Settings
| Event | Feature category | Edition | Description |
|---|---|---|---|
NamespaceSettings::AiRelatedSettingsChangedEvent |
ai_abstraction_layer |
EE | Published when a group’s AI-related namespace settings (e.g. experiment_features_enabled) change, so consumers such as the LLM namespace access cache can be refreshed. |
Namespaces
| Event | Feature category | Edition | Description |
|---|---|---|---|
Namespaces::Groups::GroupArchivedEvent |
groups_and_projects |
CE | Published when a group is archived. |
Namespaces::Groups::GroupPathChangedEvent |
groups_and_projects |
CE | Published when a group’s URL path is changed. Not fired for group updates that leave the path unchanged. Deferred via run_after_commit_or_now. |
Organizations
| Event | Feature category | Edition | Description |
|---|---|---|---|
Organizations::ConfirmedEvent |
organization |
CE | Published when an organization transitions from unconfirmed to confirmed. Emitted by Organizations::ConfirmService after the state transition is committed. Not published if the confirmation fails or is rolled back. |
Organizations::GroupTransferredEvent |
organization |
CE | Published when a root group is transferred to a different organization. Fired once for the transferred group only - subscribers are responsible for traversing descendants if needed. Published via run_after_commit_or_now inside the transfer transaction, so it is never emitted on rollback. |
Package Metadata
| Event | Feature category | Edition | Description |
|---|---|---|---|
PackageMetadata::IngestedAdvisoryEvent |
software_composition_analysis |
CE | Published once per advisory record after package security advisories are ingested. Only fires for advisories whose published_date is within the last 14 days (PUBLISHED_ADVISORY_INTERVAL); older advisories are ingested without an event. |
Packages
| Event | Feature category | Edition | Description |
|---|---|---|---|
Packages::PackageCreatedEvent |
package_registry |
CE | Published after a package is created in the package registry. |
Pages
| Event | Feature category | Edition | Description |
|---|---|---|---|
Pages::Domains::PagesDomainCreatedEvent |
pages |
CE | Published when a custom domain is successfully added to a GitLab Pages site. |
Pages::Domains::PagesDomainDeletedEvent |
pages |
CE | Published when a custom domain is removed from a GitLab Pages site. |
Pages::Domains::PagesDomainUpdatedEvent |
pages |
CE | Published when a custom GitLab Pages domain is updated, including on ACME-order retries that reset auto_ssl_failed (retries fire only when auto_ssl_enabled and auto_ssl_failed were both true before). |
Project Authorizations
| Event | Feature category | Edition | Description |
|---|---|---|---|
ProjectAuthorizations::AuthorizationsAddedEvent |
permissions |
CE | Published after project authorization rows are inserted for one or more users. Multiple changes may be batched into a single event group. |
ProjectAuthorizations::AuthorizationsChangedEvent |
permissions |
CE | Defined to signal project authorization access-level changes. Not currently published anywhere in the codebase; a subscriber exists in EE security_subscriptions.rb but no publish call has been added yet. |
ProjectAuthorizations::AuthorizationsRemovedEvent |
permissions |
CE | Published after project authorization rows are deleted, but only for users who are truly removed - not for those whose access level merely changes (those users are excluded by comparing against authorizations being added in the same operation). Events are batched. |
Projects
| Event | Feature category | Edition | Description |
|---|---|---|---|
Projects::ComplianceFrameworkChangedEvent |
compliance_management |
EE | Published when a compliance framework is added to or removed from a project. The event_type field indicates whether the framework was added or removed. |
Projects::ProjectArchivedEvent |
groups_and_projects |
CE | Published when a project is archived. |
Projects::ProjectCreatedEvent |
groups_and_projects |
CE | Published after a new project is successfully created. |
Projects::ProjectDeletedEvent |
groups_and_projects |
CE | Published after a project and all its contents are permanently destroyed. |
Projects::ProjectFeaturesChangedEvent |
groups_and_projects |
CE | Published when a project’s feature availability settings change (for example, issues, wiki, CI enabled/disabled). Not published when ProjectFeature#previous_changes is blank. |
Projects::ProjectPathChangedEvent |
source_code_management |
CE | Published when a project’s URL path (slug) is renamed. |
Projects::ProjectTransferedEvent |
groups_and_projects |
CE | Published after a project is transferred to a different namespace. |
Projects::ProjectVisibilityChangedEvent |
groups_and_projects |
CE | Published when a project’s visibility_level changes. Not published for updates that leave visibility unchanged. |
Projects::ReleasePublishedEvent |
release_orchestration |
CE | Published when a release in waiting_for_publish_event state is made available, processed in batches of 100. Releases are stamped with release_published_at after the event fires. |
Projects::SecurityAttributeChangedEvent |
security_asset_inventories |
EE | Published when a security attribute association is added to or removed from a project. The event_type field indicates whether the attribute was added or removed. |
Repositories
| Event | Feature category | Edition | Description |
|---|---|---|---|
Repositories::DefaultBranchChangedEvent |
source_code_management |
CE | Published when the default branch of a repository changes. |
Repositories::KeepAroundRefsCreatedEvent |
source_code_management |
CE | Published when keep-around refs are written to a repository to prevent commits from being garbage collected. Fires only when at least one non-nil SHA is provided (typically during pipeline creation). Wrapped in Sidekiq::Worker.skipping_transaction_check. |
Repositories::ProtectedBranchCreatedEvent |
source_code_management |
CE | Published after a new branch protection rule is persisted. Fires for both project-level and group-level protected branches; the parent_type payload field distinguishes them. |
Repositories::ProtectedBranchDestroyedEvent |
source_code_management |
CE | Published after a branch protection rule is removed. |
Repositories::RepositoryCreatedEvent |
source_code_management |
CE | Published when a repository is created for a project or other container. |
Sbom
| Event | Feature category | Edition | Description |
|---|---|---|---|
Sbom::SbomIngestedEvent |
software_composition_analysis |
EE | Published after an SBOM report has been ingested for a pipeline and at least one occurrence was recorded. Carries the pipeline_id of the ingestion. |
Sbom::VulnerabilitiesCreatedEvent |
software_composition_analysis |
EE | Published when new vulnerabilities are created from SBOM findings during vulnerability scanning, carrying a batch of finding payloads. |
Search
| Event | Feature category | Edition | Description |
|---|---|---|---|
Search::Zoekt::ForceUpdateOverprovisionedIndexEvent |
global_search |
EE | Published when overprovisioned, ready Zoekt indices with up-to-date used-storage stats are detected, signaling that their watermark levels should be recalculated and corrected. |
Search::Zoekt::IndexMarkPendingEvictionEvent |
global_search |
EE | Published when Zoekt indices that meet the criteria to be marked as pending eviction are detected, so they can be transitioned to the pending-eviction state. |
Search::Zoekt::IndexMarkedAsReadyEvent |
global_search |
EE | Published when initializing Zoekt indices have all of their repositories finished indexing and can therefore be transitioned to the ready state. |
Search::Zoekt::IndexMarkedAsToDeleteEvent |
global_search |
EE | Published when Zoekt indices are eligible for deletion, so the subscribed worker can mark them as pending deletion and clean them up. |
Search::Zoekt::IndexToEvictEvent |
global_search |
EE | Published when Zoekt indices in the pending-eviction state are detected, so the subscribed worker can perform the eviction and free their storage. |
Search::Zoekt::InitialIndexingEvent |
global_search |
EE | Published once per pending Zoekt index assigned to an online node, so the subscribed worker can perform the initial indexing of its repositories. |
Search::Zoekt::LostNodeEvent |
global_search |
EE | Published when a Zoekt node is detected as lost (no longer reporting) while at least one online node remains, so the subscribed worker can clean up the node’s resources. |
Search::Zoekt::NodeWithNegativeUnclaimedStorageEvent |
global_search |
EE | Published when Zoekt nodes are observed with negative unclaimed storage bytes, so the subscribed worker can take corrective action (such as moving namespaces off the over-allocated nodes). |
Search::Zoekt::OrphanedIndexEvent |
global_search |
EE | Published when Zoekt indices that no longer have an associated replica or namespace are detected, so the subscribed worker can mark them as orphaned for deletion. |
Search::Zoekt::OrphanedRepoEvent |
global_search |
EE | Published when Zoekt repositories with no parent project (or otherwise dangling) are detected, so the subscribed worker can mark them as orphaned for cleanup. |
Search::Zoekt::RepoMarkedAsToDeleteEvent |
global_search |
EE | Published when Zoekt repositories that should be deleted are detected, so the subscribed worker can mark them for deletion and remove them from the index. |
Search::Zoekt::RepoToIndexEvent |
global_search |
EE | Published when Zoekt repositories pending indexing are detected, so the subscribed worker can enqueue indexing tasks for them. |
Search::Zoekt::RepoToReindexEvent |
global_search |
EE | Published when Zoekt repositories require reindexing, so the subscribed worker can enqueue reindex tasks (one event per node for parallel processing). |
Search::Zoekt::SaasRolloutEvent |
global_search |
EE | Published periodically on GitLab.com to drive the SaaS rollout of Zoekt exact code search to enabled namespaces. |
Search::Zoekt::TaskFailedEvent |
global_search |
EE | Published when a Zoekt indexing task exhausts its retries and is moved to the failed state, so subscribers can react to the failure. |
Search::Zoekt::TooManyReplicasEvent |
global_search |
EE | Published when more Zoekt replicas exist for a namespace than the configured replica count, so the subscribed worker can prune the excess replicas. |
Search::Zoekt::UpdateIndexUsedStorageBytesEvent |
global_search |
EE | Published when Zoekt indices with stale used-storage statistics are detected, so the subscribed worker can refresh their used_storage_bytes from the underlying repositories. |
Security
| Event | Feature category | Edition | Description |
|---|---|---|---|
Security::PolicyCreatedEvent |
security_policy_management |
EE | Published when a new security policy is persisted as part of syncing a security policy project’s configuration. |
Security::PolicyDeletedEvent |
security_policy_management |
EE | Published when a security policy is removed during synchronization of a security policy project’s configuration. |
Security::PolicyDismissalPreservedEvent |
security_policy_management |
EE | Published when a Security::PolicyDismissal is preserved (transitioned to the preserved status) because it still applies to outstanding violations. |
Security::PolicyResyncEvent |
security_policy_management |
EE | Published to force a full resynchronization of a security policy’s configuration against its linked projects. |
Security::PolicyUpdatedEvent |
security_policy_management |
EE | Published when a security policy’s attributes or rules change during synchronization of a security policy project’s configuration. Carries a diff and a rules_diff payload describing the changes. |
Security::ReportsIngestedEvent |
security_policy_management |
EE | Published after a pipeline’s security reports have been stored, signalling that downstream consumers (such as scan result policy evaluation) can run against the ingested findings. |
Users
| Event | Feature category | Edition | Description |
|---|---|---|---|
Users::ActivityEvent |
user_management |
CE | Published to record user activity within a namespace, used for tracking seat usage and last activity timestamps. Emitted from web request after-actions (when a user and group/project context are both present), from EventCreateService push/design activity, and from Git HTTP and Gitaly-SSH operations. |
Vulnerabilities
| Event | Feature category | Edition | Description |
|---|---|---|---|
Vulnerabilities::BulkDismissedEvent |
vulnerability_management |
EE | Published when a batch of vulnerabilities is dismissed via the bulk dismiss service. Carries an array of per-vulnerability attributes including dismissal reason, optional comment, and the acting user. |
Vulnerabilities::BulkRedetectedEvent |
vulnerability_management |
EE | Published when previously resolved vulnerabilities are transitioned back to detected during security finding ingestion. |
Vulnerabilities::LinkToExternalIssueTrackerCreated |
vulnerability_management |
EE | Published when a vulnerability is linked to an issue in an external issue tracker (for example, Jira). |
Vulnerabilities::LinkToExternalIssueTrackerRemoved |
vulnerability_management |
EE | Published when a vulnerability’s link to an external issue tracker is removed. |
Work Items
| Event | Feature category | Edition | Description |
|---|---|---|---|
WorkItems::BulkUpdatedEvent |
team_planning |
CE | Published after a batch of work items is updated in bulk (for example, milestone cleared on milestone destroy, parent link changes). Each event batch covers up to EVENTS_BATCH_SIZE work items; published via publish_group. |
WorkItems::CreatedEvent |
code_suggestions |
CE | CloudEvent counterpart of WorkItemCreatedEvent, published after a work item is created. Unlike the legacy event, which fires unconditionally, this event is skipped for imports, external authors, non-human users, and work items without a project. Uses the CloudEvents v1.0 envelope and carries a richer payload including work item type and confidentiality. |
WorkItems::StatusChangedEvent |
team_planning |
EE | Published when a work item status is updated. |
WorkItems::WorkItemClosedEvent |
team_planning |
EE | Published when a work item (issue or epic work item) is closed. |
WorkItems::WorkItemCreatedEvent |
team_planning |
CE | Published after a new work item (issue, task, etc.) is created. |
WorkItems::WorkItemDeletedEvent |
team_planning |
CE | Published after a work item is permanently deleted. |
WorkItems::WorkItemReopenedEvent |
team_planning |
EE | Published when a previously closed work item (issue or epic work item) is reopened. |
WorkItems::WorkItemUpdatedEvent |
team_planning |
CE | Published after a work item’s attributes are updated. |