I see people referring more and more to the "bloat" of Rails and interested to know what they're referring to.<p>I use Rails on a daily basis and I don't notice anything overblown or imbalanced about the framework. I would say that I use most of the features and I'd miss them if they weren't there. If anything I find that some things such as routing are perhaps too pithy and not flexible enough.<p>I'm no framework polyglot though so I'm interested in the comparisons that might be drawn? Are there genuinely parts of Rails which are unnecessary?<p>Is it that the framework has truly become overblown or is it just that it's not suitable for certain jobs?
There's a number of parts of Rails core that could probably be spawned off to other gems. For example, the form building tools: there are several better ones out there - I know I always use Formtastic over what Rails provides.<p>Another one would be the built-in testing DSL. RSpec and Minitest do that pretty well now, why is it a part of Rails?<p>Then again, I hate these type of conversations: my bloat is someone else's timesaving feature. "Why does Rails have an ORM, they're too abstract!" some might complain... but engineers on a Rails app bigger than a few man-months may love the time the ORM saves. (Especially when the client changes their mind on how a business domain feature should work, for the third time in as many iterations).
The trend is moving toward putting the view logic into the clients as championed by the many Javascript MVC frameworks such as Backbone.js, Ember.js etc. When you use these to build your web interface, what is needed on the server is just JSON API. From this point of usage, Rails is "bloated" as you do not generate views on the server and push down to the clients.<p>There is also another aspect of the web that might caused that view. That is the rising usage of websocket type of real time app, which Rails is not able to handle directly yet. This makes full-stack framework like Rails looks less agile thus bloated when you compare to Node.js for example.