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

**URL:** https://clojureverse.org/t/cardigan-bay-a-modern-wiki-engine-in-clojure-clojurescript-reagent/5632
**Category:** Your Projects and Libraries
**Created:** [March 17, 2020, 9:45pm UTC](https://clojureverse.org/t/cardigan-bay-a-modern-wiki-engine-in-clojure-clojurescript-reagent/5632 "2020-03-17T21:45:11Z")
**Posts on this page:** 9
**Page:** 1

<div class="post-metadata">

### Author: ![interstar](https://clojureverse.org/user_avatar/clojureverse.org/interstar/32/2788_2.png) [@interstar](https://clojureverse.org/u/interstar)
#### Post date: [March 17, 2020, 9:45pm UTC](https://clojureverse.org/t/cardigan-bay-a-modern-wiki-engine-in-clojure-clojurescript-reagent/5632/1 "2020-03-17T21:45:11Z")

</div>

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

> **[interstar/cardigan-bay](https://github.com/interstar/cardigan-bay/)**
>
> A new wiki engine in Clojure ... . Contribute to interstar/cardigan-bay development by creating an account on GitHub.

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.

---

<div class="post-metadata">

### Author: ![tomc](https://clojureverse.org/user_avatar/clojureverse.org/tomc/32/1990_2.png) [@tomc](https://clojureverse.org/u/tomc)
#### Post date: [March 17, 2020, 9:52pm UTC](https://clojureverse.org/t/cardigan-bay-a-modern-wiki-engine-in-clojure-clojurescript-reagent/5632/2 "2020-03-17T21:52:52Z")

</div>

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.

---

<div class="post-metadata">

### Author: ![duzunov](https://clojureverse.org/user_avatar/clojureverse.org/duzunov/32/2995_2.png) [@duzunov](https://clojureverse.org/u/duzunov)
#### Post date: [March 17, 2020, 10:14pm UTC](https://clojureverse.org/t/cardigan-bay-a-modern-wiki-engine-in-clojure-clojurescript-reagent/5632/3 "2020-03-17T22:14:30Z")

</div>

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

---

<div class="post-metadata">

### Author: ![PEZ](https://clojureverse.org/user_avatar/clojureverse.org/pez/32/1187_2.png) [@PEZ](https://clojureverse.org/u/PEZ)
#### Post date: [March 17, 2020, 10:38pm UTC](https://clojureverse.org/t/cardigan-bay-a-modern-wiki-engine-in-clojure-clojurescript-reagent/5632/4 "2020-03-17T22:38:41Z")

</div>

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

---

<div class="post-metadata">

### Author: ![interstar](https://clojureverse.org/user_avatar/clojureverse.org/interstar/32/2788_2.png) [@interstar](https://clojureverse.org/u/interstar)
#### Post date: [March 17, 2020, 10:46pm UTC](https://clojureverse.org/t/cardigan-bay-a-modern-wiki-engine-in-clojure-clojurescript-reagent/5632/5 "2020-03-17T22:46:10Z")

</div>

Thanks.

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

---

<div class="post-metadata">

### Author: ![interstar](https://clojureverse.org/user_avatar/clojureverse.org/interstar/32/2788_2.png) [@interstar](https://clojureverse.org/u/interstar)
#### Post date: [March 17, 2020, 11:06pm UTC](https://clojureverse.org/t/cardigan-bay-a-modern-wiki-engine-in-clojure-clojurescript-reagent/5632/6 "2020-03-17T23:06:04Z")

</div>

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](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

---

<div class="post-metadata">

### Author: ![didibus](https://clojureverse.org/user_avatar/clojureverse.org/didibus/32/951_2.png) [@didibus](https://clojureverse.org/u/didibus)
#### Post date: [March 18, 2020, 12:23am UTC](https://clojureverse.org/t/cardigan-bay-a-modern-wiki-engine-in-clojure-clojurescript-reagent/5632/7 "2020-03-18T00:23:55Z")

</div>

> [@interstar](#):
>
> 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.

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](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).

---

<div class="post-metadata">

### Author: ![interstar](https://clojureverse.org/user_avatar/clojureverse.org/interstar/32/2788_2.png) [@interstar](https://clojureverse.org/u/interstar)
#### Post date: [March 18, 2020, 1:44am UTC](https://clojureverse.org/t/cardigan-bay-a-modern-wiki-engine-in-clojure-clojurescript-reagent/5632/8 "2020-03-18T01:44:46Z")

</div>

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

---

<div class="post-metadata">

### Author: ![system](https://clojureverse.org/uploads/default/original/2X/5/51079bf9e4b7d9466242c06cf1e43b9f8bd6da14.png) [@system](https://clojureverse.org/u/system)
#### Post date: [September 16, 2020, 1:44pm UTC](https://clojureverse.org/t/cardigan-bay-a-modern-wiki-engine-in-clojure-clojurescript-reagent/5632/9 "2020-09-16T13:44:51Z")

</div>

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