A simple Ruby web application for hosting your own private RubyGems server with full push/yank API support.
Geminabox is a Ruby web application that enables you to host your own private RubyGems server. It solves the problem of needing a controlled, internal repository for Ruby gems, allowing teams to manage proprietary gems or mirror public gems behind a firewall. It replicates the core functionality of rubygems.org in a simple, self-hosted package.
Ruby development teams and organizations that need to host private gems internally, such as companies with proprietary libraries, teams in restricted network environments, or projects requiring gem caching and offline access.
Developers choose Geminabox because it's lightweight, follows RubyGems standards exactly, and is trivial to deploy using Rack or Docker. It offers a no-fuss, self-contained solution without the complexity of larger artifact repositories.
Really simple rubygem hosting
Open-Awesome is built by the community, for the community. Submit a project, suggest an awesome list, or help improve the catalog on GitHub.
Supports standard gemcutter push/yank APIs and Bundler dependencies API, allowing direct use with `gem` command and Bundler without modifications, as shown in client usage examples.
Can be deployed with any Rack-compatible server (e.g., passenger, thin) or Docker, with simple config.ru setup and Dockerfile provided for easy containerization.
Configurable to fetch missing gems from rubygems.org via RUBYGEMS_PROXY setting, enabling use as a transparent proxy or cache for offline or controlled environments.
Allows custom callbacks (e.g., for notifications) on gem receipt via `Geminabox.on_gem_received`, though requires async handling to avoid blocking APIs.
Authentication is delegated to the web server or Rack middleware, requiring additional setup (e.g., Rack::Auth) rather than offering built-in user management.
The README warns that Rack::Session::Pool, suggested for sessions, doesn't work with multiprocess servers like unicorn and causes memory leaks, complicating scalability.
Hooks block POST API processing until completion, which can lead to HTTP timeouts if not implemented asynchronously, as explicitly noted in the documentation.