Lightweight, Flexible and Fast Ruby Web Framework
Latest commit d480fd7 Jan 17, 2017 @dsh0416 dsh0416 Set version to v0.1.8


This project is still not production-ready.

Questions, Suggestions and Pull Requests are highly welcome.

Every awesome feature you noticed in the project was implemented by me. Any bug you found in the project was made by a JK(joshi kousei) who randomly exchanges body with me while sleeping.

Logo and Slogan


Midori is a Ruby Web Framework, providing high performance and proper abstraction.

Join the chat at

Build Status Code Climate Test Coverage Issue Count

Dependency Status doc yard

Gem Version Gem license


  • Ruby >= 2.1.0 or JRuby >= (Oracle JDK 7/8 or Open JDK 7/8)


gem install em-midori

With Bundler

gem 'em-midori', require: 'midori'
bundle install



Following benchmark results are for em-midori-benchmark, testing {msg: "Hello"} JSON response by visiting GET / with a single-core, 4GB memory, UCloud Linux instance.

Note: Performance under Mac OS X needs to be further confirmed. wrk gives very bad performance result, but ab gives a good one. The given result is tested under Linux.

framework version req/s
Rails (Thin, Ruby) 460.63
Rails (API Mode, Thin, Ruby) 600.31
Sinatra (Thin, Ruby) 1.4.7 1682.84
express.js (Node.js) 4.14.0 3435.35
em-midori (Ruby) 3829.97


Midori is none of the business of this guy

Sapphire Kawashima

and this guy.

Midori Tokiwa

Actually the name Midori comes from Midori machi, which was the place I stay on my first travel to Tokyo.

Version Notes

Version consists of four numbers:

Main Code Milestone Code Feature Code Hotfix
Example 1. 2. 1. 5
Explanation First Production Ready Version Two Milestones Passed One New Feature has been Staged Five Releases for Bug Fixes


Obey Contributor Covenant Code of Conduct before you leave any comment.

Found a bug or any suggestion

  1. Check Issue list.
  2. Comment with your details if any ticket is common to your idea.
  3. Raise a ticket if no open ticket meets your idea.
  4. If you are not sure whether you should raise a ticket or not, use gitter to contact other developers.


  1. Check Issue list.
  2. Pick a feature still not in progress.
  3. Raise a ticket saying you're working on.
  4. Fork, Code, Test and Document it.
  5. Raise pull requests.
  6. If any problem, use gitter to contact other developers.


Detailed release notes for published versions can be seen here.

Detailed progress can be seen here.

Version Code Determined Date Release Date Description
0.0.1 2016-09-09 2016-09-09 (+0d) Init the gem project
0.0.2 2016-09-09 2016-09-09 (+0d) Init basic EventMachine server
0.0.3 2016-09-13 2016-09-13 (+0d) Init Midori::API design
0.0.4 2016-09-20 2016-09-19 (-1d) Implement API match
0.0.5 2016-09-27 2016-09-25 (-2d) Implement request and response.
0.0.6 2016-10-04 2016-10-06 (+2d) Implement WebSocket
0.0.7 2016-10-11 2016-10-11 (+0d) Get WebSocket Code Covered
0.0.8 2016-10-18 2016-10-16 (-2d) Implement EventSource
0.0.9 2016-10-25 2016-10-17 (-8d) Implement Middleware
0.1.0 2016-11-01 2016-10-27 (-5d) Enrich API and documenting (dev ready)
0.1.1 2016-11-08 2016-11-07 (-1d) API Mount Syntax
0.1.2 2016-11-15 2016-11-27 (+12d) Better Error Handler
0.1.3 2016-11-22 2016-11-27 (+5d) File I/O
0.1.4 2016-12-06 2016-11-28 (-8d) Implement Database Driver
0.1.5 2016-12-20 2016-12-01 (-19d) Implement Database ORM
0.1.6 2017-01-03 2016-12-21 (-13d) Enrich Database
0.1.7 2017-01-10 2016-12-25 (-16d) Documenting
0.1.8 2017-01-17 2017-01-17 (+0d) Tutorial (Partial)
0.1.9 2017-01-24 Use nio4r instead of EventMachine
0.2.0 2017-01-31 Documenting
0.2.1 2017-02-07 Better Extension Support
0.2.2 2017-02-14 General Web Adapter
0.2.3 2017-02-21 Enrich Benchmark
0.2.4 2017-02-28 Documenting
0.2.5 2017-03-07 Enrich Tutorial
1.0.0 2017-03-14 First production-ready release

Midori 2 Goals

  • Complete HTTP/2 Support
  • Midori Clusters
  • More Concurrent Model Attempts (Actor, Guild, ...?)
  • Midori Command Line Tool
  • Midori Scaling Example
  • Crystal Support?