Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,9 @@ migrate_working_dir/
.pub/
/build/
/coverage/
/delivery/
/test-results/
/evidence/
.widget_preview/
**/node_modules/
linux/flutter/ephemeral/
Expand Down
41 changes: 35 additions & 6 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# BusyMark

Markdown and Writerside editor for Linux.
Markdown, Writerside, and Nextcloud Notes editor for Linux.

[![busymark](https://snapcraft.io/busymark/badge.svg)](https://snapcraft.io/busymark)

Expand All @@ -14,10 +14,11 @@ Markdown and Writerside editor for Linux.

* **Markdown editing** — Source, Editor, Reading, and Split views with formatting tools, syntax highlighting, code folding, tables, images, links, code blocks, callouts, collapsible content, and document diagnostics.
* **Writerside projects** — Open and create Writerside-compatible projects; edit Markdown and XML topics; manage instances, tables of contents, reusable TOC libraries, and project structure.
* **Project navigation and search** — Files, Topics, and Outline views, tabbed documents, command palette, keyboard shortcuts, document search and replace, reviewed workspace-wide replacement, and Markdown TOC generation.
* **Nextcloud Notes** — Connect to a Nextcloud server, create and edit notes offline, synchronize changes, search and filter notes, manage categories and favorites, and work with attachments.
* **Navigation and search** — Files, Topics, and Outline views, tabbed documents, command palette, keyboard shortcuts, document search and replace, reviewed replacement across local workspaces, and Markdown TOC generation.
* **Technical documentation** — Local rendering of Mermaid, PlantUML, D2, fenced OpenAPI specifications, and MathJax mathematical expressions.
* **PDF and HTML publishing** — Export Markdown documents and Writerside instances to configurable PDF or portable offline HTML, with controls for layout, typography, tables of contents, heading numbering, and HTML styling.
* **Git integration** — Review changes and diffs, stage and unstage files, commit, create and switch branches, fetch, pull, push, inspect file and project history, compare historical versions, and restore earlier file versions.
* **Git integration for local workspaces** — Review changes and diffs, stage and unstage files, commit, create and switch branches, fetch, pull, push, inspect file and project history, compare historical versions, and restore earlier file versions.
* **Clipboard and Local History** — Reuse source, rich-text, and image fragments during the current session; compare and restore persistent on-device document revisions independently of Git.
* **AI-assisted editing** — Optional Ollama, OpenAI, and Gemini integration with explicit edit scope and shared context, proposal review before changes are applied, and AI-assisted Git commit-message drafting.
* **Workspace reliability** — Detect files changed outside BusyMark, recover unsaved documents, restore previous workspace sessions, manage remote-image permissions, and protect Git operations behind workspace trust.
Expand Down Expand Up @@ -186,10 +187,38 @@ More information:
* [Admonitions](docs/admonitions.md)
* [Collapsible elements](docs/collapsible-elements.md)

## Nextcloud Notes

BusyMark can open a **Nextcloud Notes** workspace alongside its local Markdown and Writerside workflows. Notes stay associated with your Nextcloud account rather than a folder on your computer.

### Connect your account

1. Ensure the **Notes** app is enabled on your Nextcloud server.
2. On BusyMark’s welcome screen, choose **Nextcloud Notes**. You can also open **Settings → Nextcloud Notes**.
3. Enter the full **HTTPS** address of your Nextcloud server and click **Connect**.
4. Complete authorization in your default web browser. BusyMark verifies Notes compatibility and opens the note workspace.

Once connected, select **Nextcloud Notes** on the welcome screen to reopen the workspace. Use **Settings → Nextcloud Notes** to open it, reconnect, or disconnect the account. **One Nextcloud account can be connected at a time.**

### Work with notes

* **Create and edit:** Create notes from the Notes sidebar and edit them using the normal Markdown editor. Use each note’s menu to change its title, category, or favorite status, save a separate local copy, or delete the note.
* **Find and organize:** Search notes by title, content, or category; filter by favorites or category; and see synchronization status in the note list and editor.
* **Work offline:** Edits and new notes are saved to local storage before they are synchronized. Pending changes can survive an application restart. Synchronization runs when a connection is available; the sidebar’s **Refresh** control requests another pass.
* **Review conflicts:** If a note changes on the server while you have local edits, BusyMark preserves the competing versions for review instead of silently overwriting one. The comparison workflow supports choosing a version, merging changes, or recovering content as a separate note. Ambiguous note-creation results also require explicit review.
* **Use attachments:** Add files to notes, view supported images and media, and include managed resources when exporting Markdown or HTML. PDF export includes supported images but does not embed arbitrary file attachments. New uploads are limited to **100 MiB per file**.
* **Export or recover:** Export individual notes to PDF or offline HTML, use **Save As** to create an independent local Markdown copy, and restore earlier content through Local History.

### Requirements and limitations

* BusyMark requires a server advertising **Nextcloud Notes API 1.4 or later in API major version 1**. Notes 6.0.x and 6.1.x are supported baselines. **Deleting attachments** requires Notes 6.1.0 or newer.
* Connections require HTTPS and certificates trusted by the operating system. Authentication uses Nextcloud’s browser-based Login Flow; the resulting app password is stored in the Linux keyring (libsecret), not in the notes database.

## Search and replace

BusyMark supports active-document replacement and reviewed workspace-wide
replacement. See [Search and replace](docs/search-and-replace.md) for search
replacement for local workspaces. Nextcloud Notes supports replacement within
individual notes, but not workspace-wide replacement. See [Search and replace](docs/search-and-replace.md) for search
options, scope, preview behavior, and stale-result handling.

## Diagrams and mathematics
Expand All @@ -203,7 +232,7 @@ See:

## Export

BusyMark can export the current Markdown document or a Writerside instance to PDF and portable offline HTML.
BusyMark can export the current Markdown document (including a Nextcloud note) or a Writerside instance to PDF and portable offline HTML.

PDF export supports configurable paper size, orientation, margins, typography, headers and footers, page numbering, table of contents, and heading numbering.

Expand Down Expand Up @@ -232,7 +261,7 @@ undo, crash recovery, and Git. Implementation and verification details are in

Issues and focused pull requests are welcome.

Changes should remain consistent with BusyMark's current scope as a desktop Markdown and Writerside documentation editor.
Changes should remain consistent with BusyMark's scope as a Linux desktop editor for Markdown, Writerside documentation, and Nextcloud Notes.

## License

Expand Down
1 change: 1 addition & 0 deletions docs/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -35,5 +35,6 @@ are intentionally independent so they can be referenced directly.
- [AI implementation and qualification](development/ai.md)
- [Export verification](development/export-verification.md)
- [History implementation](development/history.md)
- [Nextcloud Notes architecture, API contract, and verification](development/nextcloud-notes.md)
- [Visualization implementation and verification](development/visualizations.md)
- [Writerside verification](development/writerside-verification.md)
4 changes: 2 additions & 2 deletions docs/development/export-verification.md
Original file line number Diff line number Diff line change
Expand Up @@ -109,7 +109,7 @@ artifacts to a fresh temporary directory:
verification_dir="$(mktemp -d)"
report="$verification_dir/report.json"
BUSYMARK_RELEASE_SMOKE=1 \
xvfb-run -a env WEBKIT_DISABLE_COMPOSITING_MODE=1 \
xvfb-run -a env GDK_BACKEND=x11 \
LIBGL_ALWAYS_SOFTWARE=1 build/linux/x64/release/bundle/busymark \
--visualization-release-smoke="$report"
```
Expand Down Expand Up @@ -141,6 +141,6 @@ do not certify physical-printer or assistive-technology behavior.
## CI environment

The Linux workflow in `.github/workflows/flutter-linux.yml` is authoritative for
native packages, environment flags, browser setup, X11 and Wayland runs, and the
native packages, environment flags, X11 and Wayland runs, and the
strict Snap verification. Keep ordinary build prerequisites in the main README;
do not copy the larger CI-only dependency set into user installation steps.
25 changes: 25 additions & 0 deletions docs/development/history.md
Original file line number Diff line number Diff line change
Expand Up @@ -154,6 +154,10 @@ is accepted, so an older checkpoint cannot recreate erased revisions.

## Verification

Keep manual-probe outputs outside the repository, for example in directories
created with `mktemp -d`. Use disposable workspaces for probes that edit files,
and remove their temporary data after inspection.

Run the standard checks with the repository-pinned toolchain:

```bash
Expand Down Expand Up @@ -189,3 +193,24 @@ GDK_BACKEND=x11 build/linux/x64/debug/bundle/busymark \
Under `xvfb-run`, set `GDK_BACKEND=x11` explicitly so an inherited
`WAYLAND_DISPLAY` cannot select an unrelated Wayland connection. Clipboard
behavior under Wayland requires a compositor-driven run with real input focus.

The native selection probe covers pointer/keyboard selection, highlight
geometry, rich/plain clipboard content, table boundaries, editing, undo and
restored selection. It copies the maintained fixture before use and exercises
the production editor and Linux clipboard:

```bash
selection_output="$(mktemp -d)"
flutter build linux --debug --no-pub --target tools/wysiwyg_selection_smoke.dart
GDK_BACKEND=x11 dbus-run-session -- \
xvfb-run -a -s '-screen 0 1440x1000x24' \
build/linux/x64/debug/bundle/busymark \
test/fixtures/wysiwyg/selection_boundaries.md "$selection_output"
flutter build linux --debug --no-pub --target lib/main.dart
```

The probe exits nonzero on failed assertions and writes temporary captures and
JSON reports for inspection. Its optional `--application` mode opens a supplied
file in the full application and requires the exact synthetic table fixture
checked by the driver; use an isolated application profile and disposable files
for that mode.
Loading
Loading