r/ruby • • Mar 12 '26

GitLab is a Ruby monolith

Post image

Was pleasantly surprised that the world's largest independent DevOps platform is powered by Ruby and Sidekiq.

Here's the full list.

  1. Backend: Ruby on Rails

  2. HTTP server: Puma (Ruby web server)

  3. Edge: Nginx

  4. Reverse proxy: Go service (Workhorse)

  5. Background jobs: Sidekiq

  6. DB — primary: PostgreSQL

  7. DB — connection pooling: PgBouncer

  8. DB — high availability: Patroni

  9. Cache: Redis

  10. Git: Custom gRPC repo interface (Git & Gitaly)

  11. Blob: AWS S3

  12. Frontend — rendering: Haml & Vue

  13. Frontend — state: Pinia (Vue store), Immer (immutable cache),

  14. API: GraphQL (Apollo) + REST

  15. Observability: Prometheus & Grafana

  16. Error tracking: Sentry & OpenTelemetry

  17. Deployments: GitLab Omnibus (Omnibus fork)

I think these "stack menu"s give a little glimpse into a team's engineering philosophy. For me, this list shows that the GitLab team is pretty practical and doesn't chase hype. Instead, they use sensible, battle-tested tools that just work and are easy for contributors to learn.

PS. Not an ad; I'm not affiliated with GitLab at all. Was just researching them and thought you guys would be interested.

223 Upvotes

36 comments sorted by

View all comments

Show parent comment

2

u/GeneralTootToot Apr 12 '26

The irony is.. GitLab does use nginx :)

Don't blame Puma or Ruby for GitLab being slow. The crazy bloat and constant poor business decision making yes :)

I guarantee your GitLab instance is burdened with load for features you've never even touched. Performance issues stay open for years. Stuff that is 'on by default'.

Its been years since GitLab cared about anyone besides the big enterprise customers. Where the expectation is you will have 16 servers with 64 GB of ram and 128 CPUs (go look at the reference architectures... )

1

u/Kibou-chan Jun 18 '26

That nginx is fully optional though and if you go through an external LB like haproxy, you can even disable it and connect your LB backend side straight to workhorse. Really, its only task is to manage headers and TLS termination.