Skip to content


Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?

Latest commit


Git stats


Failed to load latest commit information.
Latest commit message
Commit time

Clojurians Log App CircleCI

Clojure web app that serves up Slack chat history. This app code is live and avialable for preview at

Besides serving its utilitarian function of serving logs, this also serves as an example open-source Clojure web app. It's small enough to easily understand and contribute to, while at the same time having a real-world use. This makes it a perfect match for people who want to get started with Clojure open source development. Together we can learn from each other, and make this an example of good Clojure practices.


All kinds of contributions are welcome, code, documentation, tests, bug reports, ... We especially welcome first time contributors!

There are still many small things that need doing, have a look at the issues if you're curious to get started.

This project mostly follows the Clojure Community Style Guide, but also has some guidelines of its own.

Running the app

To run the app on your own laptop, you should first grab the clojurians-log-app in a directory.

git clone
cd clojurians-log-app

And for the ease of trying out locally, let's also grab some demo data, so you have some Slack history to look at.

P.S.: This is very old data and few new code related changes will not be rendered with this (like emoji reaction etc)`

git clone

Now you can start a REPL, import the data, and start the app:

clj -A:dev:datomic-free
user=> (go)
Started clojurians-log on http://localhost:4983
user=> (require '[clojurians-log.repl :as r])
user=> (r/load-demo-data! "/path/to/clojurians-log-demo-data")

Note for WSL users - please enter the below command in your terminal before running any of the above commands:


You can see it in action at http://localhost:4983, or start a browser with

user=> (browse)

Some tips on development

The code is roughly split in three parts: queries, views, and routes (you can think of it as MVC if you like). So the main namespaces to look at are

  • clojurians-log.views
  • clojurians-log.routes
  • clojurians-log.db.queries

These are all under src/clj.

In user.clj you'll find some useful helpers for use during development, so have a look at what's there!

user> (db)                               ;; Datomic db
user> (conn)                             ;; Datomic connection
user> (add-dependency [foo/bar "1.2.3"]) ;; Add a dependency without having to restart
user> (reset)                            ;; Reload modified namespaces and restart the app
user> (reset-all)                        ;; Reload all namespaces and restart the app
~~user> (last-request)                     ;; See the last ring request handled~~
~~user> (last-response)                    ;; See the last response the app generated~~


We're using Kaocha for our testing needs.

You can run the tests by running the following command from the project root directory:


You can also run tests from the repl. For example to run the tests inside test/clojurians_log/views_test.clj:

(require '[kaocha.repl :as k])
(k/run 'clojurians-log.views-test)


Copyright © 2018-2020 Brasseur and contributors.

Distributed under the Mozilla Public License version 2.0.