Releasing Caribou today: Open Source Clojure Web Ecosystem

2,593 views
Skip to first unread message

Ryan Spangler

unread,
Nov 12, 2013, 6:52:10 PM11/12/13
to clo...@googlegroups.com
Hello Clojure,

Excited to announce today the release of Caribou!  http://let-caribou.in/

We have been building web sites and web applications with it for over two years now and improving it every day.  Currently we have four people working on it and another ten using it to build things, so it is getting a lot of real world testing.

It has been designed as a collection of independent libraries that could each be useful on their own, but which come together as a meaningful whole.

We have been spending the last couple months getting it ready for a full open source release, and I am happy to say it is finally ready.  Funded and supported by Instrument in Portland, OR:  http://weareinstrument.com/  We have four projects using it in production, and several more about to be launched (as well as over a dozen internal things).


Source is here:  http://github.com/caribou/caribou (use this for issues, you don't actually need the source as it is installed through a lein template).

Some of the independently useful libraries Caribou is built on are:

* Polaris -- Routing with data (not macros) and reverse routing! :  https://github.com/caribou/polaris
* Lichen -- Image resizing to and from s3 or on disk: https://github.com/caribou/lichen
* Schmetterling -- Debugging Clojure processes from the browser:  https://github.com/prismofeverything/schmetterling
* Antlers -- Useful extensions to mustache templating (helpers and blocks, among other things):  https://github.com/caribou/antlers
* Groundhog -- Replay http requests: https://github.com/noisesmith/groundhog

And many others.

Basically this is an Alpha release, and I am announcing it here first in order to get as much feedback from the community as possible.  We have made it as useful as we can for our purposes and recognize that for it to improve from here, we really need as many people using it and building things with it as possible.  The documentation also needs to be put through its paces:  we need to see how well people are able to use it who know nothing about it, based only on the existing docs.

All feedback welcome!  

Thanks for reading!  I hope you find it useful.

Sean Corfield

unread,
Nov 12, 2013, 8:02:43 PM11/12/13
to clo...@googlegroups.com
Wow... That's pretty impressive for an initial alpha release!

Sean
> --
> --
> You received this message because you are subscribed to the Google
> Groups "Clojure" group.
> To post to this group, send email to clo...@googlegroups.com
> Note that posts from new members are moderated - please be patient with your
> first post.
> To unsubscribe from this group, send email to
> clojure+u...@googlegroups.com
> For more options, visit this group at
> http://groups.google.com/group/clojure?hl=en
> ---
> You received this message because you are subscribed to the Google Groups
> "Clojure" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to clojure+u...@googlegroups.com.
> For more options, visit https://groups.google.com/groups/opt_out.



--
Sean A Corfield -- (904) 302-SEAN
An Architect's View -- http://corfield.org/
World Singles, LLC. -- http://worldsingles.com/

"Perfection is the enemy of the good."
-- Gustave Flaubert, French realist novelist (1821-1880)

Marcus Blankenship

unread,
Nov 12, 2013, 8:03:58 PM11/12/13
to clo...@googlegroups.com
Very nice, Ryan! Is there a company that’s shepherding the product?

Best,
Marcus
marcus blankenship
\\\ Partner, Problem Solver, Linear Thinker
\\\ 541.805.2736 \ @justzeros \ skype:marcuscreo

Sean Corfield

unread,
Nov 12, 2013, 8:21:15 PM11/12/13
to clo...@googlegroups.com
"Funded and supported by Instrument in Portland, OR:
http://weareinstrument.com/ "

Marcus Blankenship

unread,
Nov 12, 2013, 8:22:44 PM11/12/13
to clo...@googlegroups.com
Oh, sweet! We’re down here in Klamath Falls, and have a total ManCrush on Instrument. :-) I had no idea you are a clojure shop, but am thrilled to see you on the bandwagon.

Thanks again for releasing this, it looks amazing!

Best,
Marcus

Ryan Spangler

unread,
Nov 12, 2013, 10:21:02 PM11/12/13
to clo...@googlegroups.com
Marcus,

Great to hear!  You never know when building something like this.

Let me know if you have any trouble getting things up and running with the docs.

Prasanna Gautam

unread,
Nov 13, 2013, 12:19:27 AM11/13/13
to clo...@googlegroups.com
This is really cool. Very easy to get up and running for first try. I have a few questions on the architecture.

Why Immutant instead of plain ring as the default? I think the number of dependencies could be much lower with it. 

I know it's only alpha.. but I'm asking this on behalf of others who might be thinking the same.
And, are there plans for NoSQL database support, like MongoDB, MapDB (http://www.mapdb.org/ - I just found out about it myself but this is the only decent in-memory NoSQL solution other than Berkeley DB)?

Justin Smith

unread,
Nov 13, 2013, 1:13:17 AM11/13/13
to clo...@googlegroups.com
Typically my first step making a caribou app is to remove the immutant dependency. It's pretty straightforward to take it out.

Ryan Spangler

unread,
Nov 13, 2013, 1:20:32 AM11/13/13
to clo...@googlegroups.com
Prasanna,

It supports Ring as well.  You should be able to just 

    lein ring server

in the root of your new project and it will boot up.  The ring options are in the project.clj so you can change the port etc.  

It also supports Immutant, Tomcat, HTTPKit, Heroku and Beanstalk.  If you know of another good target let me know and we'll support that too!

As for NoSQL, a lot of the Model and Association stuff in Caribou is naturally relational, but all of the db interactions are abstracted by a DbAdapter protocol, so we (or someone) would just have to write an adapter for it.  Maybe some of the Association stuff would be trickier, but there's no reason it couldn't be done.  

We are planning to support many more backends in the future, but for now it just supports Postgres, Mysql and H2.  There has been talk of supporting Datomic as well, we will see what the future holds.  

All that said, there is no reason why you couldn't put a NoSQL db in front of the various model queries right now as a kind of caching layer.  As a primary data store, that would take some work.  I will see how much interest there is!



On Tuesday, November 12, 2013 9:19:27 PM UTC-8, Prasanna Gautam wrote:
Message has been deleted

Leonardo Borges

unread,
Nov 13, 2013, 4:20:18 AM11/13/13
to clojure
Hi Ryan,

Love the website and the idea. Gave it a try but it gives me this when
trying to browse to the app:

java.security.InvalidKeyException: Illegal key size

It's coming from ring's cookie store. It seems the generated key isn't valid.

I had a similar problem recently where I had to base64 decode the
string before passing it to the cookie-store. Not sure this is the
case here.

FWIW, I'm running Java 1.7 and Lein 2.3.3

Cheers,
Leonardo Borges
www.leonardoborges.com


On Wed, Nov 13, 2013 at 5:25 PM, Ryan Spangler <ryan.s...@gmail.com> wrote:
> Justin,
>
> As far as I know, Immutant is not a dependency, but an option. Let me know
> if that is not true however.

Ryan Spangler

unread,
Nov 13, 2013, 4:46:49 AM11/13/13
to clo...@googlegroups.com
Hi Leonardo,

It seems that on certain default java installs keys are restricted to 16 bytes: http://stackoverflow.com/questions/6900542/java-security-invalidkeyexception-illegal-key-size

I just released a version that creates 16 byte keys for the cookie store.  Try that!  (or edit the key in your src/{project-name}/core.clj and drop half the chars).

Leonardo Borges

unread,
Nov 13, 2013, 5:01:52 AM11/13/13
to clojure
Thanks for that reference.

I'll give it a try.

Cheers,
Leonardo Borges
www.leonardoborges.com

François De Serres

unread,
Nov 13, 2013, 6:42:55 AM11/13/13
to clo...@googlegroups.com
Beautiful.

Joe Smith

unread,
Nov 13, 2013, 7:49:56 AM11/13/13
to clo...@googlegroups.com
Very cool, good luck to you!

---
Joseph Smith
@solussd






Baishampayan Ghose

unread,
Nov 13, 2013, 10:51:56 AM11/13/13
to Clojure Group
This is brilliant! Many thanks Ryan. Looking forward to trying these
out and contributing back. ~BG
> --
> --
> You received this message because you are subscribed to the Google
> Groups "Clojure" group.
> To post to this group, send email to clo...@googlegroups.com
> Note that posts from new members are moderated - please be patient with your
> first post.
> To unsubscribe from this group, send email to
> clojure+u...@googlegroups.com
> For more options, visit this group at
> http://groups.google.com/group/clojure?hl=en
> ---
> You received this message because you are subscribed to the Google Groups
> "Clojure" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to clojure+u...@googlegroups.com.
> For more options, visit https://groups.google.com/groups/opt_out.



--
Baishampayan Ghose
b.ghose at gmail.com

Brian Craft

unread,
Nov 13, 2013, 11:07:52 AM11/13/13
to clo...@googlegroups.com
Looks very cool. I'm happy to see that data modeling is taken seriously, which in my experience is the biggest piece lacking in other clojure web tools.

The docs have a lot of layout problems with words running together, like so: "data from oneenvironment". Looks like a string joining operation that's not quite right.

Ryan Spangler

unread,
Nov 13, 2013, 2:09:10 PM11/13/13
to clo...@googlegroups.com
Brian,

Thanks for the heads up!  I fixed some of the formatting issues I found, I'll keep a lookout for this issue (using a md->html converter which apparently requires spaces at the end of lines in lists?)

And yes, data modeling is one of our main concerns.  All models are also data, which means they can be manipulated like any other data structure.  This is what enables us to generate the admin and api automatically!  (as well as a host of other benefits)

Dmitri

unread,
Nov 13, 2013, 3:24:37 PM11/13/13
to clo...@googlegroups.com
I notice you're using a fairly old version of markdown-clj [markdown-clj "0.9.19"]

The current version is [markdown-clj "0.9.35"] so that should address a lot of formatting issues. :)

Eric Turner

unread,
Nov 14, 2013, 1:08:37 AM11/14/13
to clo...@googlegroups.com
You typically need two spaces at the end of a line of markdown to force a line break. If your converter supports Github-flavored markdown then I think that will respect newlines. I've used marked.js on my personal note-taking web app, and it lets you configure it to use Github-flavored markdown.

On a different note, thank you for creating and releasing Caribou! The instructions for creating and running an app worked flawlessly. I'm looking forward to building something with it.



On Wednesday, November 13, 2013 2:09:10 PM UTC-5, Ryan Spangler wrote:

Yuan

unread,
Nov 14, 2013, 4:38:42 AM11/14/13
to clo...@googlegroups.com
This is really cool, very happy to see things like this

>_>
Best regards
-------------------------
Yuan blog github





--

Ronen Cohen

unread,
Nov 16, 2013, 9:36:50 AM11/16/13
to clo...@googlegroups.com
This look great! Is there a sample app anywhere?

Ryan Spangler

unread,
Nov 17, 2013, 2:49:50 PM11/17/13
to clo...@googlegroups.com
Ronen,

No sample app yet!  The screencast goes through building an app from scratch, but a larger example is a great idea.  We'll get something together here in the coming weeks (we have many projects using Caribou, just means pulling something abstract out of one of them).  

Justin Smith

unread,
Nov 17, 2013, 3:36:39 PM11/17/13
to clo...@googlegroups.com
I don't know if this is what Ronen is asking for, but I have had requests that we serve an instance with the admin open somewhere, so people can try out the whole app without installing it and getting it running locally.

David Simmons

unread,
Nov 17, 2013, 4:03:43 PM11/17/13
to clo...@googlegroups.com
Hi Ryan

Congratulations on the release of Caribou. I've got a couple of questions.

1. If I create a model via the Admin UI, am I right in thinking that this does not actually create a clj file containing the details of the model which I could edit later via a text editor? 
2. Do you the concept of model validations so that a field must be numeric and between 10 and 50?

many thanks for you help.

Dave

Mark Engelberg

unread,
Nov 17, 2013, 4:09:02 PM11/17/13
to clojure
I'm reading through the documentation right now.  Looks interesting -- reminds me a lot of Django.

Could someone give a brief compare/contrast with Luminous?

Ryan Spangler

unread,
Nov 17, 2013, 4:58:29 PM11/17/13
to clo...@googlegroups.com
Justin:  I believe he is asking for a repo of an example Caribou site that does something useful (like a blog that posts comments or something).  

David:  That is right, you don't have model files which describe your model.  Instead, there is a Model model (with a collection of instances of a Field model) which is just data in the db like any other model.  Manipulating Model data, either through the admin or programmatically, modifies the schema in the background, meaning basically that there is a table for each Model and (roughly) a column for each Field (though there are more complex fields, like assets or collections, that have multiple fields or refer to other tables behind the scenes).  

There are many advantages to this, including being able to generate the admin and api automatically, (as well as letting our frontend guys add properties they need in a model without pestering the backend guys to make schema updates!).  If manipulating schemas through the admin makes you nervous, you can always write migrations for your model changes: http://caribou.github.io/caribou/docs/migrations.html

Also you can export your Models (or any data for that matter) using the content export/import API.  This means you can build your models using the admin and h2, export the schema as edn, and import it into a Postgres db.  Then you have a file which represents your Models that you can check into version control or modify directly etc.  I realize now I haven't written docs for this process (I'll fix that shortly), but it is in the caribou-core repo under src/caribou/io.clj

Part of why Caribou is alpha is that we want to make sure the automatic schema modification process is bulletproof, as well as solve the various issues that arise in migrating schemas between environments and dbs in the cleanest and most seamless way possible.  We have a lot of ideas and already things are working pretty well, but are also open to all suggestions on that.

The automatic schema migrations are one of the most powerful parts of Caribou, but also take some careful thought to ensure they are not also getting in the way or potentially messing things up.  In practice, we don't have any issues and the ability to modify the schema transparently has been a huge boon to the development process on teams with multiple people.  

As for field validation, that is a great idea.  Currently nothing is in place for ranges of numbers, but I am once again open to any suggestions.  I will add it to the list!

Ryan Spangler

unread,
Nov 17, 2013, 5:02:21 PM11/17/13
to clo...@googlegroups.com
Mark, 

Luminus is great, it is at its heart a lein template that gathers together a number of useful Clojure web libraries and stitches them into a whole.  It provides a good starting point with many options without preventing you from adapting it in any way you see fit.  Caribou is more of an integrated framework that is built in layers from the data model up to routing/controllers, template rendering, image resizing, to the automatic Admin and HTTP API generation.  It is like Django in that it comes with an Admin out of the box that can be customized as necessary.  

That said, we worked hard to ensure that it does not trap you into any workflow.  You can use any library you want, and in the end it is just Clojure so you really have as much flexibility as you need.  We even know someone who has a project that doesn't use a db!  So in this way it is like Luminus:  a good starting point that you can adapt as you see fit.  

Mark Engelberg

unread,
Nov 17, 2013, 5:02:07 PM11/17/13
to clojure
On Sun, Nov 17, 2013 at 1:58 PM, Ryan Spangler <ryan.s...@gmail.com> wrote:
There are many advantages to this, including being able to generate the admin and api automatically, (as well as letting our frontend guys add properties they need in a model without pestering the backend guys to make schema updates!).  If manipulating schemas through the admin makes you nervous, you can always write migrations for your model changes: http://caribou.github.io/caribou/docs/migrations.html

I'm a little confused about this.  If you write some code to set up models, and then you make changes to the admin interface, isn't your code out-of-sync with the underlying reality?

Ryan Spangler

unread,
Nov 17, 2013, 5:13:31 PM11/17/13
to clo...@googlegroups.com
The migrations are run one time to set up the models (or anything else), they don't represent the current state of the models.  In general, we use either the Admin to edit models, in which case we export the schema as edn to migrate between different environments, or we use the built in migrations and leave the admin models alone.  But there is no reason you couldn't use both.  

If you are looking for something to represent the current state of the model schema, you want the export API, which renders your current schema as an edn file which can be applied to any database universally.  

In general, there is always a potential disconnect between the schema and the code in any system.  If you have model descriptors, nothing guarantees your schema conforms to that.  You have to run migrations that line up with your model descriptions.  In Caribou, the database contains the model descriptions, and the system just reads those descriptions from the db to construct the models that the rest of the code is using.  So in a way, the Caribou models always reflect the state of the db, and don't depend on code to describe something that may not be in sync with what is in the db in the first place.  

It is different from any system I have seen though, so I understand your confusion!  Part of our challenge is providing a way to explain this clearly and to mitigate any issues that could arise from this approach.  

David Simmons

unread,
Nov 18, 2013, 2:05:23 AM11/18/13
to clo...@googlegroups.com
Ryan

thanks for the great reply. I'll have to play a bit more to really get my head around this. I'd too would love to see a simple blog example not using the Admin interface to try and show how and where you'd define your models.

many thanks.

Dave

Joel Holdbrooks

unread,
Nov 18, 2013, 2:42:09 AM11/18/13
to clo...@googlegroups.com
This exactly the sort of project I've been hoping for to get others to take a serious look at using Clojure. While its unfortunate some developers will not look at a language until it has a comfortable entry point, it's a real barrier for adoption. Caribou looks like it has the potential to speak to these developers with familiar workflow tools. I look forward to sharing this with others whom I've tried to convince in the past.

By the way the documentation is great. You guys nailed it! Bonus points for having a philosophy! :-)

Mark Engelberg

unread,
Nov 18, 2013, 2:47:12 AM11/18/13
to clojure
The template example shows a notation for doing something special on the last iteration of a loop, but it doesn't look like this syntax can handle nested loops.  Is there any mechanism for nested loops?

David Simmons

unread,
Nov 18, 2013, 3:04:32 AM11/18/13
to clo...@googlegroups.com
Hi Ryan

If I create a model "Customer" - will Caribou create a specific table Customer. I ask because using H2 Console I can't find any of the tables I'd have expected to find having created my model. (This may be user error as I'm not used to using H2). 

cheers

Dave

Ryan Spangler

unread,
Nov 18, 2013, 3:14:13 AM11/18/13
to clo...@googlegroups.com
Mark,

Yes, you can do nested loops.  Say you have a structure like this:

    {:title "Hello" 
     :slides 
     [{:caption "World"
       :images 
       [{:path "/img/world.png"}
        {:path "/img/space.png"}]}
      {:caption "Jupiter"
       :images
       [{:path "/img/callisto.png"}
        {:path "/img/ganymede.png"}]}]}

You can render this using the following template:

    {{title}}
    {{#slides}}
      {{caption}}
      {{#images}}
        <img src="{{path}}" />
      {{/images}}
    {{/slides}}

to produce this output:

    Hello
      World
        <img src="/img/world.png" />
        <img src="/img/space.png" />
      Jupiter
        <img src="/img/callisto.png" />
        <img src="/img/ganymede.png" />
    
There are even loop vars to reference the item and outer items from inside the loop:

    {{loop.item}}
    {{loop.outer.item}}
    {{loop.outer.outer.item}}

You can also bind each item in the loop if you don't like the implicit context:

    {{title}}
    {{#slides:slide}}
      {{slide.caption}}
      {{#slide.images:image}}
        <img src="{{image.path}}" />
      {{/images}}
    {{/slides}}

For the full list of loop variables available from inside a loop check out the template docs:  http://caribou.github.io/caribou/docs/templates.html

Ryan Spangler

unread,
Nov 18, 2013, 3:16:27 AM11/18/13
to clo...@googlegroups.com
David,

Yes, if you created a Customer model there will be a "customer" table inside the h2 db (lowercase).  Can you create customer instances?  If so it is all working as it should, and you might just be missing the tables somewhere.


--
--
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clo...@googlegroups.com
Note that posts from new members are moderated - please be patient with your first post.
To unsubscribe from this group, send email to
clojure+u...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
---
You received this message because you are subscribed to a topic in the Google Groups "Clojure" group.
To unsubscribe from this topic, visit https://groups.google.com/d/topic/clojure/KeyaMJERW0o/unsubscribe.
To unsubscribe from this group and all its topics, send an email to clojure+u...@googlegroups.com.

Mark Engelberg

unread,
Nov 18, 2013, 3:29:44 AM11/18/13
to clojure
The docs say something about being ready by default to deploy to Heroku.  But the default H2 database won't work on Heroku, will it?  I was under the impression that on Heroku, you can't use a database that just saves to the local filesystem, but need to "provision" a postgresql database.  Is that correct?


David Simmons

unread,
Nov 18, 2013, 3:50:53 AM11/18/13
to clo...@googlegroups.com
Hi Ryan

I'm probably doing something daft but I'm using H2 Console and connecting to taiga_development.h2.db (user: sa). running select * from wibble (the name of my model) returns "table wibble not found". I can create instances of wibble via the Admin UI.

Like I've said I'm pretty sure this is user error but any pointers as to what I'm doing wrong would be really helpful.

cheers

Dave

Justin Smith

unread,
Nov 18, 2013, 8:23:16 AM11/18/13
to clo...@googlegroups.com
Check out resources/config/*.clj. production.clj includes a postgres config that you can customize (I notice now that we should include an example mysql config in there too actually). Once you have a config set up and pointing to an empty db in the appropriate environment, you can use the "lein caribou migrate <config>" step to prepare it for caribou usage.

Justin Smith

unread,
Nov 18, 2013, 8:24:22 AM11/18/13
to clo...@googlegroups.com
We only include the h2 db to lower friction for creating a project and trying it out - I have never used h2 in an actual production app.

David Simmons

unread,
Nov 18, 2013, 9:03:59 AM11/18/13
to clo...@googlegroups.com
Hi Ryan

please ignore my previous email - it was definitely a user error - looking at the wrong database (doh!).

Look forward to getting to grips with the framework over the next few days.

cheers

Dave

Oskar Boethius Lissheim

unread,
Nov 18, 2013, 9:47:00 AM11/18/13
to clo...@googlegroups.com
Seriously impressive stuff. Great to have two super interesting takes on clojure web frameworks (pedestal and now caribou).

David Simmons

unread,
Nov 19, 2013, 5:27:14 AM11/19/13
to clo...@googlegroups.com
Hi Ryan

I'm really impressed with Caribou but would make one request that will make my life easier. I'm a big fan of Angular JS and the template tags for Angular and Caribou clash. Is there any chance these could be changed from {{ to {% (or something similar)? 

The best result for me would be the standard template tags get changed in Caribou but a compromise would be the ability to change the tags on a per page basis.

cheers

Dave

Khalid Jebbari

unread,
Nov 19, 2013, 5:43:39 AM11/19/13
to clo...@googlegroups.com
At least you can change Angular.js template tags. See http://stackoverflow.com/questions/8302928/angularjs-with-django-conflicting-template-tags for a how-to and potential problems with this approach.

David Simmons

unread,
Nov 19, 2013, 6:39:16 AM11/19/13
to clo...@googlegroups.com
Hi Khalid 

yes I'm aware you can change the template tags (and the pitfalls :-)). I thought it would be easier to see if we could avoid this problem all together by using a different set of tags (especially as Caribou is Alpha release and hopefully open to change). BTW I don't intend to miss Angular and Caribou templates tags in the same page, I just want to be able to use the Caribous admin etc AND have my own pages use Angular.

cheers

Dave

Ryan Spangler

unread,
Nov 19, 2013, 12:57:32 PM11/19/13
to clo...@googlegroups.com
David,

Certainly.  There is already a facility to change them, I just haven't exposed that to the user yet!  This will come out in the next release.


--

David Simmons

unread,
Nov 19, 2013, 1:57:37 PM11/19/13
to clo...@googlegroups.com
Ryan - that is great news. Are we allowed to know what else will be release :-).

cheers

Dave 

Murtaza Husain

unread,
Nov 20, 2013, 6:12:35 AM11/20/13
to clo...@googlegroups.com
Ryan - I read somewhere that Datomic support is also being talked about. 

I think that would be great, as the type of time variant queries that are possible with datomic are not easily replicable in a RDBMS. So will really appreciate that support. 

Roman Yakovlev

unread,
Nov 23, 2013, 4:08:28 AM11/23/13
to clo...@googlegroups.com
Great stuff

Some suggestions and questions
- forum is needed to disquss features and bugs. Something like http://www.discourse.org/ would be super awesome ( no google groups plz ! ) 
- documentation with user comments, Disquss would be enough for now but it would be great if it can be users driven ( if i want to add some examples or some additional stuff for example) at gihub for example with users pull requests.

There is a problem running Caribou at windows 

-> Running migrations on resources/config/development.clj
Error occurred during initialization of VM
Could not reserve enough space for object heap
Error: Could not create the Java Virtual Machine.
Error: A fatal exception has occurred. Program will exit.
Subprocess failed

I have enough memory and space here something else ....
On linux box(ubuntu) it runs ok..

среда, 13 ноября 2013 г., 3:52:10 UTC+4 пользователь Ryan Spangler написал:

Roman Yakovlev

unread,
Nov 23, 2013, 4:09:22 AM11/23/13
to clo...@googlegroups.com

Justin Smith

unread,
Nov 23, 2013, 9:31:06 AM11/23/13
to clo...@googlegroups.com
I have successfully run a fresh caribou site on Windows 8, with the latest default 64 bit jdk from sun. You may need to explicitly supply a -Xmx argument to your jvm (I don't know how predictable the default maximums are).

You are welcome to post issues on our github pages.

If we made a forum site, we would likely prefer eating our own dog food, I've got a commenting plugin for caribou on my TODO list.

Jim Crossley

unread,
Nov 24, 2013, 7:05:35 PM11/24/13
to clo...@googlegroups.com
Prasanna, Ryan and Justin,

Hi. I just got around to playing with Caribou today. Very nice!

I was happy to see you including Immutant config in the application template, but you don't need it. Immutant will happily bootstrap a deployed app using the :ring options map in project.clj. As long as you're including that, the immutant.clj file in the application template is redundant. Here's more info: http://immutant.org/builds/LATEST/html-docs/initialization.html#initialization-porting

And I agree removing the immutant dependency in project.clj will greatly reduce the number of downloaded jars. Technically, you only need that dependency in project.clj when running *outside* of the Immutant container, e.g. when your tests refer to the immutant namespaces.

The only other Immutant-related feedback I might offer is wrt the assets dir, "app/". Relative paths like that are only gonna work if you start up Immutant in your project's directory, so in production you'll likely want that to be an absolute path.

I especially like the project's name. It reminds me of the Pixies song: https://www.youtube.com/watch?v=x6m-pwWCDKU

Thanks!
Jim


On Wed, Nov 13, 2013 at 1:25 AM, Ryan Spangler <ryan.s...@gmail.com> wrote:
Justin,

As far as I know, Immutant is not a dependency, but an option.  Let me know if that is not true however.


On Tuesday, November 12, 2013 10:13:17 PM UTC-8, Justin Smith wrote:
Typically my first step making a caribou app is to remove the immutant dependency. It's pretty straightforward to take it out.

On Tuesday, November 12, 2013 9:19:27 PM UTC-8, Prasanna Gautam wrote:
This is really cool. Very easy to get up and running for first try. I have a few questions on the architecture.

Why Immutant instead of plain ring as the default? I think the number of dependencies could be much lower with it. 

I know it's only alpha.. but I'm asking this on behalf of others who might be thinking the same.
And, are there plans for NoSQL database support, like MongoDB, MapDB (http://www.mapdb.org/ - I just found out about it myself but this is the only decent in-memory NoSQL solution other than Berkeley DB)?


On Tuesday, November 12, 2013 6:52:10 PM UTC-5, Ryan Spangler wrote:
Hello Clojure,

Excited to announce today the release of Caribou!  http://let-caribou.in/

We have been building web sites and web applications with it for over two years now and improving it every day.  Currently we have four people working on it and another ten using it to build things, so it is getting a lot of real world testing.

It has been designed as a collection of independent libraries that could each be useful on their own, but which come together as a meaningful whole.

We have been spending the last couple months getting it ready for a full open source release, and I am happy to say it is finally ready.  Funded and supported by Instrument in Portland, OR:  http://weareinstrument.com/  We have four projects using it in production, and several more about to be launched (as well as over a dozen internal things).


Source is here:  http://github.com/caribou/caribou (use this for issues, you don't actually need the source as it is installed through a lein template).

Some of the independently useful libraries Caribou is built on are:

* Polaris -- Routing with data (not macros) and reverse routing! :  https://github.com/caribou/polaris
* Lichen -- Image resizing to and from s3 or on disk: https://github.com/caribou/lichen
* Schmetterling -- Debugging Clojure processes from the browser:  https://github.com/prismofeverything/schmetterling
* Antlers -- Useful extensions to mustache templating (helpers and blocks, among other things):  https://github.com/caribou/antlers
* Groundhog -- Replay http requests: https://github.com/noisesmith/groundhog

And many others.

Basically this is an Alpha release, and I am announcing it here first in order to get as much feedback from the community as possible.  We have made it as useful as we can for our purposes and recognize that for it to improve from here, we really need as many people using it and building things with it as possible.  The documentation also needs to be put through its paces:  we need to see how well people are able to use it who know nothing about it, based only on the existing docs.

All feedback welcome!  

Thanks for reading!  I hope you find it useful.

--
--
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clo...@googlegroups.com
Note that posts from new members are moderated - please be patient with your first post.
To unsubscribe from this group, send email to
clojure+u...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
---
You received this message because you are subscribed to the Google Groups "Clojure" group.
To unsubscribe from this group and stop receiving emails from it, send an email to clojure+u...@googlegroups.com.

Ryan Spangler

unread,
Nov 25, 2013, 1:17:18 PM11/25/13
to clo...@googlegroups.com
Jim,

Thanks for the note!  Yeah we have been talking about ways to make the immutant download optional, so that solves that problem, thanks!  It will be coming out in the next release.

As for the "app/" dir, it is configurable between environments, as long as people know about it.  I can make that more clear in the docs for Immutant deployment (actually it is an issue for tomcat deployment as well).  

Great song btw.  Not direct inspiration, but maybe kicking around in the subconscious there?  

Thanks for Immutant as well, I am a big fan!  We run all of our Caribou deployments on Immutant.  Still working on integrating some of the larger features into our workflow.  


You received this message because you are subscribed to a topic in the Google Groups "Clojure" group.
To unsubscribe from this topic, visit https://groups.google.com/d/topic/clojure/KeyaMJERW0o/unsubscribe.
To unsubscribe from this group and all its topics, send an email to clojure+u...@googlegroups.com.
Reply all
Reply to author
Forward
0 new messages