When I first caught wind of Matt Raible's spreadsheet comparing different web frameworks, I thought it was a joke.  I still do, but lots of people are taking it seriously (although, others aren't.)

Here are my ratings on Lift (and, yes I'm aware that Matt's scale is 0-1 and my ratings are on Matt's scale, except mine goes to 11).

Developer Productivity: Lift gets a 11, Rails gets a 5, most Java-based frameworks get a 1 or less.  A seasoned Lift developer will be 10 times more productive writing interactive web apps than with MVC frameworks. @HarryH from Foursquare explains part of it in his Lift presentation (see Slide 10).  With Lift, you don't worry about the plumbing, setting up routes, etc.  Thus, Ajax is much, much easier and Comet (server-push) is better than any other framework available.  Sure, writing a green-screen style CRUD app with Lift isn't a major win over other web frameworks, but when it comes to stuff that's hard or impossible in other web frameworks, Lift makes it someplace between super-easy and possible.  For more, see my screencast on building a comet chat app.

Developer Perception: Every web framework gets a 1.  The folks that have gravitated to the framework are going to love it and others are going to deride it.  Oh, and emacs is much better than vi.

Learning Curve: Lift gets a 2 here.  I've seen a number of reports on Lift vs. JSF2/Struts2/GWT/Flash/Spring MVC/Grails done internally by companies and government agencies looking to commit to web framework for various different long-running projects.  While Lift has not been chosen for all the projects, Lift has consistently come in first in terms of smallest lines of code and top developer ratings (and these are generally Java developers who have had prior experience with at least one of the other competing frameworks.)  So, repeatedly, big-business Java developers have been able to pick Lift up and deliver projects more efficiently than with competing technologies in shorter periods of time while learning the framework and the Scala language.  Put another way, one corporate Lift developer recently posted to the Lift list:

The first rule of Lift is... It's easier than you think.

The deeper I get the more I think that the cognitive barrier to
understanding Lift is that one expects things to be so much more work
than it actually is.


Project Health, yeah, Lift is an active and growing project.

Developer Availability, Lift gets a 0.5. Anybody who wants a Lift developer can find one, but probably not in their city.  There are plenty of folks who do Lift consulting if you have a project.

Job Trends, yep, it's zero.

Templating, here again, I've gotta say, Lift gets at least a 3, if not more.  Why?  Well, there are at least 3 different ways to template a Lift app.  You want to use Scalatewhich provides Mustache, Scaml (like Haml) and SSP (Velocity-like), you can use it with Lift.  Lift also supports using Scala XML literals so you can code your templates right in Scala.  Or, you can use Lift's snippet mechanism to have templates that cannot contain any business logic and are developer friendly.  So, for example, if we were to build a table using Lift's snippet mechanism, our view would look like:

<table class="lift:MySnippet">
  <thead>
    <tr><th id="my_th">Field Name</td></tr>
  </thead>
  <tbody>
  <tr id="my_tr"><td>An item</td></tr>
  </tbody>
</table>

And our Scala code would look like:
    val (fieldNames, fieldValues) = DB.runQuery(...)
‚Äč
    "#my_th *" #> fieldNames &
    "#my_tr *" #> fieldValues.map(values => "td *" #> values)

So, the designer inserts a "lift:MySnippet" class into an element that has dynamic behavior and the developer binds dynamic content via CSS selectors.  If you can find something that's more concise or more oriented to the way of the web, show it to me.  But I think this is hands-down the best templating system I've ever seen.

Components, Lift gets at least a 4.  Everything, and I mean, everything on a Lift page is a component.  Check out the Lift demo.  You've got 5 components on that page alone.  You've got the menu component and the messages component and the clock component (which updates every 10 seconds based on server push) and the chat component... and let's not forget the main content component.  What Lift doesn't have is something separate or different from Lift that is called a "component system."  Lift is not front-controller, so each snippet on the page is a component.  Each piece of dynamically rendered content is a component.  Yes, the components can interact (see Lift's wiring which allows you define relationships between components and update all dependent components automatically), or they can stand alone.  Lift is also based on Scala which is a functional language, so Lift's components are literally functions that transform template HTML to browser HTML.

Ajax, Lift gets a 5.  Lift's Ajax support (if you include Comet as part of Ajax) is worlds better than any other web framework.  No routing.  Tons of security.  Single lines of code to associate Ajax behavior with code.  Multiple comet components on a page, all sharing a single long poll connection (and yes, once web sockets are standardized, Lift will support them too, with no change in application code.)

Plugins or Add-Ons, I can agree that the number of plugins for Lift is smaller than other web frameworks.

Scalability, Lift scales extraordinarily well.  Foursquare is a prime example.  

Testing, What does this mean?  Does it mean Lift isn't well tested... I beg to differ.  Lift powers sites like Foursquare and Novell Vibe.  You can see the Lift tickets and find all the tickets opened by Novell and Foursquare... not a lot.

Validation, here again, Lift gets at least a 2.  Lift's Screen and Wizard have tremendously powerful validation.  For example: val name = field("Name", "", minLen(2, "Name too short"))

Quality of document, here I'll give Lift a 0.5.  Lift's documentation is not as good as it could or should be.

REST Support (client and server), here, I'll give Lift a 2.  Lift's REST support is simple and declarative. It's also type-safe, composable (you can easily combine components of a REST service together because all of Lift's REST services are defined as Scala functions), and secure.

So, yes, I see Lift as far better than any other web framework.  This is by design.  I have taken the best ideas that I've found in many of the excellent web frameworks, but also taken the approach of turning the HTTP request/response cycle into plumbing that need only be exposed when your application needs it, otherwise the developer focuses on the business logic.  Lift provides the best Comet and Ajax support of any web framework.  Lift is the most secure web framework around.  And developers are very, very productive writing (and maintaining) Lift apps.

I can go on in greater depth about Lift's use of simple concepts like keeping the page around as well formed XML until it's time to stream it to the browser which radically enhances security and flexibility.  I could talk about the composition of functions as a much more manageable way to build any logic (basically, the promise of OO, except materialized differently.)  But at the end of the day, folks have adopted Lift, despite its differences and those that acknowledge its differences quickly become more productive with Lift than almost any other framework.  Those that embrace its differences change the world.