A tool for managing my collection of notes.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Jonathan Hodgson 992a47f727 Stop .git directory being copied when creating html 9 months ago
assets Adds recordings 9 months ago
inc Stop .git directory being copied when creating html 9 months ago
templates Adds the ability to convert to html 9 months ago
.gitattributes Use git lfs for tracking gif files 9 months ago
Makefile Adds the ability to convert to html 9 months ago
README.md Add to readme 9 months ago
kb 2 bug fixes - git not always working and verbose pandoc 9 months ago


Knowledge Base

This is a script that I use to manage my personal knowledge base. I have yet to find a tool that fits my requirements / desires so I decided to build one.

This is still in early stages of development so expect braking changes to come if you use it.


Mostly Plain Text

Most of my notes are currently in Markdown. This has a couple of advantages for me:

  • I can read them anywhere
  • I can version control them with Git
  • They can be grepped

There may be some exceptions. It is sometimes useful to include screenshots. These can be added and are version controlled using git lfs.


Before starting this project, my notes were organised into folders. Unfortunately, this makes storing articles or notes that apply to different areas difficult. I would prefer a tag based system. This would allow a file to have multiple tags assigned to it.


I want to be able to retrieve my notes quickly by tag or by title. To do this, this tool will index notes using an SQLite database. This will not be version controlled.

Don't re-invent the wheel

I will be building on top of already great, fast tools such as RipGrep and FZF.


I don't want to re-invent the wheel. The following tools are used within this project:



This is used for the fuzzy searching



Git is used for version controlling the knowledge base. If you don't want to use git, you can use the --nogit option



Vanilla git is not very good at version controlling binary files. Git LFS allows assets to be stored separately from the main repository but referenced.



This is used to provide syntax highlighting in previews


This is used to index the documents in the knowledge base, making it fast to search by tag etc.


After cloning the repository, you can run

sudo make install

To initialise, run

kb init

This will create the necessary folders and create an sqlite database to store the index in.


List tracked files with kb list

Listing Files

View a file with kb view. You can use the filename, the title or the id to specify the file.

View a file

Create a new file with kb new.

This will open your default editor.

New file

Delete a file with kb delete.

Delete a file

Fuzzy search for files using kb fuzzy (or just kb without augments).

From the fuzzy search, you can use ctrl-v to view, ctrl-e to edit, ctrl-d to delete or ctrl-n to create a new file with the current query as the name.

Fuzzy search

Future Functionality

In the future, I'd like to be able to use this to export my notes into other formats, such as pdf, html or maybe epub. This will almost certainly be done with Pandoc.

Issue #14