I started journaling and note-taking with Obsidian but wanted to use only free software. I also tried Logseq and Joplin, but I preferred a terminal-based workflow.
Using my Neovim setup, I explored plugins such as neorg, orgmode, and today.nvim. While they offered useful features, none fully met my needs: some lacked external Markdown rendering, some relied on custom file formats, and others did not provide a true journal workflow.
For real-time Markdown rendering from Neovim, I found Vivify, which NoteWrapper relies on.
The goal was to create a terminal-based interface for accessing vaults and notes using standard Markdown, with minimal additional complexity. Although editor support is currently limited, NoteWrapper is designed as a standalone wrapper that can be adapted to other editors with minimal changes.
- Terminal-based note and journal system
- Vault-based organization (similar to Obsidian)
- Standard Markdown files (no custom format)
- Journal support with flexible entry formats
- Real-time Markdown rendering via Vivify
- Backup support using
rsync - Supports multiple editors (vim, neovim, nano)
Before building NoteWrapper, you must install the following dependencies:
ncursescjsonmakeVivifyrsyncpkg-configsedripgrepfzf
You must also have a supported editor installed:
vimneovimnano
- Install all required dependencies listed above.
- Ensure you have a supported editor installed.
- Clone the repository:
git clone https://github.com/Totorile1/NoteWrapper.git
cd NoteWrapper- Build the project:
- On NixOS:
nix-build- On other systems:
make- Configure
./config.json(it is automatically created on first launch if it does not already exist). - Run the program:
./notewrapperThere is currently no official package available for NoteWrapper.
However, contributions are welcome for packaging on any distribution.
As a NixOS user, I will likely package it for nixpkgs in the future if the project gains traction.
Usage: notewrapper [options]
Options:
-c, --config <path/to/config> Specify the config file.
-d, --directory <path/to/directory> Specify the vaults' directory.
-h, --help Display this message.
-e, --editor Specify the editor to open.
-j, --jump Jump to the end of the file on opening.
-J, --no-jump Do not jump to the end of the file.
-n, --note <note's name> Specify the note (or journal).
-r, --render Render the note with Vivify.
-R, --no-render Do not render.
-v, --vault <vault's name> Specify the vault.
--version Display the program version and the GPL3 notice.
-V, --verbose Show debug information.
Files are organized similarly to Obsidian. You have a directory containing all your vaults, where each vault is a separate directory.
NoteWrapper distinguishes two types of files:
- Notes: act as a single continuous file for writing
- Journals: split into timed entries (daily, monthly, or custom formats — see configuration)
Journals can be of two types:
- Divided: one separate file per entry
- Unified: one file where new entries are appended
NoteWrapper relies on certain editor features, so not all functionality is supported by every editor.
- Bufferless rendering: updates the rendered view while typing (without saving)
- Cursor following: rendered view follows the cursor position
- Jump to end on open: automatically moves the cursor to the end of the file
The first two features depend on Vivify's editor integration and are mainly useful if you want external Markdown rendering in your browser.
If your editor does not support these features, you can implement a plugin using Vivify's API.
| Editor | Bufferless | Cursor | Jump to end | Plugin required |
|---|---|---|---|---|
| Neovim | ✅ | ✅ | ✅ | vivify-vim |
| Vim | ✅ | ✅ | ✅ | vivify-vim |
| Nano | ❌ | ❌ | ✅ | — |
How to add support for another editor
Edit ~/.config/notewrapper/config.json. If it does not exist, it will be created on first launch.
{
"directory": "~/Documents/Notes/",
"render": true,
"jumpToEndOfFileOnLaunch": true,
"editor": "neovim",
"journalRegex": ".*journal.*",
"dateEntry": "# %a %d %m %Y",
"newLineOnOpening": true,
"backup": {
"enable": false,
"directory": "/path/to/backup",
"interval": "weekly",
"rsyncArgs": ["-Lqah", "--update"]
}
}directory: root directory containing all vaultsrender: enable/disable Vivify renderingjumpToEndOfFileOnLaunch: move cursor to end of file on openeditor: selected editor (must be supported)journalRegex: regex used to detect journal filesdateEntry: format for journal entries (seestrftime)newLineOnOpening: add a newline when opening a notebackup.enable: enable automatic backups usingrsyncbackup.directory: destination directory for backupsbackup.interval: backup frequency (daily,weekly,monthly, or integer)backup.rsyncArgs: arguments passed torsync
Some settings must be configured in Vivify itself. See: https://github.com/jannis-baum/Vivify/blob/main/docs/customization.md
It is recommended to use a browser different from your main one for rendering.
- A converter between journal types
- Support multiple vault directories
- Port NoteWrapper to other editors