HackerReposA FIELD GUIDE TO OPEN SOURCE
ProSponsor the shelf♧ 0
← Back to top all-time
cgrand
moustache
Clojure2010–2011
cgrand / moustache

moustache

a micro web framework/internal DSL to wire Ring handlers and middlewares

2Distinct people
5Mentions
0Explicit recommenders
260GitHub stars
REPOSITORY AT A GLANCE

What to know before exploring

What it is

a micro web framework/internal DSL to wire Ring handlers and middlewares

GitHub

Where it is used

No documented product use has been verified yet.

What people are saying

No recommendation phrase was found in the indexed comments.

No classified warning is attached to this page. Read the discussions before treating silence as approval.

Also in these discussions

Mentioned in the same Hacker News threads. That is not proof they are substitutes.

This week on Hacker News

Nov 7–Nov 14 UTC · Direct repository links and separately labeled related project stories. Indexed through 11/14/2026, 5:04:57 PM UTC.

No direct repository links were found in the indexed HN discussions over the past seven days. Older discussions are available below.

Mentions over time

HN mentions by month5 dated mentions

Observed mentions: 2010-03-29 21:19:51 UTC to 2011-04-10 22:35:15 UTC.

0122010-03-01 00:00:00 UTC to 2010-04-01 00:00:00 UTC (exclusive): 2 mentions; 1 submissions, 1 commentsMar 20102010-04-01 00:00:00 UTC to 2010-05-01 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2010-05-01 00:00:00 UTC to 2010-06-01 00:00:00 UTC (exclusive): 1 mentions; 0 submissions, 1 comments2010-06-01 00:00:00 UTC to 2010-07-01 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2010-07-01 00:00:00 UTC to 2010-08-01 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2010-08-01 00:00:00 UTC to 2010-09-01 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2010-09-01 00:00:00 UTC to 2010-10-01 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 commentsSep 20102010-10-01 00:00:00 UTC to 2010-11-01 00:00:00 UTC (exclusive): 1 mentions; 0 submissions, 1 comments2010-11-01 00:00:00 UTC to 2010-12-01 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2010-12-01 00:00:00 UTC to 2011-01-01 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2011-01-01 00:00:00 UTC to 2011-02-01 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2011-02-01 00:00:00 UTC to 2011-03-01 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2011-03-01 00:00:00 UTC to 2011-04-01 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2011-04-01 00:00:00 UTC to 2011-05-01 00:00:00 UTC (exclusive): 1 mentions; 0 submissions, 1 commentsApr 2011

Counts come from the repository’s dated source evidence. Index cutoff: 2026-11-02 08:16:59 UTC.

View mention counts and date ranges
UTC ranges include their start and exclude their end. Select a period to filter the source evidence.
PeriodStart (UTC)End (exclusive, UTC)MentionsSubmissionsComments
Mar 20102010-03-01 00:00:00 UTC2010-04-01 00:00:00 UTC211
Apr 20102010-04-01 00:00:00 UTC2010-05-01 00:00:00 UTC000
May 20102010-05-01 00:00:00 UTC2010-06-01 00:00:00 UTC101
Jun 20102010-06-01 00:00:00 UTC2010-07-01 00:00:00 UTC000
Jul 20102010-07-01 00:00:00 UTC2010-08-01 00:00:00 UTC000
Aug 20102010-08-01 00:00:00 UTC2010-09-01 00:00:00 UTC000
Sep 20102010-09-01 00:00:00 UTC2010-10-01 00:00:00 UTC000
Oct 20102010-10-01 00:00:00 UTC2010-11-01 00:00:00 UTC101
Nov 20102010-11-01 00:00:00 UTC2010-12-01 00:00:00 UTC000
Dec 20102010-12-01 00:00:00 UTC2011-01-01 00:00:00 UTC000
Jan 20112011-01-01 00:00:00 UTC2011-02-01 00:00:00 UTC000
Feb 20112011-02-01 00:00:00 UTC2011-03-01 00:00:00 UTC000
Mar 20112011-03-01 00:00:00 UTC2011-04-01 00:00:00 UTC000
Apr 20112011-04-01 00:00:00 UTC2011-05-01 00:00:00 UTC101

What Hacker News says

5 sources
Regarding Clojure, while compojure is popular, a compojure centric view of web programming is misguided. Compojure is part of a growing ecosystem of libraries built on top of ring[1][2]. Firstly this ecosystem is not analogous to rails or django. The closest is that Compojure is similar to Sinatra i believe. If you are looking at getting started with web programming in Clojure you need to get familiar with ring (the http abstraction) and look at Compojure and Moustache (routing and handler composition), and Enlive[4] and Hiccup[5] (templating/html generation). Compojure and Moustache are fairly similar, but Enlive and Hiccup are extremely different. A web application will consist of ring plus one of each layer. As has been mentioned by others in this thread, the depth, breadth and currentness of documentation for these libraries varies. D
Read the rest
avid Nolen has a great tutorial for enlive[6] that i would encourage anyone looking at these libs to work through. Enlive is one of the most compelling aspects of the clojure web ecosystem at present. These libraries provide the core pieces you would expect to see in any web framework, but a lot of the smaller details are missing. Of note there is no ORM for clojure (for obvious reasons) - If you are looking for a good SQL abstraction you should look at ClojureQL[7] - and aspects such as form generation, validation and processing is still in early days. My day job has me building web apps with Django. I wouldnt suggest that my coworkers and I jump to clojure / ring et al yet. The breadth of libraries and out of the box stuff in django is still a huge advantage for the day to day rapid web site / web app development, however clojure's story is improving rapidly and i think that the functional model is a particularly good fit for web applications. I cannot compare clojure's story with the other languages and frameworks mentioned. [1] https://github.com/mmcgrana/ring/ [2] This is true of compojure 0.4 and newer. compojure existed prior to ring (with hiccup as part of it). [3] https://github.com/cgrand/moustache [4] https://github.com/cgrand/enlive [5] https://github.com/weavejester/hiccup [6] There is a link in the enlive readme [7] https://github.com/LauJensen/clojureql/
In Ask HN: Snap v Nitrogen v Lift v Compojure
I recently rebuilt my site[1] in Clojure. Ring at the bottom layer (basically a given). Beyond that I'm using Moustache[2] for routing, Enlive[3] for templating and Clutch[3] to talk to CouchDB. I had previously tried with Compojure and Hiccup. The hardest parts were learning enlive and moustache. Enlive is incredibly powerful and very clever, but can be a bit overwhelming for clojure noobs. You definitely want to check out David Nolen's tutorial[5] for it. Aside from that, #clojure and the ring google group are full of wisdom. Deployment wise, I build the site with a basic leiningen[6] uberjar and run it from an ssh, background it and disown it. yeah, thats terrible, but im lazy and nobody visits my site anyhow ;) Caveat here: Clojure 1.2 has a small bug with interned keywords[7] that will knock my site over in a couple of days if i forg
Read the rest
et to start it up with the default JVM profile. the -server profile fixes the trigger issues Aside from that, I have an nginx gateway server that handles serving my media, nowww redirection and proxies all dynamic requests through to the jvm. the site itself hosts a jetty HTTP server via ring to handle all the requests. The 'hardest' part of getting started with clojure vs say Python+Django or Ruby+Rails is that there is a lack of 'get you going' magic / tools like scaffolds or djangos admin. Once you get past that though, it is a very enjoyable platform inspite of the API changes. [1]: http://brehaut.net [2]: http://github.com/cgrand/moustache [3]: http://github.com/cgrand/enlive [4]: http://github.com/ashafa/clutch [5]: http://github.com/swannodette/enlive-tutorial/ [6]: http://github.com/technomancy/leiningen [7]: http://www.assembla.com/spaces/clojure/tickets/444?comment=9...
In Ask HN: Whats the best way to start web development on lisp?
I mentioned this on another submission but Christophe Grand's Moustache routing library, http://github.com/cgrand/moustache, is great in conjunction with Ring. It makes very idiomatic use of destructuring to define routes, for example you can do stuff like the following: (def admin-post (app [""] "admin post index" ; /admin/post/ or /admin/post ["new"] {:get new-post ; GET /admin/post/new :post save-post} ; POST /admin/post/new ["edit" id] {:get edit-post})) ; GET /admin/post/edit/:id (def admin (app [""] "admin index" ; /admin/ or /admin ["post" &] admin-post ["posts"] {:get all-posts} ; /admin/posts ["settings"] {:get settings})) ; /admin/settings (def main (app [""]
Read the rest
"index page" ; / ["post" slug] {:get get-post} ; /post/:slug ["admin" &] admin))
In Clojure Web Development with Ring

MAKE YOURSELF AT HOME

A few shortcuts

/
Search the collection
?
Open this guide
Esc
Close dialogs and navigation

Your saved repositories and interests stay in this browser.