nextcloud-notes-desktop/README.md
Daniel d8458d807b
Some checks failed
Release / Build Linux (push) Has been cancelled
Release / Build macOS (push) Has been cancelled
Remove Keychain dependency for recovery build
2026-05-15 18:37:15 +02:00

60 lines
2 KiB
Markdown

# Nextcloud Notes Desktop
A fast, cross-platform desktop client for the Nextcloud Notes app, inspired by `dgmid/nextcloud-notes-mac-client` but rebuilt with a modern Electron + React stack.
## Goals
- macOS-first desktop experience with Windows/Linux builds available.
- Fast startup from a local IndexedDB cache.
- Incremental sync using the Nextcloud Notes API `pruneBefore` and chunk cursor support.
- No credential persistence in the recovery build: app passwords stay in memory only and must be entered each launch.
- ETag-aware updates to avoid overwriting newer server changes.
## Development
```bash
npm install
npm run dev
```
Use a Nextcloud app password for login.
## Packaging
```bash
npm run dist:mac
npm run dist:win
npm run dist:linux
```
Artifacts are written to `release/`.
macOS DMG builds must run on macOS because the DMG toolchain and `dmg-license` dependency are Darwin-only. The `dist:mac` script builds both Intel and Apple Silicon outputs when run on a Mac.
## CI Releases
Forgejo Actions builds release artifacts on registered runners. The Linux job uses the existing `ubuntu-latest` runner; the macOS job expects a Forgejo runner registered with the `macos-latest` label so it can build DMG/zip artifacts natively. Push a version tag to publish artifacts to a Forgejo Release:
```bash
git tag v0.1.0
git push origin v0.1.0
```
The workflow can also be run manually from the Actions tab; manual runs upload workflow artifacts but do not create a GitHub Release unless the run is for a `v*` tag.
Current Linux outputs:
- `release/Nextcloud Notes-0.1.0-linux-x86_64.AppImage`
- `release/Nextcloud Notes-0.1.0-linux-amd64.deb`
## Notes API
The app uses:
- `GET /index.php/apps/notes/api/v1/notes?chunkSize=100&pruneBefore=<unix>`
- `GET /index.php/apps/notes/api/v1/notes/:id`
- `POST /index.php/apps/notes/api/v1/notes`
- `PUT /index.php/apps/notes/api/v1/notes/:id` with `If-Match`
- `DELETE /index.php/apps/notes/api/v1/notes/:id`
The sync path handles the API's final pruned ID-only chunk for deletion detection.