Back to Catalog
lkraider GitHub avatar
@lkraider/keywiseVerified Maintainer

keywise

Terminal UI to read Firefox saved logins

Demo

Terminal preview
keywise
keywise project visual

Overview

Terminal UI to read Firefox saved logins

Reads a Firefox profile's saved logins with no dependencies. One static binary for macOS, Windows and Linux.

From the maintainer

Origin story

Firefox stores saved logins in key4.db and logins.json. Every existing reader depends on NSS (the Mozilla crypto library) or Python with pycryptodome. Firefox 144 added an AES-256-CBC key row beside the legacy 3DES row. Readers that load NSS from the system path broke when the system NSS was older than 3.113. Keywise reads and decrypts both key formats directly in Zig. No NSS, no Python, no libsqlite3. Inspired by the (now discontinued) Lockwise mobile app from Mozilla.

First workflow

Run keywise with no arguments. It finds the default Firefox profile, asks for the master password, and lists every saved login. Arrow keys to browse, type to filter by hostname, Enter to reveal or copy a password.

Design choice

One Zig core library drives the TUI through libvaxis. The core includes a built-in SQLite reader so the binary has zero runtime dependencies. The TUI renders a scrollable table with masked passwords. Selecting a row reveals the password inline or copies it.

Roadmap

CSV and JSON export. Biometric unlock on macOS (Touch ID) and Windows (Windows Hello). A Linux GTK front end.

Latest Release

v2.4.0
Released: Sep 4, 2026

Search-mode navigation and port files

Up and Down arrow keys move the list cursor while the search field is
focused. Enter reveals the selected password from search mode. Escape
leaves search. PgUp and PgDn already worked; this release adds the
remaining navigation keys.

FreeBSD, OpenBSD and MacPorts port files build from source with
zig build --system. release-set-version.sh and release-set-hashes.sh
update version, checksums, and distinfo across all port files.

zig fmt --check runs in the test suite.

A search that ran out of memory on Windows showed no feedback. The
status bar reports the failure now. A status-bar message longer than
256 characters corrupted the displayed length on Windows.

GitHub releases were created with an empty body. They carry the tag
annotation now.

CHANGELOG.md lists every change.

Discussions

0 comments
Loading comments...
Alvin By Alvin