How to use the online Ruby compiler
- Write or paste Ruby code into the editor. Reset example brings back the starter program.
- Press Run or use Ctrl + Enter (⌘ + Enter on a Mac).
- Output from
puts,printandpappears in the Output panel. Exceptions and messages written to$stderrare highlighted as errors. - Choose a time limit of 5, 15 or 60 seconds. A run that takes longer is stopped automatically, and Stop ends it at once.
The first run downloads the Ruby runtime and its standard library, about 36 MB, so it can take a little while on a slow connection. Your browser caches it, and later visits start much faster. Use Copy or main.rb to save your program.
Ruby runs in a Web Worker in your own browser. Your code is never uploaded and is not stored on our servers. The editor remembers your last program in your browser's local storage, and in no other place.
What's supported
The compiler uses Ruby 3.3 through the official ruby.wasm build, the CRuby (MRI) interpreter compiled to WebAssembly.
- The full Ruby 3.3 language: classes, modules, mixins, blocks, procs and lambdas, pattern matching with
case/in, endless methods (def name = ...), keyword arguments and refinements. - Core classes such as
String,Array,Hash,Range,Enumerable,Enumerator,StructandComparable. - The standard library:
require "json","set","date","time","securerandom","digest"and other bundled libraries load as usual.
Limitations:
- No gem installation. Only libraries that ship with Ruby are available, and
gem installand Bundler do not work. - No network access and no standard input. Hard-code the test data in your script instead of reading it with
gets. - The interpreter is reused between runs. Classes and constants you defined earlier still exist on the next run. Press Stop to start again with a clean interpreter.
Ruby quick reference
require "json"
Book = Struct.new(:title, :year)
books = [
Book.new("Eloquent Ruby", 2011),
Book.new("Practical Object-Oriented Design", 2012),
]
recent = books.select { |b| b.year >= 2012 }.map(&:title)
puts "Recent: #{recent.join(', ')}"
result = { status: "ok", count: books.size }
case result
in { status: "ok", count: Integer => n }
puts "Found #{n} books"
end
puts books.map(&:to_h).to_json
| Task | Syntax |
|---|---|
| Print with a newline | puts "Hello" |
| Inspect a value | p [1, :a, nil] |
| String interpolation | "Total: #{sum}" |
| Iterate with a block | items.each { |x| puts x } |
| Hash with symbol keys | { name: "Ada", age: 36 } |
| Safe navigation | user&.email |
Tips
- Use
pinstead ofputswhile debugging. It shows the inspected form, so you can tellnil,""and"nil"apart. - Chain
Enumerablemethods such asmap,select,group_by,tallyandeach_sliceto transform data without manual loops. - If you see
warning: already initialized constant, the interpreter still remembers a previous run. Press Stop, then Run again. - Check generated JSON with the JSON formatter, and test regular expressions with the regex tester. Its JavaScript syntax covers most everyday Ruby patterns.
Frequently asked questions
Is this real Ruby?
Yes. ruby.wasm is the official WebAssembly port of CRuby, maintained as part of the Ruby project. The language and core classes behave the same as on your computer.
Why is the first load slow?
The interpreter and its standard library are about 36 MB. The download happens once and is then served from your browser cache.
Can I use gems like Rails or Nokogiri?
No. Only the standard library is included, and gems cannot be installed in the browser. This tool is best for learning Ruby, practising algorithms and testing snippets.
Which other languages can I run?
Try the online Python compiler, or the Lua, PHP, JavaScript, TypeScript and SQL compilers, all of which also run in your browser.