Raindeer is an event-driven framework using the dynamic features and latest async improvements in Ruby + some weird ideas, to build a new breed of web application.

Deer to be different.

Getting Started

Asynchronous

Built from the ground up for concurrency using Async, Fibers and an event loop. Your code still looks the same though so you'd never know.

Event-driven

Observe and respond to events

observe '/:id'

def render(event: RenderEvent)
  event.params[:id] # => 123
end

Types

Inline type checking and annotations

def method(var: String)
  • Optional
  • Enable/disable per environment
  • Export to RBS

RBX

HTML and templating inside Ruby files

def render
  <html><{ ChildNode }></html>
end

Parallelism

Immutable nodes designed for parallel execution

<{ parallelize: }>
  <{ UserNode user=@user }>
  <{ PostsNode posts=@posts }>
<{ :parallelize }>

Data Expressions

Build SQL queries compositionally

Users[:name] + Posts[:title, :body]

Results in an OUTER JOIN SQL query.

Raindeer was born out of a Sudoku solver...

It wasn't extracted from a traditional web application, but created from first principles of what an easy to use yet performant framework would be.

See Architecture

Diff