EM Midori is an EventMachine-based Web Framework written in pure Ruby, which provides high performance and proper abstraction.
- Ruby >= 2.0.0 or JRuby >= 9.0.4.0 (Oracle JDK 7/8 or Open JDK 7/8) or Rubinius >= 3.20
gem install em-midori
With Bundle
gem 'em-midori'
bundle install
With the growing popularity of attempts of decoupling the front-end and back-end code has made more and more people turns to high performance API-based framework from full-stack web framework like Rails. Since we've got lots of choices in API-based frameworks like Sinatra or Grape. But most of those are still working with multiple-threading model, which could hardly reach I/O performance like Node.js or Go does.
DSL is awesome. With the magics of Ruby meta-programming feature, we could make web development much easier. As lots of people saying, EventMachine is fast but not that easy to use. But what if we build a DSL on it, you could then no longer deal anything with EventMachine directly. Midori is a project that would build DSL on EventMachine. The API would also provide an MVC project structure, for middle or large scale projects.
Why not cramp ?
Cramp provides sinatra-like DSL and runs very fast on EventMachine for hello world benchmarks. But still it just packages the Network I/O part with EventMachine. It doesn't correctly deal with other I/O parts like database. So in practice, Cramp does not runs as fast as it could be. What's more, it's no longer maintained.
Why not sinatra-synchrony ?
Sinatra-synchrony perfectly combined Sinatra and EventMachine, but unfortunately, it also doesn't correctly deal with other I/O parts. With too many stacks combined, sinatra-synchrony has only about one-third performance of other EventMachine web servers. Not a good choice for production. What's more, it's also no longer maintained.
Why not angelo ?
Angelo is awesome, providing Sinatra-like DSL for Reel. Actually Reel is not working with EventMachine, but Celluloid::IO, which works similar to EventMachine. Angelo is not production ready, nor Reel or Celluloid::IO. There's also no clear roadmap showing when would they be ready, though none of them has declared out of maintaining.
Midori is none of the business of this guy
and this guy.
Actually the name Midori comes from Midori machi, which was the place I stay on my first travel to Tokyo.
Version code includes four codes
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 |
- Check Issue list.
- Comment with your details if any ticket is common to your idea.
- Raise a ticket if no open ticket meets your idea.
- If you are not sure whether you should raise a ticket or not, use gitter to contact other developers.
- Check Issue list.
- Check Roadmap.
- Pick a ticket and leaves a comment saying you are working on it.
- If it's on roadmap but not ticket raised, raise a ticket.
- Fork it.
- Code it.
- Pass the tests.
- Document it.
- Raise pull requests.
- If any problem, use gitter to contact other developers.
Note: Detailed release note for published version could be seen at here.
Version Code | Determined Date | Release Date | Description |
---|---|---|---|
0.0.1 | 2016-09-09 | 2016-09-09 | Init the gem project |
0.0.2 | 2016-09-09 | 2016-09-09 | Init basic EventMachine server |
0.0.3 | 2016-09-13 | 2016-09-13 | 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 basic request and response parse. |
0.0.6 | 2016-10-04 | Implement WebSocket and EventSource | |
0.0.7 | 2016-10-11 | Implement middleware injection | |
0.0.8 | 2016-10-18 | Enrich Implementation with API design | |
0.0.9 | 2016-10-25 | Stablize API design | |
0.1.0 | 2016-11-01 | Bug killing and documenting (dev ready) | |
0.1.1 | 2016-11-15 | Implement Midori::Database IO | |
... | ... | ... | |
1.0.0 | 2017-03 | First production-ready release | |
1.1.0 | 2017-06 | TBD. | |
1.2.0 | 2017-09 | TBD. |