Secretary Links - Android
CalDAV-based website change monitor. Stores monitored URLs as VJOURNAL entries
in /links/-namespace collections (unprefixed, since v23). Each link has a URL, description, and RRULE
that determines how often the app checks for content changes.
What it does
- Watches websites you select and tells you when they change
- Each entry has a URL, title and description; an optional RRULE decides how often it is re-checked
- Cheap re-checks first: ETag and Last-Modified, then a SHA-256 content hash when the server sends neither
- Favicons are fetched once and stored with the entry
- Notification when a page changed, with a link straight to it
- Share links into the app from other apps, open entries in the browser
- Full CalDAV sync through the shared Secretary client, so entries exist on your own server
Changelog
Every released version: Apps/links/changelog
Screenshots

Features
- Add website URLs with title and description
- RRULE-based scheduling for periodic change detection (optional)
- SHA-256 content hashing for reliable change recognition
- ETag and Last-Modified headers for efficient re-checks
- Favicons fetched and stored as base64 in VJOURNAL
- Push notifications when changes are detected
- Status icons on every row: warning (changed) and cloud-off (not reachable, server 0.31.0) to the left of the favicon, since v36
- Share links to/from other apps
- Open links in browser
- Folders: tags as
TAG:in CATEGORIES, first tag = folder, list groups by folder (v38) - Per-check Link geprüft notification plus one aggregated change summary (v38)
- Single canonical collection
mainby default; collection management behind the shared Sammlungs-Nutzung setting (v38) - Full CalDAV sync via secretary-common-android
Architecture
- Package:
org.beowulf.secretary.links - VJOURNAL format in
/links/collections (via common CaldavClient) - X-LINK-* custom properties for URL, hash, etag, last-modified, last-checked, last-error
- RRULE stored in CATEGORIES as
RRULE:FREQ=DAILY;INTERVAL=1 - AlarmManager for scheduled checks
- OkHttp for website fetching
Build
export ANDROID_HOME="$HOME/Android/Sdk" # bzw. sdk.dir=... in local.properties
gradle :links:assembleDebug # Debug-APK
gradle :links:testDebugUnitTest # Unit-Tests
Release: gradle :links:assembleRelease (signiert, braucht signing.properties)
Server Reference
secretary-server(CalDAV/CardDAV, Rust):~/Projects/secretary/- Tremere:
https://tremere:8443
- Tremere:
- Server-side link checker
secretary-server-linksis part of thesecretary-serverdeb since 0.28.0 (no separate package/unit); the server runs it on the[links]interval (active = true,interval = "30m", server 0.29.0). - Failed fetches are recorded on the link itself since server 0.31.0 as
X-LINK-LAST-ERROR:<message>in the DESCRIPTION (single line, max. 300 chars, empty value = healthy, cleared again on the next successful fetch); the checker then still exits 0, so the server's addon loop stays quiet.
Attachments:
- links-list.png [download] added by beowulf on 2026-10-06 16:03:28. [details]