Lab #2. SRS

Oleksii Filonenko, PP-42


The purpose of this document is to present a detailed description of the open-source software zk. It will explain the purpose and features of the software, the interfaces of the software, what the software will do and the constraints under which it must operate. This document is intended for users of the software and also potential developers.

Document conventions

This Document was created based on the IEEE template for System Requirement Specification Documents.

Intended audience and reading suggestions

Audience is expected to be familiar with:

- Zettelkasten methodology (
- Rust programming language (
- Linux command-line

Project scope

zk is intended to be the layer between the Zettelkasten and the user's editor.

Thus, the following features are out of scope for this project:

- Implementing a domain-specific Markdown editor
- Implementing a domain-specific text format to replace Markdown

Product perspective

The main purpose of `zk` - command-line Zettelkasten tool - is to provide users with the ability to maintain, populate and navigate an array of interconnected notes using their preferred OS, editor and external tools, thus adhering to UNIX philosophy. It is meant to be fast, productive, having sensible defaults but still configurable, and running on major desktop platforms.

Product features

zk allows users to:

- create notes using their preferred Markdown editor
- interleave notes using special reference syntax
- build a static website hosting their notes
- visualize notes as a graph in their web browser

Product features

zk exposes the following commands:

- `zk init` - initialize a Zettelkasten
- `zk new` - create a new post
- `zk build` - build a website
- `zk stats` - print statistics about the Zettelkasten

User classes and characteristics

  1. Users new to Zettelkasten methodology, who want to use zk as a learning tool to help them flesh out their Zettelkasten structure
  2. Proficient Zettlers, who are in need of a flexible, yet simple utility to augment their workflow

Operating environment

  1. ​Windows XP+
  2. Mac OS X
  3. Linux
  4. Other targets supported by Rust (?)

Design and implementation constraints

zk is implemented exclusively in the Rust programming language. It uses Javascript libraries to allow for interactive web browser experience, but mostly interfaces with user using CLI and provided OS features. It uses a command-based modular design, making it maintainable and extensible.

User documentation

Most of zk documentation is provided next to the library's public API, which can be built using `cargo doc --open`. Guide-level introduction, including basics of the Zettelkasten methodology, is in the works.

Assumptions and dependencies

zk is a static executable, thus being able to run on any recent version of supported OS. One of the planned features is for it to be statically-linked, so it can be deployed to any system regardless of system's C library version/existence. zk doesn't require Rust or LLVM to be installed on the user's device.

User interfaces

zk initially should have a CLI with subcommands described previously.
After the MVP, web UI (as part of `zk build`) will be added.

Hardware requirements

zk runs on any machine supported by Rust/LLVM. Minimum case is not tested, but should require minimal RAM and CPU resources.

Software interfaces

zk doesn't require anything to be installed on the system, other that standard C library (for binaries not linked with musl).

Communication interfaces

zk doesn't expose any API yet, but can be extended to provide it, for example, for Javascript on pages from `zk build`.

Safety/security requirements

Nothing specific, Rust is a pretty safe language, and zk doesn't have any attack vectors.