HackerReposA FIELD GUIDE TO OPEN SOURCE
ProSponsor the shelf♧ 0
← Back to top all-time
weavejester
compojure
Clojure2009–2022
weavejester / compojure

compojure

A concise routing library for Ring/Clojure

18Distinct people
18Mentions
0Explicit recommenders
4.1KGitHub stars
REPOSITORY AT A GLANCE

What to know before exploring

What it is

A concise routing library for Ring/Clojure

GitHub

Where it is used

No documented product use was verified in the last source check.

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, 11:56:56 AM 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 year18 dated mentions

Observed mentions: 2009-01-20 12:07:32 UTC to 2022-07-02 13:13:59 UTC.

012342009-01-01 00:00:00 UTC to 2010-01-01 00:00:00 UTC (exclusive): 3 mentions; 1 submissions, 2 comments20092010-01-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 2012-01-01 00:00:00 UTC (exclusive): 3 mentions; 0 submissions, 3 comments2012-01-01 00:00:00 UTC to 2013-01-01 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2013-01-01 00:00:00 UTC to 2014-01-01 00:00:00 UTC (exclusive): 4 mentions; 0 submissions, 4 comments2014-01-01 00:00:00 UTC to 2015-01-01 00:00:00 UTC (exclusive): 2 mentions; 0 submissions, 2 comments2015-01-01 00:00:00 UTC to 2016-01-01 00:00:00 UTC (exclusive): 1 mentions; 0 submissions, 1 comments20152016-01-01 00:00:00 UTC to 2017-01-01 00:00:00 UTC (exclusive): 1 mentions; 0 submissions, 1 comments2017-01-01 00:00:00 UTC to 2018-01-01 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2018-01-01 00:00:00 UTC to 2019-01-01 00:00:00 UTC (exclusive): 1 mentions; 0 submissions, 1 comments2019-01-01 00:00:00 UTC to 2020-01-01 00:00:00 UTC (exclusive): 2 mentions; 0 submissions, 2 comments2020-01-01 00:00:00 UTC to 2021-01-01 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2021-01-01 00:00:00 UTC to 2022-01-01 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2022-01-01 00:00:00 UTC to 2023-01-01 00:00:00 UTC (exclusive): 1 mentions; 0 submissions, 1 comments2022

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
20092009-01-01 00:00:00 UTC2010-01-01 00:00:00 UTC312
20102010-01-01 00:00:00 UTC2011-01-01 00:00:00 UTC000
20112011-01-01 00:00:00 UTC2012-01-01 00:00:00 UTC303
20122012-01-01 00:00:00 UTC2013-01-01 00:00:00 UTC000
20132013-01-01 00:00:00 UTC2014-01-01 00:00:00 UTC404
20142014-01-01 00:00:00 UTC2015-01-01 00:00:00 UTC202
20152015-01-01 00:00:00 UTC2016-01-01 00:00:00 UTC101
20162016-01-01 00:00:00 UTC2017-01-01 00:00:00 UTC101
20172017-01-01 00:00:00 UTC2018-01-01 00:00:00 UTC000
20182018-01-01 00:00:00 UTC2019-01-01 00:00:00 UTC101
20192019-01-01 00:00:00 UTC2020-01-01 00:00:00 UTC202
20202020-01-01 00:00:00 UTC2021-01-01 00:00:00 UTC000
20212021-01-01 00:00:00 UTC2022-01-01 00:00:00 UTC000
20222022-01-01 00:00:00 UTC2023-01-01 00:00:00 UTC101

From the project README

An excerpt from the repository, fetched Nov 12, 2026.

Read the project’s introduction
Compojure Compojure is a small routing library for Ring that allows web applications to be composed of small, independent parts. Installation Add the following dependency to your deps.edn file: compojure/compojure {:mvn/version "1.7.2"} Or to your Leiningen project file: [compojure "1.7.2"] Documentation Wiki API Docs Community Google Group #compojure on Freenode IRC Usage This small Compojure application demonstrates creating a Ring handler from two routes: (ns hello-world.core (:require [compojure.core :refer :all] [compojure.route :as route])) (defroutes app (GET "/" [] "<h1>Hello World</h1>") (route/not-found "<h1>Page not found</h1>")) Also refer to the Getting Started page on the wiki. License Copyright © 2025 James Reeves Distributed under the Eclipse Public License, the same as Clojure.
Read the full README on GitHub

What Hacker News says

18 sources
If you're not familiar with lisps in general, it might be hard to grok the differences between lisp-macros (as used in Clojure) and "normal" macros you see in other (non-lisp [sans Elixir I think]) languages. But, if you are familiar already, and just wanna see examples of neat macros that makes the API nicer than what a function could provide, here are a few: - https://github.com/clojure/core.async/blob/master/examples/w... - https://github.com/weavejester/compojure - https://github.com/ptaoussanis/timbre - https://github.com/krisajenkins/yesql Furthermore, macros enables APIs like this, that would be impossible to have in JavaScript for example: (spy :info (* 5 4 3 2 1)) => 120 %> 15-Jun-13 19:19:13 localhost INFO [my-app.core] - (* 5 4 3 2 1) => 120 `spy` here doesn't just print what the `` form is returning, but the form
Read the rest
itself too. You wouldn't be able to achieve this without macros, as the evaluation of the `` form would happen before it gets passed to `spy`, so the initial form is already gone. Instead, a macro received the very code you pass into it, so you can print it, inspect it, rewrite it or whatever.
In Open source is not about you (2018)
Clojure best-practices warn against using macros when a function would do. It tends to complicate debugging and maintainability. However, macros are very powerful, and when they are the right tool for the job they can create magic and afford new ways of looking at a problem. On the other end of the spectrum, Racket[0] fully embraces the DSL-creating power of macros. To answer your question: I think that lisp's extensibility can be used to create something difficult to share/understand OR easier to share/understand [1]. Whereas some other languages might be limited by their ability to naturally express a domain-fitted solution, yet they make it easier to avoid creating a cryptic mess. So... lisps don't confuse people, people do. [0] - https://racket-lang.org/ [1] - a good example of macro use is Compojure's use of a macro for http route de
Read the rest
In Lisp Macros by Example
You're probably a verbal thinker, and English-like code matters a lot to you I guess. Probably lots of programmers are. For me, a mostly visual thinker that ends up building and visualizing a code tree in his head anyhow, Lisp is very readable because I can more clearly see the tree without all the noise. And when it comes to math, staying close to standard math notation is a clear winner, and this is why all lisps have ways of writing infix for formula-heavy code, stuff like http://data-sorcery.org/2010/05/14/infix-math/ and others. But lispers don't use them that much because they simply get used to the Lisp notation more. ...oh, and Common Lisp is NOT an example of readable Lisp. It's probably the most unreadable and obsfucation-friendly of them all :) Take a look at some Clojure code for something that's just as readable as Python aft
Read the rest
er you "get you eyes used to it" (jargon for learning to ignore the parentheses and learning the special meanings of the "funny symbols" like :, ~, # and a few more): https://github.com/weavejester/compojure/blob/master/src/com...
In Lisp for the Web, Part III
I like Clojure for the Brave and True [1], although it can be a little goofy at times. Leiningen [2] is the standard build tool, and Clojars is the standard package repository [3]. For web development, Ring [4] is the standard HTTP solution, while Compojure [5] is generally used for routing. http://www.clojure-toolbox.com is good for everything else. [1]: http://www.braveclojure.com [2]: http://leiningen.org [3]: https://clojars.org [4]: https://github.com/ring-clojure/ring [5]: https://github.com/weavejester/compojure
In Show HN: OJ – A Clojure library for talking to your database
> ...has been standard advice since decades before Clojure. Yes, but we're in a thread dedicated to Clojure ;) > "Macros make things horribly complicated" is nonsense, or no skilled programmer would use them. Which is what happens, really, and when used it's in a very limited fashion. For example, for quite popular projects inside the Clojure community: Leiningen used one macro[1] and Compojure two[2]. A properly done (and properly used) macro might not make things complicated, but this leads me to the next paragraph. > ease of debugging is an issue quite apart from anything to do with macros. It's usually hard, but macros make it HORRIBLE since you can easily lost track of the generated code. Like if translating from Clojure to Java Stack Traces wasn't hard enough... Whenever you use a macro, the stack traces you receive from the code us
Read the rest
ing it might not like like what you expect at all. Macros are bad because they mutate your code. You usually have to expand the macro and debug there instead of just looking at your damn code. The big problem is not macros, but code which uses macros. [1] https://github.com/technomancy/leiningen/search?q=defmacro&r... [2]https://github.com/weavejester/compojure/search?q=defmacro&r...
In Why I am so excited about Clojure
pedestal is quite a large project, try to offer a complete solution for building web application in Clojure, from server side to client side, to tooling. http-kit is a very small and focused library, It just do one thing: talk in HTTP. http-kit need to work together with other libraries like Ring[1] and Compojure[2] to do the server side. Few good things about http-kit: 1. Very fast and scalable, almost as fast as what you can get from the hardware. 2. Focus, do one thing and do it well, thing about Linux/Unix's philosophy. Personally, I prefer this way of doing software. [1] https://github.com/ring-clojure/ring [2] https://github.com/weavejester/compojure
In Unified API of WebSocket and HTTP long polling/streaming for Clojure
Don't get me wrong, I really like what you are doing but there are a lot of spelling and grammar errors in your web site. I'm not a native speaker (I also make a lot of errors) but maybe you can get some help from one? Not a big deal but just wanted to let you know. Makes sense if you want to get popular =) I also have a question: Do you plan to make any comparison tests with Compojure (https://github.com/weavejester/compojure) and lib-noir?
In 600K concurrent HTTP connections with Clojure and http-kit
Clojure is very capable for web development, but getting started is not as clear cut as it is with something like Rails or Django. This is because the Clojure community tends to eschew large frameworks, and instead prefers using smaller, more focused libraries. This provides a lot of flexibility, but is intimidating at first because it requires you to choose your own libraries for routing, db interaction, templating, etc. Everything is to be built on top of Ring, which is the Clojure equivalent of Rack or WSGI. Compojure is pretty much the standard for routing at the moment. Korma is a very popular DSL for writing SQL. For templating, Hiccup and Enlive are popular, but there are other options as well. I would start off by getting a decent understanding of Ring and Compojure and building from there. -- https://github.com/ring-clojure/
Read the rest
In How Lisp is Going to Save the World
For some reason I found it was easier to learn a little Common Lisp first before moving to Clojure. There are a few reasons for this, I think: - CL has been around so long, there are TONS of good books and online documentation. Clojure literature is just starting out, really - Clojure places a strong emphasis on functional programming. I have no doubt that this was the right decision, but trying to wrap your head around Lisp AND FP at the same time is... well... I hope you have plenty of headache medication because your brain's gonna hurt. CL is at home in the imperative and OOP style, so you can get your Lisp on first, then get hip to the functional jive. A good thing about all Lisps though is that you naturally end up writing most things in a functional style anyway. It just kinda happens. - It's a bit unsettling to learn lisp by
Read the rest
learning Clojure if you still have a bad taste in your mouth when it comes to Java. When you use CL, you know you're on a pure Lisp platform, so when it comes time to learn Clojure you'll just "know" when you're doing something in idiomatic Clojure/Lisp vs punting to Java. - Clojure has more native data structures than Common Lisp (by that I just mean more homoiconic data structures, I'm aware that CL actually has arrays and hashtables and such). This is much better, IMO, from a practical perspective, but might get in the way when you're trying to grok the philosophical purity of Lisp. So my advice is to start with Common Lisp and then move to Clojure. Specifically: 1. Read "Land of Lisp" (http://landoflisp.com/). It's a gentle introduction to Lisp and it's fun. 2. Read "Practical Common Lisp" (http://www.gigamonkeys.com/book/) and have fun with the "practicals". I really love this book because you build kind of "real stuff" and it helps tie all the concepts together. 3. Read and try to understand pg's "On Lisp" (http://www.paulgraham.com/onlisp.html). It gives you a much better take on what makes Lisps so much more powerful than other programming languages. 4. Watch Rich Hickey's talks on blip.tv (http://blip.tv/clojure). I would recommend watching the "Clojure for Java Programmers" talks first, then the "Clojure for Lisp Programmers". You'll need to budget about 5 - 6 hrs to watch all four videos. You probably don't want to watch the latter until you know things like what a Lisp-1 is vs a Lisp-2, what "homoiconic" means, and the difference between a macro and a reader macro. I'm not saying you need that knowledge specifically for the talk, just that if you know what those all mean then there's a good chance you'll get a lot of value out of the talk. 5. Install Clojure and play around with it. I liked trying to port the stuff from Land of Lisp and Practical Common Lisp to Clojure as it got me on firm footing quickly. For the former, take a look at this StackOverflow post: (http://stackoverflow.com/questions/5363393/rewriting-wizard-...) to get started. Then, head over to PCL->Clojure (http://thinkrelevance.com/blog/2008/09/16/pcl-clojure.html) for help in converting the CL practicals over to Clojure. 6. Get idiomatic by reading good Clojure code. I recommend the [Clojure source](https://github.com/clojure/clojure) itself as well as Compojure (https://github.com/weavejester/compojure) to get started. Finally, a note on development environments: just use whatever works for you. I prefer Emacs, but note that getting Clojure working well with Emacs is slightly more difficult than getting CL working well with Emacs. This is mainly because you can run into dependency issues and out of date packages fairly easily. However, if you get Emacs up and running with Common Lisp through SLIME (http://common-lisp.net/project/slime/) and enable paredit (http://www.emacswiki.org/emacs/ParEdit) and all that good stuff, you'll have almost zero learning curve developing Clojure in Emacs using swank-clojure (https://github.com/technomancy/swank-clojure). If you just want to play around with Clojure quickly and still have SOME semblance of an IDE that understands Lisp, try clooj (https://github.com/arthuredelstein/clooj). It's a bit bland on the looks side and low on features, but it gives you parenthesis matching and a nice REPL so it's a good way to play around with Clojure without feeling committed.
In Less painful GUIs in Clojure - Talk
A lot of Spring code predates the rising popularity of "convention over configuration" (thank you, Rails, for getting this so widely accepted), so if you're in one of those code bases, you're going to see a LOT of the Java+XML verbosity that led to everyone lampooning Java. In exchange, you get a ton of flexibility. You probably only need 5-10% of it, but that 5-10% is NICE. The ability to do clean testing of your data tier, for instance, is glorious when you first experience it. Goodbye, horrible ResultSet mocks! If you're lucky enough to work on a codebase that fully embraces autowiring and all the spiffy new annotations, then you get all this awesome stuff, but with virtually none of the crazy XML configuration stuff that makes it impossible to just trace the source and figure out what the hell is going on. For Java web frameworks, Pla
Read the rest
y! http://www.playframework.org/ is definitely on the top of my list for green-field projects. I've only used it on small things so far, but it really seems to have learned the lessons of Django and Rails. https://github.com/weavejester/compojure is on my To-Try list for Clojure stuff. Until I get around to it, I'm just monitoring buzz on the web, but so far it's been mostly positive.
In Programming Language Framework Traction on Hacker News

Showing the 15 most recent of 18 sources. Enable JavaScript to search and browse every indexed mention.

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.