nb: a single Bash script for plain-text notes and bookmarks that commits every change to Git
CLI and local web plain text note‑taking, bookmarking, and archiving with linking, tagging, filtering, search, Git versioning & syncing, Pandoc conversion, + more, in a single portable script.
At a glance
- What is it?
- xwmx/nb is an AGPL-3.0 command line and local web tool for notes, bookmarks and archiving. It stores plain text in Git-backed notebooks, supports Markdown, Org, LaTeX and AsciiDoc, and ships as one portable shell script.
- Who is it for?
- nb is a strong fit for someone comfortable in a terminal who wants notes and bookmarks as ordinary text files, versioned in Git, searchable locally and editable in any editor. It is a weaker fit for people who want a native mobile app, a hosted sync service, or a licence more permissive than AGPL-3.0.
- Can I use it commercially?
- Yes, with strict conditions. AGPL-3.0 is a network copyleft licence: if people use a modified version over a network, for example as a hosted service, you must offer them its source code under the same licence.
- Is it still maintained?
- Yes. The repository last received commits 3 days ago.
- What is it written in?
- Mainly Shell, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on November 14, 2026, and from our analysis. They are not legal advice.
Star history
- xwmx/nb8,474 ★ · +67
| Repository | 2026-09-22 | 2026-11-14 |
|---|---|---|
| xwmx/nb | 8.4k | 8.5k |
67 Stars in the last 53 days, measured from the daily GitHub snapshot. Compare with other projects
Editorial analysis
The whole program is one Bash script, so Bash and Git are the only hard requirements
nb is delivered as a single, well-tested shell script that can be installed, copied or fetched with curl almost anywhere and just work. The required dependencies are Bash, Git and a text editor with command line support. The README adds that nb works perfectly with Zsh, fish and any other shell as your login shell, as long as Bash exists on the system. It names Vim, Emacs, Visual Studio Code, Sublime Text, Helix, micro, nano, Atom, TextMate and MacDown as examples of editors.
The design strategy is described as progressive enhancement: the core works with standard tools, and extra features appear when optional programs are available. The consequence is a small install footprint and easy portability, and a feature set that differs between machines depending on what is installed. The same notebook can look richer on a laptop with more tools than on a minimal server.
Optional tools change what you see, and they are checked for rather than required
nb checks the environment for optional programs and uses them whenever they are present. The recommended ones are bat, ncat or socat, pandoc, rg, tig and w3m. Many more are supported for various enhancements, among them Ack, The Silver Searcher, catimg, Chafa, Chromium or Chrome, eza, ffplay, ImageMagick, glow, GnuPG, highlight, imgcat, kitty's icat, lowdown, lsd, Links and Lynx.
So missing tools degrade features without raising errors. If conversion fails, the first thing to check is whether pandoc is installed. If terminal images do not show, the image helpers are the place to look. The README says nb works great without the optional dependencies, which is true of the core note-taking path, but import and export, local web browsing helpers and syntax-highlighted output each lean on a specific program.
Git runs in the background, so every note edit becomes a commit and sync is a remote
nb uses Git in the background to automatically record changes and to sync notebooks with remote repositories. That gives revision history for every note with no extra work. The README adds that nb can also be configured to sync notebooks using a general purpose utility such as Dropbox, so that notes can be edited in other apps on any device.
The consequence is that your notebooks are Git repositories. A stray edit is recoverable, and two machines can share a notebook through a remote. It also means conflicts are Git conflicts, and a notebook shared both through Git and through a file-sync service can end up with competing writers. Choose one sync mechanism per notebook. Back up the repository like any other, because the history lives inside it.
Bookmarks are saved as cleaned Markdown pages with searchable cached content
nb is also described as a bookmarking system. Page information is downloaded, cleaned up, structured and saved as normal Markdown documents, so bookmarks can be viewed and edited like any note. Features include locally served, text-centric browsing in terminal and GUI web browsers, local full-text search of cached page content with regular expression support, filtering and listing, tagging, pinning and linking.
For broken links, nb can look up Internet Archive Wayback Machine snapshots. The practical result is that a bookmark outlives its page, because the content you cared about is cached locally. The cost is storage and the fact that pages cached at one moment can differ from the live site later. Because the cached form is cleaned Markdown, expect text rather than a pixel-perfect copy of the original page.
Plain text, many formats and password protection are separate choices
Notes can be Markdown, Org, LaTeX or AsciiDoc files, and nb can work with files in any format. It can import and export notes to many document formats through Pandoc, and it can create private, password-protected encrypted notes and bookmarks. Organisation features include folders, tagging, pinning, wiki-style linking between notes, todos with tasks, and global and local notebooks.
Encryption sits alongside plain text storage and does not replace it: encrypted items are the ones you choose to protect. Because the default is plain text, an unencrypted notebook pushed to a public remote is public. Decide per notebook which items are encrypted before you set a remote, and remember that the Git history keeps any note that was once committed in the clear.
Platforms are Linux and Unix, with macOS and Windows reached through compatibility layers
nb works in any standard Linux or Unix environment, including macOS, and on Windows via WSL, MSYS or Cygwin. There is no native Windows build. The repository contains directories named nb.go, nb.ksh and nb.zsh next to the nb script, plus bin, docs, etc, plugins and a test folder. Tests run with bats, as the package.json test script shows.
The Windows paths all rely on a Unix-like layer, so expect to install Bash and Git inside it. If you live in PowerShell without those layers, nb is not designed for that. The project does state that it supports plugins and customizable colour themes, which gives room to adapt the output to your terminal.
Installation is a Makefile, and the licence and release pace deserve a look
The Makefile installs the nb script and the bookmark helper into a prefix, which defaults to /usr/local, and then runs the nb env install command. Its uninstall target removes the files and runs env uninstall. The package.json lists the command names nb, nb.sh and bookmark and sets the version to 7.25.6.
The licence is AGPL-3.0 on the repository, and AGPL-3.0-or-later in package.json. That is a strong copyleft licence, so check it before embedding nb in a product. The recent releases are 7.25.6 on 2026-10-31, 7.25.5 on 2026-08-12 and 7.25.4 on 2026-04-28, and the last push was on 2026-11-02.
Editorial conclusion
nb is a strong fit for someone comfortable in a terminal who wants notes and bookmarks as ordinary text files, versioned in Git, searchable locally and editable in any editor. It is a weaker fit for people who want a native mobile app, a hosted sync service, or a licence more permissive than AGPL-3.0. Before depending on it, install the optional tools you actually need, such as Pandoc, check how encryption and sync behave on your platform, and keep notebooks in a repository you back up.
Frequently asked questions
What is nb?
nb is a command line and local web note-taking, bookmarking and archiving tool. It stores plain text, uses Git for versioning and syncing, and runs as a single portable shell script.
What does nb require to run?
Bash, Git and a text editor with command line support are required. Optional tools such as pandoc, bat, rg, tig and w3m enhance functionality but are not necessary.
Does nb work on Windows?
nb works on Windows via WSL, MSYS and Cygwin, and on any standard Linux or Unix environment including macOS. It does not run natively without one of those layers.
Official sources
Add this badge to your README
If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.
[](https://hysenlabs.com/projects/xwmx-nb)Star history chart for your README
[](https://hysenlabs.com/projects/xwmx-nb)Was this useful?