• New Text Engine & Folding

    • Rebuilt the editor on TextKit 2. Layout and drawing now share the same geometry, eliminating the code-folding overlap bug where collapsing a large or deeply-nested section painted garbled text over the folded header.
    • Reworked code folding. Folds collapse cleanly to the last line — no leftover blank line, no stray fold chip through nested collapses.
    • Consistent line height for mixed Korean/Latin text, adaptive gutter width, and the minimap, all reimplemented on the new engine.
    • Leaner internals — the old TextKit 1 code paths were removed.

    Faster Typing

    • Noticeably snappier typing. Per-keystroke work in the editor was profiled and trimmed across the board — even short documents used to accumulate small stalls on every key press.
    • Instant autocompletion popup. The command palette is pre-built at launch and stays resident between uses, so typing \ no longer pays a window round-trip to reopen it. While you narrow a command, it updates only what actually changed instead of rebuilding on every letter.
    • No more hitch when you resume typing. The outline and label lists are now parsed in the background — they used to rescan on the main thread right after each typing pause, exactly when you were about to type again — and the sidebar skips redrawing when nothing changed.
    • Smoother Korean input. Fixed an intermittent lag while composing Hangul (the delay mid-syllable as a character formed).
    • Internal caret diagnostics were removed from the keystroke path (still available behind a hidden preference for debugging).

    AI Assistant

    • Renamed “AI Agent” → “AI Assistant” across the panel, tab, menus, and settings.
    • Refined look. The panel shares the editor’s background so the two feel like one workspace; replies sit in clean cards, and the input field has a rounded border.
    • File attachments. A new attach button adds files: text files (.tex, .bib, .cls, …) are inserted inline into your prompt, while images and PDFs are sent as real attachments to Claude, ChatGPT, and Gemini. Staged files show as removable chips.
    • Smoother streaming. Responses render in steady batches instead of stuttering as the message grows.
    • Auto-follow & “Jump to latest.” New content keeps the view pinned to the bottom while you’re there; a bottom-center button brings you back when you’ve scrolled up.
    • Errors as chat bubbles. API/network failures now appear inline as a distinct error bubble with a readable message, instead of a banner that scrolls away.
    • Faster to open with a long chat history — the transcript now renders lazily instead of building every past message up front.
    • Larger send/stop button.

    Editor & Files

    • Fixed a scroll jump while typing in long documents — the viewport no longer lurches and snaps back on each keystroke.
    • Large pastes stay in sync. Pasting a big block now highlights the whole thing right away, and the scrollbar and minimap match the real document length — no more bottoming out while text remains below, blank regions in the lower minimap, or a one-time scroll jump after the paste settles.
    • Stable editor width across monitors. Moving the mouse to another display could flip the scrollbar between overlay and classic styles, changing the editor’s width and re-wrapping the whole document. The scrollbar now always overlays the text, so line wrapping stays put.
    • Find & Replace persists across tabs — mode (Find vs Replace) and search string carry over on tab switches, and each match flashes a find indicator (even when off-screen).
    • Redesigned minimap. The overview strip now draws a syntax-colored silhouette of your document — commands, comments, and math show in their editor colors. While typing it repaints only what changed, and full re-renders happen in the background, so the minimap never delays a keystroke even in very long files.
    • Comment toggle keeps the caret aligned with the inserted/removed %.
    • Save All (⌥⌘S) writes every open document at once.
    • Steadier terminal text. The built-in terminal now uses a fixed font size (matching the AI Assistant) instead of scaling with the editor’s font-size setting.
    • Tighter spacing between the sidebar / bottom-panel toggle icons.

    Sessions

    • Your tabs survive a crash. The open-tab set is now saved as you work — on tab changes and whenever the app leaves the foreground — not just on quit, so an unexpected shutdown no longer loses your session.
    • Clear Session. A new File ▸ Clear Session command closes every tab and wipes the saved session, so the next launch starts fresh.

  • New

    • Choose whether to restore your last session — a new Editor → Behavior toggle, Restore last session on launch (on by default), lets texspark start empty instead of reopening your previous tabs. Your tabs are still saved on quit either way, so flipping it back on brings them right back.
    • Open the PDF in your default app — a new button in the PDF header hands the current PDF to Preview, Skim, or whatever you’ve set as the default, for full-window reading, printing, annotating, or presenting.
    • Jump to any open tab — a new menu at the right of the tab strip lists every open document, with a checkmark on the current one and a ● on unsaved tabs. Pick one to switch straight to it — handy when you have more tabs than fit and some are scrolled off. It appears once you have more than one tab open.

    Fixed

    • Click to move the caret while typing Korean — clicking elsewhere mid-composition now moves the cursor on the first click instead of taking two, while still committing the syllable you were typing.
    • Highlighting survives a line break inside inline math — wrapping a long $…$ across a line no longer drops its syntax colors. Inline math now highlights across line breaks (stopping only at a blank line), and editing one line of a multi-line formula re-colors the whole span instead of just the line you touched.

    Improved

    • Unnumbered headings in the outline — starred sectioning commands (\chapter*, \section*, \subsection*) now appear in the outline without a number, and no longer bump the counter — so a starred preface no longer pushes your first real chapter to “2”.
    • Smarter bracket auto-close — typing an opening (, [, or { in front of text that already has a matching closer no longer inserts a stray extra one. Type ( before something) and you get (something), not ()something). When the line is balanced, the pair is still auto-inserted as before.
    • Smarter $ auto-close — when a line already has an open math delimiter, typing $ closes it with a single character instead of dropping in a new $$ pair. So finishing $x with a $ gives you $x$, not $x$$.
    • Lettered appendices in the outline — headings after \appendix are now numbered with letters (A, B, C…) instead of digits, matching LaTeX. Appendix chapters read A, B… with their sections as A.1, A.2, and the counter restarts at A so a numbered chapter before the appendix no longer throws it off. In article-class documents, where the appendix letters sections instead, that’s handled too.
    • Outline reopens where you left off — on relaunch, the outline now scrolls to the section holding your restored cursor instead of starting at the top, so you land right back in context in a long document.
    • Smarter “expand to level” in the outline — expanding to Chapters / Sections / Subsections now only opens nodes that actually contain a heading at that level. A chapter whose only children are deeper items (e.g. paragraphs directly under it) stays collapsed instead of dumping those too-deep entries into view.
    • Smoother typing in long documents — the code-folding scan is dramatically faster (it no longer recounts line numbers from the top of the file for every match), so editing a long file no longer pins a CPU core. The minimap also skips redrawing while its window is hidden.

  • Fixed

    • Rock-steady Hangul typing — typing Korean no longer flickers, drifts, or bobs. Previously a Korean line could shimmer (along with the line above it) the moment it soft-wrapped, nudge the lines below it downward, or make the composing syllable jitter up and down. Line height and baseline are now fixed during typesetting itself, so wrapping, fast typing, and IME composition all stay put.
    • No more sideways drift — at fit-width the page no longer scrolls or drags horizontally; horizontal panning kicks in only once you’ve zoomed in past the page width.

    Improved

    • Line numbers never clip — the gutter now sizes itself to the document. It always fits at least four digits and grows automatically for five- and six-digit files (and for larger editor fonts), so deep line numbers are never cut off — while shorter files reclaim the extra space.
    • Softer minimap text — the minimap renders its text a touch lighter so it reads as a calm overview instead of competing with the editor.

    Added

    • Hand tool for panning — right-click the PDF and pick Hand Tool to grab and drag the page around (the cursor turns into a hand); Select Tool switches back to text selection. ⌘-click inverse search keeps working in either mode.
    • Terminal font tracks editor font size — the terminal now automatically matches the editor’s font size, so both stay in sync when you adjust text size in settings.
    • Scroll to zoom — hold or and scroll to zoom in and out toward the cursor. (⌃+scroll is left to macOS’s own screen zoom.) Use the built-in Automatically Resize in the right-click menu to snap back to fit-width.
    • Hide the sidebar — a new toggle in the editor’s status bar (next to the bottom-panel toggle) collapses the left Outline / Labels sidebar so the editor gets the full width, and brings it back with one click. Both toggles keep a direction-specific icon whether open or closed — a filled left column vs. a filled bottom strip — so you can always tell which is which, and it dims when its panel is hidden. The state is remembered across relaunches, and collapsing the sidebar keeps your editor and tabs exactly as they were.

  • Minimap

    texspark now has a code minimap: a slim overview of the whole document down the right edge of the editor. It renders your actual text — syntax colours and all — scaled way down, so you can see the shape of a file at a glance and jump anywhere in it. On long documents the minimap keeps a fixed zoom and slides to follow your position rather than squashing the entire file into the strip, and clicking or dragging on it scrolls the editor straight to that spot. It stays out of your way otherwise, and you can turn it off entirely in Preferences.

    Fixed

    • Hangul line drift, for good — typing a Korean line no longer nudges the lines below it downward. Line height is now hard-pinned in layout, so the taller CJK-composition font can’t inflate a line.

  • Improved

    • Faster tab switching — switching tabs no longer waits on the tab strip’s scroll animation, so the editor updates right away. Switches that used to take about a fifth of a second are now near-instant.
    • Instant first switch to reopened tabs — after a relaunch, texspark now warms up your restored tabs in the background, laying each one out up to your saved cursor. The first time you switch to a tab is immediate instead of stalling to render — even in long files. A slim progress bar in the status bar shows the warm-up and fades away once every tab is ready.
    • Smoother newlines in large files — pressing Return in a big document no longer stalls; the editor only lays out the visible region instead of the whole file.
    • Fold arrows keep up — the fold triangles in the gutter now track the text more closely as you type and add lines.

    Fixed

    • Line numbers in the gutter — after opening a tab scrolled partway down (including a session-restored tab), the line numbers could restart from 1 at the top of the screen instead of showing the real line numbers. The gutter now reads the visible region in the right coordinate space, so the numbering always matches the document.
    • Line numbers no longer drift while typing Hangul — composing a Korean syllable briefly grew its line taller than the rest, nudging every line (and its number) below it down. Lines now hold a fixed height across Latin and CJK text, composing or committed, so nothing shifts.

    Changed

    • Switching tabs now returns you to your cursor — instead of trying to restore a remembered scroll position, the editor jumps to where your caret last was in that tab and brings it into view. It’s more predictable across tab switches and app relaunches: you land exactly where you were typing.

  • This release is all about how the editor feels in a large, multi-file project — faster tab switching, smoother typing, and a caret that stays exactly where you left it.

    Instant tab switching

    Every open tab now keeps its own editor, so switching between them is immediate — no re-highlighting or re-layout on each switch. Your cursor position, scroll offset, and collapsed sections are all preserved per tab, so returning to a file lands you exactly where you were. Restored tabs are warmed up in the background after launch, so even the first switch to a tab is instant. A single click on a tab selects it right away (double-click still sets/clears the build target).

    Smoother typing in large files

    Typing in large documents (tens of thousands of characters) no longer stutters — most noticeably when completing a Hangul syllable. Keystrokes stay smooth no matter how big the file is; the outline and fold markers simply catch up a moment after you pause.

    Refinements

    • The caret is now saved on every way of switching tabs — mouse, keyboard cycling, and jump-to-issue — so it’s never lost.
    • Switching tabs scrolls the active tab into view and centers it in the tab bar.
    • Outline entries open on any click, single or double.

  • Improved

    • Faster tab switching on large files — the editor now lays out only the visible region and rescans folds off the main thread, so swapping between big documents is markedly quicker while the caret and scroll position still land where you left them
    • Fixed typing lag in large documents — text now stays smooth even in files with tens of thousands of characters, including while composing Hangul.

    New

    • Active tab scrolls into view — switching tabs (especially by keyboard, ⌘⇧[ / ⌘⇧]) now keeps the selected tab centered in the strip instead of letting it slide off the edge; a session-restored tab that starts off-screen is brought into view on launch

    Fixed

    • Cursor position per tab — moving the caret and then switching tabs by keyboard (⌘⇧[ / ⌘⇧]) now saves the caret’s new spot, so returning to a tab lands where you left off instead of an earlier position
    • Minor bug fixes

  • New

    • Double-click a tab to set or clear it as the build target (same as ⌘⇧P / right-click)
    • Collapsible bottom panel — hide the Terminal / Issues / Log area with ⇧⌘Y or the status-bar button; it reopens automatically when a build reports errors
    • ⌘⇧A shuttles keyboard focus between the editor and the AI input (and still sends the selection when there is one)
    • AI input now grows with your text up to 6 lines and then scrolls, and Shift+Enter inserts a newline
    • The AI system prompt gains a Clear button, applies to the next message without a restart, and can be left blank
    • The AI Attach activated document toggle now persists across launches

    Fixed

    • Tab state cross-contamination — opening several files at once no longer shows the build target’s content in the wrong tabs, and each tab keeps its own PDF scroll position
    • Stale highlight artifacts — thin residual lines left behind by bracket and selection highlights are gone; gutter fold marks stay aligned
    • Selection alignment — the selection highlight now matches the line height instead of drooping below the text, especially with a custom editor font
    • Bottom panel state — a panel hidden at quit now stays hidden on the next launch instead of reappearing out of sync with its toggle icon
    • Korean / IME input in the AI box no longer drops the second composed syllable
    • Minor bug fixes

  • Better navigation and smoother file handling.

    • Outline cursor tracking — the outline highlights the section your cursor is in — and its ancestor chain (section → subsection → paragraph) — live as you move around the document, so you always know where you are.
    • Drag & drop — drop .tex files from Finder onto the editor to open them as tabs, and drag tabs to reorder them.
    • File association — open .tex files in texspark straight from Finder (double-click / Open With).
    • Minor bug fixes — assorted stability and polish fixes.

  • An in-app AI assistant, automatic updates, and a batch of writing conveniences.

    • AI Agent — chat with an LLM in a side panel without leaving the editor. Choose your provider — Claude (Anthropic), ChatGPT (OpenAI), or Gemini (Google) — bring your own API key, and get streaming, markdown-rendered replies tuned for LaTeX help.
    • Automatic updates — powered by Sparkle, texspark can check for and install new versions in the background, with every update cryptographically signed.
    • Word count — a live word count for the rendered document in the editor’s status bar, counted with texcount so \input / \include are followed.
    • SyncTeX highlight — a forward search now flashes a highlight at the destination in the PDF, so you can see exactly where you landed.
    • Auto save — optionally flush your edits to disk automatically after a short idle, so a build always runs against the latest text.
    • Optimization — further editor and build performance improvements.
    • Minor bug fixes — assorted stability and polish fixes.