Cardigan Bay : A modern wiki engine in Clojure / ClojureScript / Reagent

Just to announce here, that I’m releasing the first draft of my new wiki-engine : Cardigan Bay

I’m a huge wiki fan and have been playing with wikis, wiki-engines, and wiki-like personal information managers for nearly 20 years.

This year, I finally sat down to write one in Clojure.

It’s still relatively simple, work-in-progress. But I have some fairly ambitious plans for it, and a couple of wikis that are waiting to use it.

Features :

    • it’s a single-page app, using Reagent. So we can make the UI more dynamic
    • wiki pages are fairly traditional, but broken into a sequence of “cards” of different types. The intention is that over time cards will become more dynamic containers / editors for rich data types;
    • We can embed content from elsewhere using oEmbed
    • Transclusion from one page to another (helps to eliminate redundancy in the wiki)
    • We can embed Clojure code in cards to be eval-ed on the server. Yeah, this is (currently) a security risk, but it opens a whole set of new opportunities.
    • Behind the scenes we use core.logic to build a model of the wiki, in which we can, for example, query for broken links, etc.
    • because it’s all Clojure, we can compile it into an UberJAR for convenient distribution and running on multiple platforms without the pains of, say, other languages / frameworks.
4 Likes

I’m interested to see where you go with this. I suggest you add a link to a demo from the readme so lazy people like me can play with it without any effort.

2 Likes

Hi! Nice project!

Some first impressions:

  • There is no DB, flat files on disk and git for history, which makes deployment easy
  • I like how nightlight fits really well into the whole wiki culture. One minute I’m looking at my wikipages and then at the code, while still in the browser
1 Like

Bloody awesome. Huge wiki fan here as well. I hope I will be able to contribute to this project somehow.

1 Like

Thanks.

I can’t take credit for the nighlight bit. This project was kickstarted on the very cool https://sekao.net/lightmod/ and nightlight etc. came free with that.

Hi @tomc,

thanks for the comment .

I’ll figure out a better way of doing this, but for now you can go here : https://github.com/interstar/cardigan-bay/blob/master/deploy/cardigan.zip and get that zip.

If you have Java, unzip it, go into cardigan and run go.sh … which will use java to run the jar.

Then navigate to localhost:45454/index.html

What kind of opportunities are you thinking of here? Cause you could look into using https://github.com/borkdude/sci to provide some restricted subset of Clojure which can be interpreted both on the client or server (depending what you want to allow).

1 Like

Yes, that might well be what I really want.

Initially I was thinking that the main use-case of the embed scripting within pages would be :

  • the kinds of things you might do in JuPyter … some maths / science applications and “graphing” by generating SVG output.
  • some actual scripting of the behaviour of the wiki itself
  • I have an interest in making parsers for DSLs and code-generation. At some point I’m thinking of playing with putting Instaparse in and doing something like OMeta / Harc’s Ohm within pages. This is pretty speculative at this point though.

It’s quite plausible that I’d be better off with a subset of Clojure rather than doing actual Clojure eval.

Thanks for the link. I’ll look into it