• (v0.8.5) Open With

    Getting texspark to open your .tex and .bib files on double-click used to mean digging through Finder’s Get Info panel — especially if another TeX app had already claimed the extension. Now it’s one button.

    • Set as default from Preferences. Preferences → Compile → File associations has a Set as Default button that makes texspark the editor for .tex, .ltx, .latex, .sty, .cls, .bib, and .bst in one go.
    • Shows the current state. The panel tells you whether texspark is already the default, reading the extension’s real handler — so it’s accurate even when another app owns .tex.
    • Nothing sneaky. texspark never seizes an association silently; macOS asks you to confirm the change, and it only happens when you click the button.

  • (v0.8.4) Steady

    Reload polish

    Reloading a file from disk now leaves you exactly where you were:

    • Caret & scroll stay put — reload keeps your current cursor and scroll position instead of jumping to the top or a stale spot.
    • Full re-render in one pass — syntax highlighting, layout, and the minimap all refresh together, so nothing is left looking half-updated.
    • Caret kept in view — if the reloaded file shrank enough to push the caret off-screen, texspark gently scrolls it back into view.

  • (v0.8.3) Projects

    Licensing

    A round of correctness fixes around licensing and saving. Existing texspark licenses keep working exactly as before — nothing changes for paying users.

    • Product-scoped license keys. Activation and the periodic re-check now confirm a key actually belongs to texspark, so a key for a different product from the same store is turned away with a clear “this key isn’t for texspark” message instead of unlocking the app.
    • Save All, without the modal pile-up. Save All (⌥⌘S) is an explicit “write everything” action, so it no longer asks for per-file overwrite confirmation. Files that changed on disk outside texspark are left untouched — never clobbered silently — and reported together at the end so you can resolve each one with ⌘S or the reload button.
    • Steadier save / reload / build. The rules for what happens when a tab has unsaved edits and/or the file changed on disk are now driven by one shared decision path, covered by tests — so every entry point (⌘S, ⌘B, the reload button) behaves consistently.

    Build commands

    If you juggle projects that build differently — one on xelatex, another on latexmk, a third with a makeindex pass — texspark now remembers the build command for each project, and puts it right where you work.

    • A command per project. Each project (its build target 🔨, or the file you’re editing) keeps its own build command. Switch projects and the command follows — set latexmk once for the book and xelatex for the paper, and never swap them by hand again.
    • Command bar in the Terminal panel. Two always-visible, editable rows sit at the top of the Terminal: the build command with a ▶ to build (⌘B), and your custom command with a ▶ to run it (⌃⌘B). No trip to Preferences to tweak a flag.
    • Templates a click away. The 🔨 next to the build command opens Preferences → Compile, where the engine templates (xelatex / pdflatex / lualatex / latexmk / bibtex / makeindex) and options live.

  • Ever had a file change under you — a git checkout, a quick edit in another app, a script rewriting your .bib — and wondered whether the editor was still showing the truth? texspark now watches your open files, flags a tab the moment its file changes on disk, and asks the right question before any save, reload, or build could quietly clobber one side or the other.

    • External-change detection. Every open tab is watched. When a file changes on disk outside texspark, the tab gets an orange badge — a heads-up, never a surprise auto-reload.
    • Reload on demand. Pull the disk version back in from the button in the editor header, or right-click a tab → Reload from Disk.
    • Conflict-aware save, reload & build. Each action knows whether the tab has unsaved edits and whether the file changed on disk, and offers exactly the choices that make sense — never silently losing either version. Full behavior below.
    • Safer defaults. “Confirm before overwriting” is locked on and background auto-save is locked off while texspark is in active development.

    Legend: Unsaved edits = the tab differs from what texspark last saved. Changed on disk = the file was modified outside texspark since then.

    Save (⌘S)

    Unsaved editsChanged on diskWhat happens
    NoNoNothing to save — no-op
    NoYesAsks: Reload from Disk / Overwrite with Editor’s Contents / Cancel
    YesNoAsks: Overwrite / Cancel, then writes
    YesYesAsks: Overwrite / Discard / Discard & Reload / Cancel

    Reload from Disk (editor header ↻ · tab menu)

    Unsaved editsChanged on diskWhat happens
    NoNoReloads (identical — no visible change)
    NoYesReloads the disk version immediately
    YesNoAsks: Discard & Reload / Cancel
    YesYesAsks: Discard & Reload / Cancel

    Build (⌘B)

    Unsaved editsChanged on diskWhat happens
    NoNoBuilds straight away
    NoYesAsks: Build with Editor’s Contents / Reload from Disk & Build / Cancel
    YesNoAsks: Overwrite / Cancel, then builds
    YesYesAsks: Build with Editor’s Contents / Reload from Disk & Build / Cancel

  • (v0.8.1) Reload

    Ever had a file change under you — a git checkout, a quick edit in another app, a script rewriting your .bib — and wondered whether the editor was still showing the truth? texspark now watches your open files and lets you pull the disk version back in on demand.

    Reload from disk

    • External-change detection. Every open tab is watched. When a file changes on disk outside texspark, the tab gets an orange badge — no surprise auto-reload, just a heads-up that the on-disk copy has moved on.
    • Reload on demand. Pull the disk version back in from the new ↻ button in the editor header, or right-click a tab → Reload from Disk. If the tab has unsaved edits, texspark confirms before discarding them.
    • Smarter save conflicts. Saving over a file that changed underneath you now always asks first — Overwrite, Discard, Discard & Reload, or Cancel — so another editor’s or git’s changes are never clobbered silently.
    • The overwrite-confirmation safeguard is now locked on while texspark is in active development.

  • (v0.8.0) BibTeX

    Finally, texspark supports BibTeX! For the past while I’ve been heads-down writing a full-length book, where citations never really came up — but now that the manuscript is done and I’m back to research papers, I needed BibTeX again. So here it is.

    BibTeX

    • BibTeX tab in the sidebar. Next to Outline and Labels, a new BibTeX tab lists every entry from the .bib files your project references (\addbibresource / \bibliography), discovered recursively across \input / \include. Filter as you type.
      • Click — insert \cite{key} at the editor cursor
      • Double-click — open the .bib file at that entry
    • Citation autocompletion. Typing \cite{, \citep{, \citet{ (and friends) now suggests your BibTeX keys, the same way \ref{ offers labels — one source of truth, drawn from the same entries.
    • .bib syntax highlighting. Open a .bib file and entry types, field names, citation keys, and braces are colored to match your theme.

  • (v0.7.4) Tidy

    Editor & Layout

    • Slimmer AI Assistant header. The provider and model dropdowns, attach toggle, and clear button in the AI panel header now use smaller controls with tighter spacing, matching the compact headers elsewhere and giving the conversation more room.
    • Consistent terminal & log font. The built-in terminal now uses the same fixed monospaced size as the raw build log, so switching between the Terminal and Log tabs no longer jumps font size.

  • (v0.7.3) Connected

    AI Assistant

    • Live model lists. The model dropdown for each provider (Claude, ChatGPT, Gemini) is now fetched from your account instead of a hardcoded list — new models appear automatically the moment your key can use them. It refreshes when you open Preferences and after a key is verified, and falls back to a built-in list when you’re offline or haven’t added a key.

    Terminal

    • Run a custom command. Set your own command in Settings → Compile → Custom command and run it in the built-in terminal from the ▶ button in the Terminal header or with ⌃⌘B. It runs from the build target’s folder and supports the same {file} / {filename} placeholders as the build command — handy for bibtex, makeindex, latexmk, or any project script.
    • Matching font size. The terminal now tracks the editor’s font size, so the two stay visually consistent and resize together.

    Finder Integration

    • Open LaTeX files directly. texspark now registers as an editor for LaTeX and BibTeX files (.tex, .ltx, .latex, .sty, .cls, .dtx, .ins, .def, .clo, .bib, .bst), so you can double-click them in Finder or use “Open With” to jump straight into the editor.

    Editor & Layout

    • Smaller Issues filter. The All / Errors / Warnings switch in the Issues panel now matches the slimmer segmented controls used elsewhere.

  • Editor & Layout

    • Folding no longer jumps the scroll. Collapsing or expanding a section above where you were reading used to shove the view up by the folded height, landing you somewhere else in the document. The editor now captures the line at the top of the viewport before the fold changes the layout and pins it back afterward, so your place holds steady no matter where the fold is.
    • More compact panel headers. The Outline/Labels, PDF/AI Assistant, and Terminal/Issues/Log switchers now use smaller segmented controls, and the header row and editor tabs are slimmer — reclaiming vertical space for your document while keeping every column’s headers aligned.

  • Editor & Layout

    • Correct scrolling when the editor width changes. Re-wrapping the document after a width change no longer cuts the scroll extent short — content near the bottom used to be unreachable until an edit forced a relayout. Per-tab scroll position is now restored by a text anchor instead of a raw pixel offset, so your place holds even when the wrapping changes.
    • No more false scroll bottom. After collapsing/expanding a fold or editing near the end of a document, the view could bottom out with content still below it until the next edit. The editor now self-heals a short frame as you scroll toward the bottom, and re-measures after unfolding a large section.
    • Fixed a stale minimap after resizing. The minimap could draw short or misaligned right after a window/editor width change, then jump the scroll as it caught up. It now reads final geometry on the first render and keeps the viewport steady.
    • Correct numbering for the final empty line. When a document ends with a trailing newline, that empty last line is now numbered — the caret no longer lands on an unnumbered row — and it’s no longer clipped from the scrollable area.
    • Find indicator only on real matches. The indicator no longer flashes on manual selections (mouse drags, Shift+arrow) while the find bar is open — it fires only when navigating to an actual search match.

    Tabs & Files

    • No more duplicate tabs for the same file. Opening a file that’s already open now always reuses its tab, even when reached by a different path — through a symlink, across two mounts of the same volume, or via SyncTeX reverse search versus the outline — by matching files on their filesystem identity rather than the path string.

    Settings

    • Cleaner settings screen. The always-visible explanation captions now live behind a small (i) button — click for a popover, hover for a tooltip — keeping the form compact. The two safety warnings stay inline whenever their risky state is active (auto-save on, or overwrite confirmation off).