dettmer.dev
← works
Android 7.0+

Simple Notes Sync

Offline-first Android notes app with WebDAV sync, homescreen widgets, checklists, and full Material You design - your data stays on your own server.

active

Built because existing note apps either lock you into their cloud or require a complex setup just to get started. The goal was something that works offline without compromise, syncs to a server you control, and stays out of your way.

Core Idea

Every note lives as a JSON file - locally on the device and on your server. No database, no hidden formats, no proprietary lock-in. The sync layer uses WebDAV, which means it works with Nextcloud, ownCloud, or a dead-simple Docker container that takes five minutes to set up.

Offline is the default state. Sync is an enhancement, not a requirement.

Features

  • Offline-first - works fully without internet; local storage is always the source of truth
  • Flexible views - switch between list and grid layout with 1-5 column scaling
  • Interactive checklists - tap to check, drag & drop reordering, auto-sort checked items to the bottom
  • Configurable sync triggers - on save, on resume, WiFi-connect, periodic (15/30/60 min), or on boot
  • Homescreen widgets - quick-note and note list widgets built with Jetpack Glance
  • Smart sorting - by title, date modified, date created, or type
  • Parallel sync - downloads multiple notes simultaneously
  • Undo/Redo - full history in the note editor
  • Desktop integration - Markdown export for Obsidian, VS Code, Typora
  • Google Keep import - bring your existing notes along
  • Local backup - export and import as encrypted JSON
  • Material You - 7 color schemes including AMOLED and Dynamic Color (Android 12+)
  • Multilingual - English and German, community translations via Weblate
  • Zero tracking - no analytics, no telemetry, no third-party services
  • Available on F-Droid - open source, reproducible builds

Architecture

Android - Kotlin, Jetpack Compose, MVVM with StateFlow. File-based JSON persistence, WorkManager for reliable background sync in Doze Mode. Minimum Android 7.0 (API 24).

Widgets - GlanceAppWidget with a dedicated ViewModel. Independent data flow so widgets stay responsive when the main app is closed.

Sync - WebDAV with ETag caching for fast delta syncs. UUID + timestamp conflict resolution ensures no data is silently lost. Docker setup included for self-hosting without any configuration overhead.

Storage - JSON files locally, JSON files in /notes/ on the server, optional Markdown in /notes-md/ for desktop editing.

Self-Hosting

Server setup takes about five minutes:

git clone https://github.com/inventory69/simple-notes-sync.git
cd simple-notes-sync/server
cp .env.example .env
# set a password in .env
docker compose up -d

Then open the app, go to Settings → Sync, enter your server URL, username, and password. That’s it. Your data never leaves your infrastructure.

platform
Android 7.0+
stack
Kotlin, Jetpack Compose, Material Design 3, WebDAV, Docker