
Ask HN: What web framework(s) do you guys use? - skanev
What web framework(s) do you guys (and girls) use? And why not their competitors?
======
amix
In the recent years I have built my own, mostly basing it on other libraries
and reusing as many things as possible.

In Python there's something called WSGI (Web Server Gateway Interface) which
makes it trivial to implement your own framework. Around 2 years ago I wrote a
blog post about WSGI and how to quickly build a Python framework
<http://amix.dk/blog/viewEntry/105> In the recent years WSGI has grown a lot.
Check out wsgi.org for more info.

One can learn a lot of things by making and using own stuff, but it can also
be very frustrating (because of bugs and lack of resources). But generally, I
like to use own my stuff and my own conventions - I know at least who to blame
when some stuff does not work or something is "ugly" :)

------
igorgue
Django, because it has magical powers, who can beat that?

~~~
siong1987
Rails. Anyway, I am not saying that Rails is better. I am just wondering how
magical Django is?

~~~
cesqui
<http://www.djangopony.com/>

~~~
hbien
Nothing girly about a horse. Nothing girly about a horn. Put them together,
you have a unicorn.

~~~
nostrademons
Nothing horsey about a girl. Nothing horny about a girl. Put them together,
you're horsing around with a horny girl.

------
tptacek
Rails, because I lost the Python vs. Ruby argument, and now we're all
converts.

------
shutter
Pylons. <http://pylonshq.com/>

~~~
shadytrees
Seconding. The ability to use SQLAlchemy and Jinja2 is fantastic; I personally
think they're better than Django's ORM and templating system.

------
vegashacker
I use LeftParen (<http://leftparen.com>), a PLT Scheme web framework (that I
happen to maintain).

~~~
antiismist
LP here also. But you probably already knew that.

------
abdulhaq
If you do it yourself, does it count as a framework?

Server: python, postgresql, cherrypy, simplejson

Client: Javascript, HTML, CSS, Dojo, AJAX.

All the HTML is loaded up front and then AJAX for all the rest. Dojo insulates
me from browser quirks. TDD Python is what I use at work (and love) and is
good for complex algorithms (language morphology, in arabic).

I don't use an all-encompassing framework because I need total UTF-8 support
and I feel more comfortable with the general tailorability of the lower-level
libraries over the likes of Django, Rails.

~~~
BinaryPie
I'll never understand why people use DoJo.

Its greatest strength are all the "widgets" i guess you'd call them. However
they are all not created equal. Some are well polished and deliver acceptable
performance levels and other times they are just demos and hacks.

~~~
tdavis
The Dojo examples page always froze my browser. Even after switching computers
and operating systems, it would hang for a while. I never did figure out if it
was just me or nobody else seemed to notice.

~~~
dreur
I noticed too :)

Just wondering why Zend chose it as their main ajax framework.

~~~
scotth
Spring WebFlow did too. It boggles the mind.

------
edb
I'm a cakePHP user. It has gotten and keeps getting a lot better as of recent,
and I really like the community. I looked into codeigniter after using cakephp
for a while and it just seemed to have a lot less to offer. I tried symfony
too and it seemed alot more complex, unnecessarily so.

I'm currently dabbling in Rails and Django, but am going to put them down
until I finish my current project, since there's nothing in either that I
can't do in cake, as far as my project's requirements go.

These are also a lot less portable than the PHP frameworks, which I find is a
big deal if ever you want to lengthen your runway with client work. It's MUCH
harder to get a quick 2-5k on a small webpage when the client hears "change
hosting".

~~~
KrisJordan
I've been working on a PHP framework that is similar in the 'full-stack'
approach of Cake but has performance characteristics of CodeIgniter. It's
called Recess and can be found over at <http://www.RecessFramework.org>

------
noodle
codeigniter and rails.

rails because, well, its rails. building something out is typically quick and
easy.

codeigniter for those cases when i need to get my hands dirty on a lower level
and do some non-standard things. its a minimalist framework that doesn't add
much bloat, overhead or other things in your way.

i kind of mentally compare it to java and c.

------
SpencerDavis
Django. It was a toss up for me between Django and Rails but at the time, the
updated Rails book was not out yet and the Django book was.

And Django has a magic pony. <http://djangopony.com/>

------
lsb
Ruby + Sinatra for now. It's great for tiny services that work together.

A full web service to implement '/add/1/2' is just

require 'sinatra'; get('/add/:a/:b') { params[:a].to_i + params[:b].to_i }

~~~
boucher
Sinatra is definitely an interesting project. We recently "ported" it to
JavaScript:

[http://github.com/tlrobinson/jack/blob/030685ef3de4c29c38b4e...](http://github.com/tlrobinson/jack/blob/030685ef3de4c29c38b4e2ce22f638b698532b2b/lib/roundabout.js)

The same webservice would be:

    
    
        roundabout.route({ path:"/add/{a}/{b}", get: function(){this.body = this.wildcards["a"] + this.wildcards["b"];} })
    

or, alternatively:

    
    
        roundabout.get("/add/{a}/{b}", function(){ this.body = this.wildcards.a + this.wildcards.b; });
    

The first syntax is a tad longer, but its much more useful; you can define any
method with the name of an HTTP verb for that path, and you can also define a
filter parameter that will be queried before the path is matched. The filter
lets you do whatever pre-processing you want, so you could filter out requests
from a specific user-agent for example, or all URLs that use mixed case, or
anything else you can think of.

~~~
lsb
That looks really cool; how's that been working out? Is that in production? If
Ruby had Gambit Scheme's serializable continuations, that would be pretty
interesting times.

~~~
boucher
We're not yet using it in production, its only a few weeks old, but we will be
in some of the things we're working on.

One of the main benefits is letting us run objective-j and cappuccino on the
server, letting us share application data models in the client and the server.

------
rickharrison
codeigniter and more recently kohana.

I like codeigniter a lot because you have more control over things. Frameworks
that get things done extremely fast are nice, but I like to have more control
over things. And Kohana was modeled after codeigniter, but in completely PHP5,
which is why I like it the most.

~~~
thorax
Code Igniter is solid.

------
robertdempsey
I like Rails with my Ruby.

------
aschobel
Struts2. Very lightweight and its gets out of your way.

Since it is Java we get to leverage some of the incredible Java libraries out
there like Guice.

We've tried a few other frameworks. We build our prototype in web.py. Very
simple, but I couldn't get used to not living in IntelliJ.

We tried a previous project in Rails, but it did too much 'magic' for us and
the scaffolding seemed a bit too brittle.

To be fair the last time I used Rails in production was in the 1.1 days, so
it's been a while.

~~~
moder
Where are all these Java libraries? Do you mean Java's standard library?

I ask because, Perl has the CPAN, Python has PyPI, Ruby has RubyGems, etc.,
but what does Java have?

~~~
skanev
The Apache Project and Maven. Although though do not map exactly to
CPAN/RubyGems.

------
cookiecaper
Pylons when I use Python - magic sucks, very easy to customize, fast
turnaround and not so gargantuan that it takes forever to wrap your head
around.

CakePHP for PHP. Definitely the best PHP framework out there, in my opinion;
fast, good installed base made out of all-star clients (Mozilla, Yale,
others), not restrictive or cumbersome. Honestly, though, I try not to use
PHP.

------
debt
Django on AppEngine. Really fast turnaround and scaling is all taken care
of(or will be).

------
tlrobinson
Cappuccino. Because we created it. ;)

~~~
boucher
Plus jack and roundabout (ports of rack and sinatra to javascript), because we
created those too :)

<http://github.com/tlrobinson/jack>

------
dmpayton
I use Django when I need full-stack and CherryPy when I need something
lighter. I've also used web.py.

------
pwoods
Top Down Programming BABY!

Seriously, just install smarty and do it yourself. Then somebody can always do
a basic edit to the templates and you don't have to weight the merits of the
10000X different frameworks against eachother and get back to Making Money!

------
apu
<http://webpy.org/>

~~~
moder
Is webpy the Python equivalent of Perl's CGI::Application? Because I've used
C::A in the past and liked its simplicity.

------
ezmobius
rack, merb, sinatra and rails

------
cstejerean
compojure - best option in Clojure so far.

------
bdittmer
Grails (<http://www.grails.org>). A rails inspired Groovy framework that uses
big boy frameworks (Hibernate, Spring, etc.) under the hood.

------
breily
I used to use Django, tried cherrypy and web.py, and have ended up starting to
write my own (<http://github.com/breily/juno>).

~~~
joshsharp
Juno looks pretty nice.

~~~
breily
Thanks, that's always good to hear.

------
st3fan
Java, so I prefer Wicket and like Stripes.

~~~
rs
+1 for wicket.

Used wicket for a while on xp-dev.com, but moved to a home grown one as wicket
was a tad bit too bloated.

But I really like how wicket is component based, and have used it successfully
for other project (all intranet based ones though - so don't really have many
publicly accessible examples)

------
jamongkad
Python - Web.py no magic you know what's happening. PHP - CodeIgniter same
thing.

------
jcady
I can't believe the number of web frameworks out there. If anything the amount
of comments just illustrates how easy it is to roll your own.

------
bonaldi
WebObjects. I don't like Java, or Eclipse, which makes it an odd choice, but
it was Rails before Rails, and still has a lot of advantages over it. The ORM
works hand-in-hand with the framework to do proper persistence, and while I
rage against the tools sometimes, they're still better than being dumped back
at a texteditor.

If only Apple would give it some more love, it'd be killer.

~~~
coolestuk
WebObjects for me too :-) And I also don't like Java or Eclipse. But at least
with DirectToWeb one can keep the Java code to a minimum.

------
modoc
Seam because I'm a Java guy at heart and Seam is a pleasure to work with.

------
lux
I wrote my own CMS/framework which I started about 8-9 years ago, so I use
that. In my main business I sell a "pro" version of it as well as
customization/hosting/etc, and naturally it's also the framework I use for my
startup too. For those that are interested:

<http://www.sitellite.org/>

It's in PHP 4/5, GPL licensed, decently clean code (in 8 years there's
obviously some cruft at this point :), but also has a few nice things built-in
like a full CMS on top of it, multilingual support, a couple dozen modules
that save some time, ORM library, and the ability to setup A/B tests just by
editing a page, which is starting to come in handy these days.

Some challenges of rolling your own are that you have to write the
documentation, and provide support/training/whatever else since developers
aren't likely to be familiar with it (unless it's open and gains popularity).
Some things to consider when weighing your options... :)

------
tocomment
I'm in Python. I'm happiest just doing import cgi ...

I always feel guilty though.

~~~
randallsquared
If import cgi works for you, it's great. I love simplicity.

------
pwoods
Write your own!

~~~
tdavis
Sure, maybe if you've never done it before because it's a learning experience,
but it's a patently horrible idea otherwise.

~~~
zepolen
It isn't a horrible idea. Using a ready made framework all the time without
regard if it's right for the job is a horrible idea.

For some apps which have a certain level of complexity and require some extra
flexibility, you end up wasting more time fighting the framework than getting
the job done.

It helps if you have a well defined standard in place, for python, that means
WSGI. Coupled with _good_ libraries, it's hard to beat.

~~~
tdavis
Right, but that's not "writing a framework", it's "using existing libraries in
conjunction with one another". There's no real "magic", directory layout
rules, etc.

Maybe you end up writing a couple scripts to tie them together or something,
but it's hardly a framework. And in many cases, yes, it is a better choice
than a framework. And still a better choice than writing your own framework.

------
durbin
<http://symfony-project.org/>

~~~
adatta02
symfony here also

~~~
dreur
Symfony also !!

and am going to try Grails soon

------
cstef
Anyone using yii? It looks interesting to me, but I have not had a chance to
give it a whirl beyond the basic application tutorial.

<http://www.yiiframework.com/>

------
russell
I just inherited a massive enterprise application; you know run a brick and
mortar company on it. It's not a one-off; a number of companies use it. The
stack is

Jboss; Spring; Hibernate; Struts; XML gluing it together; Javascript:
prototype, JQuery and others; Flex and granite; Vestiges of every Java
framework fad of the last 10 years. Maybe I exaggerate, maybe not.

It is way over-engineered. Several times as much code as a Django, Pylons, or
Ruby solution. I dont recommend going this path at all, even if you are an
enterprise.

------
sachinag
<http://www.qcodo.com>, which now has been forked to <http://qcu.be>

------
apinstein
I wrote my own for php, <http://phocoa.com>.

After I learned to write Cocoa apps for the mac, I realized I needed a similar
framework for web development, so I wrote phocoa.

PHP as a language is kinda bumming me out since I've learned about new
techniques like functional programming, closures, etc from Javascript and
playing with Ruby.

If PHP 5.3 doesn't seem like it's on the right path, I may switch to another
language...

------
whiskeyjack
CGI::Application in Perl. Just to be contrary. Well, not really. I still love
Perl. Nothing wrong with the alternatives... it's just what I like.

------
jonknee
Django when I get to and CodeIgniter when I have to.

------
marram
Django with Google App Engine

------
rodrigo
JSPs, Servlets and POJOs. Im a complete beginner so im trying to learn the
basics first. Im very aware of some Java shortcomings but I like the fact that
I can get responses from thousands of books, tutorials, and the web. A bunch
of Python frameworks looks very nice though, and the languaje also, but Im
required to use Java for now : (

------
jaxn
I use Rails for my bigger project, but I kinda like Google's webapp (the
default on AppEngine). It is enough, and I assume it works the best of any
framework on AppEngine.

One of my projects is a location-based role-playing game for mobile phones
that we will be launching soon. The entire game engine is hosted on AppEngine
and uses the webapp framework.

------
sidonei
I use cherrypy + SQL objects + Cheetah, cause that way i choose what
components i want to handle all the general components of a webb app(http
reqest/respose, ORM and templating) Also i know exactly how things happen so
that makes me feel comfortable ... ie as you guys call it less magic :)

------
whalliburton
Weblocks

<http://common-lisp.net/project/cl-weblocks/>

------
dw0rm
webpy (<http://webpy.org/>) is very lightweight and hackable

------
leftnode
(shamless plug)

My own (PHP5 framework) - Artisan System

<http://artisansystem.com/>

~~~
zacharydanger
More like "Fartisan"! Just kidding, I've been meaning to give Artisan a try.
Where are the docs? Give me at least a nice tutorial on setting up a stupid
blogging CMS.

------
staunch
Catalyst with DBIx::Class (ORM)

------
moe
cherrypy and sqlalchemy. and closely looking at werkzeug for future projects.

------
oscardelben
Ruby on Rails is my primary framework. I've played a lot with Merb, but I'm
happy that it will be merged with rails. In the future I want to explore web
frameworks written in lisps (cl, scheme or closure)

------
webmaven
Zope: <http://zope.org>

Although I am also currently experimenting with App Engine:
<http://www.webappwednesday.com>

------
rob
Kohana.

------
olegp
Helma NG: <http://helma.org>

~~~
bdittmer
I'd like to hear some of your experiences using helma!

~~~
olegp
I decided to give Helma a go because I like the idea of being able to re-use
server side code within the browser and also because it should make it easier
for others to extend the web application with plugins without having to learn
a new scripting language.

I've been using Helma NG, rather than the stable Helma 1, so my comments are
specific to that.

The dynamic nature of the language makes a huge difference. Both Helma and
Grails (which you mentioned) feel like a breath of fresh air after working in
Java with frameworks such as JSF. It's much faster to get things done, but I
do miss the debugger and IDE integration.

Helma NG takes a new approach to managing scopes and I've found it easy to
organize code into modules like in Python.

Helma NG is still work in progress, so parts of it keep changing, which I've
found to be a bit of a problem. However, since most of it is in JavaScript and
the framework is very lightweight, it is easy to wrap around the parts of a
module you want to remain fixed.

I prefer Grails' GSP tag syntax to Helma macros, so might try to add support
for that at some stage.

I'm using CouchDB for persistence and have been writing my own abstraction
layer on top of that, so can't really comment on the SQL/Hibernate module.

Performance seems good, but I haven't run any benchmarks.

The community is relatively small, but very responsive. The documentation is
there, but there are few examples. However, most of the code is self-
explanatory.

So, to summarize: Helma NG is perfect for what I'm doing, but isn't yet stable
enough to be used in place of Grails for a more traditional webapp. Helma 1
might be more appropriate for that.

What have your experiences with Grails been like?

~~~
bdittmer
Like your experience with Helma, Grails has also been a breath of fresh air.
My biggest gripe with building web apps in Java is dealing with all the
dependencies, setting up a project structure and making all the frameworks
play nicely together...with grails none of those headaches exist...all the
stuff you'd usually use is integrated nicely into a project and with almost
zero configuration. The community is very responsive and new plugins are
released on a weekly basis. I definitely recommend any Java developers out
there take a look.

------
robedw
If using PHP Kohana, Really, really good php framework. Release cycles are a
bit crazy and some of the lead devs are uppity but all in all it's good.

------
joshdavey
My own php framework: <http://github.com/joshdavey/madeam/tree/master>

------
vyrotek
Asp.net MVC - Because C# is the best language

------
omouse
I've tried Django and now I'm trying Seaside.

------
sjs382
I write my own mostly-modular parts. It isn't as flexible as I'd like it to
be, but it does what I need it to do.

------
booboo
It would be nice if someone would define exactly what a framework is. I mean,
we're not all brilliant.

------
cottsak
aspnet mvc. current project - <http://ksischool.com>

------
jpcx01
Merb. For me it has all the benefits of both Django and Rails, and is ultra
clean and hackable.

------
klon
When using Java, I prefer Stripes. For a new project I would definately use
Python and Django.

------
auston
I mess with Rails, dabble in Django & work in CodeIgniter.

Also fun - merb, cakephp, symfony, web2py

------
maxwell
AppJet. Jaxer was a bit buggy when I used it over the summer.

------
twotimestwo
Good question. What _does_ constitute a framework?

------
Ferdi
Drupal and Rails

------
schtog
webpy because it is minimalistic and very clean and easy to use.

I have aslo played around a little b it with compojure+clojure.

------
jamesbritt
Ramaze. Feels most Ruby-ish for me.

------
lo_fye
Zend Framework + Propel, yo.

------
zby
Catalyst

------
dylanz
merb/rails

------
mindaugas
ramaze ! and that means rack -> ruby

------
rociiu
Rails, Django

------
invitro
django, rails, codeigniter so far

------
dazzawazza
turbogears

------
knieveltech
Drupal.

~~~
yogione
Drupal all the way or combine with Cake or CI

~~~
knieveltech
I'm not conversant with Cake or CI so I couldn't comment intelligently here.

------
gommm
rack, merb and rails...

------
mpc
jQuery. Rails.

------
drhowarddrfine
Never used a framework and never will. I know how to code. I do my own sites
and don't use others or have others do my work for me.

~~~
ryanwaggoner
Haha...I assume you're kidding, right? Are you coding in binary? Because if
not, someone else has "done your work for you" :)

~~~
andreyf
Coding in binary on what? Unless you mined your own raw materials to build
your machine, someone else has "done your work" for you. Not to mention where
you'd get electricity...

~~~
cnu
Why a computer?

To do your own work, use your fingers.

