iki: knowledge iterated



Formerly known as dbx. The recommended introduction to IKI is a Scicloj meeting from 2022-10-23:


Idea sketch

I see lack of shared intent, lack of shared sense of quality and lack of trust as the three biggest factors holding current software and product teams back. IKI is the tool I wish I had for building shared intent, building trust, and building shared sense of quality.

I want:

  1. Something plaintext-based where I can put the corpus of content in Git
  2. An ergonomic way to link to content
  3. Good HTML export
  4. Good HTML navigation user interface
    1. We get a lot for free with the browser
    2. But we want more stuff:
      1. Tagging and metadata
      2. Quickly navigating to any page, not just direct links
      3. Navigating to a random page

IKI leans on two narrow waists: everything is a file (creating centric), and the web (consumption centric). We support extending the creation interface by progreamming with data, and the consumption interface with web technology.

Implementation sketch

Core system built with Clojure & pandoc. Can run on Babashka and JVM Clojure.

IKI is a library (first) and a CLI (second). The recommended IKI setup is to extend the library to provide a custom CLI. (is this an IKI distribution?) Code editors (Emacs, VSCode, etc) talk to the CLI through a plugin, providing things like fuzzy link target selection.

IKI providers sketch

Multiple IKI sources must be allowed. Provider capabilities:

  1. Available links
  2. Iterface through a data layer
  3. Allow for non-plaintext user interfaces.


Why am I not working on iki?

  1. Because I’m not using iki daily
  2. Because I don’t know what the correct next step is exactly
  3. Because I’m not using iki for play.teod.eu.

What are my current play.teod.eu pain points?

  1. Reindexing troubles
    1. Changing the title of a post is a hassle! The data is two places: page source and metadata file. And the index lingers - by-uuid pages linger.
    2. The reindexing logic is complex. I mix an Emacs UI, a Babashka CLI and a generated Makefile. I want less moving pieces.