zk is a free, open source documentation & knowledge base project written in Go and released under GPL-3.0. It has 2,864 GitHub stars, 199 forks and 24 open issues, and was last pushed 2 days ago. On this registry it ranks #54 of 100 tracked projects in Documentation & Knowledge Base, with 5 head-to-head comparisons available. It gained 45 stars over the last 30 tracked days.

What is zk?

zk is a GPL-3.0-licensed, Go-based command-line tool that maintains a plain text Zettelkasten or personal wiki from Markdown files on disk, and it is built for programmers, researchers and writers who want their notes stored as files they own rather than inside a proprietary note application.

What it is

zk is a command-line note-taking assistant written in Go and released under the GPL-3.0 licence. It maintains a plain text Zettelkasten or personal wiki: the notes themselves are ordinary Markdown files stored in a folder, and zk operates on that folder rather than on a private database. It supports most Markdown syntax flavours, YAML frontmatter for note metadata, both regular Markdown links and Wikilinks, and several tag syntaxes including hashtags, colon:separated:tags: and Bear-style multi-word tags. The registry lists it under Content & Publishing, in the Documentation & Knowledge Base category, with roughly 2,800 stars and 189 forks.

The concrete problem it solves is the bookkeeping that accumulates once a plain text notebook grows past a few dozen files: keeping links, backlinks, mentions, tags and index notes consistent, and finding anything again without manual searching. zk centralises that work behind commands for note creation from templates, search and filtering, and notebook housekeeping, so the folder stays a folder of Markdown while the link graph and tag structure stay queryable. It deliberately is not a note editor and is not a tool that serves notes on the web; the README points readers to static site solutions for publishing, which keeps zk in the role of maintaining the collection rather than owning the writing or presentation of it.

Key capabilities

  • Note creation from templates, so new notes start with consistent structure and frontmatter.
  • Advanced search and filtering across tags, links and mentions, rather than plain text matching alone.
  • Link support for both regular Markdown links and Wikilinks, with mentions tracked alongside them.
  • Tag support for hashtags, colon:separated:tags: and Bear-style multi-word tags.
  • Editor integration for any LSP-compatible editor, plus dedicated zk-emacs, zk-nvim for Neovim 0.8+ and zk-vscode clients.
  • An interactive browser powered by fzf for navigating the notebook from the terminal.
  • Git-style command aliases and named filters, configured for repeatable, scriptable workflows and automation.

Who uses it and how

  • Neovim 0.8+ users drive the notebook through zk-nvim, while Emacs and Visual Studio Code users use zk-emacs and zk-vscode respectively.
  • Users of any LSP-compatible editor connect through the language server integration instead of a dedicated plugin.
  • Terminal-centric users browse and navigate notes through the fzf-powered interactive browser without leaving the shell.
  • Automation-minded users define command aliases and named filters to script note creation, searching and notebook housekeeping.
  • Writers keeping a Zettelkasten or personal wiki use zk to maintain cross-references while keeping every note as a portable Markdown file.

Getting started

Install from the pre-built binaries for macOS, Linux and Windows, or through a package manager: brew install zk on Homebrew, nix run nixpkgs#zk and the Home Manager module on Nix, apk add zk from the Alpine testing repositories, or pacman -S zk from the Arch official repositories.

How it compares

The facts provided name no paid products that zk replaces, and they name no peer note-taking tools either; the editor plugins listed are companion integrations for this project, not alternatives to it. On the evidence available, zk stands alone in this registry.

When to use it — and when not to

A self-hoster must supply the editor, the backup strategy and any publishing pipeline, because zk runs as a local command-line tool over a folder of Markdown files and serves nothing on the web. The pre-built binaries are not code-signed, and Windows Defender and other security tools have flagged some Windows releases as malicious in the past, so building from scratch is the recommended workaround on Windows. Anyone wanting a graphical note editor, a hosted service or a note-publishing website should look elsewhere, since the README states plainly that zk is not an editor and not a web server for notes.

project readme (upstream, from github) — read inline

A plain text note-taking assistant

Description

zk is a command-line tool helping you to maintain a plain text Zettelkasten or personal wiki.

Looking for a quick usage example?

Or want to see it in action? Checkout Shivan's video, Note-taking System ALL Programmers Should Consider.

Join us on Matrix for general, support and development discussion: #zk-org:pub.solar.

Highlights

See the changelog for the list of upcoming features waiting to be released.

What zk is not

  • A note editor.
  • A tool to serve your notes on the web – for this, there are some static site solutions.

Install

Check out the latest release for pre-built binaries for macOS, Linux and Windows.

[!WARNING] The pre-built binaries are not code-signed. In the past Windows Defender and other security tools have flagged some versions of the Windows binary as malicious. Building zk yourself is currently the recommended workaround on Windows — see Build from scratch. See #740 for details.

Homebrew

brew install zk

Or, if you want the latest state of main:

brew install --HEAD zk

Nix

zk is available in nixpkgs and has a Home Manager module.

If you want to run zk without permanently installing it:

nix run nixpkgs#zk

Or, if you want to create an ephemeral shell with zk available:

nix shell nixpkgs#zk

To permanently install zk on NixOS at the system level, include nixpkgs.zk in environment.systemPackages in your system configuration (/etc/nixos/configuration.nix by default):

environment.systemPackages = [
  # Your other packages here
  nixpkgs.zk
];

If you are using Home Manager, instead of installing for all users on the system, you can permanently install and configure zk just for your user via the Home Manager module. Add this to your Home Manager configuration:

programs.zk.enable = true;

# Modify `${XDG_CONFIG_HOME}/zk/config.toml` through this attr
programs.zk.settings = {
  # Add your own configuration settings for zk here
};

Alpine Linux

zk is currently available in the testing repositories:

apk add zk

Arch Linux

You can install the zk package from the official repos.

sudo pacman -S zk

MacPorts

sudo port install zk

Build from scratch

Make sure you have a working Go 1.21+ installation, then clone the repository:

git clone https://github.com/zk-org/zk.git
cd zk
make build

The latest state of main can be considered the stable pre-release state. To use the absolute latest state (bugs to be expected) and to contribute:

git checkout dev
make build
On macOS / Linux
$ make
$ ./zk -h

Contributing

We warmly welcome issues, PRs and discussions.

Be sure when contributing to branch from dev, not main.

Here you can read some useful info for contributing to zk.

Related projects

Frequently asked questions

Is zk free to use?

zk is open source under the GPL-3.0 licence. There is no licence fee and no seat count — you can self-host it or, where the project offers one, pay a vendor for a managed version instead.

What does zk do?

A plain text note-taking assistant

What is zk written in?

zk is primarily written in Go. Its source is publicly available at https://github.com/zk-org/zk, and it has 2,864 GitHub stars.