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 GitHub - babashka/sci: Configurable Clojure/Script interpreter suitable for scripting and Clojure DSLs 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

This topic was automatically closed 182 days after the last reply. New replies are no longer allowed.