Fetching the latest programs, projects, and workspace data.
Find open source projects actively accepting contributors. Search repositories, filter by program milestones, difficulty tags, or tech stack.
Use our Orbit AI Matcher to find out! Get instant matching scores based on your developer skills, preferred frameworks, and contribution experience.
Convert your selected open-source project into a winning GSoC, LFX, or Outreachy application using Proposal Studio.
Ruby uses garbage collection (GC) to automatically reclaim memory that was allocated by a program, but no longer used. Consequently, users do not have to manually manage memory, and can more easily avoid memory management issues such as memory leak. However, the program being executed must be stopped for the GC to run. Therefore the efficiency of the GC algorithm will affect the performance of the program. The project’s goal is to reduce the cost of GC when there are multiple fibers. Fibers are a memory efficient way to implement cooperative concurrency. Programmers control scheduling of the fiber instead of the operating system, making it possible to better allocate CPU resources. Ruby 3.0, released in 2020, added a Fiber Scheduler, which enables asynchronous behaviour in programs. Ruby’s GC scans through a program’s memory at various points during its execution, identifies which objects are no longer used, and removes them using an incremental tri-color mark and sweep algorithm and generational garbage collection. Improving the GC cost when there are many fibers will enhance the performance of Ruby programs, particularly asynchronous Ruby programs making use of fibers. Deliverables: 1. Reproducible test that triggers GC for fibers 2. Identification of GC bottlenecks for fibers 3. Reduction of bottlenecks compared to benchmark test through improvements to GC 4. Documentation of the above
Documentation refers to the additional text associated with a codebase to help developers and/or clients/users understand the code/use cases better. Documentation is of two types - 1) Documentation within the code and 2) Documentation about the code. Ruby supports the generation of documentation for a particular codebase using comments written internally in files by tools such as RDoc, and YARD. RBS is a newly developed language for describing the structure of Ruby programs. RBS, similar to Ruby, supports adding comments in the source file. Hence, this feature can be effectively utilized to write encoded inline documentation to later generate well-formatted markup documentation. RBS currently has support for a lot of features. RBS can find its arguably best application in generating typed documentation of a particular codebase.
Ruby 3 introduced Ractors, which allow true concurrency in the language. However, Ruby's stop-the-world Garbage Collector (GC) pauses all of the Ractors when doing Garbage Collection. This diminishes the efficiency of using Ractors. This project proposes to modify the Ruby GC to improve its performance with Ractors, ideally by having only one Ractor paused at a time. The idea is to investigate the ways in which the GC can avoid interfering with objects belonging to Ractors that it is not working on, which would allow these Ractors to continue unhindered during Garbage Collection. The final objective would be to have code for an improved version of Ruby's GC with measurable gains in efficiency.
<p><a href="https://github.com/ruby/rbs" target="_blank">RBS</a>, a type annotation language and tool for Ruby, is about to be bundled with Ruby 3.0. Gradual typing with RBS allows Rubyists to enjoy the benefits of static analysis.</p> <p>However, RBS is still a developing technology and its immediate applicability is somewhat unknown. In particular, it is an important task to verify and improve the practicality of RBS in Rails apps, where Ruby is typically used.</p> <p>I'll apply RBS and its related software to real Rails apps and examine their utility. <a href="https://github.com/soutaro/steep" target="_blank">Steep</a>, a static analysis tool that uses RBS, and <a href="https://github.com/pocke/rbs_rails" target="_blank">RBS Rails</a>, a tool that facilitates the use of RBS in Rails apps, will be targeted for the investigation. I aim to complement the implementation and improve its completeness until they reach a practical level.</p>
<p>The most frequently used Ruby Core APIs <code>Kernel::require</code> and <code>Kernel::require_relative</code> are doing the same work: it’s to resolve the file path, read the file, compile ruby source to bytecode or load a shared object, evaluate and add an entry to <code>$LOADED_FEATURES</code> . But if using Ruby stdlib benchmark to profile their performance, we can figure out a fact: <code>require</code> a relative path is almost 10 times slower than <code>require</code> an absolute path and about 4 times slower than <code>require_relative</code> the same path. This proposal aims to figure out the reason and optimize it.</p>
Scarpe is a project designed to resurrect the shoes library using modern technology. This project aims to leverage an HTML/CSS/JS/RUBY stack to develop GUI apps, which can be deployed across various platforms.. The primary objective of Scarpe is to bring it closer to shoes by ensuring that all known examples run seamlessly. The project also aims to create comprehensive documentation and build an official Scarpe website to provide easy access to project resources. Furthermore, there are plans to make Glimmer lib UI an efficient secondary display service. Scarpe represents a significant opportunity to modernize the shoes library and bring it to a wider audience
RubyGems.org currently lacks transparency into critical package registry events such as gem publications, ownership changes, and deletions, making it difficult to detect supply chain compromises or unauthorized modifications. This project proposes implementing a Merkle tree–based transparency log that records these events in an immutable, append-only structure. The log will provide cryptographically verifiable records that allow maintainers to detect unexpected changes and enable security researchers to audit the Ruby ecosystem.
<p>I will consider and conduct a survey about the data structures appropriate to the operations used in Ruby, and combine their merits by dynamically selecting the moderate implementation from types of data structures.</p> <p>Ruby is beloved by its simplicity and productivity. It is common to implement optimized data structures when working in C, but it should not impose users of the high level languages like Ruby to the task of implementing optimized data structures by themselves. However, it is necessary to select appropriate data structures in order to achieve efficient access to the data structures.</p> <p>It seems possible to offer some implementations per data structure in Ruby, and select it implicitly in order to offer desirable performance without difficulty to the users.</p> <p>For example, List is a basic structure for programmers, but Ruby does not offer it. Instead, Ruby programmers use Array. In fact, Array offers List like methods such as insert, delete, push back and more. Hence, it is easy to use, but the performance of these methods like insert and delete are not executed at a constant time, while they in List run at a constant time. (Similar ideas would be possible on String and Hash.)</p>
<p>Gem-web is a tool that capable of providing an interface that allows opening documentation, source code and website of a ruby gem. Integrating it on RubyGems CLI would make this feature available out of the box to all ruby users, improving their productivity, since there would have no need to search this information manually.</p>
<p>This proposes the feature to generate security vulnerability notifications by gem authors for a specific gem version which have security issues. Currently, yanking a particular gem is the only available choice under such circumstances.</p>
LowType currently relies on shim methods to bypass type checking when disabled, adding persistent runtime overhead on every method call through define_method closures and repeated Lowkey proxy lookups. This project eliminates that overhead entirely by rewriting typed methods directly onto the class using class_eval, producing plain untyped Ruby methods indistinguishable from hand-written code. Deliverables include removal of the shim execution path, class_eval based method rewriting integrated with Lowkey export methods, edge case handling for kwargs and defaults, benchmark results using benchmark-ips, and full test and documentation coverage. A working prototype already exists with real benchmark results showing 1.8 to 2x improvement over the current shim.
This project aims to improve feature parity between TruffleRuby and CRuby in places where full Ruby 3.0 feature parity has not been achieved, aiming at Ruby 3.0 pattern matching specifically.
<p><strong><em><a href="https://github.com/rails/web-console" target="_blank">Web Console</a></em></strong> is a debugging tool for the web apps built with Ruby on Rails. In order to debug, it provides an interactive Ruby session to the developers. The console is displayed in the current page of the browser, and its session stores context of running code of the web app. It allows us to debug the web apps interactively.</p> <p>This project aims to make a better user experience for Web Console as a whole, and the main focus is to support <strong><em>"auto-completion"</em></strong> feature, which is to help us typing commands speedy and quickly on the console.</p> <p>And also, this project is getting into ways to extend Web Console. The other goal of the project is to create <strong><em>"built-in commands"</em></strong> and its architecture, which makes Web Console more extendable, and it can open the door to yet another contributors.</p> <p>A point worthy of special mention is that the above features are working on the inner of console, and it basically does not need new things for the HTML view of Web Console.</p> <p>Details: <a href="https://github.com/sh19910711/google-summer-of-code-2016" target="_blank">https://github.com/sh19910711/google-summer-of-code-2016</a></p>
<p>I would like to add type annotations to Ruby, per the ideas list. These annotations will serve as documentation and hopefully a way to implement basic typechecking for third party tools. Following the guidelines posted in the Ideas page, the project will consist of 3 parts: adding the type information to the parser generator, modifying Ripper to emit the type annotation information with the parse tree, and writing a detailed proposal to add this feature to a future version of MRI.</p>
<p>Ruby has no native ByteArray or ByteBuffer types, unlike Java. While it'd be great to have something like this in core Ruby, the next best place would be in the New IO for Ruby project, which provides a thin wrapper around Java NIO. The goal of this project would be to wrap Java ByteBuffers (particularly direct ByteBuffers) in a Ruby class that can also be implemented in pure Ruby which hooks into nio4r and can be used directly with nio4r's Java NIO backend.</p>
<p>Currently <code>gem</code> command line tool and rubygems.org does not support any OTP authentication other than original email and password. This project tries to add extra authentication method (compatible with Google Authenticator) when pushing gems, changing ownership, login, etc. The extra authentication can improve total security level of rubygems.</p>
<p>Dynamic languages trade some of the compile-time safety properties of statically typed languages for greater flexibility for a programmer to write correct programs that a static compiler would turn down as potentially faulty. There is a recent trend to integrate aspects of both disciplines, commonly by "adding types" to languages originally designed as dynamic.</p> <p>There has been interest in the Ruby community to explore such an approach: Yukihiro Matsumoto devoted his keynote at RubyConf 2014 to the potential implementation of static typing in the language. The topic is complex: a Ruby tightly corseted by types would not be true to the essence of the language.</p> <p>Under a gradual typing discipline, type annotations can be specified at will: interesting parts of the program can be given explicit types and their type safety checked statically. We propose an implementation of gradual typing in Matz's Ruby Interpreter, drawing inspiration from similar additions to other dynamic languages, with strictly optional type annotations consistent with Ruby's DRY and "lazy" philosophy and an evaluation of the practical usefulness of gradual typing.</p>
<p>In RubyGems.org website, we can search for any kinds of gems you want. However, most programmers use google or any other websites to look for gems which they want to use. So, who is using RubyGems.org? The answer is a beginner and intermediate for Ruby, who are not familiar with CUI but familiar with GUI. Therefore, I propose to add autocomplete and some functions which help GUI familiar people.</p>
The project primary objective would be bypassing the current usage of the webview library in Scarpe, feeding directly the HTML and Javascript code to the browser running Ruby and Scarpe directly through WebAssembly. Having done that, the project would focus on bulding an educational playground for writing GUIs through Ruby directly in browser.
<p>My project would re-implement the <a href="https://github.com/bundler/bundler-api" target="_blank">Bundler API</a> on the <a href="https://github.com/rubygems/rubygems.org" target="_blank">Rails app that provides RubyGems.org</a>. Bundler uses bundler-api to download dependency information about all the gems it is trying to install. This request for complex database queries, marshalling the output and everything else is quite CPU intensive and rubygem.org limited hardware infrastructure could not support it until now. With help of <a href="https://rubytogether.org/" target="_blank">Ruby Together</a>, hopefully we will make <code>bundle install</code> faster and more reliable for everyone.</p>
Developers using Ruby gems have no official way to know when a gem they depend on has a known security vulnerability. This project integrates vulnerability warnings into RubyGems.org by syncing the rubysec advisory database, implementing version-range matching via Gem::Requirement, and surfacing warnings on gem detail pages, search results, and a new public API endpoint — all with independent implementation to respect GPL licensing boundaries.
<p>As mentioned in the listing for Bundler-related ideas, "Once an open source project has taken off and become popular and widely used, writing code and implementing new features has to take a back seat to accepting bug reports, assisting users, and ensuring that contributed changes work together without causing problems for a different set of users. This project idea basically consists of the chance to participate in the ongoing work of maintaining and administrating an extremely popular open source project. It will include triaging bug reports, updating documentation, managing fixes and features across multiple release branches, releasing new versions, and communicating with the public. This project is most suitable for students interested in continuing to work in open source, either as a hobby or a job, as they continue in their career as a software developer."</p>