buku v5.0
2025-04-37

- removed URL shorten/expand feature (see #815)
- fix "htttp" typos in tests (@chenrui333)
- fix default value of `--url` used with `--update` (see #729)
- add Python 3.12 support (@chenrui333)
- add Python 3.13 support + use it as default for testing
- list [BukuBot](https://git.xmpp-it.net/sch/BukuBot) in the docs as a related project (@sjehuda)
- fix pylint warnings
- fix parsing of `<meta name="keywords">` in fetched webpages (see #734)
- fix `get_rec_all_by_ids()`
- fix autoimport of Firefox profiles with a custom absolute path (see #791)
- fix `--db` parameter being ignored by encryption actions (see #796)
- fix inconsistent handling of netloc (see #799)
- fix import in single-parent-folder-tag mode (see #807)
- add import/export in the `.rss` (Atom) format (@vagos)
- add `.atom` as an RSS import/export extension
- add description to XBEL export format (@sjehuda)
- support raw (unnamed) URLs when parsing Markdown/OrgMode (i.e. `<url>`/`[[url]]` respectively)
- implement backwards navigation in the interactive shell mode (@20mattia02)
- implement DB switching in the interactive shell mode (with displaying non-default DB name)
- support opening interactive shell mode on a non-default DB
- implement custom-setting the default DB directory
- implement printing DB list in default directory when invoked specifically as `buku --db`
- implement handling `--db` parameter without `.` and directory separators as a _name_ (with omitted `.db` extension and located in default DB directory)
- Bukuserver: implement support for passing a DB name in `BUKUSERVER_DB_FILE`
- implement thread safety (e.g. for handling simultaneous requests in Bukuserver)
- Bukuserver: prevent `/api/tags` query from being spammed due to a Flask-Admin bug
- Bukuserver: increase size of the bookmarklet popup window
- Bukuserver: minor UI improvements
- Bukuserver: some readme improvements (@rachmadaniHaryono)
- Bukuserver: add "contains"/"not contains" modes for some filters (URL/title in Bookmarks, name in Tags)
- Bukuserver: fix input autofoxus on page/dialog opening
- Bukuserver: ensure that links in the bookmarklet popup window are always opened externally
- allow tags supplied by `--add` (or by `--tag`) to override fetched tags (unless started with `+`)
- implement search-with-markers (see #777)
- implement bookmarks output ordering [by fields/netloc] (see #777)
- implement random selection of bookmarks
- implement bookmark index swapping
- Bukuserver: implement translations
- Bukuserver: fix unstable ordering of the filters form
- Bukuserver: add a runner script
- Bukuserver: add support for tags/fetch fields to bookmarklet API endpoint
- Bukuserver: fix popup detection for sites that prevent exposing `opener`
- Bukuserver: fix disabling no-netloc URLs in rendering modes other than `full`
- Bukuserver: remove dependency on the stale package Flask-API
- support `urllib3>=2` as a dependency (see #776)
- fix various deprecation warnings
- Bukuserver: update screenshots in documentation

-------------------------------------------------------------------------------

buku v4.9
2024-04-07

- fixed profile detection for multiple Firefox installs (#711)
- added option `--offline` to add a bookmark without web connection
- added a mini-guide for quick keyboard access to the bookmarklet
- support environment variable `NO_COLOR`
- fixed HTML encoding detection (#713)
- fixed Windows profile detection (#683)
- support python 3.11 (support for python 3.7 removed)
- fixed readline internal error on Windows (#704)

-------------------------------------------------------------------------------

buku v4.8
2023-02-18

- support Vivaldi browser
- better XBEL compatibility
- check for empty search results in piped operations
- remove python 3.6 support, add 3.10
- API changes in bukudb (#660):
  - bookmark data tuples returned from methods `get_rec_all()`
    & `get_rec_by_id()`, now have user-friendly properties
    (`id`, `url`, `title`, `desc`, `tags`/`taglist`, `immutable`;
    as well as for raw DB fields – `tags_raw`, `flags`)
  - methods `get_rec_all()`, `list_using_id()`, `searchdb()`, `search_by_tag()`,
    `search_keywords_and_filter_by_tags()` & `exclude_results_from_search()`
    are now guaranteed to return a list (empty if no data is found)
  - methods `get_rec_id()`, `get_max_id()` & `add_rec()` now return `None` as
    the "no ID" value
  - methods `add_rec()`, `update_rec()` & `edit_update_rec()` now treat the
    value of `immutable` parameter as a boolean (the default/noop value for
    update calls is `None`)
  - a `FIELD_FILTER` dictionary is introduced that contains fields formatting
    description; also, in `format_json()` (and `print_json_safe()`), the output
    format now matches the one described in CLI help
- IMPACT: If you have a local repo clone, remove .tox/ subfolder if it's there
    before you run tests for the first time

-------------------------------------------------------------------------------

buku v4.7
2022-07-01

- support XBEL export/import (#569)
- support for Microsoft Edge bookmarks (#585)
- block web fetch on import
- many bukuserver fixes (#543, #545, #547, #548, #553, #554, #559)
- import nested directory names as tags on html import (#539)
- fix slow/failed markdown import (#538)
- fix SSL certificate identification not working on macOS (#528)
- import tags from markdown (#523)
- fix broken pipe error with oil (#520)

-------------------------------------------------------------------------------

buku v4.6
2021-06-16

- use textwrap to wrap comments and tags when printing in terminal
- show listing start and end index over prompt in interactive mode
- option `--nostdin`: don't wait for input (must be first arg) (#513)
- user-friendly prompt message when watiing for input in non-tty mode
- several test framework improvements

-------------------------------------------------------------------------------

buku v4.5
2020-12-29

- Fix encryption and decryption (#480)
- Fix Wayback Machine API query
- Support wayland native copier `wl-copy`
- Add bookmarklet for bukuserver (#385)
- Delete by tag without prompting for each bookmark (#458)
- Fix issue with utf-8 characters in bookmark titles (#456)
- Fix reomve all tags from prompt (#467)
- Example to fuzzy search and preview in Quickstart section
- Replace debug option `-z` with `-g`
- Support python 3.9, retire python 3.5

-------------------------------------------------------------------------------

buku v4.4
2020-06-16

- optionally specify output file with `--json`
- confirm auto-tag generation in chatty mode
- unblock GUI browsers when running on WSL
- handle up to 10 server redirects (#452)
- fix issue with reverse proxy (#435)
- use ImportError instead ModuleNotFoundError (#437)
- import pyreadline on windows (#441)
- auto-generated package refresh

-------------------------------------------------------------------------------

Buku v4.3
2020-01-31

- Project renamed to `buku` (small `b`)
- Export tags in markdown format as comments
- Tag support for Org import/export
- Better Windows 10 support
- Reverse proxy support for `bukuserver`
- Config `OPEN_IN_NEW_TAB` for `bukuserver`
- Documentation updated
- Fix Firefox default profile detection
- Fix export to DB failing after search
- Fix broken prompt colors
- User agent updated

-------------------------------------------------------------------------------

Buku v4.2.2
2019-05-02

- Fixes broken prompt due to PR #373

-------------------------------------------------------------------------------

Buku v4.2.1
2019-04-30

- A fix on top of v4.2 to address a packaging problem

-------------------------------------------------------------------------------

Buku v4.2
2019-04-30

- Disabled appending tags from page on update
- Improved Windows color support using colorama (optional dep)
- New format option to show only title and tag
- Python 3.4 is EOL, support discontinued
- Several fixes and code refactor

-------------------------------------------------------------------------------

Buku v4.1
2019-01-15

What's in?
- Import firefox-exported json
- Fix auto-import for firefox
- Fix write to GNU Screen paste buffer
- Some CVE fixes

-------------------------------------------------------------------------------

Buku v4.0
2018-11-01

What's in?
- Show records in pages with option `-p` (works with `-n`, default 10)
- Enhanced clipboard support: `xclip`, tmux, GNU Screen, Termux
- Prompt key `O` works with search results along with GUI browser toggling
- Search by taglist id with prompt key `g`
- Multiple fixes

-------------------------------------------------------------------------------

Buku v3.9
2018-08-30

What's in?
- Set number of search results per page (default 10)
- Retrieve description and tags from page, if available
- Visit cached version on Wayback Machine
- Export works with all search options now
- Changed user agent to Firefox on Ubuntu
- Several dependencies made _required_ for installation
- bukuserver will use Flask-Admin

-------------------------------------------------------------------------------

Buku v3.8
2018-05-24

What's in?
- A self-hosted http server, bukuserver, that exposes core functionality
    - browsable front-end on a local web host server
    - flask default cli interface is used instead custom one
    - handle not only API but also HTML request
    - statistic page
    - CRUD on bookmark
    - replaces the earlier API module
- Import complete folder hierarchy as tags during auto-import
- Merge tags on import even if bookmark URL exists
- Orgfile import/export
- Show bookmarks to be deleted before deletion
- Merge tags during import if bookmark exists
- Escape regex metacharacters in regex input

-------------------------------------------------------------------------------

Buku v3.7
2018-03-28

What's in?
- Exclude keywords in search (keyword filtering)
- Search and filter by tags
- Order search results by number of keyword matches
- Copy URL to clipboard
- Prompt shortcut 'O' to override text browsers
- New official packagers: Fedora, Gentoo, OpenBSD, openSUSE

-------------------------------------------------------------------------------

Buku v3.6
2018-01-09

What's in?
- Skip bookmark addition if edit is aborted
- Use urllib3 for handling http connections everywhere
- Fix auto-import on FreeBSD
- Generate packages for openSUSE Leap 42.3, Fedora 27

-------------------------------------------------------------------------------

Buku v3.5
2017-11-10

What's in?
- Buku now has its own user agent
- Search works with field filters
- Edit the last record with `-w=-1` (useful when adding bookmark from GUI)a
- Support for Chromium browser
- Colors disabled by default on cmd (Windows), option `--colors` has to be used
- Get default Firefox profile name from profiles.ini
- Bash scriptlet to autogen records for testing
- Some optimization in add record and suggest tags
- A fresh utility Pinku to import Pinboard bookmarks to Buku

-------------------------------------------------------------------------------

Buku v3.4
2017-09-18

What's in?
- Export bookmarks (including specific tags) to Buku DB file using `--export`
- Option `--import` can merge Buku DB files now, option `--merge` is retired
- Option `--suggest` now works at prompt as well
- Auto-import issue when Firefox is not installed fixed

-------------------------------------------------------------------------------

Buku v3.3.1
2017-09-11

This is for all purposes the same as v3.3. We had to re-upload a new version to
PyPi and hence the new tag. Functionality remains the same.

The tagline is changed to - `Powerful command-line bookmark manager.`

-------------------------------------------------------------------------------

Buku v3.3
2017-09-11

What's in?
- Auto-import (`--ai`) bookmarks from Firefox and Google Chrome
- Support custom colors (`--colors`)
- Search multiple tags (with exclusion)
- Timestamp (YYYYMonDD) tag in auto-imported bookmarks
- Enable browser output for text browsers
- Generate documentation in RTD using Sphinx (http://buku.readthedocs.io)
- Integrated flake8 and pylint in Travis CI
- Integrated PackageCore to auto-generate packages in Travis CI

-------------------------------------------------------------------------------

Buku v3.2
2017-08-03

What's in?
- Option `--suggest` to list and choose similar tags when adding a bookmark
- Ask for a unique tag when importing bookmarks
- Ignore non-generic URLs when importing browser exported bookmarks

-------------------------------------------------------------------------------

Buku v3.1
2017-06-30

What's in?
- Handle negative indices (like tail) with option `-p`
- Support browsing bookmarks from prompt (key `o`)
- Add program search keywords to history
- Support XDG_DATA_HOME and HOME as env vars on all platforms
- Replace %USERPROFILE% with %APPDATA% as install location on Windows

-------------------------------------------------------------------------------

Buku v3.0
2017-04-26

What's in?
- Edit bookmarks in EDITOR at prompt
- Import folder names as tags from browser HTML (thanks @mohammadKhalifa)
- Append, overwrite, delete tags at prompt using >>, >, << (familiar, eh? ;))
- Negative indices with `--print` (like `tail`)
- Update in EDITOR along with `--immutable`
- Request HTTP HEAD for immutable records
- Interface revamp (title on top in bold, colour changes...)
- Per-level colourful logs in colour mode
- Changes in program OPTIONS
  - `-t` stands for tag search (earlier `--title`)
  - `-r` stands for regex search (earlier `--replace`)
- Lots of new automated test cases (thanks @rachmadaniHaryono)
- REST APIs for server-side apps (thanks @kishore-narendran)
- Document, notify behaviour when not invoked from tty (thanks @The-Compiler)
- Fix Firefox tab-opening issues on Windows (thanks @dertuxmalwieder)

-------------------------------------------------------------------------------

Buku v2.9
2017-02-20

Modifications
- New option `--write` to compose and edit bookmarks in text editor
- Support positional arguments as search keywords
- New option `--oa` to search and open results directly in browser
- Autodetect Markdown mode by file extension during export, import
- Shortened options:
    - `--nc` replaces `--nocolor`
    - `--np` replaces `--noprompt`
    - `-V` replaces `--upstream`
- Option `--markdown` removed as the mode is autodetected now

-------------------------------------------------------------------------------

Buku v2.8
2017-01-11

Modifications
- Multithreaded full DB refresh with delayed writes
- Customize number of threads for full DB refresh (default 4)
- Support search and update search results in a go
- Support shortened URL expansion
- Support multiple bookmarks with `--open`
- Support `--nocolor` (for scripting, Windows users)
- Support https_proxy with `--upstream` and `--shorten`
- Remove trailing `/` from search tokens (like Google search)
- Support `--version` to show program version
- Fixed #109: Missing + when shortening URL
- Performance optimizations, few module dependency removals

-------------------------------------------------------------------------------

Buku v2.7
2016-11-30

Modifications
- Continuous search at (redesigned) prompt
- urllib3 for all HTTP operations
- Use HTTP HEAD method for pdf and txt mime types
- Add user agent (Firefox 50 on Ubuntu)
- Support URL shortening
- List bookmarks by tag index in tag list
- Show tag usage count in tag list
- Store tags in lowercase (use undocumented option `--fixtags` to fix old tags)
- Support environment variable *https_proxy*
- Support option `--immutable` to pin titles
- Keyword `immutable` to search (`-S`) pinned titles
- Show index in JSON output
- New key *q* to quit prompt
- Support deflate compression
- Add option `--tacit` to reduce verbosity of some operations
- **Removed** option `--st`, only `--stag` to search tags
- Support custom DB file location (for library, not exposed to user)

-------------------------------------------------------------------------------

Buku v2.6
2016-11-04

Modifications
- Support Markdown import/export
- Support regex search
- New option `--upstream` to check latest upstream version
- Fix search and delete behaviour
- Lot of code reformatting, performance improvements
- Use delayed commit wherever possible (e.g. bulk deletion cases)
- When a range is specified, consider 0 as ALL
- Added option to control verbosity in some APIs
- In-source documentation update

-------------------------------------------------------------------------------

Buku v2.5
2016-10-20

Modifications
- Export specific tags to HTML
- Fixed obvious issues on Windows
- Open a random bookmark with option --open
- Support lists and ranges with --print
- Show a bookmark on tag append
- Show only title with --format=3
- PEP8 compliance fixes
- Buku GUI integration documented

-------------------------------------------------------------------------------

Buku v2.4
2016-09-12

Modifications
- Exact word match support using regex (**default**)
- New option --deep to scan matching substrings
- Support DB index lists and ranges in update operation
- Open a list or range of search results in browser
- Open all search results in browser
- A more concise prompt
- PEP8 compliance (almost)
- Tons of new test cases added (thanks @wheresmyjetpack)

-------------------------------------------------------------------------------

Buku v2.3
2016-07-14

Modifications
- Delete a range or a list of indices
- Delete tag from tagset by bookmark index
- Delete results of a particular search
- Linked to rofi front-end script project for Buku
- Use the logging framework for debug info instead of print
- Fixed an issue with gzip stream decoding
- Using only relative path to fetch resource on server
- Fixed auto-completion errors with Zsh
- A lot of code cleanup and globals removed, additional test cases

-------------------------------------------------------------------------------

Buku v2.2
2016-06-12

Modifications
- Export bookmarks to Firefox bookmarks formatted HTML
- Merge Buku database
- .deb package for Debian and Ubuntu family
- Switch from PyCrypto to cryptography (thanks @asergi)
- Append tags support
- Filter tags for duplicates and sort alphabetically
- Travis CI integration, more test cases (thanks @poikjhn)
- Show DB index in bold in search results
- Several performance optimizations

-------------------------------------------------------------------------------

Buku v2.1
2016-05-28

Modifications
- Import bookmarks from Firefox, Google Chrome or IE HTML bookmark exports
- Support comments on bookmarks
- Prettier output using symbols (`>` title, `+` comments, `#` tags)
- New option (`--st`, `--stag`) to search by tag
- New option (`--noprompt`) for noninteractive mode
- New options (`--url` and `--tag`)
- `--update` now handles each option (url, tag, title, comment) independently
- Several messages removed or moved to debug

-------------------------------------------------------------------------------

Buku v2.0
2016-05-15

Modifications
To begin with, 2.0 is a significant release with respect to options. `Buku` now has fewer options with more (and merged) functionality. Please go through the program help at least once to understand the changes.

- Replace getopt with argparse for parsing arguments
- Long options for each short option
- Options changed
    - insert: removed as automatic DB compaction serves the purpose (previously `-i`)
    - iterations: removed as optional argument to `-l` and `-k` (previously `-t`)
    - title: `-t` is now the short option to set title manually (previously `-m`)
    - Special search keywords for ALL search (`-S`):
        - tags: show all tags (previously `-g`)
        - blank: show bookmarks with empty tags (previously `-e`)
    - lock/unlock: now accepts number of hash iterations to generate key
    - format: print formatting option changed to `-f` (previously `-x`)
    - help: option added to show program help
- Following options apply to ALL bookmarks without arguments
    - `-u`, `--update`
    - `-d`, `--delete`
    - `-p`, `--print`
- Shell-completion scripts for Bash, Fish and Zsh
- Warn if URL is not HTTP(S)
- More comprehensive help
- Fix a bug with deletion when only one entry in DB
- Some import dependencies removed or late loaded (if optional)
- Handle exception if DB file is encrypted or invalid

-------------------------------------------------------------------------------

Buku v1.9
2016-04-23

Modifications
- **New location for database file** (refer to README or man page). The old database file, if exists, is migrated automatically.
- **Removed options**
    - `-P`: (print all) is now `-p 0`
    - `-D`: (delete all) is now `-d 0`
    - `-R`: (update all) is now `-u 0`
    - `-w`: title web fetch is now the default behaviour, override with `-m title` option
- **Change in search behaviour**
    - `-s`: search bookmarks for ANY keyword in URL, title or tags
    - `-S`: search bookmarks for ALL keywords in URL, title or tags
- Update only title of a bookmark (`-u N`)
- Set empty title (`-m none`)
- Support HTTP(S) gzip compression
- Optional JSON output for `-p` and `-s` options (thanks @CaptainQuirk)
- Reformatted help and man page with general options on top
- Optimize add and insert: ensure URL is not in DB already
- Handle URLs passed with %xx escape
- Retry with truncated resource path on HTTP error 500
- Several code optimizations
- Catchier errors and warnings
- Version added to debug logs

-------------------------------------------------------------------------------

Buku v1.8
2016-03-26

Modifications
- Auto compact DB on single record removal
- Handle piped input
- Better tag management
    - Tag modify or delete support
    - Show unique tags alphabetically
- Full DB refresh
    - Fix stuff broken earlier
    - Optimize to update titles only
    - Update titles only if non-empty to preserve earlier data
- Redirection
    - Handle multiple redirections
    - Detect redirection loop and break
    - Show redirected link in bold
- List all bookmarks with no title or tags (for manual bookkeeping)
- Confirm full DB removal
- Better comma (`,`) separator handling for tags
- Help
    - Place regular options before power options in program help
    - Help added in man page for quick reference
    - Additional examples for new features
- Errors & warnings
    - Error out if both encrypted and flat DB files exist
    - Catchier error and warning messages

-------------------------------------------------------------------------------

Buku v1.7
2016-03-15

Modifications
- Add title manually using option `-m`
- Unquote redirected URL
- Quit on `Ctrl-d` at prompt
- More dynamic shebang for python3

-------------------------------------------------------------------------------

Buku v1.6
2016-01-22

Modifications
- Stronger encryption: 256-bit salt, multi-hash key.
- Allow user to specify number of iterations to generate key (check option `-t`).

-------------------------------------------------------------------------------

Buku v1.5
2015-12-20

Modifications
- Project name changed to `Buku` to avoid any copyright issues. This also means old users have to move the database file. Run:
<pre>$ mkdir ~/.cache/buku/
$ mv ~/.cache/markit/bookmarks.db ~/.cache/buku/bookmarks.db
$ rm -rf ~/.cache/markit/bookmarks.db</pre>
- Manual AES-256 encryption and decryption support (password protection) implemented. This adds dependency on PyCrypto module. Installation instructions updated in README.
- Some typos fixed (thanks @GuilhermeHideki)

-------------------------------------------------------------------------------

MarkIt v1.4
2015-11-13

Modifications
- Refresh full bookmark database. Fetch titles from the web, retain tags.
- Notify empty titles in red during online add or update.

-------------------------------------------------------------------------------

MarkIt v1.2
2015-11-11

Modifications
- Introduced `-S` search option to match ALL keywords in URL or title
- Introduced `-x` option to show unformatted selective output (for creating batch scripts)
- Added examples on batch add and update (refresh) scripts
- Handle multiple title tags in page
- Handle title data within another tag (e.g. head)
- Show DB index in search results, removal and update confirmation message

-------------------------------------------------------------------------------

MarkIt v1.1
2015-11-10

Modifications
- Replace Unicode chars in title data before UTF-8 decoding (for parser to succeed).

-------------------------------------------------------------------------------
