Nextcloud Notes client for Android and iOS, written in Flutter. Notes are kept on the device too, so you can edit them offline; the server keeps plain Markdown files and categories map to folders.
- 👥 Accounts - several Nextcloud accounts, sign-in through Login Flow v2, credentials in the Android Keystore or Apple Keychain
- 💾 Offline - local SQLite database, autosave, sync and manual conflict resolution
- ✍️ Editor - Markdown with an opt-in preview, checklists, templates, edit history and in-note search
- 🗂️ Organizing - categories, favourites, saved views and filters for attachments, tasks and sync state
- 📎 Attachments - transfer queue with a local cache, sharing through Nextcloud, receiving content from other apps
- 📱 Device - home screen widgets, app lock, light and dark theme, list and editor side by side on wide screens
- 🔄 Background sync - Android WorkManager; the system decides when it actually runs
- 🌍 Languages - Czech, English and German
- 📊 Telemetry - optional Sentry and Rybbit, compiled in only when configured at build time and switchable off in Settings
Open items (full backup export, server trash and history, background sync on iOS, notify_push, desktop builds) are tracked in TODO.md.
- Nextcloud server with the Notes app
- Android 7.0 (API 24) or newer, iOS 15.0 or newer
- Flutter 3.47.7 and Dart 3.13.5 for building (pinned in
.flutter-version)
- Android: closed testing on Google Play, opt in at https://play.google.com/apps/testing/com.nkshub.nextcloudnotes
- iOS: TestFlight
Build from source:
git clone https://github.com/nks-hub/ownnotes.git
cd ownnotes/apps/mobile
flutter pub get
flutter runRelease builds read apps/mobile/android/key.properties (gitignored) with the upload keystore; there is no fallback to the debug key. --android-project-arg=candidate=true builds com.nkshub.nextcloudnotes.candidate ("OwnNotes Candidate"), which installs next to the store app.
Crash reporting and analytics stay off unless the build gets a configuration, see apps/mobile/telemetry.env.example. The iOS signing team is passed on the xcodebuild command line as DEVELOPMENT_TEAM.
- Implementation plan
- Synchronization invariants
- Development workflow
- Candidate behavior and limitations
- Evidence and remaining gates
- Protocol sources
git config core.hooksPath .githooks
bash tool/check.sh
bash tool/check_mobile.shcheck_mobile.sh serializes Flutter tests with flock where it is installed; on Windows run one checkout at a time.
- Fork the repository
- Create a feature branch (
git checkout -b feature/my-change) - Commit your changes (
git commit -m 'feat: add my change') - Push the branch (
git push origin feature/my-change) - Open a Pull Request
- 📧 Email: dev@nks-hub.cz
- 🐛 Bug reports: GitHub Issues
MIT License — see LICENSE for details.
Made with ❤️ by NKS Hub