Lyfind is a little suite of components which helps you in finding, modifying and saving the lyrics of your favorite songs.
Lyfind is composed of four kinds of components: a storage where your lyrics are saved, named “Lyric Cache”, a daemon which the various elements connect to, a set of plugins which query lyrics web pages (or other lyrics sources), and one (or more) clients which make the queries, modify and save the found lyrics. But, usually, you don't have to care about all of this: you can simply install lyfind, start one of the clients and start enjoying it.
Anyway, for those interested in a technical overview of Lyfind, the first thing to talk about is the great decoupling of Lyfind components. In fact, we could define them through the interfaces they offer each other.
The client(s) connect to the daemon through a TCP/IP connection (if you are wondering about security implications, let's just say that, by default, the daemon accepts only connections which comes from localhost), and follows the protocol described in the protocol.html document, which you can find on the source tree.
The plugins are little Lua scripts which are loaded by the daemon at startup, and called whenever necessary. The interface those plugins must offer to the daemon is always described in the protocol.html document.
The Lyric Cache element is the only one that's not highly decoupled from server. The only choice is an SQLite database, but the design used to write the code makes easy to add multiple backends in the future.