root a58fa6158d Make the Android app build, and fix what compiling it exposed
Why: the module was written but never compiled, so nothing about it was
proved. Building it found a name clash and a theme that would have crashed
every device below Android 10.

What:
- KeepOrgProvider.requireContext -> ctx(): ContentProvider gained
  requireContext() in API 30, and Kotlin refused the silent hiding.
- The application theme was @android:style/Theme.DeviceDefault.DayNight,
  which is API 29 while minSdk is 26. Replaced with @style/AppTheme, plain
  DeviceDefault in values/ and DayNight in values-v29/.
- Backup exclusions: data_extraction_rules.xml and backup_rules.xml exclude
  every domain for both cloud backup and device transfer. The session token
  authenticates as the user and the mirrored files are the organization's
  password databases; neither belongs in a backup.
- User-facing strings moved from code into strings.xml, so the app is
  translatable. Layouts stay in code, as before.
- mipmap-anydpi-v26 -> mipmap-anydpi (the qualifier is redundant at minSdk
  26), and the redundant activity label is gone.
- Lint is configured to write a text report, and `make android-lint` runs it;
  `make android` now fails with a clear message when ANDROID_HOME has no SDK.

Proved: the unsigned release APK builds (656 KB), lint reports "No issues
found", and the packaged DEX contains all 16 classes including every manifest
component. Toolchain used: JDK 21, Gradle 8.10.2, SDK platform 35 and
build-tools 35.0.0; on this arm64 host Google's x86-64 aapt2 runs under
qemu-user-static with amd64 multiarch libraries, which android/README.md now
documents. The app has still not run on a device: there is none here.
2026-10-29 16:55:26 +01:00

KeepOrg

A synchronization adapter for KeePass. Your databases stay ordinary .kdbx files that KeePassXC, KeePass2 or KeePassDX opens directly; a server keeps them in step between everyone who has access.

The server never opens a database and cannot read one. Master passwords stay on the clients.

  • Server (keeporgd, Linux): hosts many KDBX databases, controls access with a tree of user groups, accepts registrations by invite link or OIDC, and pushes updates to connected clients.
  • Desktop client (keeporg, Linux, macOS, Windows, BSD): mirrors every assigned database into one directory as a real file, pushes each save and applies what others push.
  • Android client: the same, published to every file picker as a storage provider.

No third-party dependencies, no cgo, no FUSE.

Quick start

make check                 # gofmt, vet, tests
make all                   # keeporgd and keeporg for this host

# a server for trying it out, on 127.0.0.1:8765
KEEPORG_ADMIN_PASSWORD=dev-password-1 make run-server

# in another shell
build/linux-arm64/keeporg login -server http://127.0.0.1:8765 -user admin
build/linux-arm64/keeporg groups
build/linux-arm64/keeporg db -create "Team Vault" -group <group-id>
build/linux-arm64/keeporg run

Then save a new KDBX database as Team Vault.kdbx in ~/KeepOrg from your KeePass application. It becomes version 1 on the server, and every later save is pushed automatically.

Packaging

make deb        # Debian packages for the client and the server
make dmg        # macOS disk image with an /Applications symlink (on macOS)
make windows    # Windows zip with a Task Scheduler job
make android    # unsigned release APK (needs the Android SDK)
make help       # every target

Documentation

S
Description
No description provided
Readme
902 KiB
Languages
Go 87.4%
Kotlin 8.3%
Makefile 1.8%
Shell 1.3%
Go Template 0.6%
Other 0.6%