An Android companion app for a self-hosted AwesomeBookmarks server.
The web interface already works in a mobile browser. What a browser tab cannot do is be in the share sheet, and that is the whole point: from any page in any browser, share it and the app saves it with the tags you want, in the folder you want, the way Wallabag does.
| Browser tab | This app | |
|---|---|---|
| Save the page you are reading | Copy the URL, switch app, paste | Share → pick folder and tags → done |
| Tags while saving | No | Autocomplete against your server, unknown ones created |
| Folder while saving | No | Full folder tree, last one remembered |
| Home screen widget and launcher shortcut | No | Yes |
| Stays signed in | Until the server drops the session | Indefinitely, until you sign out |
| Biometric lock in front of your library | No | Optional, on by default |
| Automatic LAN then VPN fallback | No | Yes |
| Tells you when a new version ships | No | Yes, with one tap to install |
| Sign in with a passkey | Yes | Yes, where the server allows it |
| HTML export downloads | Usually fail silently | Saved to Downloads |
Everything else, the whole library UI, is your server's own web app in a WebView. This app does not reimplement it.
- An AwesomeBookmarks server you can reach from the phone. See its own deployment docs; the short version is one Docker container on port 3001.
- An account on it.
- Android 8.0 (API 26) or newer, with a reasonably current Android System WebView (Chromium 108+).
Grab the APK from the latest release.
- Enter your server address, for example
http://192.168.1.50:3001. The scheme is optional; plain HTTP is fine on a local network. - Optionally add a fallback address, for example your Tailscale hostname. The app probes the primary first and falls back automatically, then remembers whichever answered.
- Sign in with the same email (or nickname) and password you use on the web. If your account has two-factor authentication, the app asks for the code.
From any browser: Share → AwesomeBookmarks. The sheet opens with:
- the URL, pulled out of whatever the browser shared,
- the title, prefilled and editable, or left empty for the server to read from the page,
- a folder picker showing your whole tree, preselected to the last folder you used,
- a tag field that autocompletes against your existing tags and creates the ones that do not exist yet.
There is also Save without asking in Settings, which skips the sheet entirely and files the link straight into your default folder with your default tags.
The server keeps your data encrypted and derives the decryption key from your password at login, holding it in memory only and dropping it after about 30 idle minutes. After that even a valid session cookie starts getting 423 Locked.
An API token would sidestep that, but a token cannot give the WebView a session and the WebView is most of the app. So the password is stored encrypted under an Android Keystore key and replayed automatically whenever the server answers 401 or 423. One login, and the share target still works after days of not opening the app.
That means the phone holds a credential to your whole library, which is why the biometric app lock is on by default. See SECURITY.md.
If your account uses two-factor authentication or a passkey, that replay cannot work: the server wants a fresh code every time, and a passkey ceremony cannot run in the background. Paste an API token (web app → Settings → API) into Settings → API token and background saving keeps working. Details in docs/FEATURES.md.
One consequence worth knowing: sign out from the app's Settings, not from the web interface inside it. Signing out in the web UI only clears the cookie, and the app will helpfully sign you straight back in.
git clone https://github.com/mateof/awesome-bookmarks-android.git
cd awesome-bookmarks-android
./gradlew assembleDebug
./gradlew installDebug
./gradlew testJDK 17 and the Android SDK (compileSdk 35). Put sdk.dir in local.properties if the build cannot find the SDK.
- docs/SETUP.md: reaching your server from the phone, HTTPS, Tailscale, self signed certificates.
- docs/FEATURES.md: every feature and setting, and what it costs.
- docs/ARCHITECTURE.md: module map, the session model, which endpoints are used.
- docs/RELEASING.md: version bumps, signing, the release workflow.
- CONTRIBUTING.md, SECURITY.md, CHANGELOG.md.
- No offline access. Your bookmarks live on your server. Out of reach of the server, out of reach of your bookmarks. Saving while offline is not queued yet.
- The library UI is the server's web app, so anything that looks or behaves oddly there will look the same here.
This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. See LICENSE.
It is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY, without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Every dependency is Apache-2.0, which is compatible with GPL-3.0.