<!-- Design Documents often contain forward-looking statements -->
<!-- vale gitlab.FutureTense = NO -->
## Status
**Proposed.**
## Context
[GitLab Orbit](../) and the [Data Insights Platform](/handbook/engineering/architecture/design-documents/data_insights_platform/)(DIP)
are being delivered to GitLab Self-Managed. Orbit depends on DIP, and DIP is made up of three components
that most Self-Managed installations do not run today:
1.[**Siphon**](https://gitlab.com/gitlab-org/analytics-section/siphon): manages replication from GitLab's PostgreSQL data into ClickHouse.
1.[**NATS**](https://docs.nats.io/): the messaging system that carries the replicated change data.
1.[**ClickHouse**](https://clickhouse.com/docs): the column-oriented database management system that stores it.
Several properties of these components shape how they can be delivered:
1. Orbit and DIP are complex to configure.
1. ClickHouse is also an optional GitLab component outside of DIP.
1. There are discussions to make NATS a core GitLab component outside of DIP and Orbit. ([issue #17582](https://gitlab.com/groups/gitlab-org/-/work_items/17582))
1. DIP is coupled to the GitLab Rails PostgreSQL migrations.
1. DIP has upgrade constraints that must be respected when GitLab and DIP are upgraded.
1. Neither DIP nor Orbit uses [Theseus](/handbook/engineering/architecture/design-documents/theseus_platform_vision/) as of now.
For Self-Managed customers to install, configure, and upgrade Orbit and DIP without undue effort,
we need to decide two things: how to shape the packages, and how those packages are installed.
### Package sizing
Shipping Orbit, Siphon, NATS, and ClickHouse as individual components is not feasible because the burden
of wiring and maintaining that stack is too high and would fall entirely on the customer.
The components need to be grouped into reasonably sized bundles instead. The open question is whether that
is one bundle or two. That means weighing the future demand for DIP outside of the Orbit context against the
added complexity of shipping both independently.
```mermaid
flowchart LR
subgraph opt1["Option 1: one Orbit bundle"]
direction TB
P1["Orbit + DIP chart"]
P1 --> A1["Orbit"]
P1 --> A2["Siphon"]
P1 --> A3["NATS"]
P1 --> A4[(ClickHouse)]
end
subgraph opt2["Option 2: Orbit and DIP as independent bundles"]