Top Related Projects
A cat(1) clone with wings.
ripgrep recursively searches directories for a regex pattern while respecting your gitignore
:cherry_blossom: A command-line fuzzy finder
📚 Collaborative cheatsheets for console commands
A Terminal Client for MySQL with AutoCompletion and Syntax Highlighting.
Magnificent app which corrects your previous console command.
Quick Overview
Buku is a powerful command-line bookmark manager that allows you to store, organize, and search your bookmarks from the terminal. It provides a simple and efficient way to manage your web browsing history and quickly access your favorite websites.
Pros
- Cross-platform Compatibility: Buku is available for Linux, macOS, and Windows, making it accessible to a wide range of users.
- Efficient Bookmark Management: The tool offers features like tagging, searching, and exporting/importing bookmarks, making it easy to organize and access your bookmarks.
- Secure Storage: Buku stores your bookmarks in an encrypted SQLite database, ensuring the privacy and security of your data.
- Customizable Workflow: The command-line interface allows for a highly customizable workflow, catering to the preferences of power users.
Cons
- Limited GUI: Buku is primarily a command-line tool, which may not be preferred by users who prefer a graphical user interface (GUI) for bookmark management.
- Learning Curve: The command-line interface and the various features of Buku may have a steeper learning curve for users who are not familiar with terminal-based applications.
- Dependency on SQLite: Buku relies on SQLite for its bookmark storage, which may not be the preferred database solution for all users.
- Lack of Synchronization: Buku does not currently offer built-in support for synchronizing bookmarks across multiple devices, which may be a limitation for some users.
Code Examples
N/A (Buku is not a code library)
Getting Started
To get started with Buku, follow these steps:
-
Install Buku on your system. You can find the installation instructions for your operating system in the Buku repository.
-
Once installed, you can start using Buku by opening a terminal and running the
buku
command. -
To add a new bookmark, use the
buku -a
command followed by the URL and a description (optional):buku -a https://www.example.com "Example Website"
-
To search for a bookmark, use the
buku
command followed by a search term:buku example
This will display a list of bookmarks matching the search term.
-
To open a bookmark, use the
buku -o
command followed by the bookmark index:buku -o 1
This will open the first bookmark in your default web browser.
-
Buku also supports various other commands, such as editing bookmarks, exporting/importing bookmarks, and managing tags. You can explore the Buku documentation to learn more about the available features and commands.
Competitor Comparisons
A cat(1) clone with wings.
Pros of bat
- Syntax highlighting for a wide range of programming languages and file formats
- Git integration for showing file modifications
- User-friendly interface with line numbers and grid view
Cons of bat
- Limited to file viewing and doesn't offer bookmark management
- Lacks cross-platform syncing capabilities
- No built-in search functionality for managing large collections of files
Code Comparison
bat:
pub fn print_file(path: &Path, config: &Config) -> Result<()> {
let mut printer = Printer::new(config);
printer.print_file(path)?;
Ok(())
}
buku:
def add_rec(self, url, title_in, tags_in, desc):
"""Add a new bookmark."""
# Implementation details...
self.cur.execute('INSERT INTO bookmarks VALUES (?, ?, ?, ?, ?, ?)',
(None, url, title, tags, desc, timestamp))
While bat focuses on file viewing with syntax highlighting, buku is designed for bookmark management. bat's code snippet shows a file printing function, whereas buku's code demonstrates adding a bookmark to a database. The projects serve different purposes, with bat enhancing terminal-based file viewing and buku providing a command-line bookmark manager.
ripgrep recursively searches directories for a regex pattern while respecting your gitignore
Pros of ripgrep
- Extremely fast text search tool, outperforming many alternatives
- Respects .gitignore rules and automatically skips hidden files/directories
- Supports searching compressed files and various text encodings
Cons of ripgrep
- Limited to text search functionality, not a full-featured bookmark manager
- Requires command-line usage, which may be less user-friendly for some
- Doesn't provide built-in tagging or organization features for search results
Code Comparison
ripgrep (searching for "example" in all .txt files):
rg "example" --type txt
buku (adding a bookmark with tags):
buku -a https://example.com "Example Site" -t tag1,tag2
Key Differences
- Purpose: ripgrep is a text search tool, while buku is a bookmark manager
- Functionality: ripgrep focuses on fast searching, buku offers bookmark organization
- User Interface: ripgrep is command-line based, buku has both CLI and browser extensions
- Data Management: ripgrep searches existing files, buku stores and manages bookmark data
Use Cases
ripgrep is ideal for developers and system administrators who need to quickly search through large codebases or log files. buku is better suited for users who want to organize and manage their web bookmarks across multiple devices and browsers.
:cherry_blossom: A command-line fuzzy finder
Pros of fzf
- More versatile, can be used for general-purpose fuzzy finding beyond bookmarks
- Faster performance for large datasets due to its efficient search algorithm
- Integrates well with command-line tools and text editors
Cons of fzf
- Not specifically designed for bookmark management like buku
- Requires more setup and configuration for bookmark-specific use cases
- Lacks built-in features for adding, editing, and organizing bookmarks
Code Comparison
fzf (command-line usage):
find * -type f | fzf > selected
buku (adding a bookmark):
buku -a https://example.com "Example Site" "tag1,tag2"
While both tools can be used for searching, their primary purposes and usage differ significantly. fzf is a general-purpose fuzzy finder, while buku is specifically designed for bookmark management. The code examples demonstrate this difference, with fzf being used for file searching and buku for adding bookmarks with tags.
📚 Collaborative cheatsheets for console commands
Pros of tldr
- Simpler and more focused on providing concise command-line examples
- Larger community and more contributors, resulting in broader coverage
- Easier to contribute to due to its straightforward markdown format
Cons of tldr
- Limited to command-line tools and doesn't cover broader topics
- Less detailed explanations compared to Buku's comprehensive bookmarking system
- No built-in search functionality or tagging system
Code Comparison
tldr (example page content):
# ls
List directory contents.
- List files one per line:
ls -1
- List all files, including hidden files:
ls -a
- List all files, with trailing / added to directory names:
ls -F
Buku (example bookmark entry):
{
'url': 'https://example.com',
'metadata': 'Example Site',
'tags': ['example', 'website'],
'desc': 'This is an example bookmark'
}
While not directly comparable, these snippets showcase the different focus of each project: tldr on command-line examples and Buku on structured bookmark data.
A Terminal Client for MySQL with AutoCompletion and Syntax Highlighting.
Pros of mycli
- Specialized for MySQL/MariaDB command-line interactions
- Offers auto-completion and syntax highlighting for SQL queries
- Provides a more user-friendly interface for database management
Cons of mycli
- Limited to MySQL/MariaDB databases only
- Lacks bookmark management functionality
- Not designed for general-purpose web browsing or link saving
Code comparison
mycli:
@special_command('\\f', '\\f [name]', 'List or execute favorite queries.')
def execute_favorite_query(self, arg):
if not arg:
for alias in sorted(self.favorites):
print(alias)
return
buku:
def add_rec(self, url, title_in='', tags_in=[], immutable=0, delay=0):
"""Add a new bookmark."""
# Normalize URL
url = parse_url(url)
if not url:
return None
While both projects are command-line tools, they serve different purposes. mycli focuses on enhancing MySQL/MariaDB interactions, while buku is a bookmark manager. The code snippets show mycli handling favorite queries and buku adding bookmarks. mycli is more specialized for database operations, whereas buku offers broader functionality for managing web bookmarks across various browsers and platforms.
Magnificent app which corrects your previous console command.
Pros of thefuck
- Automatically corrects mistyped console commands, saving time and reducing frustration
- Supports a wide range of shells and operating systems
- Has a large and active community, with frequent updates and contributions
Cons of thefuck
- May occasionally suggest incorrect corrections, requiring user verification
- Can slow down terminal startup time due to its initialization process
- Requires Python to be installed on the system
Code comparison
thefuck:
def match(command):
return ('permission denied' in command.stderr.lower()
or 'EACCES' in command.stderr)
def get_new_command(command):
return 'sudo {}'.format(command.script)
buku:
def add_rec(self, url, title_in, tags_in, desc):
"""Add a new bookmark."""
# Implementation details...
While both projects are written in Python, they serve different purposes. thefuck focuses on command-line correction, while buku is a bookmark manager. The code snippets show thefuck's pattern matching for sudo-related errors, and buku's method for adding a new bookmark record.
Convert
designs to code with AI
Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.
Try Visual CopilotREADME
buku
buku in action!
Introduction
buku
is a powerful bookmark manager and a personal textual mini-web.
For those who prefer the GUI, bukuserver
exposes a browsable front-end on a local web host server. See bukuserver page for config and screenshots.
When I started writing it, I couldn't find a flexible command-line solution with a private, portable, merge-able database along with seamless GUI integration. Hence, buku
.
buku
can import bookmarks from browser(s) or fetch the title, tags and description of a URL from the web. Use your favourite editor to add, compose and update bookmarks. Search bookmarks instantly with multiple search options, including regex and a deep scan mode (handy with URLs).
It can look up broken links on the Wayback Machine. There's an Easter Egg to revisit random bookmarks.
There's no tracking, hidden history, obsolete records, usage analytics or homing.
To get started right away, jump to the Quickstart section. buku
has one of the best documentation around. The man page comes with examples. For internal details, please refer to the operational notes.
buku
is a library too! There are several related projects, including a browser plug-in.
Table of Contents
- Features
- Installation
- Shell completion
- Usage
- Quickstart
- Examples
- Automation
- Troubleshooting
- Collaborators
- Contributions
- Related projects
- In the Press
Features
- Store bookmarks with auto-fetched title, tags and description
- Auto-import from Firefox, Google Chrome, Chromium, Vivaldi, Brave, and MS Edge
- Open bookmarks and search results in browser
- Browse cached page from the Wayback Machine
- Text editor integration
- Lightweight, clean interface, custom colors
- Powerful search options (regex, substring...)
- Continuous search with on the fly mode switch
- Portable, merge-able database to sync between systems
- Import/export bookmarks from/to HTML, XBEL, Markdown, RSS/Atom or Orgfile
- Smart tag management using redirection (>>, >, <<)
- Multi-threaded full DB refresh
- Manual encryption support
- Shell completion scripts, man page with handy examples
- Privacy-aware (no unconfirmed user data collection)
- Can be used as a Python library (API documentation)
- Has a compation Web-application (Bukuserver) with an HTTP-based API (for personal use only)
Installation
Dependencies
Feature | Dependency |
---|---|
Lang, SQLite | Python 3.9+ |
HTTPS | certifi, urllib3 |
Encryption | cryptography |
HTML | beautifulsoup4, html5lib |
To copy URL to clipboard buku
uses xsel
(or xclip
) on Linux, pbcopy
(default installed) on OS X, clip
(default installed) on Windows, termux-clipboard
on Termux (terminal emulation for Android), wl-copy
on Wayland. If X11 is missing, GNU Screen or tmux copy-paste buffers are recognized.
From a package manager
To install buku with all its dependencies from PyPI, run:
# pip3 install buku
You can also install buku
from your package manager. If the version available is dated try an alternative installation method.
Packaging status (expand)
Unlisted packagers:
â PyPI (pip3 install buku
)
â Termux (pip3 install buku
)
Release packages
Auto-generated packages (with only the cli component) for Arch Linux, CentOS, Debian, Fedora, openSUSE Leap and Ubuntu are available with the latest stable release.
NOTE: CentOS may not have the python3-beautifulsoup4 package in the repos. Install it using pip3.
From source
If you have git installed, clone this repository. Otherwise download the latest stable release or development version (risky).
Install the dependencies. For example, on Ubuntu:
$ apt-get install ca-certificates python3-urllib3 python3-cryptography python3-bs4
Install the cli component to default location (/usr/local
):
$ sudo make install
To remove, run:
$ sudo make uninstall
PREFIX
is supported, in case you want to install to a different location.
Running standalone
buku
is a standalone utility. From the containing directory, run:
$ chmod +x buku
$ ./buku
Shell completion
Shell completion scripts for Bash, Fish and Zsh can be found in respective subdirectories of auto-completion/. Please refer to your shell's manual for installation instructions.
Usage
Command-line options
usage: buku [OPTIONS] [KEYWORD [KEYWORD ...]]
Bookmark manager like a text-based mini-web.
POSITIONAL ARGUMENTS:
KEYWORD search keywords
GENERAL OPTIONS:
-a, --add URL [+|-] [tag, ...]
bookmark URL with comma-separated tags
(prepend tags with '+' or '-' to use fetched tags)
-u, --update [...] update fields of an existing bookmark
accepts indices and ranges
refresh title and desc if no edit options
if no arguments:
- update results when used with search
- otherwise refresh all titles and desc
-w, --write [editor|index]
edit and add a new bookmark in editor
else, edit bookmark at index in EDITOR
edit last bookmark, if index=-1
if no args, edit new bookmark in EDITOR
-d, --delete [...] remove bookmarks from DB
accepts indices or a single range
if no arguments:
- delete results when used with search
- otherwise delete all bookmarks
--retain-order prevents reordering after deleting a bookmark
-h, --help show this information and exit
-v, --version show the program version and exit
EDIT OPTIONS:
--url keyword bookmark link
--tag [+|-] [...] comma-separated tags
clear bookmark tagset, if no arguments
'+' appends to, '-' removes from tagset
--title [...] bookmark title; if no arguments:
-a: do not set title, -u: clear title
-c, --comment [...] notes or description of the bookmark
clears description, if no arguments
--immutable N disable web-fetch during auto-refresh
N=0: mutable (default), N=1: immutable
--swap N M swap two records at specified indices
SEARCH OPTIONS:
-s, --sany [...] find records with ANY matching keyword
this is the default search option
-S, --sall [...] find records matching ALL the keywords
special keywords -
"blank": entries with empty title/tag
"immutable": entries with locked title
--deep match substrings ('pen' matches 'opens')
--markers search for keywords in specific fields
based on (optional) prefix markers:
'.' - title, '>' - description, ':' - URL,
'#' - tags (comma-separated, PARTIAL matches)
'#,' - tags (comma-separated, EXACT matches)
'*' - any field (same as no prefix)
-r, --sreg expr run a regex search
-t, --stag [tag [,|+] ...] [- tag, ...]
search bookmarks by tags
use ',' to find entries matching ANY tag
use '+' to find entries matching ALL tags
excludes entries with tags after ' - '
list all tags, if no search keywords
-x, --exclude [...] omit records matching specified keywords
--random [N] output random bookmarks out of the selection (default 1)
--order fields [...] comma-separated list of fields to order the output by
(prepend with '+'/'-' to choose sort direction)
ENCRYPTION OPTIONS:
-l, --lock [N] encrypt DB in N (default 8) # iterations
-k, --unlock [N] decrypt DB in N (default 8) # iterations
POWER TOYS:
--ai auto-import bookmarks from web browsers
Firefox, Chrome, Chromium, Vivaldi, Brave, Edge
(Firefox profile can be specified using
environment variable FIREFOX_PROFILE)
-e, --export file export bookmarks to Firefox format HTML
export XBEL, if file ends with '.xbel'
export Markdown, if file ends with '.md'
format: [title](url) <!-- TAGS -->
export Orgfile, if file ends with '.org'
format: *[[url][title]] :tags:
export rss feed if file ends with '.rss'/'.atom'
export buku DB, if file ends with '.db'
combines with search results, if opted
-i, --import file import bookmarks from file
supports .html .xbel .json .md .org .rss .atom .db
(.json = Firefox backup; .db = another Buku DB)
-p, --print [...] show record details by indices, ranges
print all bookmarks, if no arguments
-n shows the last n results (like tail)
-f, --format N limit fields in -p or JSON search output
N=1: URL; N=2: URL, tag; N=3: title;
N=4: URL, title, tag; N=5: title, tag;
N0 (10, 20, 30, 40, 50) omits DB index
-j, --json [file] JSON formatted output for -p and search.
prints to stdout if argument missing.
otherwise writes to given file
--colors COLORS set output colors in five-letter string
--nc disable color output
-n, --count N show N results per page (default 10)
--np do not show the subprompt, run and exit
-o, --open [...] browse bookmarks by indices and ranges
open a random bookmark, if no arguments
--oa browse all search results immediately
--replace old new replace old tag with new tag everywhere
delete old tag, if new tag not specified
--url-redirect when fetching an URL, use the resulting
URL from following *permanent* redirects
(when combined with --export, the old URL
is included as additional metadata)
--tag-redirect [tag] when fetching an URL that causes permanent
redirect, add a tag in specified pattern
(using 'http:{}' if not specified)
--tag-error [tag] when fetching an URL that causes an HTTP
error, add a tag in specified pattern
(using 'http:{}' if not specified)
--del-error [...] when fetching an URL causes any (given)
HTTP error, delete/do not add it
--export-on [...] export records affected by the above
options, including removed info
(requires --update and --export; specific
HTTP response filter can be provided)
--reorder order... update DB indices to match specified order
--cached index|URL browse a cached page from Wayback Machine
--offline add a bookmark without connecting to web
--suggest show similar tags when adding bookmarks
--tacit reduce verbosity, skip some confirmations
--nostdin do not wait for input (must be first arg)
--threads N max network connections in full refresh
default N=4, min N=1, max N=10
-V check latest upstream version available
-g, --debug show debug information and verbose logs
SYMBOLS:
> url
+ comment
# tags
PROMPT KEYS:
1-N browse search result indices and/or ranges
R [N] print out N random search results
(or random bookmarks if negative or N/A)
^ id1 id2 swap two records at specified indices
O [id|range [...]] open search results/indices in GUI browser
toggle try GUI browser if no arguments
a open all results in browser
s keyword [...] search for records with ANY keyword
S keyword [...] search for records with ALL keywords
d match substrings ('pen' matches 'opened')
m search with markers - search string is split
into keywords by prefix markers, which determine
what field the keywords is searched in:
'.', '>' or ':' - title, description or URL
'#'/'#,' - tags (comma-separated, partial/full match)
'*' - all fields (can be omitted in the 1st keyword)
note: tag marker is not affected by 'd' (deep search)
v fields change sorting order (default is '+index')
multiple comma/space separated fields can be specified
v! fields update indices in DB to match specified order
r expression run a regex search
t [tag, ...] search by tags; show taglist, if no args
g taglist id|range [...] [>>|>|<<] [record id|range ...]
append, set, remove (all or specific) tags
search by taglist id(s) if records are omitted
n show next page of search results
N show previous page of search results
o id|range [...] browse bookmarks by indices and/or ranges
p id|range [...] print bookmarks by indices and/or ranges
w [editor|id] edit and add or update a bookmark
c id copy URL at search result index to clipboard
DB [name] check existing DB list or switch to another DB
(use full/dir path to switch folders)
'~.' can be used as shortcut for default DB
? show this help
q, ^D, double Enter exit buku
Colors
buku
supports custom colors. Visit the wiki page on how to customize colors for more details.
Quickstart
-
Export
VISUAL
orEDITOR
to point to your favourite editor. Note thatVISUAL
takes precedence overEDITOR
. -
Create a sweeter shortcut with some convenience.
alias b='buku --suggest'
-
Auto-import bookmarks from your browser(s). Please quit the relevant browsers beforehand to ensure the databases are not locked.
b --ai
-
Manually add a bookmark (for hands-on).
b -w
-
List your bookmarks with DB index.
b -p
-
For GUI and browser integration (or to sync bookmarks with your favourite bookmark management service) refer to the wiki page on System integration.
-
Quick (bash/zsh) commands to fuzzy search with fzf and open the selection in Firefox:
firefox $(buku -p -f 10 | fzf) firefox $(buku -p -f 40 | fzf | cut -f1)
POSIX script to show a preview of the bookmark as well:
#!/usr/bin/env sh url=$(buku -p -f4 | fzf -m --reverse --preview "buku -p {1}" --preview-window=wrap | cut -f2) if [ -n "$url" ]; then echo "$url" | xargs firefox fi
Examples
-
Edit and add a bookmark from editor:
$ buku -w $ buku -w 'gedit -w' $ buku -w 'macvim -f' -a https://ddg.gg search engine, privacy
The first command picks editor from the environment variable
EDITOR
. The second command opens gedit in blocking mode. The third command opens macvim with option -f and the URL and tags populated in template. -
Add a simple bookmark:
$ buku --nostdin -a https://github.com/ 2648. GitHub: Letâs build from here · GitHub > https://github.com/ + GitHub is where over 94 million developers shape the future of software, together. Contribute to the open source community, manage your Git repositories, review code like a pro, track bugs and features, power your CI/CD and DevOps workflows, and secure code before you commit it. $ buku --nostdin -a https://github.com/ [ERROR] URL [https://github.com/] already exists at index 2648
>
: URL,+
: comment,#
: tagsTitle, description and tags will be fetched from site. Buku only stores unique URLs and will raise error if the URL already present in the database:
-
Add a bookmark with tags
search engine
andprivacy
, commentSearch engine with perks
, fetch page title from the web:$ buku -a https://ddg.gg search engine, privacy -c Search engine with perks 336. DuckDuckGo > https://ddg.gg + Alternative search engine with perks # privacy,search engine
where,
>
: URL,+
: comment,#
: tags -
Add a bookmark with tags
search engine
&privacy
and immutable custom titleDDG
:$ buku -a https://ddg.gg search engine, privacy --title 'DDG' --immutable 1 336. DDG (L) > https://ddg.gg # privacy,search engine
Note that URL must precede tags.
-
Add a bookmark without a title (works for update too):
$ buku -a https://ddg.gg search engine, privacy --title
-
Edit and update a bookmark from editor:
$ buku -w 15012014
This will open the existing bookmark's details in the editor for modifications. Environment variable
EDITOR
must be set. -
Update existing bookmark at index 15012014 with new URL, tags and comments, fetch title from the web:
$ buku -u 15012014 --url http://ddg.gg/ --tag web search, utilities -c Private search engine
-
Fetch and update only title for bookmark at 15012014:
$ buku -u 15012014
-
Update only comment for bookmark at 15012014:
$ buku -u 15012014 -c this is a new comment
Applies to --url, --title and --tag too.
-
Export bookmarks tagged
tag 1
ortag 2
to HTML, XBEL, Markdown, Orgfile or a new database:$ buku -e bookmarks.html --stag tag 1, tag 2 $ buku -e bookmarks.xbel --stag tag 1, tag 2 $ buku -e bookmarks.md --stag tag 1, tag 2 $ buku -e bookmarks.org --stag tag 1, tag 2 $ buku -e bookmarks.db --stag tag 1, tag 2 All bookmarks are exported if search is not opted.
-
Import bookmarks from HTML, XBEL, Markdown or Orgfile:
$ buku -i bookmarks.html $ buku -i bookmarks.xbel $ buku -i bookmarks.md $ buku -i bookmarks.org $ buku -i bookmarks.db
-
Delete only comment for bookmark at 15012014:
$ buku -u 15012014 -c
Applies to --title and --tag too. URL cannot be deleted without deleting the bookmark.
-
Update or refresh full DB with page titles from the web:
$ buku -u $ buku -u --tacit (show only failures and exceptions)
This operation can update the title or description fields of non-immutable bookmarks by parsing the fetched page. Fields are updated only if the fetched fields are non-empty. Tags remain untouched.
-
Delete bookmark at index 15012014:
$ buku -d 15012014 Index 15012020 moved to 15012014
The last index is moved to the deleted index to keep the DB compact. Add
--tacit
to delete without confirmation. -
Delete all bookmarks:
$ buku -d
-
Delete a range or list of bookmarks:
$ buku -d 100-200 $ buku -d 100 15 200
-
Search bookmarks for ANY of the keywords
kernel
anddebugging
in URL, title or tags:$ buku kernel debugging $ buku -s kernel debugging
-
Search bookmarks with ALL the keywords
kernel
anddebugging
in URL, title or tags:$ buku -S kernel debugging
-
Search bookmarks tagged
general kernel concepts
:$ buku --stag general kernel concepts
-
Search for bookmarks matching ANY of the tags
kernel
,debugging
,general kernel concepts
:$ buku --stag kernel, debugging, general kernel concepts
-
Search for bookmarks matching ALL of the tags
kernel
,debugging
,general kernel concepts
:$ buku --stag kernel + debugging + general kernel concepts
-
Search for bookmarks matching any of the keywords
hello
orworld
, excluding the keywordsreal
andlife
, matching both the tagskernel
anddebugging
, but excluding the tagsgeneral kernel concepts
andbooks
:$ buku hello world --exclude real life --stag 'kernel + debugging - general kernel concepts, books'
-
Search for bookmarks with different tokens for each field, and print them out sorted by the tags (ascending) and URL (descending)
$ buku --order +tags,-url --markers --sall 'global substring' '.title substring' ':url substring' :https '> description substring' '#partial,tags:' '#,exact,tags' '*another global substring'
-
List all unique tags alphabetically:
$ buku --stag
-
Run a search and update the results:
$ buku -s kernel debugging -u --tag + linux kernel
-
Run a search and delete the results:
$ buku -s kernel debugging -d
-
Encrypt or decrypt DB with custom number of iterations (15) to generate key:
$ buku -l 15 $ buku -k 15
The same number of iterations must be specified for one lock & unlock instance. Default is 8, if omitted.
-
Show details of bookmarks at index 15012014 and ranges 20-30, 40-50:
$ buku -p 20-30 15012014 40-50
-
Show details of the last 10 bookmarks:
$ buku -p -10
-
Show all bookmarks with real index from database:
$ buku -p $ buku -p | more
-
Replace tag 'old tag' with 'new tag':
$ buku --replace 'old tag' 'new tag'
-
Delete tag 'old tag' from DB:
$ buku --replace 'old tag'
-
Append (or delete) tags 'tag 1', 'tag 2' to (or from) existing tags of bookmark at index 15012014:
$ buku -u 15012014 --tag + tag 1, tag 2 $ buku -u 15012014 --tag - tag 1, tag 2
-
Open URL at index 15012014 in browser:
$ buku -o 15012014
-
List bookmarks with no title or tags for bookkeeping:
$ buku -S blank
-
List bookmarks with immutable title:
$ buku -S immutable
-
Append, remove tags at prompt (taglist index to the left, bookmark index to the right):
// append tags at taglist indices 4 and 6-9 to existing tags in bookmarks at indices 5 and 2-3 buku (? for help) g 4 9-6 >> 5 3-2 // set tags at taglist indices 4 and 6-9 as tags in bookmarks at indices 5 and 2-3 buku (? for help) g 4 9-6 > 5 3-2 // remove all tags from bookmarks at indices 5 and 2-3 buku (? for help) g > 5 3-2 // remove tags at taglist indices 4 and 6-9 from tags in bookmarks at indices 5 and 2-3 buku (? for help) g 4 9-6 << 5 3-2
-
List bookmarks with colored output:
$ buku --colors oKlxm -p
-
Add a bookmark after following all permanent redirects, but only if the server doesn't respond with an error (and there's no network failure)
$ buku --add http://wikipedia.net --url-redirect --del-error 2. Wikipedia > https://www.wikipedia.org/ + Wikipedia is a free online encyclopedia, created and edited by volunteers around the world and hosted by the Wikimedia Foundation.
-
Add a bookmark with tag
http redirect
if the server responds with a permanent redirect, or tag shaped likehttp 404
on an error response:$ buku --add http://wikipedia.net/notfound --tag-redirect 'http redirect' --tag-error 'http {}' [ERROR] [404] Not Found 3. Not Found > http://wikipedia.net/notfound # http 404,http redirect
-
Update all bookmarks matching the search by updating the URL if the server responds with a permanent redirect, deleting the bookmark if the server responds with HTTP error 400, 401, 402, 403, 404 or 500, or adding a tag shaped like
http:{}
in case of any other HTTP error; then export those affected by such changes into an HTML file, marking deleted records as well as old URLs for those replaced by redirect.$ buku -S ://wikipedia.net -u --url-redirect --tag-error --del-error 400-404,500 --export-on --export backup.html
-
Print out a single random bookmark:
$ buku --random --print
-
Print out 3 random bookmarks ordered by netloc (reversed), title and url:
$ buku --random 3 --order ,-netloc,title,+url --print
-
Print out a single random bookmark matching search criteria, and export into a Markdown file (in DB order):
$ buku --random -S kernel debugging --export random.md
-
Swap positions of records #4 and #5:
$ buku --swap 4 5
-
Update indices in all bookmarks to match specified order:
$ buku --reorder ,-netloc,title,+url
-
More help:
$ buku -h $ man buku
Automation
Interactive workflows can be automated using expect. Issue #368 has a working example on automating auto-import.
Troubleshooting
Editor integration
You may encounter issues with GUI editors which maintain only one instance by default and return immediately from other instances. Use the appropriate editor option to block the caller when a new document is opened. See issue #210 for gedit.
Collaborators
Copyright © 2015-2025 Arun Prakash Jana
Contributions
Missing a feature? There's a rolling ToDo List with identified tasks. Contributions are welcome! Please follow the PR guidelines.
See also our documentation here
Related projects
- bukubrow, WebExtension for browser integration
- oil, search-as-you-type cli front-end
- buku_run, rofi front-end
- pinku, a Pinboard-to-buku import utility
- buku-dmenu, a simple bash dmenu wrapper
- poku, sync between Pocket and buku
- Ebuku, Emacs interface to buku
- diigoku, buku importer for Diigo
- BukuBot, Chat bot for XMPP with an extended visual interface
Videos
In the Press
Top Related Projects
A cat(1) clone with wings.
ripgrep recursively searches directories for a regex pattern while respecting your gitignore
:cherry_blossom: A command-line fuzzy finder
📚 Collaborative cheatsheets for console commands
A Terminal Client for MySQL with AutoCompletion and Syntax Highlighting.
Magnificent app which corrects your previous console command.
Convert
designs to code with AI
Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.
Try Visual Copilot