4.0.0
Coming soonTarget: end of July 2026Major release: new editor and live preview. The jump from 3.7.x to 4.0 reflects a complete rewrite of the editing engine.
Added
- —New CodeMirror 6 editor. A complete rewrite of the app's core. Faster, more stable, the foundation for everything to come. CodeMirror 5 removed (kept as an emergency fallback via ?cm5=1).
- —Inline live preview. Bold, italic, code, headings, underline, strikethrough, links (only the clickable style remains; the URL reappears with the cursor), lists (a bullet instead of the dash, numbers highlighted), quotes (side bar, > hidden) and code blocks (monospace background) render right in the text as you type — no separate panel. \calc{} shows the computed result in a chip next to the expression (math.js) and inline math $…$ has dedicated styling. Syntax reappears only when the cursor enters the element.
- —Inline image preview. ![]() images show up directly in the editor, under their source line.
- —Drag to move images. Drag an inserted image elsewhere in the document: a guide shows where it will drop and the markdown moves with it.
- —Hover preview. Hover a [[link]] to preview its destination (chapter or note); hover an inline image to enlarge it in a floating panel.
- —Chapter folding. Collapse a heading to hide its section (nested folding: a # wraps the ## inside it). The «Chapters» button in the View menu folds/unfolds every chapter at once — a mini-binder right in the text.
- —Code folding. Collapse blocks and sections in the editor.
- —Native Find & Replace (Ctrl+H), localized and themed.
- —Typewriter mode. The active line stays vertically centered, from the first to the last line of the document.
- —Multi-cursor. Alt+click (or Ctrl/Cmd+click) adds cursors, Ctrl/Cmd+Alt+↑/↓ adds a cursor on the line above/below, Ctrl/Cmd+D selects the next occurrence.
- —Drag to move text. Select text and drag it elsewhere in the document to move it (a blue caret shows where it lands). Handled with mouse events so it works in Tauri/WebView2, where native HTML5 drag & drop is intercepted by the system.
- —Corkboard = chapters (binder). The Synopsis Editor now mirrors the document's chapters: each card is a #/##/### heading. Drag a card by the ⠿ handle to reorder the chapter in the text, × deletes it (with confirmation), renaming the title renames it in the manuscript, the synopsis is saved per chapter and ⤢ jumps to the chapter. Dragging uses pointer-based mouse events so it works in Tauri/WebView too. Old cards without a chapter stay as «detached notes» (nothing is lost). It brings to prose what the Scene Navigator does for screenplays. In the Outline, a dot next to a heading marks chapters that have a synopsis: hover to preview it, click to open the card.
- —Narrative branches: per-chapter diff. When comparing a branch with the trunk, a summary of changed chapters (modified / added / removed) with the word delta appears at the top of the diff — the right view to understand what changed across a whole manuscript, not just line by line.
- —In-text analytics. Two live highlighters from the View menu (independent toggles, computed only on the viewport):
- ·Repetitions — underlines (amber wavy) content words repeated too close together.
- ·Filler words — underlines (blue dotted) adverbs and padding you can often cut (e.g. «very», «really», «molto», «davvero»).
- ·Explanatory hover — hovering a highlighted word shows a tooltip explaining why it's flagged (e.g. «repeated 3 times nearby», «often unnecessary»).
Improved
- —Native spell checker. The editor underlines errors and offers right-click suggestions using the system dictionaries (all installed languages). Highlighting only: your text is never changed on its own. Usage notes:
- ·Linux: install the hunspell dictionaries (e.g. hunspell-it, hunspell-en_us); the language follows the system LANG variable.
- ·macOS: the checker works right away via right-click; for «live» underlining, enable Spelling and Grammar → Check Spelling While Typing once from the context menu.
- ·Windows: built in, nothing to do.
- ·From Settings → Editor → Spell checker you can pick the language (or «System» to follow the OS).
- —Simplified view modes. With live preview in the editor, three views remain: Writing (live preview), MD Code (raw markdown, live preview off) and Page view (final result). Split and Preview removed.
- —Tab indentation. In lists and quotes, Tab indents and Shift+Tab outdents: lists (numbered too) by 2 spaces, quotes by one > level. In plain text Tab inserts 2 spaces. With the autocomplete menu open, Tab confirms the choice as before.
- —Emoji autocomplete. Type : + a name (e.g. :fire, :fuoco, :fuego, :feu, :huo) and pick the emoji. Multilingual keywords (EN, IT, ES, FR, DE, PT, Chinese pinyin).
- —Screenplay mode rebuilt for CM6. On-screen formatting was tied to CodeMirror 5 classes and no longer applied: now the editor recognizes Fountain elements and lays them out like a script — scene headings uppercase, characters centered, dialogue indented, parentheticals italic, transitions right-aligned — on a centered page with a typewriter font (Courier).
- —Screenplay SmartType. In Screenplay mode, autocomplete suggests scene-heading prefixes (INT./EXT./INT.-EXT./I/E), times of day after the «-» (DAY, NIGHT…) and, above all, character names already used in the script.
- —Native [[wikilink]] autocomplete. Replaced the old hand-rolled system (keyup-based, fragile) with CM6's built-in autocomplete: correctly positioned popup, arrow/Enter/Esc navigation, live filtering as you type. The backend note search (FTS5) is unchanged.
- —Import: more formats and a choice of where to insert. The file picker and drag-drop now offer every format the engine can import — added ICML (InDesign), htm, txt, doc to drag-drop. And when importing into a non-empty document you can choose to replace everything, append at the end, or insert at the cursor.
- —Signing: choose the timestamp server. In the digital signature dialog, the TSA (RFC 3161) field becomes a dropdown of ready-to-use public servers (DigiCert by default, plus FreeTSA, Sectigo, Apple, GlobalSign, Certum) with a «Custom» option — no need to memorize a URL.
- —More complete KDP validator with suggestions. Two new pre-print checks: maximum page count per paper type, and recommended bleed when the document has images but bleed is off. Every warning now includes an actionable suggestion (e.g. «→ re-export as PDF/X»).
- —Local AI: token budget. The embedded AI has a limited context window (4096 tokens): output is now capped so input + response always fit, avoiding a collapse into gibberish. If the text is too large, a clear message suggests reducing the context or using a cloud endpoint. Token counting uses the model's real tokenizer (/tokenize endpoint): the character-based estimate under-counted Italian and KDP-AI checks failed with «Context size has been exceeded». The language instruction now explicitly names the detected language and is repeated at the end of the prompt: small local models no longer «drift» to English.
- —Book projects: full chapter management. The project system (a folder with one file per chapter + _book.yml) becomes a real binder: ➕ New chapter (title → numbered file created, indexed and opened in the editor — previously all manual, yml included), ✏️ Rename (updates the file on disk, the index, the status and the # title inside the text too), 🗑 Remove from index (the file stays in the folder, no data lost). Creating a project now asks for title and author (before: a fixed «My New Book»). Project export gains PDF/X (print) and, for ePub, offers the cover.
- —Automatic outputs: 4 new formats. Alongside the auto-build targets (PDF, ePub, DOCX, PDF/X) come HTML, ODT, ICML and LaTeX. New formats are off by default with no autobuild (enable them from the Output panel); the «Full archive» preset includes them with manual build.
- —Local AI: support for more capable models. The model manifest now declares the context window per model (ctx_size). Added Qwen3 4B to the catalog (4.3 GB, 8192 context): much better Italian than the default Phi-3 Mini, which stays as a lightweight option. Existing users get the «Update available» banner with a one-click download.
- —Local/cloud AI: guidance. A new hint in the AI panel and an entry in the quick guide: local AI = fast drafts, total privacy, zero cost; cloud AI = long texts, full analyses and publish-ready results.
- —Local AI: chunked processing for long texts. New «Process long texts in chunks» option: splits the document (or selection) into parts that fit the context window, applies your instruction to each and stitches the result back — with per-chunk progress and the ability to stop.
- —Faster export thanks to the new engine.
- —Inline image performance. Path resolution with almost no IPC, URL caching, no UI freeze on drop, no cursor «jump». Images appear in under half a second even in huge documents (440+ pages, 1.5M characters).
- —Formatting buttons (B / I / U). Correct cursor placement: after formatting you keep typing plain text.
- —Tables: tables and charts as image files on disk. When you insert a table or chart as an image from the Data Hub, the file is saved in the document's assets (docname.assets/images/) and only the Markdown reference enters the editor — no more hundreds-of-KB embedded images on a single line. If the document isn't saved yet, the app offers to save it on the fly (same flow as dragging images); if you decline, the table enters as Markdown text and the chart stays in the sheet.
- —Tables: more forgiving format choice. At the text/image prompt it now also understands «png», «jpg», «image», «photo» and the like; an unrecognized answer repeats the question instead of inserting text unexpectedly.
- —Tables: readable grid in light theme. Cell colors follow the theme active when you open the sheet (previously fixed to the dark theme).
- —Final Draft (.fdx) export: no more phantom characters. In a generic Markdown document, bullet lists were mistaken for lines («- first point» became a Character) and numbered lists for Character/Dialogue pairs («1.» + «first»). Now lists, tables, notes and quotes end up as Action: only screenplay-style UPPERCASE text (and the «- NAME:» format) becomes a Character. Real screenplays don't change one bit.
- —ICML export: real page breaks. \newpage (and \clearpage, \pagebreak) is no longer simply removed: it becomes a paragraph with a dedicated «Page Break» style (declared in every template with start-on-next-page), so in InDesign the break really drives the layout — and stays remappable like any other style.
- —ICML export: automatic and on-demand verification. Every ICML export is checked before saving: balanced tags, no range nested inside Content, no leftover front matter or commands in the text, correct XML escaping, no unwanted empty paragraphs. Inline code (---, \newpage quoted in the text) doesn't trigger false alarms. Plus the 🧪 Verify ICML button in the export panel runs the same checks without writing anything: result and details in an in-app window.
- —Printing through the PDF pipeline. The Print button no longer sends the HTML preview to the webview's print (random fonts, margins and page breaks): it generates a temporary PDF with Typst — the same typography as the exports — and opens it in the system viewer, where you print with the native dialog and a faithful preview. If generation fails, the old method kicks in automatically.
- —Tidied-up Settings. In the App tab: a new Installations section (LaTeX with status and one-click automatic install, Ghostscript with status and access to Export Check); language in a compact view (the grid of 9 languages appears only when you press Change); theme picked with two chips 🌙 Dark / ☀️ Light instead of the ambiguous checkbox. The LaTeX install button is now also in the first-launch banner, one click away.
- —Leaner AI panel. Quick prompts are in a collapsible section (collapsed by default, the choice is remembered): half a panel less for those who type their requests by hand.
- —Tidier Import/Export panel. A new Multiple tab next to Base format / Pro print / Screenplay / Publishing gathers the batch actions (Convert Folder, Generate Multiple, Generate several formats, Generate with Assets), which used to sit at the bottom of the panel where no one found them. Advanced options now show only what's relevant to the chosen format: «Fast PDF (Typst)» appears only with PDF; Paper, Alignment and Font size disappear with ICML/Excel/FDX/HTML.
- —Excel export: warning when there are no scenes. The breakdown reads the editor text (INT./EXT. scenes or # chapters): if it finds none, it now says so clearly instead of silently generating a file with only headers.
Fixed
- —Linux: compatible with not-so-recent distros too. The package was built on an Ubuntu 24.04 base and required too new a glibc: on Mint 21.x, Ubuntu 22.04 and similar it installed but didn't start (GLIBC_2.39 not found). The build is now made on an Ubuntu 22.04 base: it works on every distro from 2022 onward.
- —Colored-stripe graphics on older GPUs. On old video cards (e.g. 2013 iMac) the header and the modules menu showed purple/red stripe artifacts: caused by backdrop-filter effects applied over already-opaque backgrounds (so invisible, but expensive). Removed: same look, no artifacts, and a bit more lightness for everyone.
- —Plan choice no longer disappeared on small screens. Below 1400px wide the Free/Premium badge at the top was hidden — and with it the only access to changing plan. There's now an Interface plan section in Settings → App, always reachable (and the badge, where visible, stays clickable).
- —Older Windows: internal communication allowed on old WebView2 too. Older runtime versions use http:// instead of https:// for the internal app↔backend channel, and the security policy blocked it, filling the console with errors: now both forms are allowed.
- —Built-in local AI: more patient startup and cleaner messages. On slow machines or with a mechanical disk, loading the model could exceed the 60-second timeout: the first question stayed stuck on «warming up» until you cancelled and retried. The maximum startup time is now 3 minutes. Plus the chat no longer shows the technical URL 127.0.0.1:… when using the built-in AI: it simply says it's the app's local AI.
- —Refined KDP menu. The export status changed color inconsistently (two update paths wrote different styles): it's now a uniform label, styled like the nearby buttons. The empty «ghost card» under the templates is gone (it was the message container, always visible even when empty), and the «5x8 Self-help» template is now called Personal growth 5x8.
- —View menu: no more orphan button. The last menu item wrapped onto its own line because of a rigid grid: the row of actions now flows fluidly at any width.
- —ICML export: front matter and duplicate title. The YAML block escaped cleanup if it wasn't the very first element of the file (blank line, BOM or a # title before the ---): the delimiters vanished but the keys (title:, author:…) ended up as a text paragraph in InDesign. Now the block is recognized even after the title, and a safety net discards any initial paragraph made only of known metadata keys anyway. The title also appeared twice (Title paragraph from the template + first heading in the body): now the first heading, when it's the source of the title, is shown only as Title.
- —«Save as Template» that didn't respond. The button in the Data Hub ran everything but the save dialog never appeared: a safety CSS rule kept it hidden with !important and the open code didn't unlock it. While we were at it, the dialog was redesigned in the app's modal style and translated into 9 languages (it was Italian-only).
- —Local AI that replied in Arabic. With any model, the local AI sometimes started in Arabic until you ordered it to switch language. Two causes on our side: language detection triggered on a single Arabic/Hebrew/Russian/Chinese character in the text (now it needs a meaningful presence) and the language instruction was a two-letter code that small models misread (now the language is named in full, with an explicit ban on using others).
- —Windows: no more black window when the local AI starts. llama-server was launched without the flag that hides the console.
- —The License panel no longer stays under Settings.
- —Linux AppImage: exports work. A long-standing AppImage bug (present forever, never diagnosed): the environment the AppImage injects into child processes (bundled libraries and fonts instead of the system ones) silently killed Typst and the other export engines. The app now cleans the environment before launching external binaries. Plus the Typst binary is compiled in CI (upstream static builds crash on recent Linux kernels with high memory protections) and verified before being packaged.
- —Simple mode: pro formats really disappear. In the export format menu, PDF/X, FDX, ICML and the other professional formats were «hidden» with a property that native Linux and macOS dropdowns ignore: they stayed visible and selectable. Now the entries are physically removed and restored when you return to Pro mode.
- —Conversion to .pwk: images no longer vanish. Converting a .md into a PressWork document (or saving as .pwk, or promoting a branch to a document), images with a relative path stayed in the source folder and references broke: they're now copied into the bundle, preserving the folder structure.
- —«Generate with Assets» truly portable. Images from disk weren't copied into the .assets folder (only web ones were saved) and references in the exported markdown stayed broken: now the folder contains every image and the file references them with correct relative paths. The editor preview also recognizes images with a trailing {width=…} attribute.
- —Translated confirmation messages for batch exports. Export Multiple, Convert Folder, book-project export and find & replace showed the raw technical response ({«key»:…}) instead of the message in the app's language.
- —«Advanced options» that closed the export panel. The «menus close when you pick an action» fix also treated the configuration buttons inside Import/Export as menu actions: clicking «Advanced options» (or the Excel profiles, the ICML template import…) made everything disappear. The panel now stays open and closes only with its own ×.
- —Tables menu: removed the duplicate entry. «Import as template» did exactly the same thing as «Open Tables sheet» (with a misleading name): removed.
- —Outline mode: chapter reordering. Drag & drop of chapters in the sidebar didn't work in the app (HTML5 drop intercepted by the system, as with Synopsis and text drag): rewritten with mouse events — anti-click threshold, visual indicator, working with the status filter too.
- —Truthful writing stats. Tracking measured word deltas but never re-anchored the baseline: opening a larger document counted the difference as «words written today» (days with hundreds of thousands of words in the history), and restores/branches/collab syncs contaminated the counts. Now every document change or replacement re-anchors the baseline. The day is the local one (writing after midnight no longer lands on the previous day), value labels are readable in dark theme too, and the new 🗑 Reset button clears the contaminated history (with a prompt to export the CSV first).
- —Daily goal that reset every morning. On date change the daily goal was cleared (type and target lost): now the target survives and the count restarts from the new day's document.
- —Header menu that stayed open. Choosing an action from File & Project (or the other menus) didn't close the menu, which stayed on top of the panels just opened: now any action closes it (checkboxes and inner fields don't).
- —PDF/PDF-X cover on Windows. The cover image path ended up in \includegraphics with Windows backslashes (C:\Users\…), which LaTeX reads as commands → export failed. The temp copy now uses a safe filename (pw_cover.png) and the path travels with forward slashes. Also fixed cover insertion into the document (KDP menu), which inserted nothing under CM6, and Editorial-panel buttons silenced by an over-aggressive guard.
- —Automatic PDF/PDF-X targets: text with backslashes. Escaping of \letter sequences (regex \s, Windows paths \Users) happened only in the manual export path (frontend): bundle output targets and printing, which go through the backend only, failed with «Undefined control sequence». Escaping now lives in the shared Rust pipeline.
- —PDF/PDF-X export with tables. A table without a caption made compilation fail with «No counter 'none' defined»: pandoc 3.5+ marks these tables with \LTcaptype{none} and longtable requires the counter to exist. Added \newcounter{none} to all LaTeX templates (PDF A4/A5/Letter and PDF/X-1a/X-4).
- —LaTeX export: regex-like text or Windows paths (\s, \w, \Users) no longer break PDF/X generation. (Also shipped on 3.7.x.)
- —Underline now renders correctly in the PDF.
- —Selecting a full line/heading: the closing marker (**, </u>) stays on the right line, no longer wraps.
- —Images in large documents: removed the limits that hid them.
- —Windows: blob fallback when the asset protocol fails to load images.
- —Import: Ghostscript fallback for PDF and a temp copy for DOCX on OneDrive.
- —Import → save: after importing a PDF/DOCX the document is treated as new and unsaved: «Save» no longer writes over the source file, and the suggested name in the dialog is preselected.
- —Collaboration: images between peers. Images never reached collaborators: the payloads exceeded the message limit of WebRTC data channels (and the WebSocket relay) and vanished without errors. They now travel as resized previews (max 1200px), split into 40KB parts sent at a controlled pace and reassembled on arrival — any size, on any transport. Peers who join an ongoing session receive the images via an automatic request.
- —Collaboration: end of the «Accept version» spam. Every automatic checkpoint (~10s of writing) was broadcast to peers as a version to accept, flooding everyone with requests. Sharing is now intentional (📸 button in the chat dock) and «Accept» actually applies the content to the editor. Also silenced the «document changed externally» banner during sessions (it was the echo of remote-sync autosave).
- —Collaboration: real presence. Anyone who closes the app or loses the network is now flagged within ~35 seconds (toast + «(offline?)» in the participant list); on return, a reconnection notice. Before, nothing was signaled.
- —Collaboration: discoverable inline comments. The comment anchored to the editor line existed but was invisible (only Ctrl+Shift+M, never documented): new 💬📍 button in the chat dock.
- —Collaboration: remote edits and Track Changes. With change tracking on, syncs coming from peers were interpreted as local edits to mark: now they're recognized and left intact. The «suggestions» flow works: the collaborator writes with Track Changes ON and the author accepts/rejects each marked change.
- —macOS: visible image source. After inserting an image the source markdown stayed visible too: on WebKit the theme's -webkit-text-fill-color property beat the color: transparent hiding.
- —[[wikilink]] autocomplete: fixed the error that fired on every keystroke.
- —Correct ICML export for InDesign. Paragraphs were nested inside a <Content> instead of being direct siblings under <Story> (valid XML but the wrong ICML structure → InDesign could open empty or ignore styles). Now every paragraph is a <ParagraphStyleRange> direct child of <Story>; the content is also cleaned of YAML front matter and leftover \newpage commands.
- —KDP «book format» template no longer deletes text without warning. Templates replace the editor: now, if there's already content, they ask for confirmation before overwriting it.
- —KDP preflight: false alarms fixed.
- ·Pure black: the check read the on-screen theme color (not the PDF). In export the body text is pure black (K100): no more false warning.
- ·Color profile: export already embeds FOGRA39 by default; the check now recognizes it.
- ·Spot color: «no spot color» is now reported as correct (KDP doesn't support spot colors in the interior), no longer as an action to take.