
Security News
n8n Tops 2025 JavaScript Rising Stars as Workflow Platforms Gain Momentum
n8n led JavaScript Rising Stars 2025 by a wide margin, with workflow platforms seeing the largest growth across categories.
★
★ Releases
★
★ Changelog
★ Issues
★ Mailing list
★
★
★
★
lbb is a CLI address book application for CardDAV servers and vcard directries. In contrast to other tools it does not cache anything. It can process multiple remote servers & address books in parallel. It provides modes to allow integration with email clients for providing address auto-complete.
Its main purpose is displaying address book data. It also supports basic creation and editing of entries.
lbb was forked from qcard, and diverges significantly.
Note Version 0.10 changed the flags parsing library; now it's more conformant
to standard GNU flags, using double-dash -- instead of Go flags' single dash.
Check lbb help for updated flags. You will have to update any scripts using lbb.
-mailclient argument which formats output in the format aerc expects, which avoids the necessity of reformatting the -emailonly output with awk.This fork is 12x faster than the regexp version, and also 12x faster than khard. Using hyperfine on a local directory containing 955 contact vcfs:
| Command | Mean [ms] | Min [ms] | Max [ms] | Relative |
|---|---|---|---|---|
khard email --parsable --remove-first-line | 511.7 ± 6.3 | 504.5 | 520.9 | 23.22 ± 0.88 |
qcard -emailonly | 520.9 ± 4.6 | 515.3 | 528.7 | 23.64 ± 0.87 |
lbb -emailonly | 22.0 ± 0.8 | 20.3 | 24.3 | 1.00 |
Note: binaries are currently broken, because I made the poor decision to try to use git on this one project (which started as a git fork), and doing even simple stuff like getting version numbers from the CI source is not simple with git. Until I figure this out, no binaries. Sorry.
Check the Releases page for a package for your OS/Architecture. If you don't find one, you can send an email to the mailing list and I'll add it.
Binaries are provided (check the top of this document for the link) for a couple of OS/architectures. I will add more upon request. There is no reason why lbb should not compile for any target Go supports -- BSD, Darwin, Windows, ARM, RISCV64, whatever. Ask, and ye shall receive.
yay -S lbbtesting repository): apk add lbbrpm binary from the
Releases page.dpkg binary from the
Releases page.No special tools are needed beyond Go >= 1.17. The project builds with a simple
go build ., and can be installed (into your go env GOPATH bin directory)
with go install ..
lbb compiles, but does not run, with tinygo 0.37.0. tinygo does not implement
SliceOf(), but while you'll get a lovely binary with no dependencies and 1/8th
the size of the Go build, it'll panic and core dump if you run it.
go install -ldflags="-s -w" ser1.net/lbb@latest
The ldflags merely strip down the binary so it's smaller; it's not necessary.
Run lbb -init to create a stub configuration, then edit the file and customize
it for your use case.
For additional address books just add a comma and new address book credentials in curly brackets. The sample configuration contains both a CalDAV server address book, and a local vcard directory book.
In the sample configuration are:
.vcf contacts, as created by
e.g. vdirsyncer.Instead of putting your password in the config file you can specify an external command to resolve your password. Put a line like this in your addressbook config and leave the "Password" field empty:
"PasswordCmd":"rook show -np my-caldav-account"
Common options:
lbb -h
This simply displays all contacts from all address books:
lbb
This only shows contacts from address book 0:
lbb -a 0
This displays all available address books with their numbers and colors:
lbb -l
This searches for contacts containing "doe" in all address books:
lbb -s doe
The DetailThreshold parameter in the configuration file determines when all
contact details are shown for a given number of search results. For instance, on
DetailThreshold = 3 you get all details if 3 or less contacts are found for the
searchword "doe".
Here's a list of all attributes:
This creates a contact for John Doe with a private mobile phone number and an email address in address book 1:
lbb -a 1 -n "John Doe M:+49 172 123123 E:jdoe@data.haus"
Just combine the parameters from above like you wish.
This shows searches for "doe" in address book 2 and prints the corresponding filenames ("fobarxyz.vcf"):
lbb -a 2 -s doe -f
This edits the selected vCard object in your $EDITOR (i.e. vim). When you save-quit the modified object is automatically uploaded:
lbb -c 2 -edit foobarxyz.vcf
To use lbb as your address book in neomutt, put the following in your neomuttrc:
set query_command= "lbb -s '%s' -emailonly"
bind editor <Tab> complete-query
bind editor ^T complete
Add or change ~/.config/aerc/aerc.conf:
[compose]
address-book-cmd=lbb -mailclient -s "%s"
It stands for "Little Black Book," and was chosen mainly because it didn't have "card" or "address" or "rolo" in the name, of which there are already a plethora. It abbreviates to a nice, easily typed, 3-letter command, and wasn't already taken[^1].
I'm not very creative with names, but I do require at least some tenuous link to the actual purpose of the program. While "little black book" has connotations of amorous intent, in this case, it's just an address book.
~psic4t and I have different priorities. There's no acrimony; we simply agreed to disagree on some key, irreconcilable points.
That's mainly it. There are other differences of opinion, and those could be
reconciled, but the decision to import a dependency or keep go.mod empty was
not.
I evaluated both emersion/go-vcard and wehmoen/vcard-go, looking both at completeness and performance. The benchmark and tests parsed a directory of 955 vcf files.
| Benchmark | Runs | Timing |
|---|---|---|
| BenchmarkWehmoen-16 | 28 | 40392531 ns/op |
| BenchmarkEmersion-16 | 38 | 30069657 ns/op |
In that set of files, 7 vcf files generated parse errors by Wehmoen, whereas Emersion parsed all files.
Neither package had any significant external dependencies; Emersion has
literally none, and Wehmoen imports only testify, which is irrelevant in the
final linking.
Questions? Ideas? File bugs and requests through the issue tracker, or email questions and patches to the mailing list.
If you have cloned the repository, I use legume
for development issue tracking, as I do with all of my projects. To see behind
the curtain, in the repository run legume to see the tickets hidden in the
sourcecode.
[^1] No guarantees; in fact, statistically, it's almost certain there's some project out there called "lbb", but there was non in Arch's AUR, and that's good enough for me.
FAQs
Unknown package
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Security News
n8n led JavaScript Rising Stars 2025 by a wide margin, with workflow platforms seeing the largest growth across categories.

Security News
The U.S. government is rolling back software supply chain mandates, shifting from mandatory SBOMs and attestations to a risk-based approach.

Security News
crates.io adds a Security tab backed by RustSec advisories and narrows trusted publishing paths to reduce common CI publishing risks.