WrengleWrengle
The workspace

The workspace

Beta

You get an IDE-shaped workspace for notes, charts, whiteboards, file previews, and meetings: a file tree, tabbed and split editors, and a command palette that ties it together.

Resize panels

Drag the divider between panels to give either side more room. You can also focus a divider with Tab and use the arrow keys to resize it; Home and End move it to its size limits. This works for the Files sidebar, split editors, Assistant and its terminal, utility panels, Workflows, and Meetings.

You can also resize the conversation and preview in Plugin Builder, Settings navigation, plugin settings pages, the History timeline and detail view, and the relationship explorer's graph and details. These splits remember your chosen sizes on this device, with separate preferences for side-by-side and stacked layouts. Window resizing may temporarily limit a panel's size without replacing your saved preference.

Drag the right edge of the chart Shapes library or the left edge of the whiteboard library to change its width, including when it floats over the canvas. These widths are remembered on this device. The chart library still fills its pane in compact mode and restores your preferred width when space allows. Panel size preferences do not sync between devices.

Window header and focus mode

At the top of the window, the current vault menu sits on the left. When a note is open, its folder path appears next to the menu as clickable segments you can jump to. On the right, use Search, New tab (+), and Toggle focus mode. Note-specific actions show up only when a note is the active document, so a chart, whiteboard, or another workspace tab doesn't inherit note commands.

Toggle focus mode to collapse the left workspace rail and the right-side panels so the active editor can use the full window. Turn it off again and Wrengle restores each panel that was open before you entered focus mode, while any panels that were already collapsed stay collapsed.

File tree

The file tree shows your local vault structure. Use it to move between notes and folders, create files and folders, rename or move visible items, and soft-delete them into the app-managed trash area. Wrengle's internal and hidden files remain protected and do not appear in the tree.

While the left sidebar is open, changing the active note, chart, or whiteboard expands its parent folders and scrolls the matching file-tree row into view. A collapsed sidebar and focus mode stay closed; when you show the sidebar again, it catches up to the active document. App-owned tabs such as Graph view and Workflows do not select a vault file.

The same New tab (+) menu appears in the window header, the Files header, and every editor tab strip. Open it for New note, New chart, New whiteboard, Graph view, Workflows, and Plugin Builder. A note, chart, or whiteboard you create from this shared menu lands in the configured default note folder; use a folder's own context menu when you want to create and rename an item inside that specific folder.

Drag files and folders

Drag files, folders, or several selected items from Finder onto the file tree to copy them into the current vault. Drop onto a folder to copy them into that folder. Dropping onto a file uses that file's parent folder, and dropping into blank space in the tree uses the vault root. Wrengle never removes the Finder source. If a name already exists, the imported item is kept alongside it with a numbered name such as Report (2).pdf; folders are renamed as a whole and are never merged into an existing folder.

Drag a file or folder row out through the edge of the Wrengle window to copy it to Finder or another macOS application. Use Cmd-click to select separate rows or Shift-click to select a visible range before dragging. Wrengle saves dirty open documents covered by the selection before the native drag starts; if a document cannot be saved safely, the export is cancelled and the vault is left unchanged. Dragging within the tree remains a move rather than a copy.

Imports copy regular file bytes and folder structure. Hidden entries and filesystem links or other special entries are skipped, and permissions, extended attributes, and resource forks are not reproduced. Imports and exports show errors without overwriting existing vault content. Arbitrary imported files stay local to this computer; existing sync behavior still applies to supported notes, charts, whiteboards, and managed assets.

Renaming or moving a generic attachment does not rewrite links to that file in your notes, so update those links yourself. Folders inside the managed Notes, Projects, and People roots cannot be dragged across the managed-root boundary; move their individual generic files instead.

File previews

Open a file from the vault tree or a local attachment in a note to view it in a workspace tab. Click a file attachment's name, or choose Open File Preview from an image, file, audio, or video block's side menu. Previews are read-only. They do not convert files into notes, save edits, or add their content to the assistant's note context. Attachments and other user folders are visible alongside the editable note folders; Wrengle's internal and hidden files stay out of the tree. Preview content stays read-only in its viewer, but its file-tree entry can be renamed, moved, copied out, or soft-deleted.

FormatControls
PDFPages, printed page labels, document outline, page links, zoom, selectable text, search, and a password prompt when needed
HTML / HTMFull-bleed interactive rendering with scripts and online HTTPS resources; no preview toolbar
PNG, JPEG, GIF, WebP, SVGZoom and fit to the available space
Text and codeRead-only text, line numbers, wrapping, find, and Go to line
CSV / TSVPaged tables, find, Go to row, optional headers and delimiter selection; values stay as text
Audio and videoPlayback and seeking for codecs supported by your computer

For previews other than HTML, use Refresh in the preview toolbar after changing a file outside Wrengle. This rescans the tree and reloads the preview; missing files show an unavailable state with Refresh available to retry. HTML previews reload when Wrengle observes a new file revision; close and reopen the tab to force a fresh preview session. Refresh file list above the tree rescans the file list without reloading existing preview content. Preview tabs can be moved between panes and restored when you reopen the workspace. Opening a preview never automatically launches another application.

With Reopen last session enabled, open preview tabs remember their positions and view settings across restarts: PDF page and zoom, image zoom and scroll, text position and wrapping, CSV position and header/delimiter choices, and media playback position. Media resumes paused. Closing the last tab for a file forgets its position. Split panes can show different positions; the last interacted view of a file supplies its remembered position. Searches and passwords are not saved in the workspace snapshot.

Finding and navigating preview content

Focus a PDF, text, or CSV preview and press Cmd/Ctrl+F to focus its search field. Enter and Shift+Enter move between matches; Escape clears search and returns focus to the preview. Text and CSV find uses literal, case-insensitive matching and highlights the active occurrence. Go to line and Go to row jump directly to a source line or parsed CSV record.

CSV and TSV values remain strings, including leading zeros and formula-like text. First row as headers changes only the presentation: blank and duplicate headings remain intact, and source record numbers do not change. Choose Auto, Comma, Tab, Semicolon, or Pipe in Delimiter. CSV defaults to Comma and TSV to Tab; Auto displays the detected delimiter. The 10,000-record preview limit includes the optional header row. Find covers the loaded records and displayed columns, with truncation stated beside the controls.

PDFs with a document outline offer a Contents panel. Printed page labels appear alongside physical page numbers when available. Copy page link copies a Markdown link to the current physical page. A local link such as [Report](reports/report.pdf#page=12) opens that page even when the PDF is already open. A page link takes precedence over the remembered position.

Interactive HTML previews

HTML opens full-bleed directly below the tab strip, without a preview toolbar or resource controls. Each preview runs JavaScript in an isolated frame from an immutable snapshot of the HTML file. It cannot read sibling files or other vault content, so a page must be self-contained or load its scripts, styles, fonts, images, media, and data over HTTPS.

Each HTML path gets a stable, origin-bound browser-storage scope. localStorage and IndexedDB therefore survive preview reloads, closing and reopening the tab, and app restarts on the same installation. Another HTML path or vault gets a different scope. Renaming or moving a file, or moving the vault, starts a new scope; deleting and later recreating the same path can reuse its previous scope. This state lives in the system webview's app data, not in the vault, so vault sync and vault backups do not include it.

Normal browser CORS restrictions still apply, so some online APIs will not work; Wrengle does not proxy requests around those restrictions. Scripts, including online libraries loaded by the page, can send page content and other data available inside the preview to HTTPS services. They cannot access Wrengle's editor, app storage, native commands, or local sibling files. Forms, popups, and navigation out of the workspace are disabled. This interactive preview is separate from HTML preserved inside a Markdown note, which remains inert. WebKit can share a cookie deliberately set with Domain=localhost between sibling preview hosts, so cookie isolation is not guaranteed. Do not treat HTML from an untrusted source as a safe place for secrets.

Preview limits

HTML is limited to 6 MiB, text to 5 MiB, CSV/TSV to 10 MiB and 10,000 rows, images to 64 MiB and 40 million pixels, and PDFs/audio/video to 2 GiB. Tables show up to 200 rows per page and at most 500 columns, and indicate truncated data. Wide tables use fewer rows to keep each page within 10,000 data cells (20 rows for 500 columns). Text shows 500 lines per page; find searches the whole loaded file. Individual lines or cells longer than 32,768 characters display a labeled text window with previous/next controls. Search still covers the full loaded value and shows the window containing the active match. Unsupported formats, codecs, and damaged files display an explanation. Office documents, source editing, PDF annotation, and OCR are not supported. Text-based previews require UTF-8 encoding.

Previews read files already in the vault; there is no separate picker for previewing files outside it. This feature does not add attachment syncing: see Sync for what is copied between computers.

Editor

Write in an editor built for structured notes without giving up local file ownership: the content model is deliberately constrained so a note can round-trip through Markdown plus sidecar data safely. In a short note, click the blank canvas below the final block to focus the editor and place your cursor at the end of the note. When a note ends in a table or another block with no trailing text position, Wrengle adds an empty paragraph after it and places your cursor there.

Markdown paste compatibility

Paste Markdown from anywhere and Wrengle parses it as CommonMark with GitHub Flavored Markdown (GFM), importing ATX and Setext headings, paragraphs, CommonMark hard line breaks, thematic breaks, block quotes, bullet and numbered lists, task lists, backtick- or tilde-delimited and indented code, emphasis, strong text, strikethrough, inline code, safe links, and unaligned GFM tables into editable blocks. Table cells can contain emphasis, strong text, strikethrough, inline code, and safe links. When inline code is nested inside another style, code takes precedence: for example, **`value`** imports as code-only text, while surrounding text keeps its own formatting.

Links inside editable tables use the same safe destination allowlist as other pasted Markdown: https:, http:, and mailto:. Table alignment, hard line breaks, images, raw HTML, titled or reference links, relative destinations, unsafe destinations, action: links, and formatted runs whose text begins or ends with whitespace remain unsupported. Keep boundary spaces in a separate unstyled run. If any cell uses unsupported syntax, Wrengle preserves the whole table as one inert source block instead of partially converting it. Rare delimiter-adjacent formatting that cannot be proven lossless across Wrengle's Markdown codecs is preserved the same way.

A trailing backslash, two trailing spaces, or an exact inline <br> creates a line break inside the same paragraph, equivalent to pressing Shift+Enter in the editor. Saving normalizes ordinary hard breaks to the trailing-backslash form. A break at the end of a paragraph, or in a paragraph whose surrounding container needs normalization, uses Wrengle's reserved <br data-wrengle-hard-break="\q"> storage form so it stays lossless. Existing literal <br> text remains literal. A saved paragraph can contain at most 4,096 hard line breaks; larger inputs remain inert or are refused at the save boundary rather than being partially converted. Other inline HTML remains unsupported. As a narrow literal-text exception, Wrengle imports the exact placeholder <reason text> as editable text when it appears in prose or a supported Markdown container. Saving escapes the opening angle bracket so the visible placeholder reopens unchanged. Other angle-bracket tokens, standard HTML, custom elements, and standalone tag-shaped source remain inert.

CommonMark's zero-to-three-space block indentation is supported, so headings and lists copied with two leading spaces stay structured. Simple loose lists and list items with continuation paragraphs also stay editable, and continuation paragraphs remain ordered with any nested lists under their owning item. YAML or TOML frontmatter is preserved as inert source rather than mistaken for headings, dividers, or note metadata. Wrengle parses ordinary text/plain as Markdown only when the pasted text contains Markdown structure; otherwise it stays ordinary prose. A complete, valid JSON object or array is the exception: compact and multiline JSON paste as one verbatim code block with the json language, preserving indentation, line breaks, and wildcard characters. Within the parser's work limits, JSON primitives and invalid JSON keep the ordinary prose/Markdown behavior. JSON-shaped input that is extremely deep or high-cardinality is preserved in an unlabelled verbatim code block instead of being parsed into an in-memory value graph. This detection limit doesn't apply inside an existing code block, where JSON-shaped text is inserted literally at the selection. More generally, when both ends of the selection are in the same existing code block, readable clipboard text/plain takes precedence over Markdown, editor metadata, editor-native HTML, and styled web HTML. Wrengle inserts that text into the current code block without changing its ID or language. Spaces (including one or more at the end), tabs, and line breaks are preserved; CRLF and lone CR line endings are normalized to LF, and the usual clipboard control-character sanitization still applies. A selection spanning more than one code block uses the normal paste rules instead. If the current container can't hold the resulting structured block, such as a table cell or restricted nested list, Wrengle inserts a sanitized literal fallback without interpreting it as Markdown; that container still controls its line layout. If the clipboard also supplies safe structured HTML, valid plain-text JSON takes precedence; otherwise the richer HTML representation wins over plain text that would be entirely inert source.

When Wrengle opens recovery content created by an older version, it upgrades untouched raw-source hard-break paragraphs automatically only when the result still matches the current Markdown file exactly. Recovery content with later edits or any mismatch is left unchanged.

The editor schema can't represent every CommonMark or GFM distinction without losing information, so Wrengle preserves each unsupported top-level container as an inert, verbatim source block while continuing to import supported neighboring containers. Examples include raw HTML other than the supported hard-break forms, footnotes and reference definitions, titled or unsupported links, multi-paragraph quotes, ordered lists that start somewhere other than 1, list items containing unsupported block types, code-block language metadata, remote or inline images, and tables with alignment or cell content outside the supported subset above. These source blocks stay inert across save and reopen, and the editor doesn't rich-format them. In the Markdown file, Wrengle normally surrounds each verbatim source span with invisible wrengle:raw HTML comments so malformed syntax and anchor-looking text can't become active after an edit; the source between those comments stays unchanged. Complete backtick- or tilde-delimited or toggle containers already inside a matched Wrengle-managed report or workflow region keep their original container bytes instead. For a metadata-backed managed region, Wrengle first verifies that the complete body can be edited and serialized byte-for-byte; if not, it preserves that body as one inert source block, which keeps the backend body hash valid during unrelated note edits. Wrengle sanitizes clipboard control characters and intentionally removes its own block anchors before preserving source. Wrengle never executes HTML or activates links in a source block — but another Markdown renderer may interpret that source after the file leaves Wrengle, so review preserved HTML and links before publishing the note elsewhere.

These parser improvements apply when Wrengle newly parses or imports the Markdown. Existing content already enclosed by wrengle:raw markers is not automatically upgraded: its source frame remains inert and byte-preserved across save and reopen. To use newer parsing support for that content, import the original source again as new content.

Every non-empty paste into an editable note with remaining file capacity inserts a saveable result. Wrengle first imports supported Markdown, the editor's own rich HTML format or plain web HTML, and VS Code clipboard data as structured blocks. Valid plain-text JSON objects and arrays become one verbatim JSON code block before generic Markdown or web HTML conversion; VS Code metadata, editor-native HTML, and explicit text/markdown remain authoritative outside the same-code-block plain-text exception described above. Common copy artifacts such as terminal-style nested numbering, blank lines inside tables, and obvious broken emphasis are normalized during import. Web and editor-native HTML are reduced to an attribute-free set of text, list, table, and formatting elements before import; resource URLs, event handlers, styles, embedded content, and app-internal block metadata are discarded. Pasted managed-region metadata and hashes are never installed as authoritative note controls. When a clipboard selection consists exactly of report metadata, its visible report body, and the terminal report marker, Wrengle discards that control wrapper and imports the visible body as ordinary editable Markdown. Pasting a byte-matching selection at an empty insertion point inside the same single-raw-block degraded report replaces that raw body while retaining the note's existing report boundaries. A valid report-tail selection that does not match the degraded body is inserted normally without replacing existing content. Malformed, partial, and full-region control wrappers remain inert. If a structured result still cannot be saved safely, Wrengle inserts its visible text as ordinary paragraphs instead.

Deeply nested or unusually syntax-dense Markdown that exceeds the structured parser's work limits is inserted in full as literal plain text, with a formatting-degraded notice, when it fits the note. File-only, image-only, opaque, inaccessible, whitespace-only, control-only, oversized, and unusually high-line-count clipboard payloads receive a visible plain-text placeholder, so a handled paste doesn't disappear silently while the note has capacity. File and image clipboard data isn't uploaded by this path; use the media insertion controls to copy a local asset into the vault. When a file placeholder includes metadata, only the sanitized basename and MIME type are written into the note and sync like other note text; source directory paths are discarded. Wrengle caps the aggregate clipboard representations it will hold, and checks the prospective Markdown file (including retained frontmatter) and editor sidecar independently against the vault's 16 MiB per-file limit before committing the paste and again at the final save boundary. If a note is already too close to that limit to hold even the short fallback placeholder, Wrengle leaves it unchanged and reports the capacity error; shorten the note before pasting more.

Well-formed terminal tables that use light Unicode box-drawing borders (, , , , , , and related closing characters) are converted into editable tables; malformed layouts and other border families remain plain text. Generic pasted Markdown links become active links only for https:, http:, and mailto: destinations. Other destinations — including javascript:, data:, file:, relative paths, and action: — remain inert source. Pasted markers or block anchors are not treated as authority to activate an action: reference. Action references created by an explicit Wrengle integration can persist in an existing structured block, but they never launch an operating-system protocol handler, and running an action remains an explicit, consented Wrengle operation. If pasted content includes Wrengle block anchors like ^block-id, Wrengle regenerates internal block IDs instead of reusing anchors from the source note. Only standalone images under vault-relative assets/images/ paths become image blocks; inline, remote, data, absolute, traversal, malformed, or non-round-trippable image syntax remains inert source and is never fetched by the paste importer. Notes are temporarily read-only while an AI edit preview is active, because preview blocks aren't persistable user content; accept or discard the preview before pasting or typing.

If a concurrent edit reaches unaccepted AI text while an AI write is pending, Wrengle recovers only the added text it can distinguish from that private preview, as plain paragraphs. Formatting, structure, and characters shared with the preview may be omitted from this recovery.

Arrange open notes in tabs and split editor panes. Tab actions include close variants, copying a path, revealing the file in the system file manager, and revealing it in the project panel.

Notes auto-save every 15 seconds by default. Change the interval or turn autosave off under Settings → General → Autosave. Autosave writes the current file without creating a version-history checkpoint; press Cmd+S on macOS or Ctrl+S on Windows/Linux to save dirty notes and commit the version checkpoint explicitly.

Press Cmd+Z on macOS or Ctrl+Z on Windows/Linux while the editor is focused to undo note edits, and Cmd+Shift+Z or Cmd+Y on macOS or Ctrl+Shift+Z or Ctrl+Y on Windows/Linux to redo them. The desktop Edit menu routes Undo and Redo to the focused note editor when a note has focus. Press Cmd+A on macOS or Ctrl+A on Windows/Linux to select the full note contents.

An AI edit becomes one undo step after Wrengle confirms that the accepted content was written. Undo reverses that accepted edit while retaining your earlier edits and unrelated changes received through sync; redo reapplies the accepted edit. Preview revisions, rejected proposals, and disk reloads do not enter the note's undo history. A disk reload becomes the new baseline and clears older note undo entries.

Press Cmd+F on macOS or Ctrl+F on Windows/Linux to find literal text within the focused note; Enter moves to the next match, Shift+Enter moves to the previous match, and Escape closes the find bar. Expand the replace row from that bar, or press Cmd+Option+F on macOS / Ctrl+Alt+F on Windows and Linux, to replace the current match or all current matches. Search is case-insensitive and current-note-only; regular expressions, whole-word mode, and case-preserving replacement aren't included. Replace All is one undo step, preserves formatting shared by the matched text, and syncs to another pane showing the same note. Replacement is unavailable while an AI edit preview is active, and Wrengle refuses unusually large match/replacement operations so the editor stays responsive.

Inline Assist

For a focused, selection-sized AI edit, select non-empty text and choose the sparkle Inline Assist action in the selection toolbar, or press Mod+Enter. Inline Assist is selection-only in this release; a caret without a selection does not open it. It uses the assistant backend, effective model, active conversation, and the same capped current-note and selection context used by the assistant panel. It does not create a second workflow or a private inline transcript.

Press Enter to send, Shift+Enter for a new line, and Escape to close an unsent prompt and return focus to the selection. While the request is working, Escape or Stop cancels only that Inline Assist turn and keeps the prompt available. If an edit is proposed, review it with the editor's existing Accept, Reject, and Retry controls. If no edit is proposed, the compact result offers Retry and Open Assistant without opening the side panel automatically. If another Assistant turn is active, sending from Inline Assist replaces that conversation's one latest pending turn. Inline Assist remains blocked while an AI edit preview or local recovery is active.

The slash menu and other command surfaces offer basic text blocks, tables, toggles, media, and semantic workflow blocks. Media insertions copy selected local files into vault-relative assets/images/, assets/files/, assets/audio/, or assets/video/ paths. Wrengle's persistence guards reject remote URLs, absolute paths, traversal paths, and malformed asset links. Images serialize as Markdown image links; file, audio, and video assets serialize as Wrengle asset markers.

Semantic workflow blocks include callout, meeting section, transcript region, decision, task, citation, and action result. Their visible Markdown representation keeps stable fields such as kind or status, while additional metadata — owner, due date, speaker, source, locator, action id, and references — is stored as sidecar data.

Chart documents

Chart files are local vault documents for desktop diagrams and flows, with shape and connector editing, a searchable responsive Shapes library, direct drag-to-canvas placement, and stable contextual formatting controls. Create one from the workspace's file actions, then open it again from the file tree, quick open, or recent files like any other vault document. Rename, move, duplicate, soft-delete to trash, or reveal it in the system file manager from the same local file-management surfaces you use for notes. Renaming or moving updates the vault document path; duplicating creates a separate local chart file; deleting or trashing removes the active document from normal workspace navigation.

A local chart file opens in the desktop workspace as a diagram document on a theme-aware surface — the Neutral chart theme follows the app's light or dark theme. Open Shapes to browse the local shape library. The drawer groups up to 256 distinct shape-and-style combinations already used in the document under Shapes in use, followed by Basic, Flowchart, Annotation, and Presets. Search filters those local choices without making a network request. At 960 pixels and wider the 288-pixel drawer can stay pinned beside the canvas. From 640 to 959 pixels it opens over the canvas, and below 640 pixels it becomes a full-pane drawer; use Close shapes to return the whole pane to the diagram.

Click a shape in the drawer, then click the canvas to use its default size or drag on the canvas to draw an exact size. At pane widths of 640 pixels or more, you can also drag a shape from the drawer and drop it at the intended canvas position. The compact full-pane drawer uses click-to-arm so it can close before you place or draw on the canvas. Whichever placement route you use, the new shape opens ready for its label. Directional spawn arrows and dragging a connector onto empty canvas remain faster ways to extend an existing flow.

Selecting a shape, connector, or multiple objects shows one contextual toolbar in a stable canvas position. Its controls follow the selection: node fill, stroke, and text styling for shapes; color, line style, and arrowheads for connectors; and the applicable edit, duplicate, and delete actions. The main tool pill provides Undo, Redo, and Arrange, with tidy, alignment, distribution, and z-order actions. A floating zoom pill shows the current percentage alongside zoom, 100% reset, and fit controls. Click the percentage to open a menu where you can reset to 100% or choose a canvas navigation mode:

  • Auto is the default. It detects each wheel-input burst and treats precise, two-axis input like a trackpad while treating coarse wheel steps like a mouse.
  • Mouse makes an unmodified wheel zoom the canvas.
  • Trackpad makes two-finger scrolling pan the canvas; pinch to zoom.

Auto is best-effort because macOS browser events don't identify the physical device. A high-resolution mouse or Magic Mouse can look like trackpad input; choose Mouse or Trackpad in the percentage menu whenever you want fixed behavior. The selected mode is an app preference on this Mac, not part of the chart file, and changing it makes no network request.

On every mode, drag empty canvas with the right mouse button to pan, or hold Space while dragging. Middle-button drag also pans. A stationary right-click still opens the matching canvas menu, while left-drag on empty canvas draws a selection box. Chart edits stay local to the vault and update live across split panes attached to the same chart file, including in-progress object moves while you drag on the canvas.

Dragging a single shape shows alignment and equal-spacing guides. Directly connected shapes prefer center-to-center alignment on the connector's axis when they are nearby, so unequal widths or heights do not trap the shapes on a closer edge alignment and leave a small connector bend. Unconnected shapes keep the normal edge and center guides. With grid snapping on, the connected-center range is the larger of one grid step or six canvas pixels; with grid snapping off, the range is six canvas pixels. Explicit connector sides that turn onto different axes can still require a bend. Sibling elbow connectors that naturally branch from one shared side center keep their crossbars on the same level. Wrengle separates connectors into parallel channels only when their segments overlap along a corridor; staggered shapes and obstacle avoidance can still produce independent bend levels.

Node labels support multiple lines on every ordinary chart shape. While a label is open, press Shift+Enter to insert a line, press Enter or click away to commit, and press Escape to cancel. A node grows vertically when its explicit or wrapped lines no longer fit; it does not automatically shrink dimensions you have already authored. Connector labels and swimlane lane headers remain single-line.

You can dictate into node labels, connector labels, swimlane lane headers, and page names with the same Dictate / Voice status-bar control and Cmd/Ctrl+Shift+D or Cmd/Ctrl+Shift+V shortcuts used in notes. Focus the text field first; bare speech goes to that exact field, while Voice Control keeps its normal trigger behavior. Spoken paragraph breaks work in multiline node labels. Connector labels, lane headers, and page names reject paragraph breaks and stay single-line.

Right-click the canvas, a node, or an edge for the matching context menu. Use the page-tab menu to add and rename pages, move a page left or right, or delete a page. These controls operate on the current local chart document — they don't create a hosted collaboration space.

Wrengle keeps local recovery data for chart documents so recently unsaved or recovered edits can survive an app reload or an ordinary crash. If the recovery data and the saved chart projection no longer match safely, the workspace shows a repair-needed state instead of silently discarding your local changes. Repair keeps the chart tied to the current local vault document when Wrengle can reconcile the recovery state; Reset clears the local recovery state for that chart and reopens it from the saved projection on disk.

With a chart canvas focused, use the chart-local shortcuts: duplicate (Mod+D), copy/cut/paste (Mod+C/X/V), select all (Mod+A), delete (Delete or Backspace), zoom in (Mod++ or Mod+=), zoom out (Mod+-), fit view (Mod+0), undo (Mod+Z), redo (Mod+Shift+Z or Ctrl+Y), and arrow-key nudging. These shortcuts don't fire from node or edge label text fields. Chart undo and redo are also available from the chart toolbar when the focused chart has matching history, and both are disabled for read-only or recovery surfaces.

Chart editing runs in the desktop app. Charts in a synced vault stay the same on your own computers through optional sync. If simultaneous edits remove one of a connector's endpoint shapes, that connector is hidden from the chart and its saved file; restoring the missing shape makes the connector visible again. Hosted collaboration is available through shared vaults only where sharing is enabled. Remote presence is not included. Grouping, layers, comments, and reusable document templates are not included. Browser editing and analytical spreadsheet charts are not included.

Whiteboard documents

Whiteboards are freeform local canvases stored as .wrboard files in your vault. Create one with New whiteboard from a New tab menu or a folder's context menu. Whiteboards use the same tabs and file actions as other vault documents: reopen, rename, move, duplicate, reveal, or move one to Trash without converting it to a Markdown note.

The whiteboard editor supports Excalidraw-style drawing, text, shapes, arrows, selection, pan and zoom, and local undo and redo. Paste, drop, or use Insert image for PNG, JPEG, GIF, and WebP files. Wrengle copies those images into the vault's assets/images/ folder and stores vault-relative references in the whiteboard instead of embedding remote URLs. Each image can be up to 8 MiB, 8,192 pixels on either side, and 16,777,216 pixels; a whiteboard can retain up to 16 image references. The editor also bounds the total decoded image pixels it loads at once. Animated GIF and WebP images are rejected so animation frames cannot bypass those decode limits. Deleted images continue to count toward the reference limit even after reopening, so undo on another computer can still recover them.

Exchange drawings

Use Import Excalidraw… from the canvas menu or command palette to open an .excalidraw drawing or a PNG/SVG containing editable Excalidraw scene data (including .excalidraw.png and .excalidraw.svg files). Dropping these files on the canvas uses the same importer. Import creates a new .wrboard beside the active whiteboard, or at the vault root when no whiteboard is active. Ordinary PNG drops insert an image; plain SVG images cannot be inserted.

Imports validate the drawing before creating a board. Unsupported elements, missing image data, or exceeded limits stop the import with an explanation. Scene exchange files can be up to 128 MiB, but the existing board limits still apply: 5,000 elements, 16 image references, the per-image limits above, and a combined image budget of 64 MiB and 67,108,864 decoded pixels. Imported images are copied into the vault. Cancelling the picker or changing vaults stops the import.

Use Export Excalidraw… to save a self-contained editable drawing with its image data. Missing images block editable export. The exported file does not contain Wrengle's internal document identity or vault asset paths; your .wrboard remains the editable vault document.

Export images

Choose Export as PNG or Export as SVG from the canvas menu to open an export preview. Choose the whole board or selected content, a background or transparency, light or dark appearance, and, for PNG, 1×, 2× or 3× scale. Defaults are the whole board, background included, the current appearance, and a display-appropriate PNG scale capped at 3×.

Include editable drawing data is off by default. Enable it to reopen the image as an editable Excalidraw drawing later. Selection exports include the selected content and its associated labels or frame contents; embedded drawing data contains only that exported content. Unavailable images block embedded exports. Ordinary snapshots can export with unavailable images left blank and a warning. PNG rendering also has dimension and pixel limits; use a smaller selection, lower scale, or SVG when the preview reports an oversized image.

Reuse shapes and insert Mermaid

Open Library… in the canvas menu to save a selection, insert saved shapes, rename an item, or delete it. The library supports shapes, text and groups; image-backed items and unsupported content are rejected. Import or export .excalidrawlib files to exchange libraries, up to 16 MiB per file.

A library is shared by the boards in one vault and persists across restarts. It is stored in .app/whiteboard-library.excalidrawlib; copy the whole vault, including hidden .app/, to back it up. It is not part of Git history or live network sync. Save errors remain visible so you can retry without silently replacing the last valid library.

Choose Insert Mermaid… or paste Mermaid source to preview a diagram before inserting editable shapes at the centre of the viewport. Conversion runs locally and insertion can be undone in one step. Flowcharts and sequence diagrams are supported. Class, ER and state syntax is accepted only when the converter produces supported vector elements; image fallbacks are rejected. Conversion is one-way: after insertion, edit the shapes with the drawing tools. Mermaid source is not kept in sync with later drawing edits.

Edits update live in another split pane showing the same whiteboard on this device. Wrengle also keeps local recovery data under the vault's .app folder so recent unsaved changes can survive a renderer reload or ordinary crash. The saved .wrboard file remains the portable projection; back up the whole vault to keep its referenced images, reusable library and local recovery data with it.

If recovery data cannot be read safely, editing pauses and the recovery banner offers Retry. For corrupt local recovery data, Reset local recovery discards only that unsaved recovery payload and reopens the saved .wrboard; the saved whiteboard and its referenced vault images remain unchanged. If a referenced image is missing, invalid, or exceeds the board's bounded load budget, the canvas remains available and reports that image as unavailable.

Optional sync keeps whiteboards and their referenced images on your own computers, including closed boards. Images can arrive after the board; the canvas refreshes when they finish downloading. Where sharing is enabled, invited editors can use the same synced vault. There is no remote cursor or presence service, shared room UI, hosted editor, or browser editor. Excalidraw AI generation and web embeds are not included.

Command palette

Open the command palette for the fast path through the workspace: open files, trigger actions, search the workspace, ask AI, rebuild the search index, or jump anywhere else in the app.

Type a query and Wrengle prioritizes matching notes. Press Enter to open the top note result when notes are available; Ask workspace sits below the note results, with matching workspace, editor, and plugin actions after that. When no notes match but actions do, the matching actions appear before Ask workspace. If nothing matches, Ask workspace becomes the explicit fallback. Unrelated actions stay hidden while a query is active.

With an empty query, the palette shows starred notes first, recent notes second, and a compact set of common commands.

Many of these actions also respond to voice control where it's supported.

Open Workflows opens the singleton Workflows tab, and the same surface is available as Workflows in any New tab (+) menu. Workflow drafts auto-save locally; Dry run steps through the debug path, while Run executes the current autonomous-safe draft end to end. Automate… adds a daily or specific-days trigger and pins a live workflow version for future scheduled runs — later draft edits aren't live until you explicitly update that version. Run now immediately shows the execution in progress and keeps its terminal detail; scheduled runs move through queued and running state to a terminal summary. Queued can mean the run is waiting for the app's finite automation queue and bounded, shared heavy-work capacity. The detailed execution view lasts for the current app session; only a capped, content-free latest-run summary persists, not durable history. Action, Terminal, and Coding agent steps stay human-gated. During an active or approval-waiting run, workflow identity and canvas-edit controls are disabled. Dismissal, pause, or deletion does not cancel work the app has already claimed; a queued or running execution can continue. See Workflows for starters, activation, privacy, and scheduler limits.

Keyboard shortcuts

Use Cmd on macOS or Ctrl on Windows/Linux wherever a shortcut below shows Mod.

ActionmacOSWindows/Linux
Save all dirty notesCmd+SCtrl+S
Open command paletteCmd+KCtrl+K
Quick open filesCmd+PCtrl+P
Undo focused note editCmd+ZCtrl+Z
Redo focused note editCmd+Shift+Z or Cmd+YCtrl+Shift+Z or Ctrl+Y
Select all focused note textCmd+ACtrl+A
Find in focused noteCmd+FCtrl+F
Find in focused PDF, text, or CSV previewCmd+FCtrl+F
Find and replace in focused noteCmd+Option+FCtrl+Alt+F
Open Inline Assist for selected note textCmd+EnterCtrl+Enter
Search all notesCmd+Shift+FCtrl+Shift+F
Close current editor tabCmd+WCtrl+W
Next editor tabCmd+Shift+]Ctrl+Shift+]
Previous editor tabCmd+Shift+[Ctrl+Shift+[
Split editor rightCmd+BackslashCtrl+Backslash
Toggle left sidebarCmd+Shift+BCtrl+Shift+B
Toggle agent panelCmd+Shift+ACtrl+Shift+A
Open backlinksCmd+Shift+LCtrl+Shift+L
Toggle TerminalCtrl+BackquoteCtrl+Backquote
Toggle selected dictation/voice modeCmd+Shift+VCtrl+Shift+V
Hold for Quick DictationCmd+Shift+DCtrl+Shift+D

When the Terminal is focused, Cmd+F / Ctrl+F opens terminal search, and Cmd+Shift+] / Cmd+Shift+[ on macOS and Ctrl+Shift+] / Ctrl+Shift+[ on Windows/Linux switch Terminal tabs instead of editor tabs. Shift+Enter sends the same line-feed input as Ctrl+J, which multiline terminal programs can treat as a newline without submission.

Meetings panel

Record beside the editor so you can review notes and transcript material together, where supported. The meeting panel keeps recording controls simple, with a context picker, and opens the saved meeting note automatically after you save.

Use search, recent notes, and starred notes to move across your local notes. The sections below cover how notes link to one another and how Wrengle surfaces those connections.

Workspace Search, History, and Backlinks all open in a far-right utility panel. The utility panel and the agent panel toggle independently, so closing either one leaves the other open and returns the freed space to the editor.

Link notes to each other with Markdown wikilinks: [[notes/project.md]], [[Project Title]], [[Project Title|label]], [[Project Title#Heading]], and [[Project Title#^block-id]]. Path-based links are the most stable form; title and simple frontmatter alias links resolve when they uniquely match one note. Resolution tries exact path, extensionless path, unique title, then unique alias.

Type [[ to open an inline picker that suggests matching note titles and aliases as you type. Pick one to insert the link, or create a new note from the same menu when nothing matches.

Open the panel with Cmd+Shift+L on macOS or Ctrl+Shift+L on Windows/Linux. It centers the active note and groups every reference to and from it as incoming and outgoing links. Each reference shows the surrounding text so you can see the context, and selecting one jumps to that exact spot in the source note and briefly highlights it.

Wrengle flags links whose target can't be reached, both inline in the editor and in an Issues list in the panel:

  • a missing note (no matching target),
  • an ambiguous target (the link matches more than one note), and
  • a missing anchor (a link to a heading or block that doesn't exist in an otherwise-resolved note).

From the Issues list, create a missing note (under notes/, projects/, or people/), open one of the candidate notes for an ambiguous link, or jump to the resolved note for a missing anchor.

Renaming and moving notes

Rename or move a note, and Wrengle rewrites every wikilink that points to it in a single update, so links keep working as you reorganize the vault. Links in notes that are open with unsaved changes are updated in place too.

Unlinked mentions

The panel also lists notes that name the active note by its title or alias in plain text without linking it. Each one shows the surrounding text and offers a one-click action to turn that mention into a link.

Relationship graph

Show graph opens a visual map centered on the active note, with connected notes arranged around it. A depth control expands the view from direct links out to two or three hops to explore how notes connect. Filter the connections by incoming links, outgoing links, or issues (links that don't resolve yet), and select any connection — on the map or in the list — to see its details: where it points, whether it resolves, and one-click actions to open the linked note, copy a link to it, or create the note when it's missing.

Vault graph

Open Graph View — from the command palette, Graph view in any New tab (+) menu, or the View menu — opens an interactive map of the whole vault rather than a single note's neighborhood. Every note is a point and every link a line between them, including notes that aren't linked to anything yet. Pan, zoom, and drag to explore: labels fade in as you zoom toward a cluster and thin out for a clean overview, hovering a note highlights it along with its direct connections, and clicking a note opens it. Notes you currently have open are highlighted, and a link to a note that doesn't exist yet appears as a hollow marker. Fit re-frames the whole map and Refresh rebuilds it; very large vaults show the most-connected notes first.

Pinning metadata exists, but pinned notes aren't exposed in the current interface. Everything above searches your own notes inside the app; these documentation pages have no search of their own in v1.

Settings

Settings are grouped as General, Models, Meetings, Dictation, Appearance, Connections, Plugins, Agents, Privacy & Data, and About. Use those visible category names when following setup instructions — for example, OpenAI/Anthropic generation lives under Settings → Models, while any retired app-owned local-generation files are reviewed under Settings → Privacy & Data.

docs / workspaceAll documentation