# rook change log




## [v0.4.5] 2026-08-07

### Changed

- removes arbitrary limitation about not combining open -P with --keyring

## [v0.4.4] 2026-05-30

### Added

- a couple of aenemic unit tests. At least it's a start.
- an example function to auto-copy to clipboard in utils/rk

### Changed

- secring pin is now long, since it doesn't have to be remembered or convenient
- claptrap to v5

### Fixed

- for the new, longer pin: the numbers were too big for an int, and I missed a spot where new pins were being generated.
- running help for commands which don't exist, or for command abbreviations, no longer panic
- list --tree bug. The tree walker logic assumed group names were unique. When they weren't, at best the tree output was incorrect; at worst, it could lead to infinite recursion and memory overflows.
- an indexing bug because bash uses sane 0-indexing and zsh uses stupid 1-indexing, and I used zsh-indexing.

## [v0.4.3] 2025-08-25

### Fixed

- lookup bug in getattr

## [v0.4.2] 2025-08-25

### Changed

- readme for getAttr.sh usage

### Fixed

- numerous bugs in getAttr.sh

## [v0.4.1] 2025-08-20

### Added

- -a getattr.sh can autodetect site based on window name
- -u, -p, -o getattr.sh can grab the username, password, or OTP of the selected entry
- `list <PATH>` feature

### Changed

- script commands to use --keyring
- tidying up the window matching code

## [v0.4.0] 2025-07-06

### Changed

- bumped gokeepasslib to v3.6.1 after a superficial audit of the commits between the versions.
- accepted some linting recommendations
- fix now hard exits the server

### Fixed

- an NPE could have been thrown by processing concurrent client requests. Requests are now handled sequentially.

## [v0.3.2] 2025-05-22

### Added

- short "-k" option for "--keyring"

### Changed

- the demo video, among other documentation changes.

## [v0.3.1] 2025-05-13

### Added

- code coverage badge, as embarrassing as it is

### Changed

- the SECURITY to remove some of the text about using `keyctl` manually.

### Fixed

- --keyring may not be used with open; this is now prevented, and documented. It never worked, but it would be seen by the server as on `open` failure.
- --detach and -P didn't play nicely; now they do

## [v0.3.0] 2025-05-13

### Added

- built-in support for the kernel keyring on Linux.
- more credits

### Changed

- have the CI pull the linting configuration from the server instead of storing it locally
- Go linting complaints addressed

### Fixed

- another broken link in the README
- URLs in the README (thank, mlc-man!)
- the revive linting configuration file was missing
- markdown linting complaints

## [v0.2.7] 2025-04-08

### Added

- autotype and getAttr now detect if keyctl is available and in use, and automatically uses it to get the pin.

### Changed

- the kernel keychain instructions are now independent of external environment variable management, such as herbstluftwm

### Fixed

- grep syntax bug in script changes slipped in.

## [v0.2.6] 2025-04-08

### Fixed

- errant debugging message left in code was printing out the pin on every command :-/
- CI fixes: bad URL for badges; bad TARGETS parsing; add SECURITY.md to release.

## [v0.2.5] 2025-04-08

### Changed

- a lot of markdown reformatting, because I occasionally forget that the reason I use text markup is because it is readable using other tools. So I added a bunch of carriage returns.
- moved the ever-growing Security section into its own document, and added some examples to hopefully help with using keyctl.
- cleaner CI build process & MOAR BADGES

### Fixed

- `getPassword()` was prompting on STDOUT, which is bad for piping the pin

## [v0.2.4] 2025-02-27

### Changed

- updates the change log. And Go 1.24 landed in Alpine, so off we go!

## [v0.2.2] 2025-02-23

### Added

- instructions for practical use of PIN authorization with keyctl

### Fixed

- --detach never worked
- logging was going to stdout
- some log messages were not being logged, but just printed out
- PIN authorization -- it had a lot of bugs
- build assets now contain man pages & other documentation, and arch image CI is fixed
- alpine _still_ hasn't updated Go to 1.24, which is necessary for the new tooling.
- CI
- the manpage generation now includes missing metadata (author, description)

## [v0.2.1] 2025-02-14

### Changed

- Use Go 1.24's `go tool` for manpage generation, via go:generate.

## [v0.2.0] 2024-10-11

### Added

- suport for password + key file credentials
- show --no-eol option, to strip CRs after, eg, passwords

### Changed

- show matches search: it's now case insensitive

### Fixed

- successful OPEN with password wasn't clearing the one-time pin, so the DB was staying locked.

## [v0.1.3] 2024-05-20

### Added

- status command, a more lightweight way of testing if a DB is open. Using this instead of `info` in e.g. statusbar scripts greatly reduces CPU load.
- case-insensitive search.

### Changed

- adding some nil panics that could occur when DB is closed while a client call is being processed.

### Fixed

- a hidden bug in the OTP pin code.
- some errors being ignored (and therefore not logged)
- TOTP attributes getting missed by otp generator check

## [v0.1.2] 2024-04-26

### Added

- one-time pin soft locking
- installation instructions for distributions that have rook in a repository
- more of the special autotype {} commands are supported (backspace, space, esc)

### Changed

- getAttr adds a little delay before typing, allowing initiator tools (like rofi) to close windows before text is output
- cleans up code per golint/gochk

### Fixed

- an autotype bug in outputting literals

## [v0.1.1] 2024-03-22

### Added

- the original source rook.svg
- ability to start the rook server passing in the password via stdin pipe.

### Changed

- go modules metadata; drops required Go version to 1.21, for building on Alpine
- assets moved to directory
- documentation referenced Keepass v4; there's no such thing, it's v2.
- license, was missing (c) from original
- stop trying to remove the version number from build assets
- documentation to clarify when the master password exists as plain text, in response to questions from @d3Xt3r@lemmy.nz

### Removed

- go.mod toolchain, which go mod tidy added and breaks backwards compatability

## [v0.1.0] 2024-03-15

### Added

- nfpm file
- logo

### Changed

- clears out the password so it's not being held in plain text by the flags library.
- some of the documentation, and fixes the duplicated v0.0.9 entry in the changelog.
- CI build targets are more limited, but also include some distro packages
- better README documentation

### Removed

- the monitor attribute was taken out, as rook no longer busy-polls the DB

## [v0.0.9] 2024-03-13

### Changed

- gives CHANGELOG back its header

## [v0.0.8] 2024-03-13

### Changed

- hopefully improving readability of the README
- inlines openDatabase, which was two lines and used in two places
- autotype handles multiple matches and prompts the user when that occurs
- autotype to be more interactive, via yad
- match now returns all matches, in descending quality. The autotype function uses rofi to show options if there's more than one match.
- how rook refreshes the DB. Rather than a busy loop, the server checks whether the modification timestamp changed since the last call and auto-refreshes it if so.

### Fixed

- an NPE when the DB wasn't set

## [v0.0.7] 2024-03-11

### Changed

- where rook client opens the socket
- show field names are now case insensitive: password, PassWord, PaSSwoRd all match the actual field name "Password"

### Fixed

- search term being always required in show, even if -i was provided

## [v0.0.6] 2024-03-10

### Added

- getAttr.sh script
- an autotype script

### Fixed

- window misses in the scripts

## [v0.0.5] 2024-03-08

### Added

- ability to list as tree `--tree`
- db change monitoring
- making the server smarter, s.t. it checks for a running server and auto-cleans the socket
- match command

### Changed

- CHANGELOG
- cleans out remaining boilerplate from 5c1816990c47
- adds a little more server logging
- server errors always respond with FAIL(message)
- client detects empty server messages and exit 1

### Fixed

- bug where --help/-h was causing NPE

### Removed

- all of the DB editing boilerplate; this stays out of the rook roadmap (for now)

## [v0.0.4] 2024-03-06

### Added

- --secure mode

### Changed

- search to match in title, URL, or tags

### Removed

- regular expression pattern matching. I think it was overkill.

## [v0.0.3] 2024-03-05

### Added

- ability to set DB on server start, supplying credentials later with a client call
- some client feedback for some commands
- reload command
- support for generating TOTP codes from entries that are configured for it.

### Changed

- the CHANGELOG

### Fixed

- erroring when server is exited
- catching ^c interrupts and cleaning up socket file
- 'help command' not working
- output formatting on single field results
- the embedded version string.

### Removed

- removing the password parameter, which is unfortunately necessary to avoid some awkward refactoring. Just don't use the danged thing.
- the -p argument

## [v0.0.2] 2024-03-05

### Added

- path filtering on search and show
- open/lock commands.

### Changed

- show to include all matches, not just last
- some error handling & logging

### Fixed

- actually using regexp in the path/title terms

## [v0.0.1] 2024-03-03

### Added

- CI
- changelog
- status flags, examples, usage, caveats to readme
- path & index information to entry description
- option to manually set comm socket
- password prompt
- hiding unimplemented commands
- version
- auditing section to README, and includes the missed server.go file
- rudimentary README, and sets the license.

### Changed

- where the database is set, effectively making the tool client/server mode **only**

### Fixed

- help command not working
- a bug in entity path calculation
- the help logic
- a nil panic error with attempts to access an unset Command

## Authors

- Sean E. Russell <ser@ser1.net>

## Todos

1. REQ Add -1 to get closest (Levenshtein) match
2. REQ investigate option for copying directly to clipboard https://github.com/golang-design/clipboard
3. REQ Option to show hidden fields
4. REQ https://antonz.org/accepted/runtime-secret/ (Go 1.26) TOOD If only one item matches (e.g. -no) just print the thing that matches
5. REQ Respect if autotype is disabled for an entry
6. REQ Add an -a "all" op to show, to show all fields.
7. REQ Consider transmitting gob over the wire, instead of hand-crafting messages
8. BUG the sequences aren't rendered in some cases, e.g. TOTP fields. BACKSPACE, etc
9. BUG Enter doesn't seem to work properly, always, with web forms. Is there a Return?
10. REQ Change all the path representations (everywhere) to be absolute, and consider using a different separator; / may be too commonly used @v1
11. REQ Can we be smarter and read fields from e.g. a selected web page?
12. REQ Check the client. If it's something like luakit, at least make sure we're in insert mode.
13. REQ Allow the user to provide a program to run to request a password to unlock the DB if it is locked. maybe
14. REQ Add kpmenu mode, where server is pre-configured with commands it can run, and the client just asks it to do things.
15. REQ Add YubiKey credential support
