Skip to content

Bookmark

screenshot-2026-03-06_14-10-16

A bookmark manager for your favorite shell

  • A bookmark manager that works WITH your shell
  • Integrates with your favorite shell!
  • Integrates with TMUX and your favorite editor!
Terminal window
# With homebrew
homebrew install imdevan/bookmark/bookmark
# With AUR
yay -S bookmark-plus
# Manual
git clone https://github.com/imdevan/bookmark.git
cd bookmark
just build && sudo just install

See install docs for more information.

Terminal window
~/Projects/favorite-project
bookmark
"bookmark fp created!"
# Pass a name
bookmark foo
"bookmark foo created!"
# Rename tmux window on navigation
bookmark -t
# Rename tmux custom window
bookmark -T foo

A bookmark in this case is an alias that is sourced into the shell on load time.

Aliases live in ~/.bookmarks/bookmarks.sh by default. The location can be changed via config options.

Bookmark is essentially a light weight wrapper around that file.

When bookmarks are saved, the tool automatically escapes and quotes all fields (such as directory paths, descriptions, tmux window names, and associated files or scripts) to ensure they are written and parsed correctly regardless of special characters like single/double quotes, pipes (|), or newlines. The escaping behavior is adapted automatically to your configured shell (POSIX, Fish, or Nushell).

Bookmark is set up for zsh first but works with any shell. Run bookmark config init to create a custom config file.

See configuration options for more info.

Terminal window
bookmark # Bookmark a file
bm # Interactive bookmark list
bookmark add # Interactive form to add a new bookmark
bookmark config # View or edit configuration
bookmark config init # Generate default config file
bookmark completion # Generate shell completion scripts

Bookmark is designed to be highly customizable.

Terminal window
bookmark config # open config file location

Configuration file location: ~/.config/bookmark/config.toml ($XDG_CONFIG_HOME/bookmark/config.toml)

See configuration for installation options.

See install for installation options.

This template is designed to be customized for your specific CLI tool needs:

  1. Edit package.toml with your project details (name, module, description, etc.)

  2. Run just sync to sync changes across all files

  3. Review changes with git diff

  4. Build and test: just build && just test

The package.toml file is the single source of truth for project metadata. The sync script will update:

  • Go module name in go.mod and all import paths
  • Binary name in justfile and build scripts
  • Config paths in internal/utils/paths.go
  • Completion examples
  • README description
  • Version in root.go
  • cmd/ - CLI entrypoint and commands
  • internal/config - Configuration management
  • internal/domain - Domain models
  • internal/ui - Bubble Tea UI components
  • internal/utils - Utility functions
  • internal/adapters - External service adapters (editor, clipboard)

This project was made by deconstructing a another cli project of mine Prompter. Check it out if you like fiddling with coding agents and want a more vim centric way of managing your prompting!