Skip to content

Textus v1.2.0

Choose a tag to compare

@github-actions github-actions released this 23 Oct 06:04
0210fc5

What's new

Textus 1.2.0 makes Textus AI do more and the editor feel better. Textus AI can search the web with every provider and cite its sources, think harder at the press of a button, write and illustrate in one go, read long files, PDFs, Word, slides, spreadsheets and pictures in your folder, use the tools of MCP servers, learn from the edits you turn down, and be switched off entirely in one click; its revisions type into the document as they are written, land on the paragraph they mean, and survive your own edits, and a crowded margin stays beside its text. Doubao and MiniMax join the providers. The editor opens whole folders, saves only what you edited, follows wikilinks and links to headings, opens Word documents as Markdown, reveals links for editing in place, closes brackets and quotes for you, and stays quick in very long documents. Settings gained a search box, and Textus works with screen readers, the keyboard alone and high contrast, and on older Windows machines.

New

  • Keeps Textus running after you close its last window, with an icon in the notification area, the system tray or the menu bar, once you turn on Settings › General › Application › Keep running in the background (off by default). The icon's menu has Open Textus, which brings back the documents you had open, and Quit Textus; turning the setting off removes the icon at once. With no window open, Textus keeps no page loaded and runs nothing in the background. (#244)
  • Opens a whole folder in the sidebar with File › Open Folder…: the file tree stays rooted there while you open documents inside it, the folder comes back with your session and appears under File › Open Recent, and File › Close Folder returns the tree to following the document. (#152, #79)
  • Opens a Word document (.docx) - picked in File › Open…, dropped on the window or handed over by your file manager - as a new Markdown document of the same name, not yet saved: headings, lists with their numbers, tables, bold, italic, links, footnotes and pictures come along, and text that only looks like Markdown, such as *, # or $5, stays text. A quiet notice says some formatting may look different. The first Save suggests a .md file next to the Word file and moves the pictures into the image folder of Settings › Images, as it does for pasted ones; the Word file itself is never changed. (#296)
  • Searches file names across the opened folder from a box at the top of the sidebar's Files tab - documents listed first, then other files, or documents only with the filter beside the box - skipping what .gitignore leaves out and folders such as node_modules: type to filter, ↑/↓ to move, Enter to open, Esc to clear; Ctrl/⌘ + Shift + O jumps there (changeable in Settings › Shortcuts). (#196)
  • Reads Obsidian wikilinks - [[Note]], [[Note|text]] and [[Note#Heading]] - as links: Ctrl/⌘ + click opens the note (at the heading, if one is named) from the same folder or anywhere in the vault, and they, like #tags at the start of a line, are saved as written instead of as \[\[Note]] and \#tag. (#234)
  • Opens a link to a heading in another file, [see](./notes.md#heading), at that heading when you Ctrl/⌘ + click it - in a new tab, or the tab the file is already open in - instead of at the top of the file. (#233)
  • Reopens a document with the caret where you left it, and scrolled there, when Textus restores your last session or you pick it from File › Open Recent, as long as the file hasn't changed since; with Settings › General › Restore previous session on startup off, documents open at the top as before. (#218)
  • Adds Next tab and Previous tab shortcuts, Ctrl + Tab and Ctrl + Shift + Tab on every platform (and ⌘ + Shift + ] / ⌘ + Shift + [ on a Mac), and shortcuts for Heading 1 to Heading 6, Ctrl/⌘ + 1 to 6 as in Typora, shown beside them in the Format menu, and for Paragraph, which starts unbound. All of them can be changed in Settings › Shortcuts, where Reset puts a changed one back; the same page now lists the shortcuts that can't be changed, such as save, zoom, bold and italic. An action already using one of these keys keeps it, and that heading level starts unbound instead. (#214)
  • Adds Settings › Editor & Appearance › Interface text size - 90%, 100%, 110% or 125% - which enlarges or shrinks the text of the sidebar, the outline, the tabs, the AI panel and its window, menus and Settings, while the document keeps its own zoom. (#150)
  • Adds a Copy button beside a code block's language picker, which copies the block's code, and line numbers for code blocks, turned on in Settings › Editor & Appearance › Line numbers in code blocks; with them on, long lines scroll sideways instead of wrapping, so each number stays beside its line. Neither the button nor the numbers appear in a PDF, an export or a printout. (#233)
  • Shows a small square of the colour before a colour code, as you choose in Settings › Editor & Appearance › Swatches before colour codes (off by default): In code only draws it in inline code that is a colour, such as #0af or rgb(0 128 255), and before the colour literals in code blocks; Everywhere also before a six- or eight-digit hex code or a colour function written anywhere in the text of a paragraph, heading, list, quote or table, such as #ff8800, hsl(120 50% 50%) or oklch(70% 0.1 150). Short codes in the text, tags like #cafe, issue numbers like #234, colour names like red and links stay plain; the swatches are never part of the text, so they aren't saved, copied or printed, and stay out of exports. (#146)
  • Adds Settings › Editor & Appearance › Diagram engine: Mermaid, as before and by default, or Pele, which draws the same ```mermaid blocks faster, from a much smaller download, and follows a switch of appearance or theme without redrawing, but lays diagrams out its own way and leaves out a few features, such as HTML in labels. A diagram Pele can't draw is drawn by Mermaid, and the editor, split view and every export use the engine you chose. (#242)
  • Adds a Deep thinking button, the light bulb beside web search in the AI panel and its window, which asks the model to think a request through before it answers - slower and costlier, for hard questions and long rewrites. It stays on, across conversations and documents, until you press it again, and appears only for models that can think harder; Quick Ask asks for a quick answer instead.
  • Shows "Thinking · 8 seconds" above a reply while the model thinks, then "Thought for 12 seconds"; the line stays closed and opens to the reasoning, Gemini's included, when you click it, where the provider shares it. The reasoning is never kept with the conversation. Which thinking settings each model takes now comes from models.dev, and a provider that refuses them gets the request again without.
  • Lets Textus AI read the PDF, Word, PowerPoint and spreadsheet files in its project folder and search their text, and, with a provider that can see images, look at the PNG, JPEG, GIF and WebP images there, up to 6 MB each. (#261)
  • Adds Doubao (Volcengine) - 豆包(火山引擎)in Chinese - to the providers in Settings › Textus AI, served by Volcengine Ark: Doubao Seed 2.1 Pro for chat, which reads attached images and can edit the document, and Seed 2.1 Turbo, with its thinking turned off, for completion and grammar. Create the API key in the Volcengine Ark console and enable the models there. (#263)
  • Adds MiniMax to the providers, as MiniMax (China) and MiniMax (Global) since each platform takes only its own keys: MiniMax-M3 for chat and edits, M3.1 Flash for completion and grammar, and image-01 for pictures with the same key.
  • Learns from your revision choices: when you turn down the same kind of change several times across proposals - 「」 made “”, one word swapped for another, sentences split, an Oxford comma added - Textus AI offers, once the review is done, to remember it as a requirement, with Remember, Not now and Never ask for this. Remember saves it under AI remembered in the Memory tab, where you can delete it; Textus AI asks at most once a day and saves nothing without your click. Only the kinds of change you accepted or rejected are noted, on this computer, and they are never sent.
  • Lets Textus AI make pictures for a document once you choose an Image model in Settings › Textus AI - OpenAI, Google Gemini, Doubao (Volcengine), Alibaba Qwen, Zhipu GLM, SiliconFlow or an OpenAI-compatible endpoint; it is None by default, and a service you already use for chat needs no second key. Ask for one in Write or Revise mode, or right-click a paragraph and choose Illustrate this paragraph: the picture appears in place as a proposal, is saved only when you accept it, into the image folder or up to the image host as Settings › Images says, and leaves nothing behind when you reject it; when the service turns a description down, the AI panel shows its reason. (#194, with ideas from #221)
  • Searches the web with every AI provider: models that search by themselves (OpenAI, Claude, Grok, OpenRouter, Groq, Qwen, Zhipu GLM) use their own search, and for the rest - DeepSeek, Gemini, Mistral, Kimi, local models and custom endpoints - Textus searches on the Search service under Settings › Textus AI › Textus AI Chat › Web search: Automatic uses a DeepSeek, Zhipu or Kimi key you already have, or pick Bocha, Tavily, Brave Search or Exa with a key of their own, or your own SearXNG server. Textus AI can also read a web page or PDF whose address you give it - from the public web only, never from your computer or local network - and the Web search button shows a red dot when there is nothing to search with. (#278)
  • Lists the pages a reply cites under it, numbered [1], [2] the same way for every provider and for the whole conversation; click one to open it in your browser. A proposal that draws on the web has Add sources as footnotes on its card, which adds them as Markdown footnotes at the end of the document when you accept it. (#278)
  • Adds a search box to Settings, above its categories: type a word and every page's matching settings are listed by page - names, group titles, More themes and About Textus, the shortcut list, and the explanations behind the ? - ignoring case, accents and full-width letters. ↑/↓ move, Enter or a click opens the setting's page with the setting picked out for a moment, and Esc clears; Ctrl/⌘ + F reaches the box while Settings is open.
  • Turns all of Textus AI off from its button at the right end of the window bar, the app icon's quill as a silhouette, instead of the robot: right-click it to pause Textus AI for an hour or to turn it off, and while it is off the quill is struck through and a click offers to turn it back on; a pause ends by itself. Settings › Textus AI › Enable Textus AI (on by default), a shortcut you can set in Settings › Shortcuts and the iPhone's menu turn it on or off too. While it is off, nothing is sent to any AI service, from the moment Textus opens: no completion, grammar check, conversation or memory; the AI panel, Quick Ask and the AI items of the right-click menu go away, and a reply still being written stops. Edits already proposed stay to accept or reject, and each feature keeps its own setting for when Textus AI is back on. (#196)
  • Brackets and quotes close themselves, as in Typora: typing (, [, {, a quote, or (, 【, 「, “ from a Chinese or Japanese input method puts the closing partner in after the caret. Typing the closer steps over it, Backspace right after the opener removes both, and with text selected the pair goes around it. Nothing is added inside code, maths or a web address, before a word, or for an apostrophe as in "don't". Turn it off in Settings › Editor & Appearance › Close (), [] and “”.
  • Shows a link as its Markdown while the caret is on it, as Typora does: click a link, or move onto it with the arrow keys, and [text](url) - or [text](url "title"), [text][ref], <https://…>, a bare URL - is there to edit, text and address alike; move the caret away and it is a link again, with what you changed, or plain text if it is no longer a link. Ctrl/⌘ + click still opens it, a link you only looked at is saved exactly as it was, and an edited one as you typed it.
  • Makes the sidebar's file tree a small file manager on the desktop:
    • right-click a folder, a file or the empty space below to make a New Document or a New Folder there;
    • drag a file or folder onto another folder to move it, and an open document follows it to its new place;
    • Sort orders the tree by name or by date modified.
    • Nothing is replaced: a name already taken is refused.
  • Adds a button for the sidebar at the start of the window bar: just past the traffic lights on a Mac, in their corner in full screen, and beside the menu button on Windows and Linux. It stays where it is while the sidebar slides in and out.
  • Makes pictures with a ChatGPT plan's own image allowance: Settings › Textus AI › Image service offers OpenAI · ChatGPT sign-in (experimental) once you are signed in with ChatGPT. It goes through the service ChatGPT's own apps use, not a published API, so it may stop working; an OpenAI API key works as before.
  • Changes a picture already in the document: right-click it and choose Change this picture with Textus AI…, then say how. The new picture is proposed in its place; once you accept it, Textus asks whether the old file should go to the Trash, and keeps it unless you say so.
  • Adds Pictures per request to Settings › Textus AI: say how many pictures you want and Textus AI makes that many, up to this number (two by default). Without a number it makes one, or one for each part of a longer piece that gains from a picture, and says which first.
  • Settings › Extensions gathers what you add to Textus, a tab each: Themes (the theme gallery, and your own themes), Skills and MCP. Each one is a card with its switch.
  • MCP servers give Textus AI more tools: a folder, a database, a search, anything with an MCP server. Add one by the command that starts it or by its URL, try it before saving to see its tools, and turn it on; Textus starts it in the background, and Textus AI may call its tools while it helps you, each call shown in the conversation. arXiv (search and read papers), ARES (find papers and their BibTeX by DOI) and Context7 (up-to-date documentation for programming libraries) are ready to add, and none of them needs an account or a key. The command is found the way your terminal finds it, so npx and uvx work from the Dock too.
  • Keeps what you send while Textus AI is still replying: the messages wait above the box, each with Edit and Remove, and go one after another once the reply in progress has finished - each written against the document as it reads by then. Stop stops the reply and puts what was waiting back in the box; after a reply that failed they wait for Continue.
  • A bar for review notes over the bottom of the document: step through the notes one by one, mark them all done at once, or select several and ask the AI about them together.

Improved

  • Lets Academic polish (/academic, 学术润色) work on grant proposals as well as papers and theses: besides formal wording, units and citation formats, it now cuts boilerplate openers, hype, empty intensifiers and over-claiming verbs, keeps each claim no stronger than its evidence and the hedges the evidence calls for, checks a proposal's aims against what makes them feasible (NSF, NIH, 国自然), and leaves every number, equation, citation and cite key as written. Each change comes as a proposal, with a short report of what changed in the reply; it improves the writing and is not a way around an AI-use disclosure. Adapted from academic-humanizer (MIT), which builds on humanizer.
  • Saves only the blocks you edited: every other paragraph, heading, list and table is written back exactly as it was in the file, so a file you also keep in Git or edit in another app shows a small diff instead of being reformatted throughout. (#234)
  • Shows a Revise rewrite sentence by sentence while Textus AI is still writing it: each sentence appears in its place as it is written, the original it replaces struck beside it and the sentences it keeps left as they are, instead of the whole passage struck with the new text streaming after it and the sentences laid out only at the end; nothing moves when it is done, and Stop keeps the sentences it finished and leaves the rest of the passage as it was. (#243)
  • Makes the revision animations calmer and alike: new text, strikes and the ✓ / ✕ fade in with one timing, in quick succession rather than one by one, without blur or bounce, and accepted text fades from green where it now stands instead of switching at once. (#243)
  • Counts and shows a Revise rewrite's changes while Textus AI is still writing it: the review bar is there from the start, its count growing one change at a time, each change gets its margin card the moment it is complete, and ‹ › and the view menu already work; Accept and Reject wait until the rewrite is in, or until you press Stop. (#258)
  • Keeps up with the pointer while you drag the edge of the sidebar or the AI panel, and opens and closes the AI panel with less work: neither recalculates the style of every element in the window on each step any more. (#284)
  • Slides the text aside in one movement when the margin cards need room, instead of laying the whole document out again on every frame; cards glide to their new places when the stack moves them, a note's buttons take their room at once and fade in instead of growing the card a frame at a time, and a card is drawn again only when what it shows changes, not each time a streaming rewrite changes the text. (#284)
  • Uses a folder you open as Textus AI's project folder, unless you already chose one for the AI. (#152)
  • Remembers apart from the conversation: after each reply, the same model looks over the exchange once more, briefly, and adds, updates or forgets what Textus AI keeps - a change to a character goes into their library entry instead of a second one, and a preference you take back is forgotten, with Undo under the reply. What one reply changed shows as one list under it, and the reply itself no longer spends a step on remembering.
  • Keeps the memories for all your projects in a folder named textus in Textus's settings folder, laid out like a project's .textus/; the agent folder of earlier versions is renamed the first time.
  • Lets you search the Memory tab once it holds a few things, show each group of memories in its folder, and see the people, places and terms Textus AI noted once, in the library, marked Noted by AI.
  • Translates or rewrites a whole document in one proposal that types into place as it is written, instead of five paragraphs at a time: a 1,000-character story with its picture now takes about 40 seconds with ChatGPT instead of 80. Text a provider sends in one piece, such as MiniMax's edits, still types in at an even pace.
  • Says so in your language when a long request runs out of steps, with Continue to go on from where it stopped.
  • Redoes a picture from the picture itself with Gemini, Seedream and the ChatGPT sign-in: the old picture goes with the description of what to change, so the rest of it stays as it was.
  • Suggests what you will probably say next after each reply, in grey in the empty message box; Tab takes it, and typing anything else drops it. It costs one more short request; turn it off in Settings › Textus AI › Suggest your next message.
  • Lets you ask again for one picture that wasn't made, with Retry in its frame, leaving the others as they are.
  • Keeps what you delete in the Memory tab, or what Textus AI forgets, under Recently forgotten for a while, with Restore.
  • Takes the memories that bear on what you are asking for once there are more than fit, instead of only the newest, and notes a change to a character from where it starts ("from chapter 4 on…") without losing what held before.
  • Gives Textus AI a Word, PowerPoint or spreadsheet file, attached or in its project folder, with its structure - headings, numbered and bulleted lists, tables, bold, italic, links and footnotes, one section per slide with its speaker notes, and dates in a sheet as dates - instead of as flat text, and reads EPUB e-books and RTF files there too, and HTML files as attachments. (#271)
  • Looks through Textus AI's project folder the way the sidebar's file search does - skipping what .gitignore leaves out, and seeing a large folder whole instead of its first 2,000 files - and lets it find a file by name instead of listing every file.
  • Lets Textus AI read a long file in its project folder, such as a whole manuscript of up to 16 MB, a part at a time, starting where a search found what it needs, instead of refusing every file over 100 KB. (#261)
  • Keeps Textus AI from spending a whole request checking its own work: it measures a draft against a length you asked for, or checks its conventions, only a few times, is told when it is down to its last steps so it proposes and replies in time, and asks again on its own when a provider's reply arrives with broken characters (�) instead of showing them or putting them into your document. (#264, with ideas from #221)
  • Sorts the file tree and the search results the way your file manager does: numbers by value (file2 before file10, 第2章 before 第10章) and names in the order of the interface language. (#230)
  • Names each row in Settings by what it does, such as Show page numbers in exports, and drops the grey lines that used to sit under the rows; the few explanations a label can't carry, such as the diagram engine's trade-off and the image host fields, sit behind a small ? beside the label, which shows them on hover, a click or a tap. What is live - a missing tray, no room for the margin - still shows under its row.
  • Keeps the theme rows of Settings › Editor & Appearance to choosing - the appearance and the editor theme - and gathers the rest on one page, More themes: Browse themes, Add a theme from a CSS file and Custom CSS with Export as CSS…, each in one place instead of mixed in among the choices.
  • Explains the icon-only buttons - in the AI panel's message box, the window bar, the sidebar, the tabs, the AI panel's header, the review bar and the find bar - with a tooltip in the app's own style, shown when the pointer rests on one or the keyboard moves to it, instead of the system's, which on Linux came late or not at all. Deep thinking now says what it does, and, like Web search, says when it is on.
  • Copies without asking how: apps that take formatting, such as Word, Notes or Mail, get the formatting, and plain-text apps such as WeChat get the words without Markdown marks, as Textus did by default. The When copied to other apps setting is gone; Edit › Copy as Markdown, also in the editor's right-click menu, copies the Markdown source, for anyone who had that setting on Markdown source.
  • Loads the maths renderer only for a document or reply that has a formula, so Textus opens with about 260 KB less to load; a document with maths still opens with its formulas drawn, and the split view, exports and AI replies draw them as before. (from #221)
  • Works with a screen reader: the editor is a text box named Document, the window has landmarks for the sidebar, the document and the AI panel, and Textus AI says when it starts and finishes writing, how many changes it proposes, which one the review bar points at and how many you accepted or rejected. A proposed change reads as a deletion and an insertion, a margin card says what it replaces, the sidebar's file search is a list you move through with ↑/↓, and the buttons drawn only as an icon - a tab's close button, +, the unsaved dot, a code block's language - are named in every interface language.
  • Works from the keyboard alone: F6 and Shift + F6 move between the window bar, the sidebar, the tabs, the document, the review bar and the AI panel, and back to the caret where it was - the way out of a list or a code block, where Tab indents. The file tree and the outline are walked with the arrow keys (→ opens a folder or section, ← folds it), the tabs with ←/→ (Enter shows one, Delete closes it), and Shift + F10 or the Menu key opens the editor's context menu at the caret, its items walked with ↑/↓. F7 and Shift + F7 step through Textus AI's changes from anywhere in the window and put the caret in the change, where Ctrl/⌘ + Enter takes it and Ctrl/⌘ + Backspace keeps the original. Settings › Shortcuts lists these keys.
  • The sidebar opens on the tab you left it on - Files, Outline or Clipboard - instead of going back to Files on every launch and in every new window. (#196)
  • Keeps a long document quick to work in: typing, Enter and Textus AI's reads of it no longer go over the whole document each time, formulas, diagrams and pictures far from the screen are drawn as you scroll towards them, and autocomplete, grammar check and live diagrams stay on in documents of up to about a million and a half characters instead of turning off at a hundred thousand. In a document of 5,000 paragraphs, Enter went from over half a second to a few hundredths and opening takes about half as long. (#274, #277, #283, #285, #295, #307, #309)
  • _italic_ typed with underscores becomes italic and is saved as _italic_, instead of staying text saved as \_italic\_; snake_case and other underscores inside a word stay as they are.
  • Tab and Shift+Tab in a table put the caret at the end of the next or previous cell's text, instead of selecting the whole cell, which the next key typed replaced.
  • Shift+Enter in a table cell starts a new line in the cell, saved as <br> and shown as a line break again when the file is reopened. It used to do nothing.
  • Thanks to @yfwz100 for #262 and #330, which ran the sidebar up into the title bar and restyled its menu button. They are held back from this release until they work with macOS's window buttons and full screen.
  • Takes the tree up a level with the parent folder's name above it, "‹ Documents / notes", one click away, instead of an arrow that read as "collapse".
  • Applies the filter beside the search box, All files or Documents only, to the tree as well. It used to change only the search results, so with no search the two looked the same.
  • Leaves the Open Folder button out of an unsaved document's empty Files tab; File › Open Folder… and the button in the tree's toolbar remain.
  • Names the two settings that close pairs as you type by what they close: Close ** and ` and Close (), [] and “”.
  • Leaves Textus AI out of the View menu; its button in the window bar, Settings › Textus AI and a shortcut you can set turn it on and off, and the iPhone's menu keeps it.
  • Every colour in the window now comes from a variable an imported Typora theme can reach: the find bar's matches, the margin cards, the review bar, the switches and the shadows used to be fixed. The red of a delete button and the warning colour now follow the theme's page, as the other colours do.
  • A theme can set the window's own colours on :root (--sidebar-bg, --chrome-accent and the rest, listed in the design guide), and they win over the ones Textus works out from its page.
  • Leaves the close button out of the AI panel on the desktop: the quill in the window bar opens and closes it, and right-clicking the quill offers Close the panel while it is open. The iPhone's sheet keeps its close button.
  • Shows a pasted API key as its first six and last four characters around ***, such as sk-pro***wxyz, instead of a row of dots as long as the key, and no longer offers to save it as a password. The key itself is what gets saved.
  • Follows the chat provider for pictures by default: signed in with ChatGPT, its pictures; another provider that makes pictures, its own with the same key; one that makes none, no picture offers. The service and its model are two choices now, instead of every service's every model in one list.
  • Writes and illustrates in one go, on an empty page too: Textus AI writes each picture into the text where it goes, and the picture starts being made the moment the writing reaches it, while the rest of the text goes on; its frame, softly moving and in its shape, stands there until it comes. The text and its pictures are one proposal; Accept says "Picture coming…" and waits until they have come, and a picture the service turned down says why in its place and is left out when you accept the text.
  • Keeps what you haven't decided on: asking for a picture after a paragraph you haven't accepted yet puts the picture into that proposal, instead of replacing the paragraph, and a new request replaces an earlier proposal only when it is for the same place.
  • Starts writing sooner when you ask for a length ("about 1200 words"): the text comes straight into the document, and the reply says how long it came out, instead of Textus AI drafting it out of sight first to count it.
  • Keeps the window smooth while a long text with pictures streams in, and puts each picture in once: a second picture no longer shows the first one's content.
  • Leaves a picture being redone as it is, dimmed, until the new one has come; only then are the two shown for you to choose.
  • Says "Picture selected" when the selection is a picture, instead of counting its description's characters, and shows the picture itself to a model that can read images.
  • Skills are optional: a new installation starts with five on - Proofread, Tighten, Expand, Summarize and Translate - and you add the others in Settings › Extensions › Skills. If you used Textus before, every skill you had stays on. Your own skills, Customize… and Reset are there too; Settings › Textus AI points to them.
  • Makes completion suggestions shorter and more often right: only the next few words you are sure to write, up to the end of the clause, offered when you pause after a word - also in the middle of a document, where it now leads into the text after the caret. Right after a full stop or a comma, and in an empty paragraph, it waits for you; "Continue writing" still asks. Fewer requests go out (a pause of 0.8 seconds, less text sent), so completion costs less.
  • Makes Textus start lighter: what a window loads before it shows is half what it was (1.3 MB instead of 2.5 MB). The other languages, the help guides, Settings, the detached chat and the diagram and formula engines load the first time they are needed - Settings in the background as soon as the window is idle, so it still opens at once - by the same rule plugins follow. Mermaid no longer brings a second copy of KaTeX.
  • Makes Textus AI's revisions show up at once: it names the paragraph it changes instead of copying it out first, so a rewrite starts typing into the document as soon as its reply is written - a rewrite of a whole document on a ChatGPT subscription went from about 10 seconds of nothing to a fifth of a second. It also costs less, since the copied passage is no longer sent back, and long documents gain the most: a section read from a long document is changed the same way. Each changed paragraph still gets its own card.
  • Shows a picture's frame - in its place and in its shape - while Textus AI is still describing it, rather than once the whole description has come; redoing a picture starts on the old one straight away.
  • Keeps a line under the reply saying what Textus AI is doing - "Writing the edit…", "Generating an image…" or "Thinking…" - whenever nothing else moves, so a long edit or picture no longer looks stuck.
  • A proposal a later request replaced at the same spot now reads "Replaced by a newer proposal" in its card, not "Rejected", and Textus AI is told it was replaced rather than turned down - it used to take that version as one the writer didn't want.
  • While Textus AI rewrites a passage, the sentence it has reached is tinted, and the tint moves on as it writes. Sentences it keeps as they were used to show nothing, so a light polish could sit still for seconds and then pop up a sentence.
  • How finely you decide on a rewrite now follows what it did. A sentence or two changed: you decide sentence by sentence, as before. A paragraph rewritten through: it is one change, the old paragraph struck and the new one after it, instead of red and green pieces. Paragraphs joined or split: one change for each new paragraph, set against the paragraphs it came from. "Make this fewer paragraphs" used to come out as one change for everything.
  • A margin card's ✓ reads "Take this change", since a change can now be a whole paragraph.
  • Review notes appear in the margin one by one as Textus AI writes them, with "Writing notes…" under the reply, instead of all at once when it is done. Notes and pictures now name their paragraph instead of quoting it, which costs less and finds the passage every time; a picture given a width can be redone too.
  • Editing text Textus AI proposes to change no longer throws the proposal away. Each change stands while the sentence it rewrites reads as it did; one whose sentence you changed is set aside (and comes back if you change it back), and Accept writes only the changes, leaving your edits as they are. This holds while the revision is still streaming in, too.
  • Makes Textus AI's edits land where it means them: it is shown the document as the editor holds it, paragraph by paragraph - a list or a quote is one piece, a table one, a picture one - and an edit names the piece it changes, so it is placed there, never on another copy of the same words elsewhere in the document. A few words changed inside a paragraph are found inside that paragraph only.
  • Tells a picture, a table, a code block or a formula in Textus AI's rewrite apart the way the editor does, so each is decided as one change, the same in the rewrite as in your document.
  • Review notes and revision cards stay beside the text they are about when there are many of them. A crowded paragraph's cards are cut to the room beside their own lines, a small change shows just the words that change, and more notes than lines become one "8 notes" chip. Click any of them to read it whole.
  • Clicking a note or revision card in the margin, or stepping to one with the bars at the bottom, lights the card and the text it is about together and scrolls the text into view in one smooth movement, however far it is. A group of notes draws a single line.
  • When the AI proposes several edits in a row, the AI panel shows them as one card instead of a column of cards: a row for each edit with its own accept and reject, the reason written once when they share it, and Accept all / Reject all. A long run shows its first few rows, with the rest behind "Show N more", and once every edit is decided the card folds to a single status line.

Fixed

  • Shows the pictures of a document kept in a hidden folder, such as ~/.notes, which showed as "not a format Textus can show".
  • Draws a ChatGPT picture in the shape asked for: a square came back wide.
  • Shows a translated heading's new text without its Markdown # while it waits for review, and a review note's bold term as bold rather than between asterisks.
  • Finishes a Claude reply that searched the web for a long time, instead of ending it part-way, and no longer breaks a cited reply into short lines at each citation. (#278)
  • Writes inline completions in the language of the prose around the caret, or in the interface language when there is too little prose to tell, instead of sometimes in another language after a diagram or code block; with only a diagram near the caret, it no longer suggests anything as you type. (#256)
  • Takes a completion away as soon as you type something else, start typing with an input method, or Textus AI shows a proposal, and shortens it instead when what you type is how it begins; a completion that arrives after you have moved on is no longer shown. (#256)
  • Keeps reference links, [text][ref], and their [ref]: url definitions, which the first save after an edit turned into inline links and deleted. (#234)
  • Reads the lists and quotes in a file that opens with a --- rule as lists and quotes, instead of as plain text that an edit then saved with escapes. (#245)
  • Keeps brackets in a link's text, as in [Tech [Episodes]](…), when you edit its paragraph, instead of saving them in a form that read back as maths. (#245)
  • Keeps a link around bold or italic text as one link when you edit its paragraph or make a word in it bold, instead of saving it as three links. (#245)
  • Saves bold and italic text as it reads after you delete or format words in it: deleting its last word no longer leaves stray ** or * in the file, and a word made bold next to bold text, or two code spans or formulas left side by side, no longer run together. (#245)
  • Saves a line of text that starts with # , - or 1. as text, instead of as a heading or a list item once the word after it is deleted or made bold. (#245)
  • Keeps a paragraph whole when you delete the only word on one of its lines or a <br> ends a line, and no longer saves a line break at the end of a paragraph as a stray backslash. (#245)
  • Keeps the <br> tags in your file as you wrote them when you edit elsewhere in the document. (#245)
  • Keeps the rest of a list item in the item when you delete its first line, a rule inside a list item a rule, and the # that ends a heading such as ## Item #. (#245)
  • Keeps the file tree where it was, with its folders still expanded, when you open a document from one of its subfolders - it used to jump into that subfolder. (#152)
  • Tints only the text of a proposal that runs over several lines, not the line breaks in it: hard breaks and the blank line between two paragraphs no longer get a stub of green at the line end or on the empty line, under the pointer neither, and a rewrite after a hard break no longer strikes one character too many or is shown as one block. (#243)
  • Leaves no blank gaps in the text in Changes in the text, original in the margin and Result only, no markup where a rewrite joins paragraphs into one, and no longer draws the lines of margin cards pushed far below their passage as stray strokes beside the cards: such a card's line shows when you point at it or step to it. (#258)
  • Gives each pasted image a file of its own when two are saved at the same moment, such as in two windows, instead of the second overwriting the first. (from #221)
  • Takes a document's images along when File › Save As… saves it in another folder, copying them into the image folder Settings › Images sets for the new file, instead of leaving the new file's images missing; on macOS, a new document's pasted images now also move next to it when it is first saved, instead of staying in Textus's own folder. (from #221)
  • Keeps the local images of an HTML export saved outside the document's folder, inside the page, instead of pointing at files that aren't there, and reads each image of a PDF export from its file, so none comes out blank. (from #221)
  • Draws the History, New conversation and Keep on top buttons of the AI panel's own window at the size and strength of the docked panel's, instead of squeezed to a sliver and faded. (#287)
  • Follows the system's high-contrast settings: with Increase contrast (macOS) or a high-contrast theme, secondary text is as dark as the text and Textus AI's new text is underlined as well as tinted, and under Windows' Contrast themes cards, bars and the chosen tab or row keep their edges in the system's colours instead of losing them with their shadows and tints.
  • Brings the review bar in and out, and moves a margin card under the pointer, with a fade only when the system asks for reduced motion, as every other surface already did.
  • Draws grey and coloured text with a contrast of at least 4.5:1 (WCAG AA) in the default light and dark appearance: quotes, highlighted code, the struck original of a proposed change, the folder name and search results in the sidebar, the AI panel's tabs, a proposal card's Rejected and the red buttons in the dark appearance.
  • Shows the unsaved-changes prompt in front of the language welcome when you close a window during the first launch, whether from its close button, Alt + F4, ⌘ + W or the window manager, such as niri's close-window; the prompt was drawn behind the welcome, so the window stayed open and the close looked ignored.
  • Fits Settings, and the app's other dialogs, into a short window where Windows has an older WebView2, as on many Windows 10 machines: the title and close button stay on screen and the page scrolls inside, instead of the dialog running past the top and bottom of the window with no way to scroll. (#260)
  • Keeps inline code inside bold, italic and strikethrough: `code` typed inside bold now becomes code instead of staying text with backticks, Ctrl/⌘ + B makes a selection with code in it bold, retyping a deleted ** around code brings the bold back, and a paste that starts with bold, code or a formula keeps it instead of coming in as plain text. (#318)
  • Wraps a long table header onto more lines, as body cells do, instead of keeping it on one line that widened the table or, with column widths set and in print and exports, ran over the next column; short headers such as 负责人 stay whole. (#318)
  • Makes typing Markdown behave as it reads: * starts a bullet list and *** a rule, as - and --- do; ####### stays text; Shift+Enter in a heading starts a new line instead of turning it into an underlined heading on save, and adds a line in a code block; Enter inside inline code splits the line; Tab and Shift+Tab indent and outdent the selected lines of a code block instead of replacing them or leaving the editor; text typed after a wikilink stays out of it; the arrows leave a table at the top or end of the document from any cell; and lines pasted into a table cell stay in that cell instead of overwriting the cells beside it. (#320)
  • Draws the interface in full where Windows has an older WebView2, as on Windows 10 machines that don't update: off switches have their track again, cards, Settings groups and the review bar their background and edges, and proposed edits their green and red; the editor's right-click menu, find bar and Insert Table dialog open where they should instead of off to one side; the sidebar can be resized again; the AI panel's empty state no longer pulses; Source Mode is centred; and a Mermaid diagram with a link draws. (#260)
  • Holds every address Textus AI fetches - a page it reads from the web and a picture an image service leaves at a link - to the same strict check, so neither can reach this computer or your local network through an address written in another form, such as an IPv6 address that carries a private IPv4 one, a 6to4 or NAT64 address, or a name like printer.local. (#327)
  • Makes more of Markdown editing behave as expected: Ctrl/⌘ + B and Ctrl/⌘ + I take bold and italic off a word again, and pressed at the end of what you just typed they end it and the text goes on plain, as in Typora; a link typed as [text](url becomes a link when you move on past the ) put in for you; Tab and Shift+Tab never move the focus out of the text; Format › Bullet or Ordered List switches a list over; Backspace at the start of a heading makes it body text at any level, and at a callout's first line keeps the callout (a second press makes it a plain quote); ~~~ starts a code block, --- on the first line front matter and 1) a list, while === stays text; HTML, <br> and footnote references typed out are saved as typed; Enter before a space no longer saves &#x20;; ← moves one character over inline HTML as → does; bold-italic opens in one arrow press; deleting the last word of bold-italic around code no longer loses both; edited paragraphs keep two-space line breaks and tables line up Chinese, Japanese and Korean text; Word lists paste as lists, and a heading pasted mid-line keeps its #; and Settings › Shortcuts names the fixed shortcut a key belongs to. (#329)
  • Slides the AI panel in beside the page without moving the rest of the window, whether or not the sidebar is open. On a Mac, opening it used to shift the sidebar and the text aside and snap them back as the slide ended. In a smaller window it also lay over the page with a shadow, unlike in full screen, and opening the sidebar afterwards changed it and played it in again; now it stays beside the page and keeps its width.
  • Keeps the window still when a swipe on the trackpad reaches the end of the sidebar or runs over the title bar, instead of the whole page bouncing on a Mac. The document itself still gives at either end, short ones too.
  • Leaves the window as it is in Zen mode, which hides everything but the text and dims the other paragraphs, instead of also turning it fullscreen.
  • Keeps a Settings list inside the window when it is wider than its button, such as Image model's, which ran past the window's right edge.
  • Selects the document, or the text field you are in, with Edit › Select All on a Mac, instead of the whole window with the sidebar's notes when the caret was in neither.
  • Leaves ~~ and == as typed until you type their closing pair, as Typora does, instead of drawing an empty strikethrough or highlight that showed two tildes as four. ~~text~~ and ==text== still become a strikethrough and a highlight.
  • Springs the document back as soon as your finger leaves the trackpad at its top or bottom on a Mac, instead of riding the swipe's momentum and pausing there before it let go. A swipe's momentum that runs into an end bounces off it once.
  • Draws a picture Textus AI proposes at the width it will have once accepted, within the text column, instead of at the full size the image service made it, which ran far past the page until you accepted it.
  • Keeps the text selected after ⌘B or ⌘I on a selection, as Typora does, so the other one makes it bold italic and pressing either again takes it off, instead of the selection dropping and the next press opening empty formatting at the caret. A selection made with the keyboard just before the press is taken as it shows, and a double click on a bold or italic word on a Mac selects that word instead of nothing or the word beside it.
  • Moves the sidebar's button into the traffic lights' corner once a Mac window is in full screen, and back beside them as soon as it starts to leave, as macOS reports it, instead of a moment late, or not at all on the way out, which left the button under the traffic lights.
  • Opens a file dragged onto the window in a tab of its own, instead of in place of the document you were reading; only an empty Untitled tab gives way to it.
  • Closes the window from File › Close Window in the menu drawn in the window on Windows and Linux, where it did nothing. (#345)
  • Works on the document as you see it when you send another request before deciding on the last one: Textus AI can change or go on from text it proposed that you have not accepted yet - in Write mode too - and the change goes into that proposal, instead of an edit that could not be placed. An edit of words a rewrite you have not decided on still keeps goes into the rewrite too, instead of a second proposal on top of it.
  • Keeps a picture you have not accepted yet with its paragraph when you then have the text rewritten: Textus AI carries it into the new text, or, if the rewrite leaves it out, it stays after the paragraph in the same place - instead of the picture losing its place and disappearing.
  • Gives a whole-text rewrite a card in the margin beside each change, instead of one card at the top for the whole text: when the document has a table or a code block the rewrite leaves alone, and when the changed sentences of several paragraphs run together.
  • Fixes an error that could come up when the caret was beside a revision in the margin view.
  • Makes a link out of [text](url) written in any order: with the URL pasted between the parentheses, or with []() typed first and filled in afterwards - it becomes a link once the caret leaves it. Brackets you escaped stay text.
  • Keeps the words typed after a pasted link out of it.
  • Makes a web address you type (https://…, www.…) a link as soon as you type a space or press Enter after it, as it already was after reopening the file.
  • Keeps out of your document the citation markers (citeturn3view0 and the like) that ChatGPT and other OpenAI models wrote into their text after searching the web.
  • Shows the text Textus AI writes after a paragraph as the paragraphs, lists, tables and footnotes it will be - while it is still being written and before you accept it - instead of its Markdown with line breaks.
  • Stops a Textus AI request from hanging: a reply ends as soon as its last event arrives, even if the service keeps the connection open, and a service that sends nothing but keep-alives for five minutes is given up on with an error, instead of the request waiting indefinitely (seen with the ChatGPT model).
  • Stops completion from doubling the half-typed Chinese or Japanese word at the cursor (十分 + 分钟 read 十分分钟), a comma the text already ends with, or opening with an ellipsis.
  • Remembers a fact about your work that you mention in passing - a character, a place, a term - in the project's library, as it does when you ask outright.
  • Keeps no memory of one piece of work when no project folder is open, where it would have gone into every document you write; it says that remembering it needs a project folder.
  • Leaves out of a library entry an alias of one character or two letters, which matched far too much text.
  • Every revision card in the margin now has its line to the passage from the start: a card the cards above pushed down drew its line only while pointed at, and read as belonging to nothing. Those lines are fainter until pointed at.
  • Pictures in the chat's cards and in the margin keep their shape: they were squeezed narrow, and their frames were a fixed shape the picture then jumped out of.
  • Proposals from an OpenAI-compatible service that numbers its tool calls the same way in every reply (local servers such as Ollama and LM Studio do), or that sends no id at all, no longer vanish: a second request's proposal took the first one's place and both went, and a call with no id was dropped.
  • A picture Textus AI redid now takes the old one's place in the text once it is made. It showed on its card, but the document kept the old picture and the card read "Writing…" for good.
  • With Claude, a revision types into the document as it is written, rather than appearing a paragraph at a time.
  • A rewrite that only joined paragraphs, with every sentence as it was, showed no change but joined them when accepted.
  • Shows an edit as it streams in even when Textus AI writes the words it changes before naming their paragraph; it used to wait for the whole edit.
  • When a request has made as many pictures as Settings allows, or no image model is set up, the AI panel now says so in your language and names the setting to change, instead of showing a message written for the model.
  • You can scroll the AI panel while a reply is still coming in: it no longer pulls you back to the bottom with every new piece of text. Scroll back to the bottom, or send a message, and it follows the reply again.
  • A suggested next message in the AI panel's input is now clearly fainter than text you type, so it no longer looks like something you wrote.
  • While the AI thinks again after loading a skill or using a tool, the end of the AI panel now says it is still working. Before, the only sign was the "Thinking" line further up, so the panel looked stuck.
  • A long step result in the AI panel, such as a skill's full text, now opens in a box of its own that scrolls, so the line that closes it stays at hand instead of being screens away.
  • The AI panel moves more calmly while the AI proposes edits: the line at the end keeps saying it is writing the edit between edits, instead of flicking back to "Thinking", and a card that grows or shrinks slides what is under it rather than jumping it.
  • A title the AI adds above writing you have not accepted yet now stays a heading of its own. Before, the AI was told that the title and the first paragraph ran together, which could mislead its next step.

Platform notes

  • macOS: Background mode adds a Textus icon to the menu bar, drawn in the menu bar's own colour; clicking it opens its menu. (#244)
  • Windows: In background mode, clicking the icon in the notification area opens Textus, and right-clicking it opens its menu. An update, and an installer run by hand, close a Textus that runs in the background before they install. (#244)
  • Windows: Textus works with WebView2 from version 105 (2022) on, so a computer whose WebView2 doesn't update, such as in a school lab, still gets the whole interface. (#260)
  • Linux: The tray icon needs libayatana-appindicator, which the .deb now installs and the AppImage carries; without it Textus still keeps running in the background, and Settings says the icon can't be shown. GNOME shows tray icons only with the AppIndicator extension. The .deb and .rpm now describe Textus in apt show and rpm -qi, and the .rpm names its MIT license. (#244, #239)
  • iPhone and iPad: Background mode, Open Folder and the file-name search are on the desktop only; the sidebar works as before.
  • A pull request from a fork that changes CI or the test configuration now fails the ci-config check and asks the maintainers for a review, as CONTRIBUTING.md has asked contributors to leave those alone.
  • Lays the ground for plugins: commands with their own shortcuts, items in the editor's right-click menu, sidebar tabs and Settings pages are now added through one registry each, described in docs/dev/plugin-api.md. Nothing changes on screen.
  • Keeps the released version on its own line from 1.2.0: fixes ship as 1.2.x while 1.3.0 is made on main, and the docs for contributors say where a pull request goes.
  • Reads only what Textus 1.1 and later keep. Gone with it:
    • The offer to import a Levis installation, at first launch or in Settings › About.
    • The conversion of a project's .levis/ folder, and the Memory tab's Convert Levis data.
    • Reading writing instructions, skills and memories from the old agent/ config folder. They stay on disk; moving them into textus/ brings them back.
    • Reading chat history from 1.0's single chat-history.json, and an OpenAI key from api_key.json. Enter the key again.
  • A setting saved by an older version that Textus no longer knows now takes its default instead of being converted:
    • Agent mode Ask, Edit or Plan becomes Review.
    • The old provider names are no longer mapped.
    • An image folder such as ${filename}.assets becomes assets/.
    • A tour left half-way in an older guide starts over.
  • Checks the types of what the app and its native side send each other against one definition, generated from the native code, so the two can't drift apart.

Installers for macOS (Apple silicon and Intel), Windows and Linux (x64 and ARM64) are below; the app updates itself.