Moving away from Noir

Skip to first unread message

Anthony Grimes

Dec 13, 2012, 6:23:44 PM12/13/12
Chris and I have decided to ask people to focus on Compojure and the lib-noir library (I myself have been doing this for a while now) instead of Noir. This is an announcement that Noir is not really going to be maintained anymore, and is a sort of deprecation notice. I wrote a blog post to help explain how I feel and what is happening. Please read.

Chris Granger

Dec 13, 2012, 6:52:59 PM12/13/12
to clj-noir
Just to tack on here: If you're using Noir now, don't worry, everything is fine - 1.3.0 has been officially released and it's not going anywhere. There's nothing wrong with what's out there now, it's just that 1.3.0 will likely be the last release unless someone wanted to keep moving it forward. As time goes on, it likely makes sense to transition, but fortunately transitioning is pretty straightforward and Raynes can point to the commits he used to do that for Refheap. Ultimately, lib-noir + compojure gives a lot more flexibility when it comes to things like middleware at a relatively slight cost to ease of starting. Noir has always used compojure under the covers and so you'll find that most everything you've learned so far will map over pretty cleanly.

When I started the project about two years ago, the Clojure web landscape looked quite a bit different and getting started was an incredibly painful process. Compojure had just split into a bunch of different pieces, there was this new "ring" thing, and trying to cobble everything together was a pretty daunting task. Since then, the Clojure web ecosystem has matured quite a bit and lib-noir fits very nicely into the direction the community is ultimately heading in. Noir still serves its purpose as a solid starting point for people who just want to get up and go with Clojure on the web, but I've also come to the conclusion that what we have now is just a baby step toward what we *could* be doing on the web. There are far better solutions waiting out there for Clojure, ones that don't just look like a standard http wrapper, and that's what we should be ultimately moving toward. We have the fundamental building blocks to build websites, it's time we start pushing the state of the art.

I'm excited to see what we, the community, come up with.


Shenyang Zhao

Dec 14, 2012, 12:33:09 AM12/14/12
Hi Chris and Anthony,

Thanks for the honest opinion and effort put into noir for the past
two years. I wonder if libraries like fetch will be updated to reflet
this changes?

Zhao Shenyang

Dec 14, 2012, 5:15:15 AM12/14/12
Hi Chris and Anthony,
 thanks for the heads up.

I've started using Clojure almost a year ago (and the web stack something less than that) and I remember spending some time looking around at gathering the mental pieces of all the tools I needed to build up my app. I must say that between learning Clojure and understanding what would be the best tool to use it wasn't an immediate process. In my case I wanted to stay away from frameworks, bumped onto Compojure early on and went with that.

The thing is that I work in an environment where others develop client-side stuff and are used to Django-like environments for the server side. It's not just a matter of mentality: it's just not their job to delve into a multitude of libraries for making the web stack work. Having one api and one stop shop for documentation is of great advantage, it saves a lot of energies and makes them confident that they're doing the right thing even if they don't understand 100% of it.

This is why, after some attempts and iterations, I encouraged them at using Noir for their apps, with my Compojure api's exposed through compojure-route. Needless to say, it worked great for us, they picked up Noir and it essentially takes them 100% there. They're going to the website regularly for directions and I couldn't be happier.

What I'm trying to say is that, sure, migrating to Compojure is easy and lib-noir gets you there for the remaining part, but all of the sudden you have two libraries to learn and put together. It's an extra layer of complexity that a lot of people don't need and that might scare away new potential adopters.
To me, deprecating it without a real alternative (as a one stop shop) is kind of a pity. It isn't too much of a framework but it kind of feels like it for those who like the feeling.

Is there any chance to officially un-deprecate it and involve more potential contributors (I volunteer) for maintenance (keeping up with dependencies, etc)? There's nothing wrong with having a project in no-more-features/maintenance mode and it doesn't necessarily mean deprecation.

Just a thought


Anthony Grimes

Dec 14, 2012, 5:28:43 AM12/14/12
It is an open source project, so feel free to fork it and take it on if you like. Really though, I don't see the point. If it's batteries included that 'they' need, they have it with lib-noir. Surely it isn't *that* hard to add a dependency to lib-noir, right? In fact, there isn't anything more to learn except for Compojure, which is one library. Everything else works the same. Basically, 'they' just need to know how do (wrap-noir-session my-routes) and such. I don't think I fully understand, however. Why are they using Clojure? If so much as learning how to use two libraries together is that big of a deal, they must not really want to be doing it anyways, right? Please don't take this the wrong way, I don't mean to criticize, I'm just trying to understand the problem.

But like I said, anybody is welcome to take it on, but I think it is safe to say that Chris and I don't want to have a part in it anymore. We can toss over access to the repository and such if necessary.

Anthony Grimes

Dec 14, 2012, 5:35:55 AM12/14/12
Perhaps it would be better if you forked it? I don't know. We'll see what Chris thinks.

Luca Antiga

Dec 14, 2012, 5:53:12 AM12/14/12
Hi Anthony, 
 thanks for the prompt response.

I'd have to say that I have no particular attachment to Noir myself, but I just saw that it worked well in a collaborative environment because it took some of the complexity away
in a sensible way.

In a collaborative environment not everyone has to learn every tool at the same depth. And for those who have a basic understanding of Clojure, can modify code or 
follow tutorials and write short views, Noir doesn't feel too different from, say, Django. Working in a framework is probably limiting on one hand and not exactly Clojuric, but 
it's productive, it enables people and frees other people from being a bottleneck. On the other hand, the latter can write their Compojure-based stuff and make it seamlessly 
available to everybody and this is how our more complex codebase is working.

If noir has to be deprecated due to its lack of flexibility or its redundancy with Compojure, maybe it would be best to have a batteries-included replacement. I see how lib-noir 
provides 80% of what one need, but having a higher level micro-framework which leverages on Compojure, but retains a few of the noir frameworky features and has one stop
shop website for documentation might not be a bad idea. 

It would in my opinion be a good message to send for those who are considering Clojure for their next project and see Noir being deprecated. Ensuring some continuity with 
Noir might be good and probably not very far off in terms of effort.


Frank Siebenlist

Dec 14, 2012, 12:25:55 PM12/14/12
to, Frank Siebenlist
How is the Fetch library affected?

Are there "big" noir dependencies or should it be easy to port?

Thanks, FrankS.

Paul Legato

Dec 14, 2012, 6:04:12 PM12/14/12
Chris, Anthony, thanks for your work. Noir has been very helpful to me. I'm glad it'll live on in lib-noir.

This seems like a good time to announce Claw: the Clojure All-in-One Web framework. I've put together the beginnings of a full stack, modular, batteries-included open source Clojure web framework at . Claw is very alpha, but it already boots and serves web pages. Out of the box, you get logging, an nREPL server, and a Noir server (which I suppose will move to lib-noir / Compojure now.) Much more is planned.

My goal is to make it very fast and very easy to get a website running with full backend services, similar to the developer experience that you get with Django or Rails. I'd like to invite you all to participate if this is something you're interested in.

Claw can progress rapidly as substantially all of the backend libraries to provide the needed services already exist; it's just a question of integrating them into a neat little package that all Just Works together out of the box, so you can immediately get started coding the core of your application rather than first spending hours or days trying to harmonize bits and pieces from 20 different libraries and then writing a generic configuration system around them. In Claw, sane defaults are provided for everything, and all the libraries are already set up to talk to one another when needed. Of course, you can still override the default config settings if you like, or drop down to a lower level of abstraction and reconfigure something's internals manually; you just don't *have* to if you don't want to. 

Already Implemented:

* Logging
* Noir, Hiccup, Enlive
* Generic configuration framework with sane defaults provided; everything works out of the box with zero configuration (but you can override all settings if you like)
* Basic plugin lifecycle management framework; everything is a modular plugin

Planned features:

* Friend authentication
* Korma and ClojureQL
* Database Migrations - Drift? Lobos?
* Datomic, other database plugins
* A higher order templating mechanism built on Hiccup
* ClojureScript
* Reactive UI elements via ClojureScript, auto-synchronized
* Generic session clustering, InfiniSpan and other targets
* HTTP basic authentication
* Basic canned admin console framework for user management
* Basic canned customizable templates for user log in, log out, password update, etc.
* OAuth
* ..??? What else would you like this to do?

If you have any interest in a Clojure full stack web framework, clone and let's make it happen!



Dec 20, 2012, 8:39:37 AM12/20/12
Thanks for the heads up. It's great to see the Clojure web stack maturing, which inevitably means some projects stepping back in favour of others. I am personally very happy with the ascendance of the micro-dsl or highly composable approach to developing middleware and handlers. That has made the whole Clojure web development task very flexible, and far less black boxy. It has been nice plonking on one library after another, as I worked my way up the stack.    

Eran Medan

Feb 1, 2013, 11:08:21 AM2/1/13
Anthony and Chris, thank you for the amazing work you did on this, one small thing I would like to ask for the benefit of people that google "Clojure web framework" 
it would be nice to have this disclaimer on the website, as very few end up here to read this message here, (and many have missed the HN post as well)
I was actually considering using it at work for something, and if I hadn't seen that HN post I would have never knew it's deprecated until it would have been too late :)
Thanks again for your contribution to the open source and web communities 
Reply all
Reply to author
0 new messages