synq, a tiny android-to-org capture system.
synq consists of an Android app for capturing notes items and a docker agent that pulls notes and saves them to a local .org file.
- Open Synq app
- Type note, mark as TODO (opt), add tags (opt), save.
- If home server accessible, post unsynced captures to lan-only service and appended to
synq.org.
Architecture
android app
kotlin + jetpack compose
room sqlite local queue
workmanager + manual sync
okhttp/retrofit client
home server
docker container on jeeves/unraid
python + fastapi
sqlite idempotency store
append-only org writer
- user saves capture locally
- app marks it pending
- sync runs when server is reachable
- app posts pending captures to fastapi
- server validates, dedupes by id, appends to phone.org
- app marks capture synced
Build & Deploy
First, clone the repo.
Build and deploy synq-server, the docker container that listens for new notes and writes to the local file.
Then, build and install the synq app.
Finally, retrieve the token (token.txt in the docker container's data directory, or from the container logs docker logs synq-server)
1. synq-server (docker)
- Build from
docker build -t synq-server ./server - Run (replace paths and token as needed):
docker run -d --name synq --restart=unless-stopped \
-p 8765:8765 \
-v /mnt/user/synq/data:/data \
synq-server
The server generates a random token on first start and logs it prominently. Copy it into the android app settings. To use a fixed token instead, pass -e PHONE_CAPTURE_TOKEN=yourtoken.
2. synq (android)
Download apk from Releases, on the right
Or, build from source:
Open android/ in Android Studio and hit Sync. then either:
- run on device/emulator directly from Android Studio (▶), or
- build a release APK Then sideload to a connected device:
- terminal:
adb install app/build/outputs/apk/release/app-release-unsigned.apk
Description


