Open-source, privacy-friendly, self-hostable note-taking app with stylus support.
An alternative to Samsung Notes, OneNote and GoodNotes that respects your data.
This project is actively developed by me, with the help of AI tools for productivity and experimentation. All design decisions and direction are fully human-driven.
- Typed notes with Markdown formatting
- Handwritten notes with stylus or mouse (pen, highlighter, eraser, pressure sensitivity)
- Notebooks to organize your notes
- WebDAV sync with your NAS, Nextcloud, or any WebDAV server
- Offline-first — works without internet
- Conflict resolution when editing the same note on multiple devices
- Search by title
- Linux desktop app (Flutter)
- Python backend with REST API and WebDAV server
- Android app
- PDF export
- Handwriting OCR
- Page templates (lined, grid, dotted)
- End-to-end encryption
- Docker deployment
NexaNote uses two components that work together:
- Python backend — handles storage (SQLite), REST API, and WebDAV sync server
- Flutter app — the interface, runs on Linux desktop and Android (coming soon)
NexaNote/
├── main.py # Start the backend
├── requirements.txt
├── nexanote/ # Python backend
│ ├── models/ # Data models
│ ├── storage/ # SQLite layer
│ ├── sync/ # WebDAV server + sync engine + conflict resolution
│ └── api/ # REST API (FastAPI)
├── app/ # Flutter app
│ └── lib/
│ ├── screens/ # UI screens
│ ├── widgets/ # Reusable widgets (ink canvas, notes list...)
│ └── services/ # API client, app state
└── tests/ # 64 tests
- Python 3.10+
- Flutter 3.10+
cd NexaNote
python -m venv venv
source venv/bin/activate
pip install -r requirements.txt
python main.pyThe backend starts two servers:
| Service | URL | Purpose |
|---|---|---|
| REST API | http://127.0.0.1:8766 | Used by the Flutter app |
| WebDAV | http://127.0.0.1:8765 | Connect your NAS or Nextcloud |
| API docs | http://127.0.0.1:8766/docs | Interactive Swagger UI |
cd NexaNote/app
flutter pub get
flutter run -d linuxbash ~/NexaNote/nexanote.shThis script starts the backend and the app automatically.
Once your NAS has WebDAV enabled, open Settings in the app and enter your NAS URL and credentials. NexaNote will sync your notes automatically.
Tested with Ugreen NAS (UGOS Pro). Should work with any WebDAV-compatible server including Nextcloud.
python -m pytest tests/ -v64 tests covering models, database, WebDAV provider, conflict resolution, and REST API.
The project is in early development. Contributions are welcome.
| Task | Difficulty |
|---|---|
| Android app (Flutter) | Hard |
| PDF export | Medium |
| Docker / docker-compose | Easy |
| Page templates | Easy |
| Handwriting OCR | Hard |
| End-to-end encryption | Hard |
- Fork the repo
- Create a branch (
git checkout -b feature/my-feature) - Commit your changes
- Open a pull request
MPL 2.0 — modifications must remain open-source, commercial use is allowed.