Roadmap for v2.0.0.alpha1


As recently announced, we started to work on Hanami 2.x series.

We’ll rewrite hanami (the gem) to simplify the internals, as they accumulated years of legacy code, since the old days of Lotus.

That means we’ll incrementally build and ship all the features, like we’re starting the project from scratch. This first release will only support the new version of hanami-router and hanami-controller without including views, assets, helpers, models…

Here’s the complete list of features for this release:

The expected time frame for this release is January 2019.

Hanami 2.0 Timeline?
Hanami 2.0 Ideas

Here’s the first PR to implement these features:

If you want to play with a test app:


Looking back through the ideas thread specifically (Hanami 2.0 Ideas) and the first alpha and what’s listed here, plus the code, and the sort of cryptic log on and I’m wondering if a decision was made to ditch the Roda-backed router from 2.0.0 that I may have missed. If not, I’d love to know where to look / how to help on getting the work needed done for the next alpha in April.


@jimcavoli The idea to not use roda as router backend is the result of frustrating code sessions where I tried to hook into roda. The block syntax was really hard to bend to hanami-router syntax. Even for a simple use case, I ended up with hacks to make it to work. From there the decision to build the internal engine my own. Is the absence of roda a stopper for you?


No, not strictly speaking; that would seem like an overreaction to me. I may take a deeper look at the internals of Roda as they might be able to be applied to hanami-router. I understand the desire to protect syntax as a feature, and frankly, Mustermann is easily the best option in this regard for flexibility. Can’t fault that as a choice from the framework perspective, though I think I’ll sit around for a while thinking about what reasonable things might be doable to provide a further speed boost since routing is typically the biggest headache for actually getting things returned quickly. If I can come up with anything useful, I’d be happy to bring back a proposal. Thanks for the reply and clarifying! :slight_smile:


Do you mean to reimplement with roda or to apply tree based routing to the existing, mustermann based implementation?


@jodosha Frankly either, depending on what looks easier, but most likely to try and put routing tree processing on top of Mustermann since that would likely be easiest. I’m diagramming out a few ideas presently, but I think that trying to find a way to speed Mustermann’s routing decisions would probably be the simplest and possibly most transparent to this project and stands to have some carry-on benefit to others. If there’s a preference between solutions, I’m happy to direct more energy one way or another.

The main problem with chasing a Roda or Roda-inspired approach would seem to be that it leverages a control-flow short-circuiting approach with blocks. While incredibly fast, is equally incredibly difficult if not impossible, as you’ve discovered, to cleanly/sanely implement on the back of the rails-like routing DSL currently used by hanami-router. It’s far easier to continue to maintain Mustermann patterns for matching against, so my thought is that changing the route lookup to use a more optimized search than Enumerable#find as currently implemented may be able to split the difference and get a reasonable speed boost in while not sacrificing syntax. This could take lots of forms, including using and/or further improving Mustermann::PatternCache, building a more optimized search tree approach above Mustermann in hanami-router, or probably a number of other things, but those are the leading two ideas I’m down to after the first two hours of thinking about it.


Please proceed with integrating a tree based routing mechanism into the existing unstable branch code of hanami-router.

I’m working on a prototype as well, we can blend our ideas later on, based on perf choices. WDYT?

Thanks in advance.


Sounds like a good plan to me; I’ll get a working implementation together and put a PR up to discuss further.


Thanks, that is awesome!

To clarify: my tree experiments have low priority, given there are other pieces to put together (e.g. new hanami-view). I’ll be more than happy to have a look at your implementation and give hanami-router a boost! Thanks!