60 lines
2 KiB
Markdown
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.
|