<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>gem.coop</title><link>https://gem.coop/</link><description>Recent content on gem.coop</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Sat, 06 Jun 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://gem.coop/index.xml" rel="self" type="application/rss+xml"/><item><title>namespaces released</title><link>https://gem.coop/updates/7/</link><pubDate>Sat, 06 Jun 2026 00:00:00 +0000</pubDate><guid>https://gem.coop/updates/7/</guid><description>&lt;p&gt;hi again everyone, we&amp;rsquo;re back with exciting news. namespaces on gem.coop have been promoted out of beta and into general availability. that means you can use namespaced gems directly from the top-level gem.coop domain, like this:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-ruby" data-lang="ruby"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;source &lt;span style="color:#e6db74"&gt;&amp;#34;https://gem.coop/@kaspth&amp;#34;&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;do&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; gem &lt;span style="color:#e6db74"&gt;&amp;#34;oaken&amp;#34;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#34;~&amp;gt; 1.0&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;end&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;if you don&amp;rsquo;t already have your own namespace, &lt;a href="https://gem.coop/sign_up"&gt;sign up to reserve yours today!&lt;/a&gt;&lt;/p&gt;
&lt;h4 id="what-about-the-betagemcoop-namespaces-and-gems"&gt;what about the beta.gem.coop namespaces and gems?&lt;/h4&gt;
&lt;p&gt;namespaces and gems are shared between gem.coop and beta.gem.coop, and the beta.gem.coop domain name is going to stick around permanently. this is both so your existing URLs will continue to work, and so we can use that domain to test other features in the future. for example, until we finish resolving all reported issues with &lt;a href="https://gem.coop/docs/cooldowns"&gt;cooldowns&lt;/a&gt;, we&amp;rsquo;re going to keep that feature on the beta domain.&lt;/p&gt;
&lt;h4 id="what-about-cooldowns"&gt;what about cooldowns?&lt;/h4&gt;
&lt;p&gt;we have added support for &lt;a href="https://gem.coop/docs/cooldowns"&gt;cooldowns&lt;/a&gt; to every namespace. you can enable cooldowns by adding &lt;code&gt;/cooldown&lt;/code&gt; to the end of your namespace url, like this:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-diff" data-lang="diff"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;- source &amp;#34;https://gem.coop/@gem-coop&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;+ source &amp;#34;https://gem.coop/@gem-coop/cooldown&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id="thanks"&gt;thanks&lt;/h4&gt;
&lt;p&gt;we couldn&amp;rsquo;t have shipped namespaces out of beta without tireless development and infrastructure work by gem.coop members andré, kasper, david, josef, and olle.&lt;/p&gt;
&lt;p&gt;many of the bugs that needed to be fixed were revealed by our extremely helpful testing group, including andrea, joel, marco, peter, stephen, thomas, and tim.&lt;/p&gt;
&lt;h2 id="terms-and-policies"&gt;terms and policies&lt;/h2&gt;
&lt;p&gt;on top of getting namespaces out of beta, we have also been hard at work finishing our &lt;a href="https://gem.coop/policies/terms"&gt;terms of service&lt;/a&gt; and writing the rest of our policies. so far, we have completed policies around &lt;a href="https://gem.coop/policies/conduct"&gt;conduct&lt;/a&gt;, &lt;a href="https://gem.coop/policies/security"&gt;security&lt;/a&gt;, &lt;a href="https://gem.coop/policies/dmca"&gt;copyright&lt;/a&gt;, &lt;a href="https://gem.coop/policies/names"&gt;name disputes&lt;/a&gt;. we&amp;rsquo;re several drafts in on our privacy notice, and we&amp;rsquo;ll post that soon as well.&lt;/p&gt;
&lt;h2 id="what-else-have-you-been-doing"&gt;what else have you been doing?&lt;/h2&gt;
&lt;p&gt;we&amp;rsquo;ve published a new &lt;a href="https://gem.coop/about/faq"&gt;faq&lt;/a&gt; answering the questions we&amp;rsquo;ve seen most often. there&amp;rsquo;s also a new &lt;a href="https://gem.coop/about/roadmap"&gt;roadmap&lt;/a&gt; listing our completed plans, our current tasks, and our future goals.&lt;/p&gt;
&lt;h2 id="whats-next"&gt;what&amp;rsquo;s next?&lt;/h2&gt;
&lt;p&gt;as the roadmap reveals, we&amp;rsquo;re currently working on fixing bugs in the cooldowns system, adding supporter subscriptions, and providing automation for &amp;ldquo;dev&amp;rdquo; releases of gems, allowing anyone to test a PR or the latest push without having to check out the git repo and build the gem locally.&lt;/p&gt;
&lt;p&gt;we&amp;rsquo;ll be back with more updates as we finish all of those things that we&amp;rsquo;re working on. in the meantime, enjoy those namespaces and &lt;a href="https://github.com/gem-coop/gem.coop/issues"&gt;give us your feedback&lt;/a&gt;!&lt;/p&gt;</description></item><item><title>update #6: how namespaces work</title><link>https://gem.coop/updates/6/</link><pubDate>Thu, 05 Mar 2026 00:00:00 +0000</pubDate><guid>https://gem.coop/updates/6/</guid><description>&lt;h4 id="were-live-in-beta-here-are-our-next-steps"&gt;We’re live in beta! Here are our next steps&lt;/h4&gt;
&lt;p&gt;Last week, we at gem.coop announced support for namespaces that you can publish to and use namespaced gems in Bundler today. Our &lt;a href="https://gem.coop/updates/5/"&gt;original post&lt;/a&gt; outlines how namespaces improve package security, but in this post we’ll go through how to use them and how Bundler handles namespaced gems.&lt;/p&gt;
&lt;p&gt;We’ve already had 166 people sign up to try the beta, and we have 175 namespaces live today. Thank you for trying us out! Please keep the feedback coming. You can sign up at &lt;a href="https://gem.coop/sign_up"&gt;gem.coop/sign_up&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;In the immediate term, we’re working on better support for gems that have been precompiled (we’ve had an overzealous gem version check when you push gems), but we’re pretty close to having it.&lt;/p&gt;
&lt;p&gt;We’ve also been working on incorporating your feedback and we’ve already shipped a more detailed namespace profile and gem profile page. You can see an example of each here:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://gem.coop/@kaspth"&gt;https://gem.coop/@kaspth&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://gem.coop/@kaspth/oaken"&gt;https://gem.coop/@kaspth/oaken&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;While these are early stages we’re intentionally aiming for these to be pages that you as a gem author would feel proud to post. Gem authors are also some of the most conscientious and discerning Rubyists around, and they’re typically plugged in to which gems they’d recommend others check out. We’re working on a lightweight recommendation system to help with that. This work is inspired by seeing what the team at &lt;a href="http://rubyevents.org/"&gt;rubyevents.org&lt;/a&gt; has been putting out, and helping Rubyists show off their work. It’s time gems, the backbone of so much of our day-to-day code, get the same loving treatment.&lt;/p&gt;
&lt;p&gt;For now, all gem.coop namespaces are public and don’t require any authentication. We plan to allow namespaces to have private gems in the future, and those will require authentication. We’ll announce our roadmap soon, along with with what we’re thinking for free and paid plans and pricing.&lt;/p&gt;
&lt;h4 id="how-bundler-handles-namespaces-already"&gt;How Bundler handles namespaces already&lt;/h4&gt;
&lt;p&gt;First, when you claim your personal namespace at &lt;a href="https://gem.coop/sign_up"&gt;https://gem.coop/sign_up&lt;/a&gt;, you get your own index that works just like the global gem.coop index, but it only includes the gems that you’ve published there. As an example, here’s the official namespace for gem.coop: &lt;a href="https://gem.coop/@gem-coop"&gt;https://gem.coop/@gem-coop&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Next, to tell Bundler (and soon, &lt;a href="https://rv.dev/"&gt;rv&lt;/a&gt;) that you want to use gems from your namespace, wrap them in a source block in your Gemfile, like this:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-ruby" data-lang="ruby"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;source &lt;span style="color:#e6db74"&gt;&amp;#34;https://gem.coop&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;gem &lt;span style="color:#e6db74"&gt;&amp;#34;global&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;source &lt;span style="color:#e6db74"&gt;&amp;#34;https://gem.coop/@myspace&amp;#34;&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;do&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; gem &lt;span style="color:#e6db74"&gt;&amp;#34;personal&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;end&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This way Bundler knows to resolve and install &lt;code&gt;personal&lt;/code&gt; through the &lt;code&gt;@myspace&lt;/code&gt; namespace, while other gems should come from the global source.&lt;/p&gt;
&lt;p&gt;If &lt;code&gt;personal&lt;/code&gt; has any internal dependencies, Bundler will also pull those from the same &lt;code&gt;@myspace&lt;/code&gt; source to protect from &lt;a href="https://mensfeld.pl/2021/02/rubygems-dependency-confusion-attack-side-of-things/"&gt;dependency confusion&lt;/a&gt; attacks.&lt;/p&gt;
&lt;p&gt;Now what if &lt;code&gt;personal&lt;/code&gt; and &lt;code&gt;global&lt;/code&gt; share a common dependency like &lt;code&gt;i18n&lt;/code&gt;? How do we resolve that ambiguity and prevent dependency confusion? A case like this:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-ruby" data-lang="ruby"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;source &lt;span style="color:#e6db74"&gt;&amp;#34;https://gem.coop&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;gem &lt;span style="color:#e6db74"&gt;&amp;#34;global&amp;#34;&lt;/span&gt; &lt;span style="color:#75715e"&gt;# depends on i18n&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;source &lt;span style="color:#e6db74"&gt;&amp;#34;https://gem.coop/@myspace&amp;#34;&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;do&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; gem &lt;span style="color:#e6db74"&gt;&amp;#34;personal&amp;#34;&lt;/span&gt; &lt;span style="color:#75715e"&gt;# depends on i18n, too&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;end&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;What source should Bundler pick from to resolve &lt;code&gt;i18n&lt;/code&gt;? The global source, or the namespaced one in &lt;code&gt;@myspace?&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Bundler will consider a namespaced source to rank higher in specificity over a global source, so &lt;code&gt;i18n&lt;/code&gt; will still come from &lt;code&gt;@myspace&lt;/code&gt; if it’s there.&lt;/p&gt;
&lt;p&gt;But what if you’re using two namespaces, one for the organization you work for, and one that you published to your personal namespace, like this:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-ruby" data-lang="ruby"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;source &lt;span style="color:#e6db74"&gt;&amp;#34;https://gem.coop&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;source &lt;span style="color:#e6db74"&gt;&amp;#34;https://gem.coop/@organization&amp;#34;&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;do&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; gem &lt;span style="color:#e6db74"&gt;&amp;#34;business&amp;#34;&lt;/span&gt; &lt;span style="color:#75715e"&gt;# depends on i18n&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;end&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;source &lt;span style="color:#e6db74"&gt;&amp;#34;https://gem.coop/@myspace&amp;#34;&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;do&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; gem &lt;span style="color:#e6db74"&gt;&amp;#34;personal&amp;#34;&lt;/span&gt; &lt;span style="color:#75715e"&gt;# depends on i18n, too&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;end&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;If both &lt;code&gt;@organization&lt;/code&gt;, and &lt;code&gt;@myspace&lt;/code&gt; have versions of &lt;code&gt;i18n&lt;/code&gt;, this case is ambiguous and Bundler doesn’t want to choose for you, since that could be insecure. Instead, Bundler errors out and tells you to declare gem &lt;code&gt;i18n&lt;/code&gt; inside which source you want to pull it from.&lt;/p&gt;
&lt;p&gt;This process of &amp;ldquo;resolving sources&amp;rdquo; requires querying the index for each source, to know which gem names are available, and then Bundler can move on to resolving gem versions. It’s recorded in Gemfile.lock, so it can be skipped the next time Bundler runs (if the lockfile is in sync with the Gemfile).&lt;/p&gt;
&lt;p&gt;Next, let’s look at the HTTP requests that Bundler uses do all of this work.&lt;/p&gt;
&lt;h4 id="how-bundler-queries-sources-resolves-versions-and-installs-gems"&gt;How Bundler queries sources, resolves versions and installs gems&lt;/h4&gt;
&lt;p&gt;To give you more context for how Bundler works, these are the important routes and how Bundler uses them:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;/versions&lt;/code&gt; — used to resolve which gems are in a source&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/info/:name&lt;/code&gt; — to resolve which versions are available for each gem&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/gems/:name-:version.gem&lt;/code&gt; — downloading a gem resolved to one version&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="versions"&gt;&lt;code&gt;/versions&lt;/code&gt;&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://gem.coop/versions"&gt;https://gem.coop/versions&lt;/a&gt; (watch out, it’s ~20mb!)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://gem.coop/@kaspth/versions"&gt;https://gem.coop/@kaspth/versions&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;A text file of gem names + versions + hash of the current /info file.&lt;/p&gt;
&lt;p&gt;The versions file is mostly append only, so Bundler can use HTTP Range requests to update the 20mb version of the global index incrementally.&lt;/p&gt;
&lt;p&gt;When a new gem version is pushed, it goes on a single line at the end of the file like:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;gem 2.0.0 abc123
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Once a month or so, &lt;code&gt;/versions&lt;/code&gt; files are compacted to combine versions, so the lines look like:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;gem 1.0.0, 1.0.1, 2.0.0 abc123
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;If you’ve ever heard talks from the original Bundler maintainers mention the &amp;ldquo;Compact Index&amp;rdquo;, this is it!&lt;/p&gt;
&lt;h4 id="infoname"&gt;&lt;code&gt;/info/:name&lt;/code&gt;&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://gem.coop/info/oaken"&gt;https://gem.coop/info/oaken&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://gem.coop/@kaspth/info/oaken"&gt;https://gem.coop/@kaspth/info/oaken&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;An info file contains versions plus dependencies plus metadata. gem.coop outputs more metadata than RubyGems, like licenses, executables, and published_at time. This is to help us do further install-time optimizations that we’re experimenting with.&lt;/p&gt;
&lt;h4 id="gemsname-versiongem"&gt;&lt;code&gt;/gems/:name-:version.gem&lt;/code&gt;&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://gem.coop/gems/oaken-1.0.0.gem"&gt;https://gem.coop/gems/oaken-1.0.0.gem&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://gem.coop/@kaspth/gems/oaken-1.0.0.gem"&gt;https://gem.coop/@kaspth/gems/oaken-1.0.0.gem&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Finally, when it comes time to install a gem, Bundler downloads a specific gem + version package from this route. If it’s already downloaded and installed, Bundler will skip querying for it.&lt;/p&gt;
&lt;h4 id="wrap-up"&gt;Wrap-up&lt;/h4&gt;
&lt;p&gt;We’re thrilled about the encouraging response to our beta, and the trust the Ruby community is showing us. We’d like to keep earning it.&lt;/p&gt;
&lt;p&gt;If you’d like to sign up for the beta to publish your own gems to your own namespace, you can do so at &lt;a href="https://gem.coop/sign_up"&gt;https://gem.coop/sign_up&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Thank you for trying us out! Please keep the feedback coming. We’ll be here.&lt;/p&gt;</description></item><item><title>gem.coop update #5: namespaces beta</title><link>https://gem.coop/updates/5/</link><pubDate>Tue, 24 Feb 2026 00:45:00 -0800</pubDate><guid>https://gem.coop/updates/5/</guid><description>&lt;p&gt;Today, the gem.coop team is very excited to announce we have reached public beta. If you want to get started right away, &lt;a href="https://gem.coop/sign_up"&gt;sign up now&lt;/a&gt; to start publishing your gems.&lt;/p&gt;
&lt;p&gt;Have you ever come up with a really good gem name, only to discover that name has already been taken and you can&amp;rsquo;t push your gem? Ever been confused about if the gem &lt;code&gt;aws-sdk-malware&lt;/code&gt; was really published by AWS?&lt;/p&gt;
&lt;p&gt;Namespaces are the answer to these problems.&lt;/p&gt;
&lt;p&gt;Our public beta offers anyone the chance to sign up, request a dedicated namespace for publishing gems, and even invite other users to collaborate in an organization.&lt;/p&gt;
&lt;p&gt;It works by creating separate gem sources for each user or organization. So you can get our gems from &lt;a href="https://gem.coop/@gem-coop"&gt;&lt;code&gt;gem.coop/@gem-coop&lt;/code&gt;&lt;/a&gt;, and you can publish your own gems at &lt;code&gt;gem.coop/@yourname&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;In addition to namespaces, we&amp;rsquo;re working hard on other features that you can’t get anywhere else. When the beta is complete, we plan to require a paid plan for namespaces and other exclusive features, like preview builds for every PR, precompiled gems for secure and fast installs, and more.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://gem.coop/sign_up"&gt;Sign up today&lt;/a&gt; to claim your namespace! Once you’ve tried it, &lt;a href="https://github.com/gem-coop/gem.coop/discussions"&gt;give us feedback&lt;/a&gt; about the features you want to see from a gem hosting service.&lt;/p&gt;</description></item><item><title>announcing the 2026 Gem Fellowship</title><link>https://gem.coop/updates/2026-fellowship/</link><pubDate>Mon, 02 Feb 2026 09:44:46 +0800</pubDate><guid>https://gem.coop/updates/2026-fellowship/</guid><description>&lt;p&gt;Last month I announced my latest venture to support the Ruby open source community: the &lt;a href="https://gem.coop/fellowship"&gt;Gem Fellowship&lt;/a&gt;.
I want this grant program to support and fund existing Ruby-related open source project maintainers and their ongoing efforts: fixing bugs and adding features for those libraries we know and love.&lt;/p&gt;
&lt;h2 id="the-class-of-2026"&gt;The Class of 2026&lt;/h2&gt;
&lt;p&gt;We announced $100,000 in available funds, took applications in the month of December and received 40 applications for a total of $439,000 in requested funds.
I&amp;rsquo;ve been working with &lt;a href="https://gem.coop"&gt;gem.coop&lt;/a&gt; to select the highest value projects for the community; we settled on these eight projects.&lt;/p&gt;
&lt;style&gt;
 .fellow-headshots {
 margin: 20px auto;
 }
 .fellow-headshots li {
 display: inline;
 }
 .fellow-headshots img {
 width: 150px;
 display: inline;
 }
&lt;/style&gt;
&lt;ul class="fellow-headshots"&gt;
 &lt;li&gt;&lt;img src="fellows/2026-jeanine.png"&gt;
 &lt;li&gt;&lt;img src="fellows/2026-emil.png"&gt;
 &lt;li&gt;&lt;img src="fellows/2026-james.jpg"&gt;
 &lt;li&gt;&lt;img src="fellows/2026-piotr.jpg"&gt;
 &lt;li&gt;&lt;img src="fellows/2026-chris.png"&gt;
 &lt;li&gt;&lt;img src="fellows/2026-marco.jpg"&gt;
 &lt;li&gt;&lt;img src="fellows/2026-dmitry.jpg"&gt;
 &lt;li&gt;&lt;img src="fellows/2026-jared.jpg"&gt;
&lt;/ul&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Jeanine Adkisson&lt;/strong&gt;	&lt;a href="https://github.com/rouge-ruby/rouge/milestone/3"&gt;https://github.com/rouge-ruby/rouge&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Rouge was created in a fit of rage by jneen in an attic somewhere in south England when her personal website broke due to a libpython linking error in pygments.rb, which was the gold standard of syntax highlighting at the time.
It has since grown into a formidable project, supporting over 200 languages and powering the syntax highlighting of Jekyll, middleman, and Gitlab among others.&lt;/p&gt;
&lt;ol start="2"&gt;
&lt;li&gt;&lt;strong&gt;Emiliano Della Casa&lt;/strong&gt; &lt;a href="https://github.com/emilianodellacasa/ruby-asterisk/milestone/1"&gt;https://github.com/emilianodellacasa/ruby-asterisk&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Ruby-Asterisk is a Ruby client for the Asterisk Manager Interface (AMI) that relies on synchronous telnet connections.
We are transforming it into a comprehensive toolkit for the Asterisk PBX ecosystem by adding native support for the REST Interface (ARI) and FastAGI.
The project is undergoing a major architectural overhaul to leverage modern Ruby concurrency features like Ractors and Async, ensuring thread-safety and compatibility with Ruby 3 and the newest Ruby 4.&lt;/p&gt;
&lt;ol start="3"&gt;
&lt;li&gt;&lt;strong&gt;James Couball&lt;/strong&gt; &lt;a href="https://github.com/ruby-git/ruby-git"&gt;https://github.com/ruby-git/ruby-git&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;code&gt;ruby-git&lt;/code&gt; provides a Ruby interface to the git command line.
The current codebase, while functional, has several design issues that have accrued over time, making it difficult to extend and maintain.
The goal of this project is to refactor the codebase so it can better evolve with the git command itself.
See our &lt;a href="https://github.com/ruby-git/ruby-git/blob/main/redesign/3_architecture_implementation.md"&gt;Architecture Redesign Implementation Plan&lt;/a&gt;.&lt;/p&gt;
&lt;ol start="4"&gt;
&lt;li&gt;&lt;strong&gt;Piotr Murach&lt;/strong&gt; &lt;a href="https://github.com/piotrmurach/tty-markdown"&gt;https://github.com/piotrmurach/tty-markdown&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;TTY::Markdown transforms Markdown content into an easy-to-read format for display in terminal emulators. The grant will contribute to improving this experience through more robust content rendering with native hyperlinks, expanded theme configuration, greater recognition of HTML tags, and support for new elements such as emoji shortcodes or task lists.&lt;/p&gt;
&lt;ol start="5"&gt;
&lt;li&gt;&lt;strong&gt;Christoph Olszowka&lt;/strong&gt; &lt;a href="https://www.ruby-toolbox.com/"&gt;https://www.ruby-toolbox.com/&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Christoph is the long-time author and maintainer of SimpleCov and Ruby Toolbox.
This grant will support &lt;a href="https://github.com/orgs/rubytoolbox/projects/3/views/1?pane=info"&gt;ongoing maintenance&lt;/a&gt; for his projects.&lt;/p&gt;
&lt;ol start="6"&gt;
&lt;li&gt;&lt;strong&gt;Marco Roth&lt;/strong&gt;	&lt;a href="https://herb-tools.dev"&gt;https://herb-tools.dev&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Herb is an HTML-aware ERB parser and tooling foundation that treats HTML+ERB as a structured language rather than plain text.
It provides a lossless syntax tree that enables reliable formatters, linters, language servers, and more advanced rendering and developer tooling in the Ruby ecosystem.&lt;/p&gt;
&lt;p&gt;This grant will be used to stabilize Herb towards a &lt;a href="https://github.com/marcoroth/herb/milestone/1"&gt;1.0-ready tooling and language foundation&lt;/a&gt; for Ruby, with a focus on backwards compatibility.
It will also lay the groundwork for exploring reactivity support in the rendering engine.&lt;/p&gt;
&lt;ol start="7"&gt;
&lt;li&gt;&lt;strong&gt;Dmitry Vorotilin&lt;/strong&gt;	&lt;a href="https://github.com/rubycdp/cuprite/issues/307"&gt;Cuprite&lt;/a&gt;, &lt;a href="https://github.com/rubycdp/ferrum/issues/557"&gt;Ferrum&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Ferrum and Cuprite provide a Ruby bridge to modern headless Chrome and the Capybara driver powering reliable browser-based testing.
With this grant, Dmitry aims to ship Ferrum 1.0 with a stable, clean API and make Cuprite fully compatible so every Capybara test suite runs green on a fast, modern browser stack.&lt;/p&gt;
&lt;ol start="8"&gt;
&lt;li&gt;&lt;strong&gt;Jared White&lt;/strong&gt; &lt;a href="https://www.bridgetownrb.com"&gt;https://www.bridgetownrb.com&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Bridgetown is a content-focused, &amp;ldquo;hybrid&amp;rdquo; web framework supporting both static deploys and full-stack applications.
We&amp;rsquo;re ready to take things to the next level with two initiatives: an official plugin program called &lt;a href="https://github.com/bridgetownrb/bridgetown/issues/1076"&gt;Bridgetown Center&lt;/a&gt; inspired by GNOME Circle, and a high-quality customizable theme called &lt;a href="https://codeberg.org/bridgetownrb/willamette/issues/1"&gt;Willamette&lt;/a&gt; suitable for documentation, publishing, and portfolios.&lt;/p&gt;
&lt;p&gt;Congratulations to our 2026 Gem Fellowship winners!&lt;/p&gt;
&lt;div style="float: right; padding: 20px;"&gt;
 &lt;a href="https://gem.coop"&gt;
 &lt;img src="2026.png" width="240" alt="Winners" license="Creative Commons Attribution-ShareAlike 2.5"&gt;
 &lt;/a&gt;
&lt;/div&gt;
&lt;p&gt;Finally, we want to thank all Fellowship applicants for their time and ongoing effort to build and improve Ruby software.
We can&amp;rsquo;t fund everyone but we hope you will continue to help Ruby&amp;rsquo;s open source community thrive!&lt;/p&gt;
&lt;h2 id="background"&gt;Background&lt;/h2&gt;
&lt;p&gt;Early in my Ruby days, I took over maintenance on the &lt;a href="https://rubygems.org/gems/memcache-client"&gt;&lt;code&gt;memcache-client&lt;/code&gt;&lt;/a&gt; gem.
A year later Couchbase asked me if I would be interested in adding support for memcache&amp;rsquo;s new binary protocol; they would be willing to pay me to do the work.
I accepted their offer and that work turned into the &lt;code&gt;dalli&lt;/code&gt; gem which has benefited the entire Ruby community.
The amount was $3,000, a laughably small amount IMO considering the actual amount of time I spent working on it. 500-1000 hours over the next two years?
But the expertise I developed from that small stipend was absolutely critical to making Sidekiq into the high performance Rubygem which has been so valuable to the Ruby community.
Everybody wins.&lt;/p&gt;
&lt;p&gt;That&amp;rsquo;s the spirit in which I&amp;rsquo;ve created the Gem Fellowship.&lt;/p&gt;
&lt;p&gt;Mike Perham, &lt;a href="mailto:mike@contribsys.com"&gt;mike@contribsys.com&lt;/a&gt;&lt;/p&gt;</description></item><item><title>gem.coop update #4: cooldowns beta</title><link>https://gem.coop/updates/4/</link><pubDate>Wed, 28 Jan 2026 11:20:00 +0800</pubDate><guid>https://gem.coop/updates/4/</guid><description>&lt;p&gt;Hi again, everyone. We&amp;rsquo;ve got a big update for you, and we could use your help testing things out. If you just want to test the cooldowns beta, you can jump straight to &lt;a href="https://gem.coop/cooldowns/"&gt;the cooldown docs&lt;/a&gt;. The rest of this post has updates from the team, as well as more background on why we built cooldowns in the first place.&lt;/p&gt;
&lt;h2 id="recent-work"&gt;Recent work&lt;/h2&gt;
&lt;p&gt;Since our last update, we&amp;rsquo;ve been quite busy all around the Ruby ecosystem:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Ellen has been working on &lt;a href="https://github.com/duckinator/jwl"&gt;&lt;code&gt;jwl&lt;/code&gt;&lt;/a&gt;, demonstrating several ways that gems could be simpler.&lt;/li&gt;
&lt;li&gt;Olle did maintenance work on more repos than you can shake a stick at, including &lt;a href="https://github.com/brunofacca/active-record-query-trace/pull/79"&gt;a big testing PR&lt;/a&gt; to &lt;a href="https://github.com/brunofacca/active-record-query-trace/"&gt;ActiveRecordQueryTrace&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Martin built the &lt;a href="https://github.com/martinemde/skillet"&gt;Skillet&lt;/a&gt; CLI tool to run Claude Skills as shell scripts.&lt;/li&gt;
&lt;li&gt;André (with lots of help from David) worked on the new &lt;a href="https://spinel.coop/blog/rv-clean-install/"&gt;&lt;code&gt;rv clean-install&lt;/code&gt; command&lt;/a&gt;, which works like &lt;code&gt;bundle install --frozen&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;David also fixed countless bugs in &lt;a href="https://rv.dev"&gt;&lt;code&gt;rv&lt;/code&gt;&lt;/a&gt;, ensuring that installing ruby, installing gems, and compiling native extensions all work as expected.&lt;/li&gt;
&lt;li&gt;Samuel built and shipped the &lt;a href="https://github.com/persona-id/arctic"&gt;arctic&lt;/a&gt; gem, providing frozen strings from ENV to save on allocations.&lt;/li&gt;
&lt;li&gt;Josef has been &lt;a href="https://rubyelders.com/writings/2026-01-ruby-box-reload.html"&gt;investigating the new RubyBox feature in Ruby 4.0&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Kasper, our newest member, released 1.0 versions for his Rails extensions &lt;a href="https://github.com/kaspth/oaken"&gt;Oaken&lt;/a&gt;, &lt;a href="https://github.com/kaspth/active_record-associated_object" title="active_record-associated_object"&gt;Associated Object&lt;/a&gt;, &lt;a href="https://github.com/kaspth/action_controller-stashed_redirects" title="action_controller-stashed_redirects"&gt;Stashed Redirects&lt;/a&gt;, and &lt;a href="https://github.com/kaspth/active_job-performs" title="active_job-performs"&gt;Performs&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In addition to all of that work, we&amp;rsquo;ve also been experimenting with different ways of serving gems. Some of our experiments aren&amp;rsquo;t fully baked yet, and we&amp;rsquo;ll be back with more announcements soon. Today, we&amp;rsquo;d like to talk about our first fully baked experiment: cooldowns.&lt;/p&gt;
&lt;h2 id="whats-a-cooldown"&gt;What&amp;rsquo;s a cooldown&lt;/h2&gt;
&lt;p&gt;The concept of cooldowns is probably best explained in William Woodruff&amp;rsquo;s blog post &lt;a href="https://blog.yossarian.net/2025/11/21/We-should-all-be-using-dependency-cooldowns"&gt;We should all be using dependency cooldowns&lt;/a&gt;. The short version is that waiting a couple of days before upgrading your dependencies is a very effective security measure. Most compromised or malware-loaded packages are discovered and removed within a day or two. The very most sophisticated attacks (like &lt;a href="https://research.swtch.com/xz-timeline"&gt;the attack on xz&lt;/a&gt;) managed to avoid discovery for about 5 weeks, but attacks of that sophistication are extremely rare. As William points out in his post, just waiting 48 hours would have avoided almost all of the significant supply chain attacks from the last 18 months.&lt;/p&gt;
&lt;p&gt;A few weeks later, William posted a follow-up titled &lt;a href="https://blog.yossarian.net/2025/12/13/cooldowns-redux"&gt;Dependency cooldowns, redux&lt;/a&gt;. The follow-up post addresses the most common questions. The biggest question seems to be &amp;ldquo;if everyone does this, won&amp;rsquo;t that make doing it pointless?&amp;rdquo;. The good news is that even if every developer is using cooldowns, the security companies will still be scanning the latest packages. That means cooldowns are still an effective mitigation measure, even if no developers ever see the malicious packages.&lt;/p&gt;
&lt;p&gt;Both Dependabot and Renovate clearly think this is a good idea, since they offer cooldowns as a feature you can configure. Something we realized while discussing the blog post is that it would be great to have a way for anyone to be able to wait. After a weekend of coding and a few weeks of bug hunting, we have a way for anyone to be able to wait.&lt;/p&gt;
&lt;p&gt;We&amp;rsquo;re launching cooldowns as a beta feature, meaning it&amp;rsquo;s only available from &lt;code&gt;beta.gem.coop&lt;/code&gt;. By offering new features on a different subdomain, we can make sure it&amp;rsquo;s easy to tell at a glance that there might still be issues. We also want to incorporate feedback from testing before we launch the final version.&lt;/p&gt;
&lt;h2 id="using-cooldowns"&gt;Using cooldowns&lt;/h2&gt;
&lt;p&gt;The cooldown source has a 48 hour delay, and updates at least once every hour.&lt;/p&gt;
&lt;p&gt;To use the cooldowns feature, ensuring that you aren&amp;rsquo;t able to see or install any gems that are less than 48 hours old, change the &lt;code&gt;source&lt;/code&gt; in your Gemfile like this:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-diff" data-lang="diff"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;-source &amp;#34;https://gem.coop&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;+source &amp;#34;https://beta.gem.coop/cooldown&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;If you need to install any gems that have just been released with critical security fixes, you can do that too:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-ruby" data-lang="ruby"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;source &lt;span style="color:#e6db74"&gt;&amp;#34;https://beta.gem.coop/cooldown&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;gem &lt;span style="color:#e6db74"&gt;&amp;#34;no-security-problems&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;source &lt;span style="color:#e6db74"&gt;&amp;#34;https://gem.coop&amp;#34;&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;do&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; gem &lt;span style="color:#e6db74"&gt;&amp;#34;security-just-fixed&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;end&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;By using the main &lt;code&gt;gem.coop&lt;/code&gt; server as a secondary source, you can force the latest version of any gem, even if it isn&amp;rsquo;t cooled down yet. Don&amp;rsquo;t do that if you can help it, but it&amp;rsquo;s a good escape hatch to allow security fixes if necessary.&lt;/p&gt;
&lt;p&gt;What do you think? Is 48 hours a good default cooldown time? Is a cooldown server helpful for you? Helpful for your company? How would you want to filter your gems? Let us know in the &lt;a href="https://github.com/gem-coop/gem.coop/discussions/"&gt;discussions on GitHub&lt;/a&gt;, or &lt;a href="https://join.slack.com/t/bundler/shared_invite/zt-3kza12u0j-Fw3rwvPi6zqe6EC3RCDGMA"&gt;join the Bundler Slack&lt;/a&gt; and chat with us in &lt;a href="https://slack.com/archives/C09JU5AP8J2"&gt;#gem-coop&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Don&amp;rsquo;t forget to &lt;a href="https://github.com/gem-coop/gem.coop/issues"&gt;report bugs&lt;/a&gt; if you run into any issues!&lt;/p&gt;</description></item><item><title>gem.coop update #3: thank you</title><link>https://gem.coop/updates/3/</link><pubDate>Thu, 27 Nov 2025 13:10:00 -0800</pubDate><guid>https://gem.coop/updates/3/</guid><description>&lt;p&gt;Over the past few months, a lot has changed. Our team has grown closer together,
the appetite for innovation in Ruby has skyrocketed, and in every part of the
Ruby community we&amp;rsquo;ve seen more engagement and collaboration.&lt;/p&gt;
&lt;p&gt;Ruby cracked open a little and the community stepped in to fill the gaps.&lt;/p&gt;
&lt;p&gt;We&amp;rsquo;re reaching out to let you know that we are all grateful for your support.
We&amp;rsquo;re excited to see what we can make together.&lt;/p&gt;
&lt;p&gt;Thank you.&lt;/p&gt;
&lt;p&gt;P.S. At SFRuby Conf, Mike Perham (@mperham) announced the &lt;a href="https://gem.coop/fellowship"&gt;Gem
Fellowship&lt;/a&gt;, a grant partnership between
&lt;a href="https://gem.coop"&gt;gem.coop&lt;/a&gt; and &lt;a href="https://contribsys.com"&gt;Contributed Systems&lt;/a&gt;
to provide $100,000 in grants for each of the next three years. We can&amp;rsquo;t wait to
see what you build!&lt;/p&gt;</description></item><item><title>the gem fellowship</title><link>https://gem.coop/updates/gem-fellowship/</link><pubDate>Thu, 20 Nov 2025 00:00:00 +0000</pubDate><guid>https://gem.coop/updates/gem-fellowship/</guid><description>&lt;p&gt;From guest author, Mike Perham (@mperham), creator and maintainer of Sidekiq.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m happy to announce the &lt;strong&gt;Gem Fellowship&lt;/strong&gt;, a grant partnership with &lt;a href="https://gem.coop"&gt;gem.coop&lt;/a&gt;, the new open source cooperative in the Ruby community. &lt;a href="https://contribsys.com"&gt;Contributed Systems&lt;/a&gt;, my company behind Sidekiq Pro and Sidekiq Enterprise, is committing to provide $100,000 in grants for each of the next three years. These grants are meant to provide funding to the altruistic people who maintain and improve the open source tools freely available to the Ruby community.&lt;/p&gt;
&lt;h2 id="quick-details"&gt;Quick Details&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;These awards are meant for existing projects, this is not meant as seed funding for the creation of new projects.&lt;/li&gt;
&lt;li&gt;People can apply during the month of December 2025.&lt;/li&gt;
&lt;li&gt;Decisions and notifications will follow in January 2026.&lt;/li&gt;
&lt;li&gt;Applications will be reviewed by four active members of gem.coop plus @mperham.&lt;/li&gt;
&lt;li&gt;Grants will be awarded in increments of $2,500.&lt;/li&gt;
&lt;li&gt;The maximum award for a single project is $25,000.&lt;/li&gt;
&lt;li&gt;A minimum of 5 different projects will be funded.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="faq"&gt;FAQ&lt;/h2&gt;
&lt;p&gt;Q. What are grant winners required to do?&lt;br&gt;
A. Your grant proposal in December should have a description of the work you&amp;rsquo;d like to perform and a requested grant amount.
The award committee will reach out if your proposal is accepted.
You do the work.
You then email a final work summary with payment details once the work is substantially complete; we will verify your work and pay out the agreed stipend within one month.&lt;/p&gt;
&lt;p&gt;Q. Can other companies add additional funds to increase the size or number of Fellowships?&lt;br&gt;
A. Yes! Gem.coop wants to represent the broader open source Ruby community, and we would love to increase the impact of this program with support from your company.&lt;/p&gt;
&lt;p&gt;Q. Can a project publicly blog or link back to their Gem Fellowship?&lt;br&gt;
A. Yes! We will publish a page annually with the list of winning projects which you can link in your README, for example.&lt;/p&gt;
&lt;p&gt;Q. Can I apply if I don&amp;rsquo;t own the project I want to work on?&lt;br&gt;
A. You should clearly document that the project is interested in mentoring you or accepting your completed work.
Like any open source contribution, it&amp;rsquo;s best if you open an issue and discuss it with the team.&lt;/p&gt;
&lt;p&gt;Q. Can I apply if I am an individual?&lt;br&gt;
A. These fellowships are intended for individuals, so yes!&lt;/p&gt;
&lt;p&gt;Q. Can I apply if I live outside the United States?&lt;br&gt;
A. Yes, but we need to be able to pay you somehow.
If your proposal is accepted, we&amp;rsquo;ll be in touch regarding payment.
If there are payment concerns, please note any issues in your proposal.&lt;/p&gt;
&lt;p&gt;Q. Who&amp;rsquo;s deciding?&lt;br&gt;
A. Mike Perham, David Rodrígeuz, Josef Šimánek, Martin Emde, and Ellen Marie Dash are the five who will judge. All are long-time open source contributors to the Ruby community.&lt;/p&gt;</description></item><item><title>gem.coop update #2</title><link>https://gem.coop/updates/2/</link><pubDate>Tue, 18 Nov 2025 22:42:27 -0800</pubDate><guid>https://gem.coop/updates/2/</guid><description>&lt;p&gt;Hi everyone. We&amp;rsquo;ve heard that you want to know what we&amp;rsquo;re up to, so we&amp;rsquo;re writing to keep you all up on the latest.&lt;/p&gt;
&lt;p&gt;Since we last wrote, we have continued our &lt;a href="https://github.com/gem-coop/governance/issues/7"&gt;governance plan&lt;/a&gt;. Before voting to elect leadership, we decided to &lt;a href="https://github.com/gem-coop/governance/pull/9"&gt;eliminate the single &amp;ldquo;Project Leader&amp;rdquo; role&lt;/a&gt;, to align more closely with the way we have worked together in the past. Once that change was made, we held nominations and elections for the &lt;a href="https://github.com/gem-coop/governance/blob/11b92916b5a159cadcf3e4d90dd9506a69a190e7/Gem.coop-Governance.md#5-maintainers"&gt;Project Leadership Committee&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;We are happy to announce that the contributors to &lt;a href="http://rubygems.org/"&gt;RubyGems.org&lt;/a&gt; in the last 12 months have elected the first &lt;a href="https://gem.coop/"&gt;gem.coop&lt;/a&gt; &lt;a href="https://github.com/gem-coop/governance/blob/11b92916b5a159cadcf3e4d90dd9506a69a190e7/Gem.coop-Governance.md#3-project-leadership-committee"&gt;Project Leadership Committee&lt;/a&gt;, with members &lt;a href="https://github.com/martinemde"&gt;@martinemde&lt;/a&gt;, &lt;a href="https://github.com/indirect"&gt;@indirect&lt;/a&gt;, and &lt;a href="https://github.com/duckinator"&gt;@duckinator&lt;/a&gt;. Next, we&amp;rsquo;ll be working together to set up the official list of &lt;a href="https://github.com/gem-coop/governance/blob/11b92916b5a159cadcf3e4d90dd9506a69a190e7/Gem.coop-Governance.md#5-maintainers"&gt;Maintainers&lt;/a&gt;, and selecting the &lt;a href="https://github.com/gem-coop/governance/blob/11b92916b5a159cadcf3e4d90dd9506a69a190e7/Gem.coop-Governance.md#4-technical-steering-committee"&gt;Technical Leadership Committee&lt;/a&gt; from those maintainers.&lt;/p&gt;
&lt;p&gt;We are also excited to report that we have finalized a contract with &lt;a href="https://www.fastly.com/"&gt;Fastly&lt;/a&gt; to participate in their &lt;a href="https://www.fastly.com/fast-forward"&gt;Fast Forward&lt;/a&gt; program, meaning our &lt;a href="https://www.fastly.com/products/cdn"&gt;CDN infrastructure is now being donated by Fastly&lt;/a&gt;. Thank you very much to Fastly for their consistent support of open source infrastructure.&lt;/p&gt;
&lt;p&gt;With those important start-up items now much farther along, we&amp;rsquo;re looking forward to turning more of our attention and focus to shipping new features. As always, if you&amp;rsquo;re interested in contributing, asking questions, or just hanging out, you&amp;rsquo;re welcome to join the &lt;a href="https://join.slack.com/t/bundler/shared_invite/zt-3kza12u0j-Fw3rwvPi6zqe6EC3RCDGMA"&gt;Bundler Slack&lt;/a&gt; and chat with us in the #gem-coop channel.&lt;/p&gt;
&lt;p&gt;Until next time,&lt;br&gt;
The Gem Cooperative Team&lt;/p&gt;</description></item><item><title>gem.coop update #1</title><link>https://gem.coop/updates/1/</link><pubDate>Wed, 05 Nov 2025 16:04:27 -0800</pubDate><guid>https://gem.coop/updates/1/</guid><description>&lt;p&gt;Hello from the gem.coop engineers!&lt;/p&gt;
&lt;p&gt;This is our first newsletter. We’ll be sending these out whenever we feel there’s something useful to say, to keep you all updated on our progress. You can follow along via email or via RSS feed at &lt;a href="https://gem.coop/index.xml"&gt;https://gem.coop/index.xml&lt;/a&gt;. If you were forwarded this email and you want to sign up, go to &lt;a href="https://gem.coop/"&gt;gem.coop&lt;/a&gt; and enter your email there.&lt;/p&gt;
&lt;h2 id="traffic-report"&gt;Traffic report&lt;/h2&gt;
&lt;p&gt;In October, gem.coop served&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;17,233,484 requests&lt;/li&gt;
&lt;li&gt;1,410 GB of data&lt;/li&gt;
&lt;li&gt;for $243 total&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That’s quite a lot of gems! Thanks for trusting us as your gem server. It’s exciting to see so many people using gem.coop and we can’t wait to introduce some of the new features for the community.&lt;/p&gt;
&lt;h2 id="governance-progress"&gt;Governance progress&lt;/h2&gt;
&lt;p&gt;We have open-sourced our governance documents and processes, based on Homebrew’s governance, at &lt;a href="https://github.com/gem-coop/governance"&gt;github.com/gem-coop/governance&lt;/a&gt;. We are following a &lt;a href="https://github.com/gem-coop/governance/issues/7"&gt;public bootstrapping process&lt;/a&gt;, and so far we have &lt;a href="https://github.com/gem-coop/governance/issues/8"&gt;offered voting membership&lt;/a&gt; to everyone &lt;a href="https://mikemcquaid.com/rubygems-contribution-data-with-homebrews-tooling/"&gt;Mike McQuaid listed&lt;/a&gt; as writing, approving, or merging at least one pull request to RubyGems within the last year, using the &lt;code&gt;brew contributions&lt;/code&gt; CLI tool.&lt;/p&gt;
&lt;p&gt;Our next step is for everyone who agreed to vote to actually use those votes to choose the members of the Project Leadership and Technical Steering groups.&lt;/p&gt;
&lt;h2 id="infrastructure--hosting"&gt;Infrastructure &amp;amp; hosting&lt;/h2&gt;
&lt;p&gt;We launched gem.coop using Fastly’s &lt;a href="https://www.fastly.com/products/edge-compute"&gt;Edge Compute&lt;/a&gt;, and it has worked extremely well so far. During October, we applied to join the &lt;a href="https://www.fastly.com/fast-forward"&gt;Fast Forward program&lt;/a&gt; at Fastly, which provides free hosting for open source projects, including RubyGems.org, PyPI, Rust’s crates.io, the Curl project, and many others. We found Fastly to be reliable and helpful partners when we worked with them on RubyGems.org, and we are looking forward to working with them again on our new efforts.&lt;/p&gt;
&lt;h2 id="coming-up-next"&gt;Coming up next&lt;/h2&gt;
&lt;p&gt;We have a lot of ideas! We’re working on experiments around faster indexes and gem installation, offering namespaced gem servers for existing gem clients, and building client support for multiple gem namespaces inside a single server.&lt;/p&gt;
&lt;p&gt;If you’d like to participate, we have created a channel in the &lt;a href="https://join.slack.com/t/bundler/shared_invite/zt-3kza12u0j-Fw3rwvPi6zqe6EC3RCDGMA"&gt;Bundler Slack&lt;/a&gt; named &lt;a href="https://slack.com/archives/C09JU5AP8J2"&gt;#gem-coop&lt;/a&gt; that is open to everyone. We would love to discuss or work together on ideas for the future of gem hosting. It’s also the first place you’ll hear about some of the things we’re testing.&lt;/p&gt;
&lt;p&gt;See you next time,&lt;br&gt;
The Gem Co-op Team&lt;/p&gt;</description></item><item><title>introducing gem.coop</title><link>https://gem.coop/updates/0/</link><pubDate>Fri, 03 Oct 2025 00:00:00 +0000</pubDate><guid>https://gem.coop/updates/0/</guid><description>&lt;p&gt;We’re excited to introduce &lt;strong&gt;gem.coop&lt;/strong&gt; &amp;ndash; a new server for gems in the &lt;a href="https://ruby-lang.org/"&gt;Ruby&lt;/a&gt; ecosystem.&lt;/p&gt;
&lt;p&gt;We aim for fast, simple hosting, that is compatible with &lt;a href="https://bundler.io/"&gt;Bundler&lt;/a&gt; but optimized for the next generation. It’s built for the community by the former maintainers and operators of &lt;a href="https://rubygems.org/"&gt;RubyGems.org&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;All gems published to &lt;a href="https://rubygems.org/"&gt;RubyGems.org&lt;/a&gt; are available, updated in real time. Get started right now with a simple change to your &lt;a href="https://bundler.io/guides/gemfile.html"&gt;Gemfile&lt;/a&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-diff" data-lang="diff"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;-source &amp;#34;https://rubygems.org&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;+source &amp;#34;https://gem.coop&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;If you want to follow along with our progress, subscribe to the gem.coop newsletter for monthly updates.&lt;/p&gt;
&lt;p&gt;Our goal is to provide fast, community-owned, transparent, sustainable, and secure gem hosting for everyone. We’re launching with support for bundling and installing all public gems, and we’re excited to keep improving.&lt;/p&gt;
&lt;p&gt;— The Gem Cooperative (&lt;a href="https://github.com/deivid-rodriguez"&gt;@deivid-rodriguez&lt;/a&gt;, &lt;a href="https://github.com/duckinator"&gt;@duckinator&lt;/a&gt;, &lt;a href="https://github.com/indirect"&gt;@indirect&lt;/a&gt;, &lt;a href="https://github.com/kaspth"&gt;@kaspth&lt;/a&gt;, &lt;a href="https://github.com/martinemde"&gt;@martinemde&lt;/a&gt;, &lt;a href="https://github.com/olleolleolle"&gt;@olleolleolle&lt;/a&gt;, &lt;a href="https://github.com/segiddins"&gt;@segiddins&lt;/a&gt;, &lt;a href="https://github.com/simi"&gt;@simi&lt;/a&gt;)&lt;/p&gt;</description></item></channel></rss>