[38;5;12mawesome-rack [39m[38;5;14m[1m![0m[38;5;12mAwesome[39m[38;5;14m[1m (https://cdn.rawgit.com/sindresorhus/awesome/d7305f38d29fed78fa85652e3a63e154dd8e8829/media/badge.svg)[0m[38;5;12m (https://github.com/sindresorhus/awesome)[39m
[38;5;12m===============[39m

[38;5;11m[1m▐[0m[38;5;12m [39m[38;5;12mA curated list of awesome Ruby rack, middlewares, frameworks and web servers.[39m

[38;5;12m                                                                                                                  [39m[38;2;255;187;0m[1m[4mContents[0m

[38;5;12m- [39m[38;5;14m[1mGeneral[0m[38;5;12m (#general)[39m
[38;5;12m- [39m[38;5;14m[1mTutorials[0m[38;5;12m (#tutorials)[39m
[38;5;12m- [39m[38;5;14m[1mPresentations[0m[38;5;12m (#presentations)[39m
[38;5;12m- [39m[38;5;14m[1mVideos[0m[38;5;12m (#videos)[39m
[38;5;12m- [39m[38;5;14m[1mWeb Servers[0m[38;5;12m (#web-servers)[39m
[38;5;12m- [39m[38;5;14m[1mFrameworks[0m[38;5;12m (#frameworks)[39m
[38;5;12m- [39m[38;5;14m[1mMiddlewares[0m[38;5;12m (#middlewares)[39m
[38;5;12m- [39m[38;5;14m[1mHelpers and Tools[0m[38;5;12m (#helpers-and-tools)[39m
[38;5;12m- [39m[38;5;14m[1mMiscellaneous[0m[38;5;12m (#miscellaneous)[39m
[38;5;12m- [39m[38;5;14m[1mInspiration[0m[38;5;12m (#inspiration)[39m

[38;2;255;187;0m[4mGeneral[0m

[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mRack[0m[38;5;12m (http://rack.github.io/) - Ruby Rack Official website.[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mRack on GitHub[0m[38;5;12m (https://github.com/rack/rack)[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mrack-contrib[0m[38;5;12m (https://github.com/rack/rack-contrib) - Contributed Rack Middleware and Utilities.[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mRack Spec[0m[38;5;12m (http://www.rubydoc.info/github/rack/rack/file/SPEC) - Rack Interface Specification.[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mRack Wiki[0m[38;5;12m (https://github.com/rack/rack/wiki) - Has a list of tutorals, presentations and middlewares.[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mRack Documentation[0m[38;5;12m (http://www.rubydoc.info/github/rack/rack/) - Rack Reference Documentation.   [39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mthe_metal[0m[38;5;12m (https://github.com/tenderlove/the_metal) - A spike for thoughts about Rack 2.0.[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mRack Development[0m[38;5;12m (https://groups.google.com/forum/#!forum/rack-devel) - Rack Development list (Google Group).[39m
[48;5;235m[38;5;249m[49m[39m
[38;2;255;187;0m[4mTutorials[0m

[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mIntroducing Rack[0m[38;5;12m (http://chneukirchen.org/talks/euruko-2007/neukirchen07introducingrack.pdf) - An overview of Rack interface and the Rack gem by Christian Neukirchen.[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mWhat's Rack[0m[38;5;12m (http://rubylearning.com/blog/2013/04/02/whats-rack/) - A Quick Introduction to Rack .[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mA Quick Note on Rack[0m[38;5;12m (http://www.ralphonrails.com/rack/2015/07/05/a-quick-note-on-rack.html)   [39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mConcisely about Rack applications[0m[38;5;12m (http://zaiste.net/2012/08/concisely_about_rack_applications/)[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mExploring Rack[0m[38;5;12m (http://code.tutsplus.com/tutorials/exploring-rack--net-32976)[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mRack basics[0m[38;5;12m (http://albertogrespan.com/blog/rack-basics/) - Covers basic usage of Response, ERB template and the [39m[48;5;235m[38;5;249mrackup[49m[39m[38;5;12m tool.[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mRack Basics - A Rack Introduction[0m[38;5;12m (http://blog.crowdint.com/2010/11/17/rack-basics-a-rack-introduction.html)[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mRack Authentication Middleware[0m[38;5;12m (http://codefol.io/posts/Rack-Authentication-Middleware)[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mRack middleware[0m[38;5;12m (http://albertogrespan.com/blog/rack-middleware/) - Create two simple middlewares and glue it all together using [39m[48;5;235m[38;5;249mRack::Builder[49m[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mA Middleware Stack Without Rack[0m[38;5;12m (http://www.blrice.net/blog/2015/09/18/a-middleware-stack-without-rack/)[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mWhat is Rack, please?[0m[38;5;12m (http://southdesign.de/blog/rack.html)[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mRack from the ground up[0m[38;5;12m (https://thisdata.com/blog/rack-from-the-ground-up/)[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mCreating Static Sites in Ruby with Rack[0m[38;5;12m (https://devcenter.heroku.com/articles/static-sites-ruby) - And deploy to Heroku.[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mWriting a Small DSL Using Rack[0m[38;5;12m (http://nick-aschenbach.github.io/blog/2015/02/21/a-small-dsl-rack-app/)[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mA simple Ruby Rack router[0m[38;5;12m (https://erikeldridge.wordpress.com/2010/02/21/simple-ruby-rack-router/) - A simple router in 17 lines of code.[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mUnderstanding Rack Builder[0m[38;5;12m (http://ixti.net/development/ruby/2011/09/03/understanding-rack-builder.html)[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mGetting Started with Rack[0m[38;5;12m (https://gist.github.com/markbates/4240848) - Use Rack::Builder to create a simple framework that[39m
[38;5;12m  handles HTTP GET requests.[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mUnderstanding Rack Apps and Middleware[0m[38;5;12m (https://blog.engineyard.com/2015/understanding-rack-apps-and-middleware)[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mMake Your Own Rack Server[0m[38;5;12m (http://www.blrice.net/blog/2015/05/31/make-your-own-rack-server/)[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mRails on Rack[0m[38;5;12m (http://guides.rubyonrails.org/rails_on_rack.html) - Covers Rails integration with Rack and interfacing with other Rack [39m
[38;5;12m  components. This guide tells you how to use Rack Middlewares in your Rails applications, Action Pack's internal Middleware stack and[39m
[38;5;12m  how to define a custom Middleware stack.[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mIT'S ONLY RACK ON RAILS BUT I LIKE IT[0m[38;5;12m (http://pathfindersoftware.com/2009/02/its-only-rack-on-rails-but-i-like-it/)[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mJesse Newland / Rails Metal: a micro-framework with the power of Rails[0m[38;5;12m (http://jnewland.github.io/articles/2008/12/16/rails-metal-a-micro-framework-with-the-power-of-rails-m/)[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mAsynchronous responses in Rack[0m[38;5;12m (http://polycrystal.org/posts/2012-04-14-async-rack.html)[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mBuilding Streaming REST APIs with Ruby[0m[38;5;12m (http://www.intridea.com/blog/2012/5/24/building-streaming-rest-apis-with-ruby)[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mRack Developer's Notebook by Bala Paranj[0m[38;5;12m (http://files.meetup.com/437842/RackDevelopersNotebook.pdf)[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1m32 Rack Resources to Get You Started[0m[38;5;12m (http://jasonseifer.com/2009/04/08/32-rack-resources-to-get-you-started)[39m

[38;5;11m[1m▐[0m[38;5;12m [39m[38;5;12mTesting Rack Apps[39m

[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mTesting Rack-based APIs with Cucumber and RSpec[0m[38;5;12m (http://hackers.lookout.com/2014/01/testing-rack-based-apis-with-cucumber-and-rspec/)    [39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mTESTING SINATRA WITH RACK::TEST[0m[38;5;12m (http://www.sinatrarb.com/testing.html)[39m

[38;5;11m[1m▐[0m[38;5;12m [39m[38;5;12mRoll your own frameworks[39m

[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mLet's Build a Sinatra (2015)[0m[38;5;12m (https://robots.thoughtbot.com/lets-build-a-sinatra)    [39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mEBook: Build Your Own Sinatra by K-2052 (2015)[0m[38;5;12m (http://buildyourownsinatra.com/)   [39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mBook: Rebuilding Rails by Noah Gibbs (2013)[0m[38;5;12m (https://rebuilding-rails.com/)[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mClass: Owing Rails by Marc-André Cournoyer[0m[38;5;12m (http://owningrails.com/) - Understand the inner working of Rails by building a mini-version of Rails, from scratch.[39m
[38;5;12m [39m[38;5;12m [39m[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mpatterns[0m[38;5;12m (https://github.com/owningrails/patterns) - Rails-like framework built during the Owning Rails Masterclass to explain the design patterns behind Rails. [39m

[38;2;255;187;0m[4mPresentations[0m

[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mIntroducing Rack by Christian Neukirchen at EuRuKo 2007[0m[38;5;12m (http://chneukirchen.org/talks/euruko-2007/chneukirchen-euruko2007-introducing-rack.pdf) - An [39m
[38;5;12m  overview of Rack interface and the Rack gem.[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mRack and Middleware by Tim Uruski 2015/Feb[0m[38;5;12m (https://speakerdeck.com/timuruski/rack-and-middleware)[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1m8 Minutes on Rack[0m[38;5;12m (http://www.slideshare.net/danwrong/8-minutes-on-rack-presentation) - The basic introduction to the Rack application definition.[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mUsing and scaling Rack and Rack-based middleware by alony[0m[38;5;12m (https://speakerdeck.com/alony/rack)[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mRack talk by Caleb Woods[0m[38;5;12m (http://www.calebwoods.com/rack-talk/) - A overview of essential Rack built-in middlewares and rack in Rails. [39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mBuilding Web Apps with Rack and Sinatra by Tom Black[0m[38;5;12m (https://speakerdeck.com/blacktm/building-web-apps-with-rack-and-sinatra)[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mSinatra and friends by Jiang Wu[0m[38;5;12m (http://www.slideshare.net/jiang.wu/sinatra-and-friends)[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mBuilding Web Services (HTTP APIs) with Ruby and Sinatra[0m[38;5;12m (http://slideshow-s9.github.io/demos/sinatra_http_api2.html)[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mRuby on Rack Small Talk by Meagan Waller[0m[38;5;12m (https://speakerdeck.com/meaganewaller/ruby-on-rack-small-talk) - Builds an example that[39m
[38;5;12m  implements tiny MVC and a simple router. The example is available on [39m[38;5;14m[1mGitHub[0m[38;5;12m (https://github.com/meaganewaller/ruby-on-rack-example). [39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mRack: A Framework to roll your own by Nishant Modak[0m[38;5;12m (https://speakerdeck.com/nishantmodak/rack-a-framework-to-roll-your-own)[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mRuby MVC from scratch with Rack[0m[38;5;12m (https://speakerdeck.com/donschado/ruby-mvc-from-scratch-with-rack) - The example code is [39m
[38;5;12m  available on the GitHub repo [39m[38;5;14m[1mFrack-MVC[0m[38;5;12m (https://github.com/DonSchado/Frack-MVC).[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mBuilding web framework with Rack[0m[38;5;12m (http://www.slideshare.net/sickill/building-web-framework-with-rack)  [39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mConstructing Web APIs with Rack, Sinatra and MongoDB by Oisin Hurley[0m[38;5;12m (http://www.slideshare.net/oisin/constructing-web-apis-with-rack-sinatra-and-mongodb)[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mStreaming APIs with Ruby by Jerry Cheung[0m[38;5;12m (https://speakerdeck.com/jch/streaming-apis-with-ruby)[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mMiddleware: A General Purpose Abstraction by Mitchell Hashimoto[0m[38;5;12m (https://speakerdeck.com/mitchellh/middleware-a-general-purpose-abstraction) [39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mHigh Performance Rails (long edition) by Issei Naruta[0m[38;5;12m (https://speakerdeck.com/mirakui/high-performance-rails-long-edition) - Rails [39m
[38;5;12m  Performance tuning and how to do profiling and caching.[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mA Rails App in a Single Rackup File by Ryan Alyea[0m[38;5;12m (http://rofish.net/rails_single_file.pdf)  [39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mRack - rolling your own, tiny like, web thingoes by Ryan Allen[0m[38;5;12m (http://yeahnah.org/files/rack-presentation-oct-07.pdf) - Talks about concurrency. [39m

[38;2;255;187;0m[4mVideos[0m

[38;5;11m[1m▐[0m[38;5;12m [39m[38;5;12mVideos from Railscasts[39m

[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mRailscasts Pro #53 Handling Exceptions (revised)[0m[38;5;12m (http://railscasts.com/episodes/53-handling-exceptions-revised)[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mRailscasts --- #150 Rails Metal[0m[38;5;12m (http://railscasts.com/episodes/150-rails-metal)[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mRailscasts Pro #150 Rails Metal (revised)[0m[38;5;12m (http://railscasts.com/episodes/150-rails-metal-revised)[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mRailscasts Pro #151 Rack Middleware[0m[38;5;12m (http://railscasts.com/episodes/151-rack-middleware)[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mRailscasts --- #161 Three Profiling Tools[0m[38;5;12m (http://railscasts.com/episodes/161-three-profiling-tools)[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mRailscasts Pro #222 Rack in Rails 3[0m[38;5;12m (http://railscasts.com/episodes/222-rack-in-rails-3)[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mRailscasts Pro #247 Offline Apps Part 1[0m[38;5;12m (http://railscasts.com/episodes/247-offline-apps-part-1)[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mRailscasts Pro #248 Offline Apps Part 1[0m[38;5;12m (http://railscasts.com/episodes/248-offline-apps-part-2)[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mRailscasts --- #260 Messaging with Faye[0m[38;5;12m (http://railscasts.com/episodes/260-messaging-with-faye)[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mRailscasts --- #271 Resque[0m[38;5;12m (http://railscasts.com/episodes/271-resque) - [39m[48;5;235m[38;5;249mRack::Auth::Basic[49m[39m[38;5;12m is used in this Episode.[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mRailscasts --- #272 Markdown with Redcarpet[0m[38;5;12m (http://railscasts.com/episodes/272-markdown-with-redcarpet)[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mRailscasts Pro #294 Playing with PJAX[0m[38;5;12m (http://railscasts.com/episodes/294-playing-with-pjax)[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mRailscasts Pro #305 Authentication with Warden[0m[38;5;12m (http://railscasts.com/episodes/305-authentication-with-warden)[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mRailscasts Pro #317 Rack App from scratch[0m[38;5;12m (http://railscasts.com/episodes/317-rack-app-from-scratch)[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mRailscasts Pro #319 Rails Middleware Walkthrough[0m[38;5;12m (http://railscasts.com/episodes/319-rails-middleware-walkthrough)[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mRailscasts Pro #321 HTTP Caching[0m[38;5;12m (http://railscasts.com/episodes/321-http-caching)[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mRailscasts --- #348 The Rails API Gem[0m[38;5;12m (http://railscasts.com/episodes/348-the-rails-api-gem)[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mRailscasts Pro #349 Rails Modularity[0m[38;5;12m (http://railscasts.com/episodes/349-rails-modularity)[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mRailscasts --- #352 Securing an API[0m[38;5;12m (http://railscasts.com/episodes/352-securing-an-api)[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mRailscasts Pro #357 Adding SSL[0m[38;5;12m (http://railscasts.com/episodes/357-adding-ssl)[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mRailscasts --- #368 MiniProfiler[0m[38;5;12m (http://railscasts.com/episodes/368-miniprofiler)[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mRailscasts Pro #395 Action Controller Walkthrough[0m[38;5;12m (http://railscasts.com/episodes/395-action-controller-walkthrough)[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mRailscasts Pro #399 Autocomplete Search Terms[0m[38;5;12m (http://railscasts.com/episodes/399-autocomplete-search-terms)[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mRailscasts Pro #414 Batch API Requests[0m[38;5;12m (http://railscasts.com/episodes/414-batch-api-requests)[39m

[38;5;11m[1m▐[0m[38;5;12m [39m[38;5;12mVideos from other source[39m

[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mGetting Started with Rack by Salma Urmi[0m[38;5;12m (https://www.youtube.com/watch?v=cSjRbpl8lzQ)[39m
[38;5;12m [39m[38;5;12m [39m[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;12mSee also Mark Bate's article: [39m[38;5;14m[1mGetting Started with Rack[0m[38;5;12m (https://gist.github.com/markbates/4240848)[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mRack Applications and Middleware[0m[38;5;12m (https://www.youtube.com/watch?v=NJ-ilQMsqMs)[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mTekpub: Understanding Rack[0m[38;5;12m (https://www.youtube.com/watch?v=iJ-ZsWtHTIg)[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mUsing RSpec with Rack[0m[38;5;12m (https://www.youtube.com/watch?v=FV6AQEKxBOg)[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mCode School - Scaling Rails Applications: Advanced HTTP Caching (Episode #10)[0m[38;5;12m (https://www.youtube.com/watch?v=2UvpMhzkktw) - [39m
[38;5;12m  talks about max-age, etags, last_modified and Reverse Proxy caches. [39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mCode School - Scaling Rails Applications: Rack & Metal (Episod #13)[0m[38;5;12m (https://www.youtube.com/watch?v=P0aOYjoH594)[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mRack Middleware as a General Purpose Abstraction by Mitchell Hashimoto[0m[38;5;12m (https://www.youtube.com/watch?v=i6pyhq3ZvyI)[39m
[38;5;12m [39m[38;5;12m [39m[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;12mthe slide is available on [39m[38;5;14m[1mspeakerdeck[0m[38;5;12m (https://speakerdeck.com/mitchellh/middleware-a-general-purpose-abstraction).[39m
[38;5;12m [39m[38;5;12m [39m[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mGeneralized middleware implementation for Ruby by Mitchell Hashimoto[0m[38;5;12m (https://github.com/mitchellh/middleware) - ~ 130 LOC.[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mFaking Sinatra with Rack and Middleware by Charles Wood[0m[38;5;12m (https://www.youtube.com/watch?v=uH4H5GQOSqQ)[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mRails Conf 2013 You've got a Sinatra on your Rails by José Valim[0m[38;5;12m (https://www.youtube.com/watch?v=TslkdT3PfKc) - Great look [39m
[38;5;12m  at how Rails uses Rack internally.[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mRailsConf 2014 - Rack::Attack: Protect your app with this one weird gem! byAaron Suggs[0m[38;5;12m (https://www.youtube.com/watch?v=m1UwxsZD6sw)[39m
[38;5;12m [39m[38;5;12m [39m[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;12mthe slide is available on [39m[38;5;14m[1mspeakerdeck[0m[38;5;12m (https://speakerdeck.com/ktheory/rack-attack-protect-your-app-with-this-one-weird-gem)    [39m

[38;2;255;187;0m[4mWeb Servers[0m

[38;5;11m[1m▐[0m[38;5;12m [39m[38;5;12mRack includes handlers for these web servers:[39m

[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mWEBrick[0m[38;5;12m (https://github.com/ruby/ruby/tree/trunk/lib/webrick) - WEBrick is an HTTP server toolkit that can be configured as an HTTPS [39m
[38;5;12m  server, a proxy server, and a virtual-host server. It is now part of Ruby standard library for Ruby 1.9.3.[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;12mFCGI[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mCGI[0m[38;5;12m (https://github.com/ruby/ruby/tree/trunk/lib/cgi) - The Common Gateway Interface (CGI) is a simple protocol for passing [39m
[38;5;12m  an HTTP request from a web server to a standalone program, and returning the output to the web browser.[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;12mSCGI[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mThin[0m[38;5;12m (https://github.com/macournoyer/thin/) - Tiny, fast & funny HTTP server. Glues together 3 of the best Ruby libraries: [39m
[38;5;12m  The [39m[48;5;235m[38;5;249mMongrel[49m[39m[38;5;12m parser, [39m[48;5;235m[38;5;249mEvent Machine[49m[39m[38;5;12m network I/O library and [39m[48;5;235m[38;5;249mRack[49m[39m[38;5;12m, a minimal interface between webservers and Ruby frameworks.[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mLiteSpeed[0m[38;5;12m (https://www.litespeedtech.com/products/litespeed-web-server/overview) - LiteSpeed Web Server (LSWS) is a high-performance[39m
[38;5;12m  Apache drop-in replacement, a commercial web server.[39m

[38;5;11m[1m▐[0m[38;5;12m [39m[38;5;12mThese web servers include Rack handlers in their distributions:[39m

[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mnet-http-server[0m[38;5;12m (https://github.com/postmodern/net-http-server) - A pure and small Ruby HTTP server.[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mRouge[0m[38;5;12m (https://github.com/guilleiguaran/rogue) - minimal and fast HTTP 1.1 server for Rack applications, powered by [39m[48;5;235m[38;5;249mEventMachine[49m[39m[38;5;12m, Ryan Dahl's [39m
[38;5;12m  [39m[48;5;235m[38;5;249mhttp-parser(https://github.com/joyent/http-parser)[49m[39m[38;5;12m and [39m[48;5;235m[38;5;249mRack::Builder[49m[39m[38;5;12m.[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mEbb[0m[38;5;12m (https://github.com/gnosek/ebb) - A small and fast web server specifically for hosting dynamic web applications.[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mFuzed[0m[38;5;12m (https://github.com/KirinDave/fuzed-old) - An integrated replacement for Mongrel+Revproxy systems in erlang. [39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mGlassFish v3[0m[38;5;12m (https://java.net/projects/glassfish/sources/svn/show/trunk/main) - An open-source application server project [39m
[38;5;12m  started by Sun Microsystems for the Java EE platform and now sponsored by Oracle Corporation.[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mPhusion Passenger[0m[38;5;12m (https://github.com/phusion/passenger) - A web server and application server, designed to be fast, robust [39m
[38;5;12m  and lightweight. Supports Ruby, Python, Node.js and Meteor, and is being used by high-profile companies such as Apple, [39m
[38;5;12m  Pixar, New York Times, AirBnB, Juniper etc as well as over 350.000 websites. Phusion Passenger 5 (codename "Raptor")  has [39m
[38;5;12m  an innovative and optimized HTTP engine, making it up to 4x faster than Unicorn, up to 2x faster than Puma and up to 2x faster [39m
[38;5;12m  than Torquebox. [39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mPuma[0m[38;5;12m (https://github.com/puma/puma) - A simple, fast, threaded, and highly concurrent HTTP 1.1 server writtern in Ruby.[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mReel[0m[38;5;12m (https://github.com/celluloid/reel) - A fast, non-blocking "evented" web server written in Ruby. You'll need [39m
[38;5;12m  [39m[38;5;14m[1mreel-rack[0m[38;5;12m (https://github.com/celluloid/reel-rack), a Rack adapter for Reel. Reel uses [39m[38;5;14m[1mCelluloid[0m[38;5;12m (https://github.com/celluloid/celluloid), an[39m
[38;5;12m  Actor-based concurrent object framework for Ruby.  When you create new instances of a class, they're actually concurrent objects, each running[39m
[38;5;12m [39m[38;5;12m [39m[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mReel::DSL[0m[38;5;12m (https://github.com/celluloid/reel-dsl/) - Minimalist Reel CRUD/WS/SSE endpoint routing. Supports URI-based HTTP/S requests, and Web Sockets[39m
[38;5;12m   & Server Sent Events. Influenced by Angelo and Sinatra.[39m
[38;5;12m [39m[38;5;12m [39m[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mAngelo[0m[38;5;12m (https://github.com/kenichi/angelo) - Sinatra-like DSL for Reel that supports WebSockets and SSE[39m
[48;5;235m[38;5;249min their own thread, called "cells" (or actors). Angelo uses Celluloid, Celluloid::IO. Angelo replaces [49m[39m[48;5;235m[38;5;249m                                                     [49m[39m
[48;5;235m[38;5;249m**Sinatra::Synchrony** (https://github.com/kyledrake/sinatra-synchrony) which is a very small extension for Sinatra Powered by EventMachine and EM-Synchrony[49m[39m
[48;5;235m[38;5;249mthat dramatically improves the concurrency of your web application. [49m[39m[48;5;235m[38;5;249m                                                                                        [49m[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mUnicorn[0m[38;5;12m (http://bogomips.org/unicorn.git) - Rack HTTP server for fast clients and Unix. Mostly wriiten in pure Ruby. Provides [39m[48;5;235m[38;5;249municorn[49m[39m[38;5;12m - [39m
[38;5;12m  a rackup-like command to launch the Unicorn HTTP server (it uses Rack::Builder DSL) and [39m[48;5;235m[38;5;249municorn_rails[49m[39m[38;5;12m - a script/server-like command [39m
[38;5;12m  to launch the Unicorn HTTP server.[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1munixrack[0m[38;5;12m (https://github.com/brightroll/unixrack) - A ruby RACK webserver only for unix using the old unix style. (~500 LOC).[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1muWSGI[0m[38;5;12m (https://github.com/unbit/uwsgi) - uWSGI application server container written in Python. Supports Python (WSGI), [39m
[38;5;12m  Ruby (Rack), Perl (PSGI), Lua (WSAPI), PHP (CGI), JVM (JWSGI), Mono (ASP.NET plugin), GO (GCCGO), CGI Scripts.[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1myahns[0m[38;5;12m (http://yahns.yhbt.net/) - Sleepy, multi-threaded, non-blocking application server for Ruby.[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mYARS[0m[38;5;12m (https://github.com/ianks/yars) - A server for your (Rack) apps.  [39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mGoliath[0m[38;5;12m (https://github.com/postrank-labs/goliath) - A non-blocking Ruby web server framework. Bare metal performance, [39m
[38;5;12m  Rack API and middleware support, simple configuration, fully asynchronous processing, and readable and maintainable code.[39m
[38;5;12m  The framework is powered by an EventMachine reactor, a high-performance HTTP parser and Ruby 1.9+ runtime. [39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mMongrel[0m[38;5;12m (https://github.com/mongrel/mongrel) - A HTTP library and web server written in Ruby. What makes Mongrel so fast is the [39m
[38;5;12m  careful use of an Ragel extension to provide fast, accurate HTTP 1.1 protocol parsing.[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mMongrel2[0m[38;5;12m (https://github.com/mongrel2/mongrel2) - An application, language, and network architecture agnostic web server [39m
[38;5;12m  that focuses on web applications using modern browser technologies. Written in C.  [39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mPow[0m[38;5;12m (https://github.com/basecamp/pow) - Zero-config Rack server for Mac OS X. Have it serving your apps locally in under [39m
[38;5;12m  a minute. A Linux fork is availble [39m[38;5;14m[1mhere[0m[38;5;12m (https://github.com/ysbaddaden/pow).[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mnack[0m[38;5;12m (https://github.com/josh/nack) - A Rack server built on top of the Node.js HTTP server.  [39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mGorack[0m[38;5;12m (https://github.com/gmarik/gorack) - A Go backed frontend webserver for Ruby's Rack applications, inspired by Node's [39m
[38;5;12m  [39m[38;5;14m[1mnack[0m[38;5;12m (http://github.com/josh/nack).      [39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mMizuno[0m[38;5;12m (https://github.com/matadon/mizuno) - Jetty-powered running shoes for JRuby/Rack. A Rack server for JRuby. It uses the embeddable Jetty [39m
[38;5;12m  Java servlet container. Mizuno also supports asynchronous request handling, via the Java Servlet 3.0 asynchronous processing mechanism.[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mTorqueBox[0m[38;5;12m (https://github.com/torquebox/torquebox) - Ruby Web & Application Server built on JBoss and JRuby. [39m
[38;5;12m  TorqueBox goes beyond providing web-centric services (supporting Rails, Rack, Sinatra, etc), to also expose other [39m
[38;5;12m  enterprise-grade services to Ruby applications.[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mH2O[0m[38;5;12m (https://h2o.examp1e.net/) - An optimized HTTP/1, HTTP/2 server. H2O supports Rack interface for MRuby.   [39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mtrinidad[0m[38;5;12m (https://github.com/trinidad/trinidad) - Run Rails or Rack applications within an embedded Apache Tomcat container.   [39m

[38;5;11m[1m▐[0m[38;5;12m [39m[38;5;12mMiscellaneous[39m

[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mGrack[0m[38;5;12m (https://github.com/schacon/grack) - GIt Smart HTTP Server Rack Implementation. This project aims to replace the builtin git-http-backend [39m
[38;5;12m  CGI handler distributed with C Git with a Rack application. This reason for doing this is to allow far more webservers to be able to handle Git smart [39m
[38;5;12m  http requests. Grack inspired [39m[38;5;14m[1mgit_http_backend.py[0m[38;5;12m (https://github.com/dvdotsenko/git_http_backend.py) and [39m
[38;5;12m  [39m[38;5;14m[1mGit Web Access (ASP.NET/IIS)[0m[38;5;12m (https://github.com/yysun/Git-Web-Access).  [39m

[38;2;255;187;0m[4mFrameworks[0m

[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mRum[0m[38;5;12m (https://github.com/chneukirchen/rum) - A gRand Unified Mapper for Rack by Christian Neukirchen. Rum apps use a small DSL [39m
[38;5;12m  to set up the mappings. (~120 LOC)[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mFrack-MVC[0m[38;5;12m (https://github.com/DonSchado/Frack-MVC) - A small example implementation of how to build a simple MVC style application from [39m
[38;5;12m  scratch. Check out the commit history to see how I implemented it step-by-step. This is the example code for the slide: [39m
[38;5;12m  [39m[38;5;14m[1mRuby MVC from scratch with Rack[0m[38;5;12m (https://speakerdeck.com/donschado/ruby-mvc-from-scratch-with-rack) [39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mHobbit[0m[38;5;12m (https://github.com/patriciomacadden/hobbit) - A minimalistic microframework built on top of Rack (thanks to [39m[48;5;235m[38;5;249mRack::Builder[49m[39m[38;5;12m).[39m
[38;5;12m   Hobbit is a DSL inspired by Sinatra. (~ 150 LOC).[39m

[38;5;12m [39m[38;5;12m [39m[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mhobbit-contrib[0m[38;5;12m (https://github.com/patriciomacadden/hobbit-contrib) - Contributed Hobbit extensions. For examples:[39m
[48;5;235m[38;5;249m`Hobbit::Environment`, `Hobbit::ErrorHandling`, `Hobbit::Filter`, `Hobbit::Mote` - render using **mote** (https://github.com/soveran/mote), [49m[39m
[48;5;235m[38;5;249m`Hobbit::Render`, `Hobbit::Session`[49m[39m[48;5;235m[38;5;249m                                                                                                         [49m[39m
[38;5;12m [39m[38;5;12m [39m[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mhat[0m[38;5;12m (https://github.com/patriciomacadden/hat/) - Hobby Application Template. Combinded with i18n, rack-protection, sprockets, tilt, [39m
[48;5;235m[38;5;249mbetter_erros, rack-test, minitest and so on.[49m[39m

[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mmruby-hibari[0m[38;5;12m (https://github.com/kentaro/mruby-hibari) - A Web application framework for Web servers that support [39m[38;5;14m[1mmruby[0m[38;5;12m (https://github.com/mruby/mruby)[39m
[38;5;12m   and Rack-based API. [39m[48;5;235m[38;5;249mmruby-hibari[49m[39m[38;5;12m currently supports the Web servers: [39m[38;5;14m[1mngx_mruby[0m[38;5;12m (http://ngx.mruby.org/)-enabled Nginx, [39m
[38;5;12m   [39m[38;5;14m[1mmod_mruby[0m[38;5;12m (http://mod.mruby.org/)-enabled Apache and [39m[38;5;14m[1mh2o[0m[38;5;12m (https://h2o.examp1e.net/).[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mCuba[0m[38;5;12m (https://github.com/soveran/cuba) - [39m[38;5;14m[1mRum[0m[38;5;12m (https://github.com/chneukirchen/rum) based microframework for web development. [39m
[38;5;12m  Integrates many templates via Tilt. Incredibly small, less than 200 lines of code.[39m
[38;5;12m  [39m
[38;5;12m [39m[38;5;12m [39m[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mThe Guide to Cuba[0m[38;5;12m (http://theguidetocuba.io/) - following this small book to build a Twitter clone called Frogger (work in progress).[39m
[38;5;12m  [39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mDolly[0m[38;5;12m (https://github.com/coopermaa/dolly) - Minimal Ruby microframework inspired by Sinatra.[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mNancy[0m[38;5;12m (https://github.com/guilleiguaran/nancy) - Minimal Ruby microframework for web development inspired in [39m[48;5;235m[38;5;249mSinatra[49m[39m[38;5;12m and [39m[48;5;235m[38;5;249mCuba[49m[39m[38;5;12m (~150 LOC).[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mRambutan[0m[38;5;12m (https://github.com/guilleiguaran/rambutan) - Ruby web microframework with Rails-ish controllers and routes.[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mNYNY[0m[38;5;12m (https://github.com/alisnic/nyny) - A (ridiculously) small and powerful web framework (~ 300 LOC). NYNY uses [39m
[38;5;12m  [39m[38;5;14m[1mJourney[0m[38;5;12m (https://github.com/rails/journey) for routing(Rail's router). A NYNY app is a Rack middleware,  it can be used inside [39m
[38;5;12m  Sinatra, Rails, or any other Rack-based app.[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mEldr[0m[38;5;12m (https://github.com/eldr-rb/eldr) - A lightweight, simple, modular and above all, clear framework without all the magic. (~500 LOC).[39m
[38;5;12m  Eldr uses [39m[38;5;14m[1mMustermann[0m[38;5;12m (https://github.com/rkh/mustermann) to build its Router.    [39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mrack-server-pages[0m[38;5;12m (https://github.com/migrs/rack-server-pages) - Rack middleware and application for serving dynamic pages in very [39m
[38;5;12m  simple way. There are no controllers or models, just only views like a jsp, asp and php.[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mServe[0m[38;5;12m (https://github.com/jlong/serve) - A small Rack-based web server that makes it easy to serve HTML, ERB, Haml, or a variety of [39m
[38;5;12m  template languages from any directory.  Serve is meant to be a lightweight version of the Views part of the Rails MVC. [39m
[38;5;12m  Serve has full support for Rails-style partials and layouts.[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mRESTRack[0m[38;5;12m (https://github.com/stjohncj/RESTRack) - RESTRack is a Rack-based MVC framework that makes it extremely easy to [39m
[38;5;12m  develop RESTful data services.[39m
[38;5;12m  [39m
[38;5;12m [39m[38;5;12m [39m[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mRESTRack-Client[0m[38;5;12m (http://github.com/stjohncj/RESTRack-Client) - A library for interacting with RESTRack based services, [39m
[48;5;235m[38;5;249malthough it provides a convenient API to any RESTful service.[49m[39m
[38;5;12m [39m[38;5;12m [39m[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mRESTRack-Balancer[0m[38;5;12m (http://github.com/stjohncj/RESTRack-Balancer) - A library for interacting with RESTful web services [39m
[48;5;235m[38;5;249mwith automatic load balancing across a cluster.[49m[39m
[38;5;12m [39m[38;5;12m [39m[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mRESTRack-Splitter[0m[38;5;12m (http://github.com/stjohncj/RESTRack-Splitter) - A library for interacting with RESTful web services [39m
[48;5;235m[38;5;249mwith automatic distribution across multiple nodes of a cluster.  [49m[39m
[38;5;12m   [39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mjellyfish[0m[38;5;12m (https://github.com/godfat/jellyfish) - Pico web framework for building API-centric web applications (~ 250 LOC).  [39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mjunior[0m[38;5;12m (https://github.com/eddanger/junior) - An MVC Web Framework.[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mu-web[0m[38;5;12m (https://github.com/zimbatm/u-web) - A micro MVC framework based on Rack in a single file.[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mKenji[0m[38;5;12m (https://github.com/kballenegger/Kenji) - A lightweight backend framework for Ruby.[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mcramp[0m[38;5;12m (https://github.com/lifo/cramp) - A fully asynchronous realtime web application framework in Ruby. It is built on top of [39m
[38;5;12m  EventMachine.[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mPlezi[0m[38;5;12m (https://github.com/boazsegev/plezi) - A framework for realtime, RESTful, websocket web apps. (M)VC desing, BYO models.[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mBrooklyn[0m[38;5;12m (https://github.com/luislavena/brooklyn) - Small web tool on top of Rack. No documentation.[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mCoset[0m[38;5;12m (https://github.com/chneukirchen/coset-mirror) - A framework specifically for implementing RESTful Rack applications by Christian Neukirchen.[39m
[38;5;12m  Coset is introduced in the paper [39m[48;5;235m[38;5;249m[1mIntroducing Rack[0m[38;5;12m (http://chneukirchen.org/talks/euruko-2007/neukirchen07introducingrack.pdf).[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mRango[0m[38;5;12m (https://github.com/botanicus/rango) - An ultralightweight, ultracustomizable, ultracool web framework inspired by Django.  [39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mPancake[0m[38;5;12m (https://github.com/hassox/pancake) - Construct Rack stacks as mixins. Almost all key aspects of web frameworks are [39m
[38;5;12m  covered in Pancake as mixins to help you create your own re-usable Rack Stacks without worrying about the really low level [39m
[38;5;12m  plumbing.[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mGrape[0m[38;5;12m (https://github.com/intridea/grape) - An opinionated micro-framework for creating REST-like APIs in Ruby.[39m

[38;5;12m [39m[38;5;12m [39m[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mGris[0m[38;5;12m (https://github.com/artsy/gris) - A framework for building hypermedia API services using Grape, Roar and ActiveRecord.[39m

[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mNapa[0m[38;5;12m (https://github.com/bellycard/napa) - Simple framework for building Rack based APIs using Grape, Roar and ActiveRecord.  [39m
[38;5;12m  It's designed to make it easy to quickly create and deploy new API services by providing generators, middlewares and a console [39m
[38;5;12m   similar to what you would expect from a Rails app. [39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mCrep[0m[38;5;12m (https://github.com/crepe/crepe) - A lightweight API framework designed to help you write clean, fast web services in Ruby. [39m
[38;5;12m  With an elegant and intuitive DSL inspired by RSpec, and with a nod to Grape, Crepe makes API design simple.[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mPraxis[0m[38;5;12m (https://github.com/rightscale/praxis) - A framework for both designing and implementing APIs.[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mCamping[0m[38;5;12m (https://github.com/camping/camping) - A web framework which consistently stays at less than 4kB of code.[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mEspresso[0m[38;5;12m (https://github.com/espresso/espresso) - Scalable Web Framework aimed at Speed and Simplicity.[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mHalcyon[0m[38;5;12m (https://github.com/mtodd/halcyon) - A JSON Web Application Framework for developing lightweight applications[39m
[38;5;12m  interfaced via JSON-encoded HTTP requests.[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mWee[0m[38;5;12m (https://github.com/mneumann/wee) - A light-weight, very high-level and modern web-framework that makes [39m[38;5;14m[1mW[0m[38;5;12meb [39m[38;5;14m[1me[0m[38;5;12mngineering [39m[38;5;14m[1me[0m[38;5;12masy  [39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mMack[0m[38;5;12m (https://github.com/markbates/mack) - A Ruby web application framework. It takes the best ideas from several frameworks, [39m
[38;5;12m  including Rails, Merb, and Ramaze.[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mRacket[0m[38;5;12m (https://github.com/lasso/racket) - A small MVC framework built on top of rack.[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mMerb[0m[38;5;12m (https://github.com/merb/merb) - A web development framework for fast, simple, and powerful development.[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mHanami[0m[38;5;12m (https://github.com/hanami/hanami) - (formerly Lotus) A Ruby MVC web framework comprised of many micro-libraries. [39m
[38;5;12m  It has a simple, stable API, a minimal DSL.[39m

[38;5;12m [39m[38;5;12m [39m[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mawesome-hanami[0m[38;5;12m (https://github.com/davydovanton/awesome-hanami) - A collection of awesome Hanami Gems and projects.[39m

[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mRamaze[0m[38;5;12m (https://github.com/ramaze/ramaze) - A simple, light and modular open-source web application framework written in Ruby.[39m

[38;5;12m [39m[38;5;12m [39m[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mramaze-book[0m[38;5;12m (https://github.com/Ramaze/ramaze-book) - The official book for the Ramaze web framework.[39m
[38;5;12m  [39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mSin[0m[38;5;12m (https://github.com/raggi/sin) - A multi-app web-app DSL derived from Sinatra, riding on rack.[39m
[38;5;12m  Sin is a rebuild of sinatra, splitting up the classes into files and going for a reusable application class.[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mGin[0m[38;5;12m (https://github.com/jcasts/gin) - A small Ruby web framework, built on Rack, which borrows from Sinatra expressiveness, [39m
[38;5;12m  and targets larger applications.[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mPakyow[0m[38;5;12m (https://github.com/pakyow/pakyow/) - An open-source framework for the modern web. Build web-based apps faster with [39m
[38;5;12m  a view-first development process that's friendly to everyone.[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mScorched[0m[38;5;12m (https://github.com/Wardrop/Scorched) - Light-weight, DRY as a desert, web framework for Ruby. Simliar to Sinatra. [39m
[38;5;12m  Scorched is a true evolutionary enhancement of Sinatra, with more power, focus, and less clutter.[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mRack::App[0m[38;5;12m (https://github.com/rack-app/rack-app) - Bare bone minimalistic (masochistic) pico framework for building rack apps.[39m
[38;5;12m  Inspired by sinatra, grape and the pure use form of Rack.[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mTrailblazer[0m[38;5;12m (https://github.com/apotonick/trailblazer) - A high-level, modular architecture for Ruby [39m
[38;5;12m  framworks with domain and form objects, view models, twin decorators.    [39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mSinatra[0m[38;5;12m (https://github.com/sinatra/sinatra) - Classy web-development dressed in a DSL for quickly creating web applications[39m
[38;5;12m  in Ruby with minimal effort. Sinatra is not a framework, nor a MVC, it's a wrapper around Rack.[39m
[38;5;12m  [39m
[38;5;12m [39m[38;5;12m [39m[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1msinatra-contrib[0m[38;5;12m (https://github.com/sinatra/sinatra-contrib) - Collection of common Sinatra extensions.[39m
[38;5;12m [39m[38;5;12m [39m[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1msinatra-receipes[0m[38;5;12m (https://github.com/sinatra/sinatra-recipes) - Community contributed recipes and techniques for the Sinatra Web Framework.[39m
[38;5;12m [39m[38;5;12m [39m[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1msinatra-book[0m[38;5;12m (https://github.com/sinatra/sinatra-book) - A cookbook full of excellent tutorials and recipes for developing Sinatra web applications.[39m
[38;5;12m [39m[38;5;12m [39m[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mFrameworks inspired by Sinatra on Wikipedia[0m[38;5;12m (https://en.wikipedia.org/w/index.php?title=Sinatra_(software)&oldid=690374847) - e.g.: [39m
[48;5;235m[38;5;249mRuby (Padrino, Nancy), PHP (Slim, deano), JavaScript (Express), CoffeeScript (Zappa), Python (Flask), Go (Martini, Goji), Scala (Finatra, Scaltra),[49m[39m
[48;5;235m[38;5;249mJava (Spark), Haskell (Scotty), Bash (sh.inatra), Lua (Orbit, Mercury), Perl (Dancer)[49m[39m[48;5;235m[38;5;249m                                                              [49m[39m

[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mpadrino[0m[38;5;12m (https://github.com/padrino/padrino-framework) - Padrino is a full-stack ruby framework built upon Sinatra.[39m

[38;5;12m [39m[38;5;12m [39m[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mpadrino-contrib[0m[38;5;12m (https://github.com/padrino/padrino-contrib) - Contributed plugins and utilities for Padrino Framework.[39m
[38;5;12m [39m[38;5;12m [39m[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mpadrino-recipes[0m[38;5;12m (https://github.com/padrino/padrino-recipes) - A collection of padrino templates and plugins.[39m

[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mRails[0m[38;5;12m (https://github.com/rails/rails) - Ruby on Rails, is a MVC web application framework written in Ruby.[39m

[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mVolt[0m[38;5;12m (https://github.com/voltrb/volt) - A reactive web framework where your Ruby runs on both server and client (via [39m[38;5;14m[1mOpal[0m[38;5;12m (https://github.com/opal/opal)).[39m
[38;5;12m  A framework for building data rich web applications shockingly fast. Instead of syncing data between the client and server via [39m
[38;5;12m  HTTP, Volt uses a persistent connection between the client and server. When data is updated on one client, it is updated in the [39m
[38;5;12m  database and any other listening clients (with almost no setup code needed). Volt apps share MVC and routes between client and[39m
[38;5;12m  server. Same Ruby code runs on the client and server! (Isomorphic App Development) Volt plans to integrate RethinkDB and RubyMotion.   [39m

[38;2;255;187;0m[4mMiddlewares[0m

[38;5;11m[1m▐[0m[38;5;12m [39m[38;5;12mWhere you can find middlewares[39m

[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mRack built-in middlewares[0m[38;5;12m (https://github.com/rack/rack):[39m

[48;5;235m[38;5;249m* `Rack::Builder` - Implements a small DSL to iteratively construct Rack applications.[49m[39m[48;5;235m[38;5;249m                                               [49m[39m
[48;5;235m[38;5;249m* `Rack::BodyProxy` - [49m[39m[48;5;235m[38;5;249m                                                                                                               [49m[39m
[48;5;235m[38;5;249m* `Rack::Cascade` - Tries a request on several apps, and returns the first response that is not 404 or 405 (or in a list of [49m[39m[48;5;235m[38;5;249m         [49m[39m
[48;5;235m[38;5;249m  configurable status codes).[49m[39m[48;5;235m[38;5;249m                                                                                                        [49m[39m
[48;5;235m[38;5;249m* `Rack::Chunked` - Middleware that applies chunked transfer encoding to response bodies when the response does not include [49m[39m[48;5;235m[38;5;249m         [49m[39m
[48;5;235m[38;5;249m  a Content-Length header.          [49m[39m[48;5;235m[38;5;249m                                                                                                 [49m[39m
[48;5;235m[38;5;249m* `Rack::CommonLogger` - For creating Apache-style logfiles.[49m[39m[48;5;235m[38;5;249m                                                                         [49m[39m
[48;5;235m[38;5;249m* `Rack::ConditionalGet` - Middleware that enables conditional GET using If-None-Match and If-Modified-Since. [49m[39m[48;5;235m[38;5;249m                       [49m[39m
[48;5;235m[38;5;249m  The application should set either or both of the Last-Modified or Etag response headers according to RFC 2616[49m[39m[48;5;235m[38;5;249m                      [49m[39m
[48;5;235m[38;5;249m* `Rack::Config` - modifies the environment using the block given during initialization[49m[39m[48;5;235m[38;5;249m                                              [49m[39m
[48;5;235m[38;5;249m* `Rack::ContentLength` - Sets the Content-Length header on responses with fixed-length bodies[49m[39m[48;5;235m[38;5;249m                                       [49m[39m
[48;5;235m[38;5;249m* `Rack::ContentType` - Sets the Content-Type header on responses which don't have one[49m[39m[48;5;235m[38;5;249m                                               [49m[39m
[48;5;235m[38;5;249m* `Rack::ETag` - Adds ETag header on all String bodies. ETags are used to validate cache.[49m[39m[48;5;235m[38;5;249m                                            [49m[39m
[48;5;235m[38;5;249m* `Rack::File` - serves files below the root directory given, according to the path info of the Rack request. [49m[39m[48;5;235m[38;5;249m                       [49m[39m
[48;5;235m[38;5;249m  e.g. when Rack::File.new("/etc") is used, you can access 'passwd' file as http://localhost:9292/passwd[49m[39m[48;5;235m[38;5;249m                             [49m[39m
[48;5;235m[38;5;249m* `Rack::Deflater` - enables compression of http responses, currently supported compression algorithms: gzip, deflate, [49m[39m[48;5;235m[38;5;249m              [49m[39m
[48;5;235m[38;5;249m  identy (no transformation)[49m[39m[48;5;235m[38;5;249m                                                                                                         [49m[39m
[48;5;235m[38;5;249m* `Rack::Directory` - serves entries below the root given, according to the path info of the Rack request. If a directory [49m[39m[48;5;235m[38;5;249m           [49m[39m
[48;5;235m[38;5;249m  is found, the file's contents will be presented in an html based index. If a file is found, the env will be [49m[39m[48;5;235m[38;5;249m                       [49m[39m
[48;5;235m[38;5;249m  passed to the specified app.[49m[39m[48;5;235m[38;5;249m                                                                                                       [49m[39m
[48;5;235m[38;5;249m* `Rack::ForwardRequest` - gets caught by `Rack::Recursive` and redirects the current request to the app at url[49m[39m[48;5;235m[38;5;249m                      [49m[39m
[48;5;235m[38;5;249m* `Rack::Handler` - *Handlers* connect web servers with Rack. Rack includes Handlers for Thin, WEBrick, FastCGI, CGI, SCGI [49m[39m[48;5;235m[38;5;249m          [49m[39m
[48;5;235m[38;5;249m  and LiteSpeed. Handlers usually are activated by calling `MyHandler.run(myapp)`. A second optional hash can be passed [49m[39m[48;5;235m[38;5;249m             [49m[39m
[48;5;235m[38;5;249m  to include server-specific configuration.        [49m[39m[48;5;235m[38;5;249m                                                                                  [49m[39m
[48;5;235m[38;5;249m* `Rack::Head` - returns an empty body for all HEAD requests. It leaves all other requests unchanged.[49m[39m[48;5;235m[38;5;249m                                [49m[39m
[48;5;235m[38;5;249m* `Rack::Lint` - validates your application and the requests and responses according to the Rack spec[49m[39m[48;5;235m[38;5;249m                                [49m[39m
[48;5;235m[38;5;249m* `Rack::Lock` - locks every request inside a mutex, so that every request will effectively be executed synchronously[49m[39m[48;5;235m[38;5;249m                [49m[39m
[48;5;235m[38;5;249m* `Rack::Logger` - Sets up rack.logger to write to rack.errors stream[49m[39m[48;5;235m[38;5;249m                                                                [49m[39m
[48;5;235m[38;5;249m* `Rack::MethodOverride` - Override HTTP verbs. Lets you use HTTP verbs such as PUT or DELETE in places where the client [49m[39m[48;5;235m[38;5;249m            [49m[39m
[48;5;235m[38;5;249m   doesn't support it. The way this works is by letting the client do an HTTP POST request and set the X-HTTP-Method-Override [49m[39m[48;5;235m[38;5;249m       [49m[39m
[48;5;235m[38;5;249m   header and set the value to the intended HTTP method (such as PATCH).[49m[39m[48;5;235m[38;5;249m                                                             [49m[39m
[48;5;235m[38;5;249m* `Rack::Mime` - Returns String with mime type if found[49m[39m[48;5;235m[38;5;249m                                                                              [49m[39m
[48;5;235m[38;5;249m* `Rack::NullLogger` -         [49m[39m[48;5;235m[38;5;249m                                                                                                      [49m[39m
[48;5;235m[38;5;249m* `Rack::Recursive` - allows applications called down the chain to include data from other applications (by using [49m[39m[48;5;235m[38;5;249m                   [49m[39m
[48;5;235m[38;5;249m  `rack**'rack.recursive.include'** **...** ` or raise a `ForwardRequest` to redirect internally[49m[39m[48;5;235m[38;5;249m                                     [49m[39m
[48;5;235m[38;5;249m* `Rack::Reloader` - High performant source reloader[49m[39m[48;5;235m[38;5;249m                                                                                 [49m[39m
[48;5;235m[38;5;249m* `Rack::Runtime` - Sets an "X-Runtime" response header, indicating the response time of the request, in seconds[49m[39m[48;5;235m[38;5;249m                     [49m[39m
[48;5;235m[38;5;249m* `Rack::Sendfile` - The Sendfile middleware intercepts responses whose body is being served from a file and replaces [49m[39m[48;5;235m[38;5;249m               [49m[39m
[48;5;235m[38;5;249m  it with a server specific X-Sendfile header. The web server is then responsible for writing the file contents [49m[39m[48;5;235m[38;5;249m                     [49m[39m
[48;5;235m[38;5;249m  to the client[49m[39m[48;5;235m[38;5;249m                                                                                                                      [49m[39m
[48;5;235m[38;5;249m* `Rack::Server` - Rack Server starter, used by rackup to start a rack server and use `Rack::Builder` to construct Rack [49m[39m[48;5;235m[38;5;249m             [49m[39m
[48;5;235m[38;5;249m  applications.[49m[39m[48;5;235m[38;5;249m                                                                                                                      [49m[39m
[48;5;235m[38;5;249m* `Rack::ShowException` - for catching unhandled exceptions and presenting them in a nice and helpful way with clickable [49m[39m[48;5;235m[38;5;249m            [49m[39m
[48;5;235m[38;5;249m  backtrace.[49m[39m[48;5;235m[38;5;249m                                                                                                                         [49m[39m
[48;5;235m[38;5;249m* `Rack::ShowStatus` catches all empty responses and replaces them[49m[39m[48;5;235m[38;5;249m                                                                   [49m[39m
[48;5;235m[38;5;249m* `Rack::Static` - intercepts requests for static files (javascript files, images, stylesheets, etc) based on the url prefixes [49m[39m[48;5;235m[38;5;249m      [49m[39m
[48;5;235m[38;5;249m  or route mappings passed in the options, and serves them using a Rack::File object. This allows a Rack stack to [49m[39m[48;5;235m[38;5;249m                   [49m[39m
[48;5;235m[38;5;249m  serve both static and dynamic content. `[49m[39m[48;5;235m[38;5;249m                                                                                           [49m[39m
[48;5;235m[38;5;249m* `Rack::TempfileReaper` - Middleware tracks and cleans Tempfiles created throughout a request (i.e. Rack::Multipart) [49m[39m[48;5;235m[38;5;249m               [49m[39m
[48;5;235m[38;5;249m  Ideas/strategy based on posts by Eric Wong and Charles Oliver Nutter      [49m[39m[48;5;235m[38;5;249m                                                         [49m[39m
[48;5;235m[38;5;249m* `Rack::URLMap` - takes a hash mapping urls or paths to apps, and dispatches accordingly. Support for HTTP/1.1 host [49m[39m[48;5;235m[38;5;249m                [49m[39m
[48;5;235m[38;5;249m  names exists if the URLs start with `http://` or `https://`. URLMap modifies the `SCRIPT_NAME` and `PATH_INFO` such that [49m[39m[48;5;235m[38;5;249m          [49m[39m
[48;5;235m[38;5;249m  the part relevant for dispatch is in the `SCRIPT_NAME`, and the rest in the `PATH_INFO`. This should be taken care of [49m[39m[48;5;235m[38;5;249m             [49m[39m
[48;5;235m[38;5;249m  when you need to reconstruct the URL in order to create links.     [49m[39m[48;5;235m[38;5;249m                                                                [49m[39m
[48;5;235m[38;5;249m* `Rack::Utils` - contains a grab-bag of useful methods for writing web applications adopted from all kinds of Ruby libraries[49m[39m[48;5;235m[38;5;249m        [49m[39m
[48;5;235m[38;5;249m* `Rack::Multipart` - A multipart form data parser, adapted from IOWA. Usually, Rack::Request#POST takes care of calling this.[49m[39m[48;5;235m[38;5;249m       [49m[39m
[48;5;235m[38;5;249m* `Rack::Request` - which also provides query string parsing and multipart handling.[49m[39m[48;5;235m[38;5;249m                                                 [49m[39m
[48;5;235m[38;5;249m* `Rack::Response` - for convenient generation of HTTP replies and cookie handling.   [49m[39m[48;5;235m[38;5;249m                                               [49m[39m
[48;5;235m[38;5;249m* `Rack::MockRequest` and `Rack::MockResponse`- for efficient and quick testing of Rack application without real HTTP round-trips.[49m[39m[48;5;235m[38;5;249m   [49m[39m
[48;5;235m[38;5;249m* `Rack::Auth::Basic` - implements HTTP Basic Authentication, as per RFC 2617[49m[39m[48;5;235m[38;5;249m                                                        [49m[39m
[48;5;235m[38;5;249m* `Rack::Auth::Digest::MD5` implements the MD5 algorithm version of HTTP Digest Authentication, as per RFC 2617.[49m[39m[48;5;235m[38;5;249m                     [49m[39m
[48;5;235m[38;5;249m* `Rack::Session::Cookie` - provides simple cookie based session management. The session is a Ruby Hash stored as base64 [49m[39m[48;5;235m[38;5;249m            [49m[39m
[48;5;235m[38;5;249m  encoded marshalled data set to :key (default: rack.session)[49m[39m[48;5;235m[38;5;249m                                                                        [49m[39m
[48;5;235m[38;5;249m* `Rack::Session::Pool` - provides simple cookie based session management. Session data is stored in a hash held by @pool[49m[39m[48;5;235m[38;5;249m            [49m[39m
[48;5;235m[38;5;249m* `Rack::Session::Memcache` - provides simple cookie based session management. Session data is stored in memcached                   [49m[39m
[48;5;235m[38;5;249m* *Note that these are not middlewares*: `Rack::BodyProxy`, `Rack::Cascade`, `Rack::File`, `Rack::ForwardRequest`, [49m[39m[48;5;235m[38;5;249m                  [49m[39m
[48;5;235m[38;5;249m  `Rack::Handler`, `Rack::Mime`, `Rack::Server`, `Rack::URLMap`, `Rack::Utils`, `Rack::Multipart`, `Rack::Request`, [49m[39m[48;5;235m[38;5;249m                 [49m[39m
[48;5;235m[38;5;249m  `Rack::Response`, `Rack::MockRequest` and `Rack::MockResponse`, [49m[39m[48;5;235m[38;5;249m                                                                   [49m[39m

[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mrack-contrib[0m[38;5;12m (https://github.com/rack/rack-contrib) - Contributed Rack Middleware and Utilities. [39m
[38;5;12m  This package includes a variety of add-on components for Rack:[39m
[38;5;12m  [39m
[48;5;235m[38;5;249m* `Rack::AcceptFormat` - Adds a format extension at the end of the URI when there is none, corresponding to the mime-type given in the Accept HTTP header.[49m[39m[48;5;235m[38;5;249m                                                             [49m[39m
[48;5;235m[38;5;249m* `Rack::Access` - Limits access based on IP address[49m[39m[48;5;235m[38;5;249m                                                                                                                                                                   [49m[39m
[48;5;235m[38;5;249m* `Rack::Backstage` - Returns content of specified file if it exists, which makes it convenient for putting up maintenance pages.[49m[39m[48;5;235m[38;5;249m                                                                                      [49m[39m
[48;5;235m[38;5;249m* `Rack::CSSHTTPRequest` - Adds CSSHTTPRequest support by encoding responses as CSS for cross-site AJAX-style data loading[49m[39m[48;5;235m[38;5;249m                                                                                             [49m[39m
[48;5;235m[38;5;249m* `Rack::Callbacks` - Implements DSL for pure before/after filter like Middlewares.[49m[39m[48;5;235m[38;5;249m                                                                                                                                    [49m[39m
[48;5;235m[38;5;249m* `Rack::Config` - Shared configuration for cooperative middleware.[49m[39m[48;5;235m[38;5;249m                                                                                                                                                    [49m[39m
[48;5;235m[38;5;249m* `Rack::Cookies` - Adds simple cookie jar hash to env[49m[39m[48;5;235m[38;5;249m                                                                                                                                                                 [49m[39m
[48;5;235m[38;5;249m* `Rack::Deflect` - Helps protect against DoS attacks.[49m[39m[48;5;235m[38;5;249m                                                                                                                                                                 [49m[39m
[48;5;235m[38;5;249m* `Rack::Evil` - Lets the rack application return a response to the client from any place.[49m[39m[48;5;235m[38;5;249m                                                                                                                             [49m[39m
[48;5;235m[38;5;249m* `Rack::HostMeta` - Configures `/host-meta` using a block[49m[39m[48;5;235m[38;5;249m                                                                                                                                                             [49m[39m
[48;5;235m[38;5;249m* `Rack::JSONP` - Adds JSON-P support by stripping out the callback param and padding the response with the appropriate callback format.[49m[39m[48;5;235m[38;5;249m                                                                               [49m[39m
[48;5;235m[38;5;249m* `Rack::LazyConditionalGet` - Caches a global `Last-Modified` date and updates it each time there is a request that is not `GET` or `HEAD`.[49m[39m[48;5;235m[38;5;249m                                                                           [49m[39m
[48;5;235m[38;5;249m* `Rack::LighttpdScriptNameFix` - Fixes how lighttpd sets the `SCRIPT_NAME` and `PATH_INFO` variables in certain configurations.[49m[39m[48;5;235m[38;5;249m                                                                                       [49m[39m
[48;5;235m[38;5;249m* `Rack::Locale` - Detects the client locale using the Accept-Language request header and sets a `rack.locale` variable in the environment.[49m[39m[48;5;235m[38;5;249m                                                                            [49m[39m
[48;5;235m[38;5;249m* `Rack::MailExceptions` - Rescues exceptions raised from the app and sends a useful email with the exception, stacktrace, and contents of the environment.[49m[39m[48;5;235m[38;5;249m                                                            [49m[39m
[48;5;235m[38;5;249m* `Rack::NestedParams` - parses form params with subscripts (e.g., * "`post**title** =Hello`") into a nested/recursive Hash structure (based on Rails' implementation).[49m[39m[48;5;235m[38;5;249m                                                [49m[39m
[48;5;235m[38;5;249m* `Rack::NotFound` - A default 404 application.[49m[39m[48;5;235m[38;5;249m                                                                                                                                                                        [49m[39m
[48;5;235m[38;5;249m* `Rack::PostBodyContentTypeParser` - Adds support for JSON request bodies. The Rack parameter hash is populated by deserializing the JSON data provided in the request body when the Content-Type is application/json.[49m[39m
[48;5;235m[38;5;249m* `Rack::Printout` - Prints the environment and the response per request[49m[39m[48;5;235m[38;5;249m                                                                                                                                               [49m[39m
[48;5;235m[38;5;249m* `Rack::ProcTitle` - Displays request information in process title (`$0`) for monitoring/inspection with ps(1).[49m[39m[48;5;235m[38;5;249m                                                                                                       [49m[39m
[48;5;235m[38;5;249m* `Rack::Profiler` - Uses ruby-prof to measure request time.[49m[39m[48;5;235m[38;5;249m                                                                                                                                                           [49m[39m
[48;5;235m[38;5;249m* `Rack::RelativeRedirect` - Transforms relative paths in redirects to absolute URLs.[49m[39m[48;5;235m[38;5;249m                                                                                                                                  [49m[39m
[48;5;235m[38;5;249m* `Rack::ResponseCache` - Caches responses to requests without query strings to Disk or a user provider Ruby object. Similar to Rails' page caching.[49m[39m[48;5;235m[38;5;249m                                                                   [49m[39m
[48;5;235m[38;5;249m* `Rack::ResponseHeaders` - Manipulates response headers object at runtime[49m[39m[48;5;235m[38;5;249m                                                                                                                                             [49m[39m
[48;5;235m[38;5;249m* `Rack::Sendfile` - Enables `X-Sendfile` support for bodies that can be served from file.[49m[39m[48;5;235m[38;5;249m                                                                                                                             [49m[39m
[48;5;235m[38;5;249m* `Rack::Signals` - Installs signal handlers that are safely processed after a request[49m[39m[48;5;235m[38;5;249m                                                                                                                                 [49m[39m
[48;5;235m[38;5;249m* `Rack::SimpleEndpoint` - Creates simple endpoints with routing rules, similar to Sinatra actions[49m[39m[48;5;235m[38;5;249m                                                                                                                     [49m[39m
[48;5;235m[38;5;249m* `Rack::StaticCache` - Modifies the response headers to facilitiate client and proxy caching for static files that minimizes http requests and improves overall load times for second time visitors.[49m[39m[48;5;235m[38;5;249m                  [49m[39m
[48;5;235m[38;5;249m* `Rack::TimeZone` - Detects the client's timezone using JavaScript and sets a variable in Rack's environment with the offset from UTC.[49m[39m[48;5;235m[38;5;249m                                                                                [49m[39m
[48;5;235m[38;5;249m* `Rack::TryStatic` - Tries to match request to a static file[49m[39m[48;5;235m[38;5;249m                                                                                                                                                          [49m[39m

[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mList of Middleware[0m[38;5;12m (https://github.com/rack/rack/wiki/List-of-Middleware) on Rack's Wiki. Copied here (ver 2016/03/03):[39m

[48;5;235m[38;5;249m* **JSON-P** (http://github.com/rack/rack-contrib/tree/master/lib/rack/contrib/jsonp.rb)[49m[39m[48;5;235m[38;5;249m                                                                                                                                                                            [49m[39m
[48;5;235m[38;5;249m* **Rack::Cache** (http://github.com/rtomayko/rack-cache/tree/master) is suitable as a quick drop-in component to enable HTTP caching.[49m[39m[48;5;235m[38;5;249m                                                                                                                              [49m[39m
[48;5;235m[38;5;249m* **Rack::ESI** (http://github.com/Qerub/rack-esi/tree/master) is a small (but still very useful!) subset of ESI (Edge Side Includes).[49m[39m[48;5;235m[38;5;249m                                                                                                                              [49m[39m
[48;5;235m[38;5;249m* **CloudKit** (http://getcloudkit.com) includes OpenIDFilter, OAuthFilter, and RESTful JSON storage[49m[39m[48;5;235m[38;5;249m                                                                                                                                                                [49m[39m
[48;5;235m[38;5;249m* **Rack::Config** (http://github.com/jcrosby/rack-config/tree/master) - Shared configuration for cooperative middleware.[49m[39m[48;5;235m[38;5;249m                                                                                                                                           [49m[39m
[48;5;235m[38;5;249m* **Rack::OpenID** (http://github.com/josh/rack-openid/tree/master) provides a more HTTPish API around the ruby-openid library. [49m[39m[48;5;235m[38;5;249m                                                                                                                                    [49m[39m
[48;5;235m[38;5;249m* **Rack::Debug** (http://github.com/ddollar/rack-debug)[49m[39m[48;5;235m[38;5;249m                                                                                                                                                                                                            [49m[39m
[48;5;235m[38;5;249m* **Rack::AbstractFormat** (http://github.com/mynyml/rack-abstract-format)[49m[39m[48;5;235m[38;5;249m                                                                                                                                                                                          [49m[39m
[48;5;235m[38;5;249m* **Rack::RespondTo** (http://github.com/mynyml/rack-respond_to) allows triggering different actions based on requested media type.[49m[39m[48;5;235m[38;5;249m                                                                                                                                 [49m[39m
[48;5;235m[38;5;249m* **Rack::SupportedMediaTypes** (http://github.com/mynyml/rack-supported-media-types) specify an app's supported media types.[49m[39m[48;5;235m[38;5;249m                                                                                                                                       [49m[39m
[48;5;235m[38;5;249m* **Rack::AcceptMediaTypes** (http://github.com/mynyml/rack-accept-media-types) determine the request's prefered media type.[49m[39m[48;5;235m[38;5;249m                                                                                                                                        [49m[39m
[48;5;235m[38;5;249m* **Rack::MultipartRelated** (http://github.com/lucasfais/rack-multipart_related) parses multipart/related requests and rebuild a simple/merged parameters hash.[49m[39m[48;5;235m[38;5;249m                                                                                                    [49m[39m
[48;5;235m[38;5;249m* **Rack::Heartbeat** (https://github.com/imajes/rack-heartbeat) Add a configurable heartbeat/health-check/ping url to your app[49m[39m[48;5;235m[38;5;249m                                                                                                                                     [49m[39m
[48;5;235m[38;5;249m* **Rack::Honeypot** (http://github.com/sunlightlabs/rack-honeypot) acts as a spam trap.[49m[39m[48;5;235m[38;5;249m                                                                                                                                                                            [49m[39m
[48;5;235m[38;5;249m* **Rack::GoogleAnalytics** (http://github.com/ambethia/rack-google_analytics/tree/master) embeds Google Analytics tracking code. [49m[39m[48;5;235m[38;5;249m                                                                                                                                  [49m[39m
[48;5;235m[38;5;249m* **Rack::Embed** (http://github.com/minad/rack-embed) embeds small images via the data-url (base64) if the browser supports it. This reduces http traffic.[49m[39m[48;5;235m[38;5;249m                                                                                                         [49m[39m
[48;5;235m[38;5;249m* **Warden** (http://github.com/hassox/warden) General Rack Authentication Framework[49m[39m[48;5;235m[38;5;249m                                                                                                                                                                                [49m[39m
[48;5;235m[38;5;249m* **Rack::StaticFallback** (http://github.com/dolzenko/rack-static_fallback) bounces or redirects requests to missing static files.[49m[39m[48;5;235m[38;5;249m                                                                                                                                 [49m[39m
[48;5;235m[38;5;249m* **Rack::Throttle** (http://github.com/datagraph/rack-throttle) provides logic for rate-limiting incoming HTTP requests to Rack applications.[49m[39m[48;5;235m[38;5;249m                                                                                                                      [49m[39m
[48;5;235m[38;5;249m* **Rack::LinkedData** (https://github.com/ruby-rdf/rack-linkeddata) implements Linked Data content negotiation.[49m[39m[48;5;235m[38;5;249m                                                                                                                                                    [49m[39m
[48;5;235m[38;5;249m* **SimpleRouter** (http://github.com/mynyml/simple_router)[49m[39m[48;5;235m[38;5;249m                                                                                                                                                                                                         [49m[39m
[48;5;235m[38;5;249m* **Cylon** (https://github.com/dmathieu/cylon) Disallows application indexation by search engines except in production. Rack Middleware and Rails Engine.[49m[39m[48;5;235m[38;5;249m                                                                                                          [49m[39m
[48;5;235m[38;5;249m* **Slogger::Rack::RequestLogger** (https://github.com/leandrosilva/slogger) if you want to log on Syslog.[49m[39m[48;5;235m[38;5;249m                                                                                                                                                          [49m[39m
[48;5;235m[38;5;249m* **Rack::Batik::SVG** (https://github.com/crapooze/jruby-rack-batik) transcodes SVG pictures to JPEG[49m[39m[48;5;235m[38;5;249m                                                                                                                                                               [49m[39m
[48;5;235m[38;5;249m* **Rack::Referrals** (https://github.com/deviantech/rack-referrals) extracts referring search engine info[49m[39m[48;5;235m[38;5;249m                                                                                                                                                          [49m[39m
[48;5;235m[38;5;249m* **Muster** (https://github.com/claco/muster) parses some or all of the query string in varying formats into hashes. Helps adding human friendly (not rack/rails nested) query string options to APIs and such.[49m[39m[48;5;235m[38;5;249m                                                    [49m[39m
[48;5;235m[38;5;249m* **Moneta** (https://github.com/minad/moneta) adds Rack::MonetaStore (places key/value store in env, support for per-request caching), Rack::MonetaCookies (allow Moneta to be used to store cookies) and Rack::MonetaRest (expose a key/va[49m[39m[48;5;235m[38;5;249m                        [49m[39m
[48;5;235m[38;5;249mlue store via HTTP/REST)[49m[39m[48;5;235m[38;5;249m                                                                                                                                                                                                                                            [49m[39m
[48;5;235m[38;5;249m* **RouteDowncaser** (https://github.com/carstengehling/route_downcaser) makes all routing in Rails case-insensitive.[49m[39m[48;5;235m[38;5;249m                                                                                                                                               [49m[39m
[48;5;235m[38;5;249m* **Rack::CanIUse** (http://github.com/louismullie/rack-caniuse) checks if user agents support the HTML/CSS technologies used by your website using the CanIUse database.[49m[39m[48;5;235m[38;5;249m                                                                                           [49m[39m
[48;5;235m[38;5;249m* **Rack::Attack** (https://github.com/kickstarter/rack-attack) A DSL for blocking & throttling abusive clients[49m[39m[48;5;235m[38;5;249m                                                                                                                                                     [49m[39m
[48;5;235m[38;5;249m* **ChromeLogger** (https://github.com/cookrn/chrome_logger) A Ruby library that implements the **Chrome Logger** (http://craig.is/writing/chrome-logger) spec as Rack middleware[49m[39m[48;5;235m[38;5;249m                                                                                   [49m[39m
[48;5;235m[38;5;249m* **Rack::DetectTor** (https://github.com/warrenguy/rack-detect-tor) Detect Tor exit users[49m[39m[48;5;235m[38;5;249m                                                                                                                                                                          [49m[39m
[48;5;235m[38;5;249m* **Rack::RackTorBlock** (https://github.com/Gild/rack-tor-block) Block access to a rack application from any client accessing from the Tor network[49m[39m[48;5;235m[38;5;249m                                                                                                                 [49m[39m
[48;5;235m[38;5;249m* **Rack::Turnout** (https://github.com/biola/turnout/) Easily put your Rack apps into maintenance mode[49m[39m[48;5;235m[38;5;249m                                                                                                                                                             [49m[39m
[48;5;235m[38;5;249m* **Rack::CAS** (https://github.com/biola/rack-cas) Simple CAS client authentication[49m[39m[48;5;235m[38;5;249m                                                                                                                                                                                [49m[39m
[48;5;235m[38;5;249m* **Rack::AcornCache** (https://github.com/acorncache/acorn-cache) Configurable HTTP proxy caching solution[49m[39m[48;5;235m[38;5;249m                                                                                                                                                         [49m[39m

[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mRubygems[0m[38;5;12m (https://rubygems.org/) - Search the keywords [39m[48;5;235m[38;5;249m[1mrack[0m[38;5;12m (https://rubygems.org/search?utf8=%E2%9C%93&query=rack) or [39m
[38;5;12m  [39m[48;5;235m[38;5;249m[1mmiddleware[0m[38;5;12m (https://rubygems.org/search?utf8=%E2%9C%93&query=middleware)[39m

[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mRail's ActionController Middleware Stack[0m[38;5;12m (https://github.com/rails/rails/tree/master/actionpack/lib/action_dispatch/middleware)[39m

[38;5;12m  To see what middleware your Rails app is using, open it up in command line and run:  [39m
[38;5;12m  [39m
[38;5;12m  [39m
[48;5;235m[38;5;249m rake middleware[49m[39m
[38;5;12m  [39m
[38;5;12m  [39m
[38;5;12m  You will see a big list of middleware classes that your current Rails app is using. A sample outout:[39m
[38;5;12m  [39m
[38;5;12m  [39m[48;5;235m[38;5;249mRuby[49m[39m
[38;5;12m  use ActionDispatch::Static[39m
[38;5;12m  use Rack::Lock[39m
[38;5;12m  use #[39m
[38;5;12m  use Rack::Runtime[39m
[38;5;12m  use Rack::MethodOverride[39m
[38;5;12m  use ActionDispatch::RequestId[39m
[38;5;12m  use Rails::Rack::Logger[39m
[38;5;12m  use ActionDispatch::ShowExceptions[39m
[38;5;12m  use ActionDispatch::DebugExceptions[39m
[38;5;12m  use BetterErrors::Middleware[39m
[38;5;12m  use ActionDispatch::RemoteIp[39m
[38;5;12m  use ActionDispatch::Reloader[39m
[38;5;12m  use ActionDispatch::Callbacks[39m
[38;5;12m  use ActiveRecord::ConnectionAdapters::ConnectionManagement[39m
[38;5;12m  use ActiveRecord::QueryCache[39m
[38;5;12m  use ActionDispatch::Cookies[39m
[38;5;12m  use ActionDispatch::Session::CookieStore[39m
[38;5;12m  use ActionDispatch::Flash[39m
[38;5;12m  use ActionDispatch::ParamsParser[39m
[38;5;12m  use ActionDispatch::Head[39m
[38;5;12m  use Rack::ConditionalGet[39m
[38;5;12m  use Rack::ETag[39m
[38;5;12m  use ActionDispatch::BestStandardsSupport[39m
[38;5;12m  use Warden::Manager[39m
[38;5;12m  run MyApplication::Application.routes[39m
[38;5;12m  [39m
[38;5;12m  [39m
[38;5;11m[1m▐[0m[38;5;12m [39m[38;5;12mMiddlewares for Source Reloader[39m

[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[48;5;235m[38;5;249mRack::Reloader[49m[39m[38;5;12m from [39m[38;5;14m[1mRack built-in middlewares[0m[38;5;12m (https://github.com/rack/rack) - High performant source reloader[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mShotgun[0m[38;5;12m (https://github.com/rtomayko/shotgun) - An automatic reloading version of the [39m[48;5;235m[38;5;249mrackup[49m[39m[38;5;12m command that's shipped with Rack.[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mrack-unreloader[0m[38;5;12m (https://github.com/jeremyevans/rack-unreloader) - A rack library that reloads application files when it [39m
[38;5;12m  detects changes, unloading constants defined in those files before reloading[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mguard-rack[0m[38;5;12m (https://github.com/dblock/guard-rack) - Restart Rack when files change  [39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[48;5;235m[38;5;249mActionDispatch::Reloader[49m[39m[38;5;12m from [39m[38;5;14m[1mRail's ActionController Middleware Stack[0m[38;5;12m (https://goo.gl/v8ydkH) -[39m
[38;5;12m  Provides prepare and cleanup callbacks, intended to assist with code reloading during development[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mrack-livereload[0m[38;5;12m (https://github.com/johnbintz/rack-livereload) - Bring in livereload.js into handy Rack middleware[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mguard-livereload[0m[38;5;12m (https://github.com/guard/guard-livereload) - automatically reload your browser when 'view' files are modified   [39m

[38;5;11m[1m▐[0m[38;5;12m [39m[38;5;12mMiddlewares for HTTP Routing[39m

[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;12mFrom [39m[38;5;14m[1mRack built-in middlewares[0m[38;5;12m (https://github.com/rack/rack):[39m

[38;5;12m [39m[38;5;12m [39m[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[48;5;235m[38;5;249mRack::URLMap[49m[39m[38;5;12m - to route to multiple applications inside the same process.[39m
[38;5;12m [39m[38;5;12m [39m[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[48;5;235m[38;5;249mRack::Static[49m[39m[38;5;12m - intercepts requests for static files (javascript files, images, stylesheets, etc) based on the url prefixes [39m
[48;5;235m[38;5;249mor route mappings passed in the options, and serves them using a Rack::File object. This allows a Rack stack to [49m[39m
[48;5;235m[38;5;249mserve both static and dynamic content. `[49m[39m[48;5;235m[38;5;249m                                                                        [49m[39m

[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mrack-no-www[0m[38;5;12m (https://github.com/logicaltext/rack-no-www) - This piece of simple middlweware catches requests that begin [39m
[38;5;12m  with "www" and redirects them to the equivalent "non-www" address. For example, a request to "http://www.example.org" will [39m
[38;5;12m  be redirected to "http://example.org".[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mrack-routing[0m[38;5;12m (https://github.com/iAmPlus/rack-routing) - Map URL routes to Ruby methods[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mangus-router[0m[38;5;12m (https://github.com/moove-it/angus-router) - A router for Rack applications.[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mrack-router[0m[38;5;12m (https://github.com/pjb3/rack-router) - A simple router for rack apps. Requires Ruby 1.9+. (~ 200 LOC)[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mSimpleRouter[0m[38;5;12m (http://github.com/mynyml/simple_router) - Small and simple standalone router, meant for use with Rack applications.[39m
[38;5;12m  Familiar Sinatra-like DSL for defining actions. Modular architecture.[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mSyro[0m[38;5;12m (https://github.com/soveran/syro) - Simple router for web applications inspired by Cuba. (~ 250 LOC)[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mToro[0m[38;5;12m (https://github.com/soveran/toro) - Tree Oriented Routing  [39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mhttp_router[0m[38;5;12m (https://github.com/joshbuddy/http_router) - This is an HTTP router for use in either a web framework, [39m
[38;5;12m  or on it's own using Rack. [39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1msinatra-router[0m[38;5;12m (https://github.com/brandur/sinatra-router) - A tiny vendorable router that makes it easy to try [39m
[38;5;12m  routes from a number of different modular Sinatra applications  [39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1msinatra-advanced-routes[0m[38;5;12m (https://github.com/rkh/sinatra-advanced-routes) - Make Sinatra routes first class objects [39m
[38;5;12m  (extracted from BigBand). [39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mRack::Mount[0m[38;5;12m (https://github.com/jm/rack-mount) - A stackable dynamic tree based Rack router.   [39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mLotus::Router[0m[38;5;12m (https://github.com/lotus/router) - Rack compatible, lightweight and fast HTTP Router for Ruby and [39m[48;5;235m[38;5;249mLotus[49m[39m[38;5;12m.[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mPendragon[0m[38;5;12m (https://github.com/namusyaka/pendragon) - Provides an HTTP router for use in Rack and Padrino[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mJourney[0m[38;5;12m (https://github.com/rails/journey) - A router for rails. Journey is a router. It routes requests.[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mUsher[0m[38;5;12m (https://github.com/joshbuddy/usher) - Pure ruby general purpose router with interfaces for rails, rack, email [39m
[38;5;12m  or choose your own adventure[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mRoda[0m[38;5;12m (https://github.com/jeremyevans/roda) - Routing Tree Web Framework Toolkit[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mRack Reverse Proxy[0m[38;5;12m (https://github.com/waterlink/rack-reverse-proxy) - This is a simple reverse proxy for Rack that [39m
[38;5;12m  pretty heavily rips off Rack Forwarder.[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mRack::Rewrite[0m[38;5;12m (https://github.com/jtrupiano/rack-rewrite) - A rack middleware for defining and applying rewrite rules    [39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mHanami::Router[0m[38;5;12m (https://github.com/hanami/router) - Rack compatible, lightweight and fast HTTP Router for Ruby and Hanami.[39m

[38;5;11m[1m▐[0m[38;5;12m [39m[38;5;12mMiddlewares for Session Management[39m

[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;12mFrom [39m[38;5;14m[1mRack built-in middlewares[0m[38;5;12m (https://github.com/rack/rack):[39m

[38;5;12m [39m[38;5;12m [39m[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[48;5;235m[38;5;249mRack::Session::Abstract[49m[39m[38;5;12m - includes [39m[48;5;235m[38;5;249mRack::Session::Abstract::ID[49m[39m[38;5;12m for implementing an id based sessioning service and[39m
[48;5;235m[38;5;249m`Rack::Session::Abstract::SessionHash` for lazily loading the session from store.[49m[39m
[38;5;12m [39m[38;5;12m [39m[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[48;5;235m[38;5;249mRack::Session::Cookie[49m[39m[38;5;12m - provides simple cookie based session management. The session is a Ruby Hash stored as base64 [39m
[48;5;235m[38;5;249mencoded marshalled data set to :key (default: rack.session)[49m[39m
[38;5;12m [39m[38;5;12m [39m[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[48;5;235m[38;5;249mRack::Session::Pool[49m[39m[38;5;12m - provides simple cookie based session management. Session data is stored in a hash held by @pool[39m
[38;5;12m [39m[38;5;12m [39m[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[48;5;235m[38;5;249mRack::Session::Memcache[49m[39m[38;5;12m - provides simple cookie based session management. Session data is stored in memcached[39m

[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;12mFrom [39m[38;5;14m[1mRail's ActionController Middleware Stack[0m[38;5;12m (https://github.com/rails/rails/tree/master/actionpack/lib/action_dispatch/middleware):[39m

[38;5;12m [39m[38;5;12m [39m[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[48;5;235m[38;5;249mActionDispatch::Session::CookieStore[49m[39m[38;5;12m - Uses the cookie based session store.[39m
[38;5;12m [39m[38;5;12m [39m[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[48;5;235m[38;5;249mActionDispatch::Session::CacheStore[49m[39m[38;5;12m - Uses the Rails cache based session store[39m
[38;5;12m [39m[38;5;12m [39m[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[48;5;235m[38;5;249mActionDispatch::Session::MemCacheStore[49m[39m[38;5;12m - Uses the memcached based session store.[39m
[38;5;12m [39m[38;5;12m [39m[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[48;5;235m[38;5;249mActiveRecord::SessionStore[49m[39m[38;5;12m - Uses the database based session store.[39m
[38;5;12m  [39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mrack-deadline[0m[38;5;12m (https://github.com/jeremyevans/rack-deadline) - A simple rack middleware that automatically clears sessions [39m
[38;5;12m  that have been open too long (by default, 1 day)[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mrack_session_access[0m[38;5;12m (https://github.com/railsware/rack_session_access) - provides rack middleware for 'rack.session' [39m
[38;5;12m  environment management[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mMoneta[0m[38;5;12m (https://github.com/minad/moneta) - Moneta provides a standard interface for interacting with various kinds of key/value stores.[39m
[38;5;12m   Moneta supports the well-known NoSQL and document based stores.    [39m
[38;5;12m   [39m
[38;5;12m [39m[38;5;12m [39m[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[48;5;235m[38;5;249mRack::Session::Moneta[49m[39m[38;5;12m - is a Rack middleware to use Moneta for storing sessions[39m
[38;5;12m [39m[38;5;12m [39m[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[48;5;235m[38;5;249mRack::MonetaCookies[49m[39m[38;5;12m - is a Rack middleware which uses Moneta to store cookies  [39m
[38;5;12m [39m[38;5;12m [39m[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[48;5;235m[38;5;249mActionDispatch::Session::MonetaStore[49m[39m[38;5;12m - is a Rails middleware to use Moneta for storing sessions [39m
[38;5;12m  [39m
[38;5;11m[1m▐[0m[38;5;12m [39m[38;5;12mMiddlewares for Caching[39m

[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[48;5;235m[38;5;249mRack::ETag[49m[39m[38;5;12m from [39m[38;5;14m[1mRack built-in middlewares[0m[38;5;12m (https://github.com/rack/rack) - Adds ETag header on all String bodies. ETags are used to validate cache.[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mrack-cache[0m[38;5;12m (https://github.com/rtomayko/rack-cache) - A quick drop-in component to enable HTTP caching for[39m
[38;5;12m  Rack-based applications that produce freshness (Expires, Cache-Control) and/or validation (Last-Modified, ETag) information[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mGarner[0m[38;5;12m (https://github.com/artsy/garner) - A set of Rack middleware and cache helpers that implement various caching strategies.  [39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mrack-cache-smash[0m[38;5;12m (https://github.com/eliotsykes/rack-cache-smash) - Rack middleware to cache bust [39m[48;2;30;30;40m[38;5;13m[3mevery[0m[38;5;12m CSS and JS asset request[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mRack::Cachely[0m[38;5;12m (https://github.com/markbates/rack-cachely) - Rack Middleware for working with the CachelyApp Page Cache Service, [39m
[38;5;12m  [39m[38;5;14m[1mCachely[0m[38;5;12m (http://www.cachelyapp.com/)[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mFaraday Http Cache[0m[38;5;12m (https://github.com/plataformatec/faraday-http-cache) - A Faraday middleware that respects HTTP cache, by checking expiration and validation of the stored responses.[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mRack::Worker[0m[38;5;12m (https://github.com/csquared/rack-worker) - Rack middleware that implements the Worker Pattern. It processes GET requests with a worker [39m
[38;5;12m  backend and only serves them straight from a cache. While processing the request it serves empty HTTP 202 responses. Your web frontend is never [39m
[38;5;12m  blocked processing the request.  [39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mMoneta[0m[38;5;12m (https://github.com/minad/moneta) - Moneta provides a standard interface for interacting with various kinds of key/value stores.[39m
[38;5;12m   Moneta supports the well-known NoSQL and document based stores.    [39m
[38;5;12m   [39m
[38;5;12m [39m[38;5;12m [39m[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[48;5;235m[38;5;249mRack::MonetaStore[49m[39m[38;5;12m - is a Rack middleware which places a Moneta store in the environment and enables per-request caching[39m
[38;5;12m [39m[38;5;12m [39m[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[48;5;235m[38;5;249mRack::Cache::Moneta[49m[39m[38;5;12m - provides meta and entity stores for Rack-Cache[39m
[38;5;12m [39m[38;5;12m [39m[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[48;5;235m[38;5;249mActiveSupport::Cache::MonetaStore[49m[39m[38;5;12m - is a Rails cache implementation which uses a Moneta store as backend[39m
[38;5;12m [39m[38;5;12m [39m[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[48;5;235m[38;5;249mRamaze::Cache::Moneta[49m[39m[38;5;12m - is integrated into the Ramaze project and allows Ramaze to use Moneta as caching store[39m
[48;5;235m[38;5;249m[49m[39m
[38;5;11m[1m▐[0m[38;5;12m [39m[38;5;12mMiddlewares for Authentication[39m

[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[48;5;235m[38;5;249mRack::Auth::Basic[49m[39m[38;5;12m and [39m[48;5;235m[38;5;249mRack::Auth::Digest[49m[39m[38;5;12m from [39m[38;5;14m[1mRack built-in middlewares[0m[38;5;12m (https://github.com/rack/rack) - HTTP Basic Authentication and HTTP Digest Authentication[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mWarden[0m[38;5;12m (https://github.com/hassox/warden) - General Rack Authentication Framework[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mDevise[0m[38;5;12m (https://github.com/plataformatec/devise) - A flexible authentication solution for Rails based on Warden. A complete MVC solution based on Rails engines[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mOmniAuth[0m[38;5;12m (https://github.com/intridea/omniauth) - A flexible authentication system utilizing Rack middleware[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mrack-oauth2[0m[38;5;12m (https://github.com/nov/rack-oauth2) - OAuth 2.0 Server & Client Library. Both Bearer and MAC token type are supported.[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mRack::OAuth2::Server[0m[38;5;12m (https://github.com/assaf/rack-oauth2-server) - OAuth 2.0 Authorization Server as a Rack module. Supports Sinatra and Rails. [39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mrack-openid[0m[38;5;12m (https://github.com/grosser/rack-openid) - Provides a more HTTPish API around the [39m[48;5;235m[38;5;249mruby-openid[49m[39m[38;5;12m library[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mrack-jwt-token-auth[0m[38;5;12m (https://github.com/botanicus/rack-jwt-token-auth) - JWT-based token authentication middleware for Rack.[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mShield[0m[38;5;12m (https://github.com/cyx/shield) - Authentication protocol for use in your routing and model context (~ 110 LOC)[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mHeroku Bouncer[0m[38;5;12m (https://github.com/heroku/heroku-bouncer) - Rack middleware (implemented in Sinatra) that requires Heroku [39m
[38;5;12m  OAuth on all requests.  [39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1msinatra_auth_github[0m[38;5;12m (https://github.com/atmos/sinatra_auth_github) - A sinatra extension that provides oauth authentication to github. See Scott Chacon's [39m
[38;5;12m  [39m[38;5;14m[1mMinimal Sinatra GitHub Application[0m[38;5;12m (https://github.com/schacon/ghapp.sinatra.min) for a demostration.   [39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mRack::FacebookConnect[0m[38;5;12m (https://github.com/intridea/rack_facebook_connect) - A Rack middleware for Facebook Connect authentication.[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mRack::Cerberus[0m[38;5;12m (https://github.com/mig-hub/cerberus) -  Rack middleware for form-based authentication. It works roughly like Basic HTTP authentication [39m
[38;5;12m  except that you can use options in order to style the authentication page.[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mhancock[0m[38;5;12m (https://github.com/atmos/hancock/) - An OpenID based Single Sign On server with a simple API, written in Sinatra   [39m
[38;5;12m [39m[38;5;12m [39m[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mhancock-client[0m[38;5;12m (https://github.com/atmos/hancock-client) - A sinatra app and rack middleware piece for the hancock SSO server[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mntlm-sso[0m[38;5;12m (https://github.com/rekado/ntlm-sso) - Rack authentication module for single sign on via NTLM. Note this is not a middleware.[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mCASino[0m[38;5;12m (https://github.com/rbCAS/CASino) - Ruby-based Single Sign-On solution supporting the CAS standard. Note this is not a middleware.    [39m
[38;5;12m [39m[38;5;12m [39m[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mCASinoApp[0m[38;5;12m (https://github.com/rbCAS/CASinoApp) - Ready to use CAS server based on CASino Rails Engine.[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mOmniAuth[0m[38;5;12m (https://github.com/omniauth/omniauth) - A flexible authentication system utilizing Rack middleware.[39m

[38;5;11m[1m▐[0m[38;5;12m [39m[38;5;12mMiddlwares for Asset Pipeline[39m

[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mSprockets[0m[38;5;12m (https://github.com/rails/sprockets) - Sprockets is a Ruby library for compiling and serving web assets. It [39m
[38;5;12m  features declarative dependency management for JavaScript and CSS assets, as well as a powerful preprocessor pipeline that [39m
[38;5;12m  allows you to write assets in languages like CoffeeScript, Sass and SCSS.[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mrack-sprocketize[0m[38;5;12m (https://github.com/petebrowne/rack-sprocketize) - a piece of Rack Middleware which uses Sprockets to concatenate [39m
[38;5;12m  javascript files and then optionally compresses them.[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mrack-pack[0m[38;5;12m (https://github.com/petebrowne/rack-pack) - A piece of Rack Middleware that packages and optionally compresses assets such [39m
[38;5;12m  as javascripts and stylesheets into single files.[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mRack Pipeline[0m[38;5;12m (https://github.com/ujifgc/rack-pipeline) - A rack middleware to serve javascript and stylesheet assets [39m
[38;5;12m  for ruby web applications [39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mrack-coffee[0m[38;5;12m (https://github.com/mattly/rack-coffee) - Simple rack middleware for serving up [39m[48;5;235m[38;5;249mCoffeeScript[49m[39m[38;5;12m files as compiled javascript[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mrack-bundle[0m[38;5;12m (https://github.com/logicaltext/rack-bundle) - A Rack middleware for grouping Javascripts and stylesheets into one [39m
[38;5;12m  single file (styles are grouped by media type).  [39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mrack-zippy[0m[38;5;12m (https://github.com/eliotsykes/rack-zippy) - A Rack middleware for serving static gzipped assets precompiled by [39m
[38;5;12m  the Rails (4.1 and earlier) asset pipeline into the public/assets directory.[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mHork[0m[38;5;12m (https://github.com/sstephenson/hork) - Rack middleware for transparently compressing JavaScript and CSS assets with [39m
[38;5;12m  the YUI Compressor    [39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mSinatra AssetPack[0m[38;5;12m (https://github.com/rstacruz/sinatra-assetpack) - The most convenient way to manage your assets in Sinatra[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mrack-asset-compiler[0m[38;5;12m (https://github.com/jbaudanza/rack-asset-compiler) - Rack middleware that provides a generic interface for [39m
[38;5;12m  compiling static files, such as Sass or CoffeeScript files.[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mRack::Cat[0m[38;5;12m (https://github.com/ncr/rack-cat) - A Rack middleware to concatenate your assets (static, dynamic and remote) and [39m
[38;5;12m  serve javascripts and stylesheets faster.[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mRack::Pack[0m[38;5;12m (https://github.com/petebrowne/rack-pack) - for packaging assets such as javascripts and stylesheets into a single file.[39m

[38;5;11m[1m▐[0m[38;5;12m [39m[38;5;12mMiddlewares for Debugging or Profiling[39m

[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;12mFrom [39m[38;5;14m[1mRack built-in middlewares[0m[38;5;12m (https://github.com/rack/rack):[39m

[38;5;12m [39m[38;5;12m [39m[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[48;5;235m[38;5;249mRack::ShowException[49m[39m[38;5;12m - for catching unhandled exceptions and[39m
[48;5;235m[38;5;249mpresenting them in a nice and helpful way with clickable backtrace.[49m[39m
[38;5;12m [39m[38;5;12m [39m[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[48;5;235m[38;5;249mRack::ShowStatus[49m[39m[38;5;12m catches all empty responses and replaces them[39m
[48;5;235m[38;5;249mwith a site explaining the error  [49m[39m
[38;5;12m [39m[38;5;12m [39m[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[48;5;235m[38;5;249mRack::Runtime[49m[39m[38;5;12m sets an "X-Runtime" response header, indicating the response time of the request, in seconds         [39m
[48;5;235m[38;5;249m  [49m[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;12mFrom [39m[38;5;14m[1mRail's ActionController Middleware Stack[0m[38;5;12m (https://github.com/rails/rails/tree/master/actionpack/lib/action_dispatch/middleware): [39m

[38;5;12m [39m[38;5;12m [39m[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[48;5;235m[38;5;249mActionDispatch::ShowExceptions[49m[39m[38;5;12m - Rescues any exception returned by the application and calls an exceptions app that will [39m
[48;5;235m[38;5;249m wrap it in a format for the end user.[49m[39m
[38;5;12m [39m[38;5;12m [39m[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[48;5;235m[38;5;249mActionDispatch::DebugExceptions[49m[39m[38;5;12m - Responsible for logging exceptions and showing a debugging page in case the request is local.    [39m

[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mrack-webconsole[0m[38;5;12m (https://github.com/codegram/rack-webconsole) - Rack-based interactive console (ana Rails console) in [39m
[38;5;12m  your web application's frontend. That means you can interact with your application's backend from within the browser itself![39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mrack-webconsole-pry[0m[38;5;12m (https://github.com/mrbrdo/rack-webconsole) - based on [39m[48;5;235m[38;5;249m[1mrack-webconsole[0m[38;5;12m (https://github.com/codegram/rack-webconsole), [39m
[38;5;12m  uses [39m[48;5;235m[38;5;249m[1mpry[0m[38;5;12m (https://github.com/pry/pry) instead of ripl, supports colors.[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mPryRescue::Rack[0m[38;5;12m (https://github.com/ConradIrwin/pry-rescue) - pry-rescue is an implementation of "break on unhandled exception" [39m
[38;5;12m  for Ruby.  Whenever an exception is raised, but not rescued, pry-rescue will automatically open Pry for you.[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mrack-bug[0m[38;5;12m (https://github.com/brynary/rack-bug) - [39m[48;5;235m[38;5;249mRack::Bug[49m[39m[38;5;12m adds a diagnostics toolbar to Rack apps. When enabled, it injects a floating div allowing exploration [39m
[38;5;12m  of logging, database queries, template rendering times, etc.[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mrack-debug[0m[38;5;12m (https://github.com/ddollar/rack-debug) - A middleware that provides a simple interface to [39m[48;5;235m[38;5;249mruby-debug[49m[39m[38;5;12m. Helps debug apps running [39m
[38;5;12m  in Passenger  [39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mrack-insight[0m[38;5;12m (https://github.com/pboling/rack-insight) - [39m[48;5;235m[38;5;249mRack::Insight[49m[39m[38;5;12m adds a diagnostics toolbar to Rack apps. When enabled, [39m
[38;5;12m  it injects a floating div allowing exploration of logging, database queries, template rendering times, etc. [39m[48;5;235m[38;5;249mRack::Insight[49m[39m[38;5;12m [39m
[38;5;12m  stores debugging info over many requests, incuding AJAX requests. Forked from [39m[48;5;235m[38;5;249mrack-bug[49m[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mracksh[0m[38;5;12m (https://github.com/sickill/racksh) - Console for Rack based ruby web apps. It's like script/console in Rails (~ 100 LOC) [39m
[38;5;12m  or merb -i in Merb, but for any app built on Rack. Thanks to [39m[48;5;235m[38;5;249mRack::Test::Methods[49m[39m[38;5;12m (from [39m[48;5;235m[38;5;249mrack-test[49m[39m[38;5;12m) and Ruby REPLs ([39m[48;5;235m[38;5;249mpry[49m[39m[38;5;12m and [39m[48;5;235m[38;5;249mirb[49m[39m[38;5;12m).[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mrack-monitor[0m[38;5;12m (https://github.com/pka/rack-monitor) - Rack middleware for collecting run-time information for monitoring tools like Munin[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mRack::PerftoolsProfiler[0m[38;5;12m (https://github.com/bhb/rack-perftools_profiler) - Middleware for profiling Rack-compatible apps using [39m
[38;5;12m  [39m[38;5;14m[1mperftools.rb[0m[38;5;12m (http://github.com/tmm1/perftools.rb)[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mBugsnag[0m[38;5;12m (https://github.com/bugsnag/bugsnag-ruby) - The Bugsnag Notifier for Ruby gives you instant notification of exceptions [39m
[38;5;12m  thrown from your Rails, Sinatra, Rack or plain Ruby app[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mBetter Errors[0m[38;5;12m (https://github.com/charliesome/better_errors) - Better Errors replaces the standard Rails error page with a much better [39m
[38;5;12m  and more useful error page. It is also usable outside of Rails in any Rack app as Rack middleware.[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mrack-mini-profiler[0m[38;5;12m (https://github.com/MiniProfiler/rack-mini-profiler) - Middleware that displays speed badge for every html page.[39m
[38;5;12m  A simple but effective mini-profiler for .NET, Ruby, Go and Node.js. Introduced in [39m[48;5;235m[38;5;249m[1mRailscasts #368 MiniProfiler[0m[38;5;12m (http://railscasts.com/episodes/368-miniprofiler)[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mNew Relic RPM Ruby Agent[0m[38;5;12m (https://github.com/newrelic/rpm) - New Relic is a performance management system. It provides you with deep information about [39m
[38;5;12m  the performance of your Rails or Ruby application as it runs in production. When running in developer mode, the New Relic Ruby Agent acts as a Rack [39m
[38;5;12m  middleware that maps /newrelic to an application for showing detailed performance metrics on a page by page basis. Installed automatically in Rails applications   [39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mAirbrake::Rack::Middleware[0m[38;5;12m (https://github.com/airbrake/airbrake/blob/master/lib/airbrake/rack/middleware.rb) -[39m
[38;5;12m  Airbrake Rack middleware for Rails and Sinatra applications (or any other Rack-compliant app). Any errors [39m
[38;5;12m  raised by the upstream application will be delivered to Airbrake and re-raised.  [39m

[38;5;11m[1m▐[0m[38;5;12m [39m[38;5;12mMiddlewares for Protection[39m

[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mrack-protection[0m[38;5;12m (https://github.com/sinatra/rack-protection) - This gem protects against typical web attacks. Prevented Attacks includes [39m
[38;5;12m  [39m[48;5;235m[38;5;249mCross Site Request Forgery[49m[39m[38;5;12m, [39m[48;5;235m[38;5;249mCross Site Scripting[49m[39m[38;5;12m, [39m[48;5;235m[38;5;249mClickjacking[49m[39m[38;5;12m, [39m[48;5;235m[38;5;249mDirectory Traversal[49m[39m[38;5;12m, [39m[48;5;235m[38;5;249mSession Hijacking[49m[39m[38;5;12m, [39m
[38;5;12m  [39m[48;5;235m[38;5;249mIP Spoofing[49m[39m[38;5;12m. Note: This project has been merged upstream to sinatra/sinatra.[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mrack-attack[0m[38;5;12m (https://github.com/kickstarter/rack-attack) - Rack middleware for blocking & throttling abusive requests. [39m
[38;5;12m  It allows whitelisting, blacklisting, throttling, and tracking based on arbitrary properties of the request.  [39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mrack-block[0m[38;5;12m (https://github.com/udzura/rack-block) - A rack middleware for controlling accesses by search bot or not, remote ip address, etc.  [39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mrack-tor-block[0m[38;5;12m (https://github.com/Gild/rack-tor-block) - A rack middleware to block accesses to your rails application from [39m
[38;5;12m  TOR nodes. Inspired by [39m[48;5;235m[38;5;249mrack-block[49m[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[48;5;235m[38;5;249mActionDispatch::RemoteIp[49m[39m[38;5;12m from [39m[38;5;14m[1mRail's ActionController Middleware Stack[0m[38;5;12m (https://github.com/rails/rails/tree/master/actionpack/lib/action_dispatch/middleware) - Checks for IP spoofing attacks.[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mRack::Throttle[0m[38;5;12m (https://github.com/bendiken/rack-throttle) - provides logic for rate-limiting incoming HTTP requests to Rack applications.[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mAlpaca[0m[38;5;12m (https://github.com/jeffchao/alpaca) - allows developers to quickly and easily configure and manage a whitelist and/or blacklist[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mRack TCTP[0m[38;5;12m (https://github.com/TU-Berlin-SNET/tctp-rack) - middleware for enabling end-to-end security using the Trusted Cloud Transfer Protocol (TCTP)[39m

[38;5;11m[1m▐[0m[38;5;12m [39m[38;5;12mMiddlewares for WebSocket[39m

[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mfaye-websocket-ruby[0m[38;5;12m (https://github.com/imanel/websocket-rack) - Standards-compliant WebSocket client and server. A general-purpose WebSocket implementation extracted from [39m
[38;5;12m  the [39m[38;5;14m[1mFaye[0m[38;5;12m (http://faye.jcoglan.com/) project[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mwebsocket-rack[0m[38;5;12m (https://github.com/imanel/websocket-rack) - Rack-based WebSocket server[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mSinatraWebsocket[0m[38;5;12m (https://github.com/simulacre/sinatra-websocket) - Makes it easy to upgrade any request to a websocket connection in Sinatra  [39m

[38;5;11m[1m▐[0m[38;5;12m [39m[38;5;12mMiddlewares for SEO[39m

[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mseojs-ruby[0m[38;5;12m (https://github.com/seojs/seojs-ruby) - Rack middleware to integrate SEO.js to your Rails or Sinatra app.[39m
[38;5;12m  SEO.js makes your BackboneJS, AngularJS or EmberJS apps crawlable by Google to make them appear in search results[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mRack SEO[0m[38;5;12m (https://github.com/xavriley/rack-seo) - Generate SEO friendly meta tags on the fly using Rack Middleware[39m

[38;5;11m[1m▐[0m[38;5;12m [39m[38;5;12mMiscellaneous Middlewares[39m

[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mrack-pygmentize[0m[38;5;12m (https://github.com/leejarvis/rack-pygmentize) - use the generic syntax highlighter Pygments library [39m
[38;5;12m  to make your code look pretty![39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mrack-flash[0m[38;5;12m (https://github.com/treeder/rack-flash) - Simple flash hash implementation for Rack apps.[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1msinatra-flash[0m[38;5;12m (https://github.com/SFEley/sinatra-flash) - An implementation of show-'em-once 'flash' messages for the Sinatra Web [39m
[38;5;12m  framework. (~ 50 LOC, note this is not a middleware.)   [39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mrack-emstream[0m[38;5;12m (https://github.com/johnbintz/rack-emstream) - Simple middleware for streaming with EventMachine-capable servers[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1msc[0m[38;5;12m (https://github.com/macournoyer/sc) - If static site generators were vegies, this one would be a pickle.[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mmachined[0m[38;5;12m (https://github.com/petebrowne/machined) - A static site generator and Rack server built using Sprockets 2.0[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mrack-jekyll[0m[38;5;12m (https://github.com/adaoraul/rack-jekyll) - Transform your [39m[38;5;14m[1mJekyll[0m[38;5;12m (http://github.com/mojombo/jekyll) app into Rack application[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mMiddleman[0m[38;5;12m (https://github.com/middleman/middleman) - A static site generator using all the shortcuts and tools in modern web development. You can use Rack middlewares to modify content [39m
[38;5;12m  on-the-fly and intercept requests before they are processed by the server (Middleman). Middleman itslef has Rack middlewares to minify CSS and JavaScript files. [39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mBrochure[0m[38;5;12m (https://github.com/sstephenson/brochure) - Rack application for serving static sites with ERB templates [39m
[38;5;12m  (or any of the many template languages supported by Tilt)[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mMarley[0m[38;5;12m (https://github.com/karmi/marley) - A minimal blog engine without admin interface written in Sinatra framework. Use Rack::Auth::Basic to provide authentication.    [39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mrack-ssl[0m[38;5;12m (https://github.com/chopmo/rack-ssl) - Rack middleware to force SSL[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mrack-ssl-enforcer[0m[38;5;12m (https://github.com/tobmatth/rack-ssl-enforcer) - A simple Rack middleware to enforce ssl connections [39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mrack-ssl-rails[0m[38;5;12m (https://github.com/jstorimer/rack-ssl-rails) - A simple interface to [39m[48;5;235m[38;5;249mRack::SSL[49m[39m[38;5;12m for Rails. Provides a railtie [39m
[38;5;12m  for use with rack-ssl[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mheroku-rack-ssl-enforcer-rails[0m[38;5;12m (https://github.com/mallowlabs/heroku-rack-ssl-enforcer-rails) - Enforce SSL on Rails application on Heroku [39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mFirehose[0m[38;5;12m (https://github.com/polleverywhere/firehose) - Firehose is both a Rack application and JavaScript library that makes building [39m
[38;5;12m  real-time web applications possible.[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mrack-capabilities[0m[38;5;12m (https://github.com/joshbuddy/rack-capabilities) - Discover just what rack can do (rather, what middleware you have installed)[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mrack-legacy[0m[38;5;12m (https://github.com/eric1234/rack-legacy) - Run legacy environments like CGI and PHP under any rack server.  [39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mRack::Recaptcha[0m[38;5;12m (https://github.com/achiu/rack-recaptcha) - Drop this Rack middleware in your web application to enable [39m
[38;5;12m  CAPTCHA verification via Recaptcha API.[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mRack::Tunnel[0m[38;5;12m (https://github.com/benburkert/rack-tunnel) - Automatic port forwading via SSH tunneling[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mRack::Mux[0m[38;5;12m (https://github.com/benburkert/rack-mux) - Multiplex multiple rack servers to the same app.[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mRack::UserAgent::Filter[0m[38;5;12m (https://github.com/bebanjo/rack-useragent) - Rack Middleware for filtering by user agent[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mRack::RevisionInfo[0m[38;5;12m (https://github.com/sickill/rack-revision-info) - Rack middleware showing current git (or svn) revision number of [39m
[38;5;12m  deployed application[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mRack::Health[0m[38;5;12m (https://github.com/mirakui/rack-health) - A health check interface for rack applications.[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mRack::Store[0m[38;5;12m (https://github.com/mirakui/rack-store) - A Rack middleware what makes the env accessible anywhere while a request   [39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mRack::Plastic[0m[38;5;12m (https://github.com/techiferous/rack-plastic) - Helps you changing the HTML using Nokogiri[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mRack::ToolBar[0m[38;5;12m (https://github.com/pboling/rack-toolbar) - Allows you to create simple Rack Middleware that will insert HTML [39m
[38;5;12m  (or whatever!) into responses at specific points[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mRack::Gsub[0m[38;5;12m (https://github.com/techiferous/rack-gsub) - A Rack middleware wrapper for gsub   [39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mRack::Codehighlighter[0m[38;5;12m (https://github.com/wbzyl/rack-codehighlighter) - A middleware which allows for easy connecting a code highlighter of somebody's choice to an HTML page [39m
[38;5;12m  containing pieces of programming code.[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mRack::JQuery[0m[38;5;12m (https://github.com/yb66/rack-jquery) - jQuery CDN script tags and fallback in one neat package.[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mRack::JQueryUI[0m[38;5;12m (https://github.com/yb66/rack-jquery_ui) - jQuery-UI CDN script tags and fallback in one neat package.[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mRack::JQueryUI::Themes[0m[38;5;12m (https://github.com/yb66/rack-jquery_ui-themes) - jQuery-UI themes CDN script tags and fallback in one neat package.[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mRack::Backbone[0m[38;5;12m (https://github.com/yb66/rack-backbone) - Backbone.js CDN script tags and fallback in one neat package.[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mRack::Polymer[0m[38;5;12m (https://github.com/yb66/rack-polymer) - Polymer CDN script tags and fallback in one neat package. Polymer leverages web components, a new set of standards designed [39m
[38;5;12m  to provide reusable components for the web[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mRack::Stream[0m[38;5;12m (https://github.com/intridea/rack-stream) - A middleware for building multi-protocol streaming rack endpoints. It's also a simple Stream DSL.[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mRack::StreamingProxy[0m[38;5;12m (https://github.com/darbyfrey/rack-streaming-proxy) - A transparent streaming proxy to be used as rack middleware. Streaming proxy for Rack, the rainbows [39m
[38;5;12m   to Rack::Proxy's unicorn[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mPusher[0m[38;5;12m (https://github.com/macournoyer/pusher) - A Rack middleware that implement Ajax Push aka Comet[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mRobocop[0m[38;5;12m (https://github.com/pjkelly/robocop) - a simple Rack middleware that inserts the X-Robots-Tag into the headers of all your responses[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mRack::Geoip[0m[38;5;12m (https://github.com/ckraybill/rack-geoip) - A rack middleware component that handles simple geoip lookups.[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mRack::GeoIPCountry[0m[38;5;12m (https://github.com/tma/rack-geoipcountry) - uses the geoip gem and the GeoIP database to lookup the country of a request by its IP address[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mRack::CanonicalHost[0m[38;5;12m (https://github.com/tylerhunt/rack-canonical-host) - https://github.com/tylerhunt/rack-canonical-host  [39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mcommittee[0m[38;5;12m (https://github.com/interagent/committee) - A collection of Rack middleware to support JSON Schema. [39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mrack-async-stream[0m[38;5;12m (https://github.com/rkh/rack-async-stream) - A asynchronous stream middleware based on EventMachine.[39m

[38;2;255;187;0m[4mHelpers and Tools[0m

[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;12mFrom [39m[38;5;14m[1mRack built-in middlewares[0m[38;5;12m (https://github.com/rack/rack):[39m

[38;5;12m [39m[38;5;12m [39m[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[48;5;235m[38;5;249mRack::Request[49m[39m[38;5;12m - which also provides query string parsing and multipart handling.[39m
[38;5;12m [39m[38;5;12m [39m[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[48;5;235m[38;5;249mRack::Response[49m[39m[38;5;12m - for convenient generation of HTTP replies and cookie handling.   [39m
[38;5;12m [39m[38;5;12m [39m[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[48;5;235m[38;5;249mRack::MockRequest[49m[39m[38;5;12m and [39m[48;5;235m[38;5;249mRack::MockResponse[49m[39m[38;5;12m- for efficient and quick testing of Rack application without real HTTP round-trips.[39m
[38;5;12m [39m[38;5;12m [39m[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[48;5;235m[38;5;249mRack::Builder[49m[39m[38;5;12m - implements a small DSL to iteratively construct Rack applications.[39m
[38;5;12m [39m[38;5;12m [39m[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[48;5;235m[38;5;249mRack::Lint[49m[39m[38;5;12m - validates your application and the requests and responses according to the Rack spec.[39m
[38;5;12m [39m[38;5;12m [39m[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[48;5;235m[38;5;249mRack::File[49m[39m[38;5;12m - for serving static files.  [39m
[38;5;12m [39m[38;5;12m [39m[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[48;5;235m[38;5;249mRack::Directory[49m[39m[38;5;12m - serves entries below the root given, according to the path info of the Rack request. If a directory [39m
[48;5;235m[38;5;249mis found, the file's contents will be presented in an html based index. If a file is found, the env will be [49m[39m
[48;5;235m[38;5;249mpassed to the specified app.[49m[39m[48;5;235m[38;5;249m                                                                                [49m[39m
[38;5;12m [39m[38;5;12m [39m[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[48;5;235m[38;5;249mRack::Cascade[49m[39m[38;5;12m - tries a request on several apps, and returns the first response that is not 404 or 405 [39m
[48;5;235m[38;5;249m(or in a list of configurable status codes). [49m[39m
[38;5;12m [39m[38;5;12m [39m[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[48;5;235m[38;5;249mRack::Utils[49m[39m[38;5;12m - contains a grab-bag of useful methods for writing web applications adopted from all kinds of Ruby libraries.  [39m

[38;5;12m [39m[38;5;12m [39m[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[48;5;235m[38;5;249mrackup[49m[39m[38;5;12m - a useful tool for running Rack applications, which uses the [39m[48;5;235m[38;5;249mRack::Builder[49m[39m[38;5;12m DSL to configure middleware and build [39m
[48;5;235m[38;5;249mup applications easily. [49m[39m

[48;5;235m[38;5;249mrackup automatically figures out the environment it is run in, and runs your application as FastCGI, CGI, or WEBrick—all [49m[39m
[48;5;235m[38;5;249mfrom the same configuration.[49m[39m[48;5;235m[38;5;249m                                                                                             [49m[39m
[48;5;235m[38;5;249m[49m[39m[48;5;235m[38;5;249m                                                                                                                         [49m[39m
[48;5;235m[38;5;249m* **Rackup howto** (https://github.com/rack/rack/wiki/%28tutorial%29-rackup-howto)[49m[39m[48;5;235m[38;5;249m                                       [49m[39m
[48;5;235m[38;5;249m[49m[39m[48;5;235m[38;5;249m                                                                                                                         [49m[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mrack-test[0m[38;5;12m (https://github.com/brynary/rack-test) - A layer on top of Rack's [39m[48;5;235m[38;5;249mMockRequest[49m[39m[38;5;12m similar to Merb's [39m[48;5;235m[38;5;249mRequestHelper[49m[39m[38;5;12m. (~ 200 LOC)[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mrack-test-test[0m[38;5;12m (https://github.com/guilleiguaran/rack-test-rest) - an extension to rack-test that when combined with Test::Unit simplifies the [39m
[38;5;12m  process of unit testing properly designed RESTful API's [39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mLookout::Rack::Test[0m[38;5;12m (https://github.com/lookout/lookout-rack-test) - RSpec and Cucumber test helpers.[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mtest-unit-capybara[0m[38;5;12m (https://github.com/test-unit/test-unit-capybara/) -  integration testing helper library for Rack applications, a Capybara [39m
[38;5;12m  adapter for [39m[38;5;14m[1mtest-unit[0m[38;5;12m (https://github.com/test-unit/test-unit) [39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mrack_toolkit[0m[38;5;12m (RackToolkit) - A dynamic Rack server and helper methods to help testing Rack apps.[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mSplit[0m[38;5;12m (https://github.com/splitrb/split) - Rack based ab testing framework designed to work with Rails, Sinatra or any other rack based app. [39m
[38;5;12m  Split is heavily inspired by the Abingo and Vanity rails ab testing plugins and Resque in its use of Redis[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mRack::Scaffold[0m[38;5;12m (https://github.com/mattt/rack-scaffold) - Automatically generate RESTful CRUD services     [39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1malmost-rack[0m[38;5;12m (https://github.com/rkh/almost-rack/blob/meister/almost-rackup) - Rack in three lines of code.[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mrack-graph[0m[38;5;12m (https://github.com/rkh/rack-graph) - Generate a tree displaying all your Rack middleware.[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mApartment[0m[38;5;12m (https://github.com/influitive/apartment) - Database multi-tenancy for Rack (and Rails) applications.[39m

[38;2;255;187;0m[4mMiscellaneous[0m

[38;5;11m[1m▐[0m[38;5;12m [39m[38;5;12mHTTP Clients[39m

[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mFaraday[0m[38;5;12m (https://github.com/lostisland/faraday) - Faraday is an HTTP client lib that provides a common interface over many [39m
[38;5;12m  adapters (such as Net::HTTP) and embraces the concept of Rack middleware when processing the request/response cycle.[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mrack-client[0m[38;5;12m (https://github.com/halorgium/rack-client) - A HTTP client that aims to be a good Rack citizen.  [39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mrack-api[0m[38;5;12m (https://github.com/fnando/rack-api) - Create web app APIs that respond to one or more formats using an elegant DSL[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mweary[0m[38;5;12m (https://github.com/mwunsch/weary) - A framework and DSL for building RESTful web service clients. Full Rack integration[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mrest-core[0m[38;5;12m (https://github.com/godfat/rest-core) - Modular Ruby clients interface for REST APIs. rest-core consists of composable middleware that [39m
[38;5;12m  allows you to build a REST client for any REST API. Or in the case of common APIs such as Facebook, Github, and Twitter, you can simply [39m
[38;5;12m  use the dedicated clients provided by [39m[38;5;14m[1mrest-more[0m[38;5;12m (https://github.com/godfat/rest-more). See the slide [39m
[38;5;12m  [39m[38;5;14m[1mThe Promise of rest-core[0m[38;5;12m (http://godfat.org/slide/2015-01-13-rest-core-promise/) for more info.[39m

[38;5;11m[1m▐[0m[38;5;12m [39m[38;5;12mVagrant Middlewares[39m
[38;5;12m  [39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mVideos: Rack Middleware as a General Purpose Abstraction by Mitchell Hashimoto[0m[38;5;12m (https://www.youtube.com/watch?v=i6pyhq3ZvyI)[39m
[38;5;12m [39m[38;5;12m [39m[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;12mthe slide is available on [39m[38;5;14m[1mspeakdeck[0m[38;5;12m (https://speakerdeck.com/mitchellh/middleware-a-general-purpose-abstraction).[39m
[38;5;12m [39m[38;5;12m [39m[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mGeneralized middleware implementation for Ruby by Mitchell Hashimoto[0m[38;5;12m (https://github.com/mitchellh/middleware) - ~ 130 LOC[39m

[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mVagrant Middlewares[0m[38;5;12m (https://github.com/mitchellh/vagrant/blob/master/lib%2Fvagrant%2Faction.rb) - Vagrant calls middlewares [39m
[38;5;12m  "actions" and a stack of middlewares an "action sequence." (But you may also just call them middleware and middleware stacks, [39m
[38;5;12m  they’re mostly called the other names for histortical purposes)[39m
[38;5;12m  [39m
[38;5;12m [39m[38;5;12m [39m[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[48;5;235m[38;5;249mVagrant::Action::Warden[49m[39m[38;5;12m - The action warden is a middleware which injects itself between every other middleware, [39m
[48;5;235m[38;5;249mwatching for exceptions which are raised and performing proper cleanup on every action by calling the recover method. [49m[39m[48;5;235m[38;5;249m [49m[39m
[48;5;235m[38;5;249mThe warden therefore allows middlewares to not worry about exceptional events, and by providing a simple callback, can [49m[39m
[48;5;235m[38;5;249mclean up in any erroneous case[49m[39m[48;5;235m[38;5;249m                                                                                         [49m[39m
[38;5;12m [39m[38;5;12m [39m[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[48;5;235m[38;5;249mVagrant::Action::Builtin::BoxAdd[49m[39m[38;5;12m - This middleware will download a remote box and add it to the given box collection.[39m
[38;5;12m [39m[38;5;12m [39m[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[48;5;235m[38;5;249mVagrant::Action::Builtin::BoxCheckOutdated[49m[39m[38;5;12m - This middleware checks if there are outdated boxes. By default, it only [39m
[48;5;235m[38;5;249mchecks locally, but if box_outdated_refresh is set, it will refresh the metadata associated with a box.[49m[39m
[38;5;12m [39m[38;5;12m [39m[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[48;5;235m[38;5;249mVagrant::Action::Builtin::BoxRemove[49m[39m[38;5;12m - This middleware will remove a box for a given provider.    [39m
[38;5;12m [39m[38;5;12m [39m[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[48;5;235m[38;5;249mVagrant::Action::Builtin::BoxUpdate[49m[39m[38;5;12m - This middleware updates a specific box if there are updates available.[39m
[38;5;12m [39m[38;5;12m [39m[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[48;5;235m[38;5;249mVagrant::Action::Builtin::Call[49m[39m[38;5;12m - This middleware class allows a sort of "conditional" run within a single middlware [39m
[48;5;235m[38;5;249msequence. It takes another middleware runnable, runs it with the same environment, then yields the resulting env to a [49m[39m
[48;5;235m[38;5;249mblock, allowing that block to determine the next course of action in the middleware sequence.[49m[39m[48;5;235m[38;5;249m                         [49m[39m
[38;5;12m [39m[38;5;12m [39m[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[48;5;235m[38;5;249mVagrant::Action::Builtin::ConfigValidate[49m[39m[38;5;12m - This class validates the configuration and raises an exception if there [39m
[48;5;235m[38;5;249mare any validation errors.[49m[39m
[38;5;12m [39m[38;5;12m [39m[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[48;5;235m[38;5;249mVagrant::Action::Builtin::Confirm[49m[39m[38;5;12m - This class asks the user to confirm some sort of question with a "Y/N" question. [39m
[48;5;235m[38;5;249mThe only parameter is the text to ask the user. The result is placed in `env**:result** ` so that it can be used with [49m[39m
[48;5;235m[38;5;249mthe `Call` class.[49m[39m[48;5;235m[38;5;249m                                                                                                     [49m[39m
[38;5;12m [39m[38;5;12m [39m[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[48;5;235m[38;5;249mVagrant::Action::Builtin::DestroyConfirm[49m[39m[38;5;12m - This class asks the user to confirm the destruction of a machine that Vagrant manages.[39m
[38;5;12m [39m[38;5;12m [39m[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[48;5;235m[38;5;249mVagrant::Action::Builtin::EnvSet[49m[39m[38;5;12m - This middleware class allows you to modify the environment hash in the middle of a [39m
[48;5;235m[38;5;249mmiddleware sequence. The new environmental data will take affect at this stage in the middleware and will persist through.[49m[39m
[38;5;12m [39m[38;5;12m [39m[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[48;5;235m[38;5;249mVagrant::Action::Builtin::GracefulHalt[49m[39m[38;5;12m - This middleware class will attempt to perform a graceful shutdown of the machine[39m
[48;5;235m[38;5;249m using the guest implementation  [49m[39m
[38;5;12m [39m[38;5;12m [39m[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[48;5;235m[38;5;249mVagrant::Action::Builtin::HandleBox[49m[39m[38;5;12m - This built-in middleware handles the box setting by verifying the box is already [39m
[48;5;235m[38;5;249minstalled, dowloading the box if it isn't, updating the box if it is requested, etc[49m[39m
[38;5;12m [39m[38;5;12m [39m[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[48;5;235m[38;5;249mVagrant::Action::Builtin::HandleBoxUrl[49m[39m
[38;5;12m [39m[38;5;12m [39m[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[48;5;235m[38;5;249mVagrant::Action::Builtin::HandleForwardedPortCollisions[49m[39m[38;5;12m - This middleware class will detect and handle collisions with [39m
[48;5;235m[38;5;249mforwarded ports, whether that means raising an error or repairing them automatically.[49m[39m
[38;5;12m [39m[38;5;12m [39m[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[48;5;235m[38;5;249mVagrant::Action::Builtin::IsState[49m[39m[38;5;12m - This middleware is meant to be used with Call and can check if a machine is in the [39m
[48;5;235m[38;5;249mgiven state ID.[49m[39m
[38;5;12m [39m[38;5;12m [39m[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[48;5;235m[38;5;249mVagrant::Action::Builtin::Lock[49m[39m[38;5;12m - This class creates a multi-process lock using flock. The lock is active for the [39m
[48;5;235m[38;5;249mremainder of the middleware stack.[49m[39m
[38;5;12m [39m[38;5;12m [39m[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[48;5;235m[38;5;249mVagrant::Action::Builtin::Message[49m[39m[38;5;12m - This middleware simply outputs a message to the UI.[39m
[38;5;12m [39m[38;5;12m [39m[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[48;5;235m[38;5;249mVagrant::Action::Builtin::Provision[49m[39m[38;5;12m - This class will run the configured provisioners against the machine.[39m
[38;5;12m [39m[38;5;12m [39m[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[48;5;235m[38;5;249mVagrant::Action::Builtin::ProvisionerCleanup[49m[39m[38;5;12m - This action will run the cleanup methods on provisioners and should [39m
[48;5;235m[38;5;249mbe used as part of any Destroy action.[49m[39m
[38;5;12m [39m[38;5;12m [39m[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[48;5;235m[38;5;249mVagrant::Action::Builtin::SSHExec[49m[39m[38;5;12m - This class will exec into a full fledged SSH console into the remote machine. [39m
[48;5;235m[38;5;249mThis middleware assumes that the VM is running and ready for SSH, and uses the `Machine#ssh_info` method to retrieve [49m[39m
[48;5;235m[38;5;249mSSH information necessary to connect.[49m[39m[48;5;235m[38;5;249m                                                                                [49m[39m
[38;5;12m [39m[38;5;12m [39m[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[48;5;235m[38;5;249mVagrant::Action::Builtin::SSHRun[49m[39m[38;5;12m - This class will run a single command on the remote machine and will mirror the [39m
[48;5;235m[38;5;249moutput to the UI. The resulting exit status of the command will exist in the `:ssh_run_exit_status` key in the environment.[49m[39m
[38;5;12m [39m[38;5;12m [39m[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[48;5;235m[38;5;249mVagrant::Action::Builtin::SetHostname[49m[39m[38;5;12m - This middleware sets the hostname of the guest according to the [39m
[48;5;235m[38;5;249m"vm.hostname" configuration parameter if it is set[49m[39m
[38;5;12m [39m[38;5;12m [39m[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[48;5;235m[38;5;249mVagrant::Action::Builtin::SyncedFolderCleanup[49m[39m[38;5;12m - This middleware will run cleanup tasks for synced folders using the [39m
[48;5;235m[38;5;249mappropriate synced folder plugin[49m[39m
[38;5;12m [39m[38;5;12m [39m[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[48;5;235m[38;5;249mVagrant::Action::Builtin::SyncedFolders[49m[39m[38;5;12m - This middleware will setup the synced folders for the machine using the [39m
[48;5;235m[38;5;249mappropriate synced folder plugin.[49m[39m
[38;5;12m [39m[38;5;12m [39m[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[48;5;235m[38;5;249mVagrant::Action::Builtin::WaitForCommunicator[49m[39m[38;5;12m - This waits for the communicator to be ready for a set amount of time.                         [39m
[48;5;235m[38;5;249m        [49m[39m
[38;5;11m[1m▐[0m[38;5;12m [39m[38;5;12mVagrant Middleware Stack Builder and Runner[39m
[38;5;12m  [39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[48;5;235m[38;5;249mVagrant::Action::Builder[49m[39m[38;5;12m - Action builder which provides a nice DSL for building up a middleware sequence for Vagrant [39m
[38;5;12m  actions. This code is based heavily off of Rack::Builder and ActionDispatch::MiddlewareStack in Rack and Rails, respectively.[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[48;5;235m[38;5;249mVagrant::Action::Runner[49m[39m[38;5;12m - This runner does the default expected behavior of running the middleware stacks in order, [39m
[38;5;12m  then reversing the order.[39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[48;5;235m[38;5;249mVagrant::Action::Hook[49m[39m[38;5;12m - This class manages hooks into existing Builder stacks, and lets you add and remove middleware [39m
[38;5;12m  classes. This is the primary method by which plugins can hook into built-in middleware stacks.   [39m

[38;2;255;187;0m[4mInspiration[0m

[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mWSGI (Python)[0m[38;5;12m (http://wsgi.readthedocs.org/) - The Web Server Gateway Interface (WSGI) is a specification for simple [39m
[38;5;12m  and universal interface between web servers and web applications or frameworks for the Python. WSGI is a Python standard [39m
[38;5;12m  described in detail in [39m[38;5;14m[1mPEP 3333[0m[38;5;12m (http://www.python.org/dev/peps/pep-3333)[39m

[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mRack (Ruby)[0m[38;5;12m (http://rack.github.io/) - Rack provides a modular and adaptable interface for developing web applications [39m
[38;5;12m  in Ruby. By wrapping HTTP requests and responses it unifies the API for web servers, web frameworks, and software in between[39m
[38;5;12m   (the so-called middleware) into a single method call.[39m
[38;5;12m   [39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mPlug (Elixir)[0m[38;5;12m (https://github.com/elixir-lang/plug) - Plug is A specification for composable modules [39m
[38;5;12m  between web applications, and it's also connection adapters for different web servers in the Erlang VM.[39m
[38;5;12m  Plug is sinatra-like, and Elixir has a Rails-like framework called [39m[38;5;14m[1mPhoenix[0m[38;5;12m (http://www.phoenixframework.org/)[39m

[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mClack (Lisp)[0m[38;5;12m (https://github.com/fukamachi/clack/) - Clack is a web application environment for Common Lisp inspired by [39m
[38;5;12m  Python's WSGI and Ruby's Rack.   [39m
[38;5;12m  [39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mHack (Haskell)[0m[38;5;12m (https://github.com/nfjinjing/hack2) - Hack2 is a port of Ruby's Rack webserver interface.[39m
[38;5;12m  [39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mJSGI (JavaScript)[0m[38;5;12m (http://wiki.commonjs.org/wiki/JSGI) - JavaScript Gateway Interface, is an interface between web servers [39m
[38;5;12m  and JavaScript-based web applications and frameworks. It was inspired by the Rack for Ruby and WSGI for Python and was one [39m
[38;5;12m  of the inspirations of PSGI for Perl.  [39m
[38;5;12m  [39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mPSGI (Perl)[0m[38;5;12m (https://metacpan.org/pod/PSGI) - Perl Web Server Gateway Interface is an interface between Web servers and [39m
[38;5;12m  Perl-based Web applications and frameworks that allows writing portable applications that can be run as standalone servers [39m
[38;5;12m  or using CGI, FastCGI, mod_perl, et al. It is inspired by the Web Server Gateway Interface for Python, Rack for Ruby and [39m
[38;5;12m  JSGI for JavaScript.[39m

[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mWSAPI (Lua)[0m[38;5;12m (http://keplerproject.github.io/wsapi/) - WSAPI is an API that abstracts the web server from Lua web [39m
[38;5;12m  applications. By coding against WSAPI your application can run on any of the supported servers and interfaces [39m
[38;5;12m  (currently CGI, FastCGI and Xavante, on Windows and UNIX-based systems). WSAPI's main influence is Ruby's Rack [39m
[38;5;12m  framework, but it was also influenced by Python's WSGI ([39m[48;5;235m[38;5;249mPEP 333[49m[39m[38;5;12m). It's not a direct clone of either of them, though, [39m
[38;5;12m  and tries to follow standard Lua idioms. [39m
[38;5;12m  [39m
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mStackPHP (PHP)[0m[38;5;12m (http://stackphp.com/) - a PHP interface for framework-agnostic code sharing[39m

[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mOWIN (.NET)[0m[38;5;12m (http://owin.org/) - Open Web Interface for .NET, defines a standard interface between .NET web servers [39m
[38;5;12m  and web applications. The goal of the OWIN interface is to decouple server and application, encourage the development[39m
[38;5;12m  of simple modules for .NET web development, and, by being an open standard, stimulate the open source ecosystem of [39m
[38;5;12m  .NET web development tools. [39m[38;5;14m[1mKatana[0m[38;5;12m (https://katanaproject.codeplex.com/) is the implementation of OWIN components.[39m

[38;2;255;187;0m[4mLicense[0m

[38;5;14m[1m![0m[38;5;12mCC0[39m[38;5;14m[1m (http://mirrors.creativecommons.org/presskit/buttons/88x31/svg/cc-zero.svg)[0m[38;5;12m (https://creativecommons.org/publicdomain/zero/1.0/)[39m

[38;5;12mTo the extent possible under law, [39m[38;5;14m[1mcoopermaa[0m[38;5;12m (http://coopermaa2nd.blogspot.tw/) has waived all copyright and related or neighboring rights to this work.[39m
