Files in the top-level directory from the latest check-in
- hismetic
- src
- 42links.asd
- build.sh
- LICENSE
- README.md
42links
42links is an open-source, web-based bookmarking server. It supports multiple accounts.
Screenshot
Inspirations
42links was not-so-loosely inspired by Espial, another open-source, web-based bookmarking server, written in Haskell so it won't work well on OpenBSD which I use in some of my server infrastructure.
Installation
Database
You'll need PostgreSQL with an empty database set up that will hold 42links's data later. You will be asked for the connection data when starting 42links for the first time.
Application
You'll need SBCL with Quicklisp set up.
- Download this repository, either via Fossil (
fossil clone https://code.rosaelefanten.org/42links
) or by downloading the tarball or the ZIP archive from here. - Run
build.sh
from inside your clone's directory. On non-UNIX platforms, please see thebuild.sh
source code for a rough estimate on how to build 42links. - Run
./42links
and fill the blanks during the setup process. It will ask you to set a few environment variables. If you don't do that, the setup process will start again during the next application start. Please do it. Seriously. - 42links will run on the port you told it during the setup. Enjoy.
Packages
Nobody seems to have packaged 42links yet. You can be the first! (Please tell me so I can add a link here.)
Bugs and Patches
Bug reports are gladly accepted, please create a ticket. (Anonymous contributions are allowed.) For patches or other contributions, please create a patch file and share it in the forum (requires an account) or by other means.
Design Decisions
Programming Language
Given that 42links mostly exists because Espial does not run on OpenBSD, I built it with portability and simplicity in mind. Common Lisp works just well on OpenBSD and both the language and the code are as easy as I want them to be. (Also, I had promised to use Lisp and I try to keep as many promises as I can.)
Database
This software requires a PostgreSQL database, as that's what I happen to use anyway. PostgreSQL is really good. If you don't want to use PostgreSQL, please don't use 42links.
Security
42links uses bcrypt for password storage, with an additional (optional) canvas
-based captcha on the login page to make brute-force attacks less attractive. While this makes both the initial onboarding process and the login slightly slower and it is somewhat less secure than Argon2, Scrypt and whatnot, I think it is a good compromise between safety and performance.
JavaScript
Almost everything in 42links works just well in browsers that don't support (or run) JavaScript. The two features that require JavaScript are 1) the (optional) captcha mentioned above and 2) tags auto-completion. This is by design. There is no technical advantage hidden inside the option to add more AJAX interaction, so I did not do that.
Donations
Yes, please! Both Paypal and Liberapay are accepted.
FAQ
How does the search work?
Enter a regular expression, press Enter.
How can I manage tags?
Once you add a new tag to a link, you can edit the tag in the tag list (available from the menu bar). Add a new regular expression there to apply the tag to all matching URLs. You can also delete (= unassign) the new tag from all links there.
Can you add <feature>?
I probably could, and I might consider it if there is an obvious advantage in doing so. However, you are invited to contribute your own features (see "Bugs and Patches" above).
Wouldn't <random AI stuff> make this software much better?
No.