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 synchronous though.

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

Composition

Embed HTML inside Ruby, embed nodes within nodes.

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