Releases: Sompote/Tigriden
Release list
Tigriden 0.2.0
A snapshot no longer copies the data it sits next to
A folder without its own .git is tracked by a hidden snapshot repository under ~/Library/Application Support/tigriden/snapshots/. Nothing ever capped, packed or deleted one. On the machine this was found on, that store had reached 17 GB across 40 folders, and two folders held 13 GB of it.
A per-file cap does not fix that on its own, because the mass is never in the giants. One folder carried 4602 harvested PDFs averaging 1.7 MB, a literature corpus. Another held 7638 JPGs averaging 0.65 MB, a training set. Both sit under any per-file cap worth setting: a 5 MB cap caught 3.0 GB of the first folder and 1.6 GB of the second, and left the rest.
What marks those files is the directory they sit in. A manuscript folder does not hold 4600 PDFs. So a subtree of 200 MB or more is excluded whole, at the shallowest point over the line, and a single file of 5 MB or more is excluded wherever it sits. The root is never excluded, so a big folder still tracks its own small files.
Measured against the real folders:
| Folder | On disk | Snapshot |
|---|---|---|
| harvested PDF corpus | 8.1 GB | 100 MB |
| YOLO training set | 6.5 GB | 39 MB |
| book, mostly source | 415 MB | 128 MB |
Both sizes are settings. Settings ▸ Changes panel takes folders at 100 MB, 200 MB, 500 MB, 2 GB or no limit, and files at 1, 5, 20, 100 MB or no limit. config.toml calls them snapshot_file_mb and snapshot_dir_mb, with 0 for no limit. Excluded files are not listed in the Changes panel and cannot be rolled back from it. Limits apply when a baseline is taken, so toggle the Changes panel off and on to re-take one.
Three smaller fixes came with it. An exclude only holds back a file git is not already tracking, so a file that grew past the cap since the last baseline is dropped from the index, which the next commit records as a deletion — the file itself is untouched. Baselines run git gc: one repository held 5499 loose objects and 6.91 GiB with nothing in a pack, because git's default threshold is 6700 and no baseline ever asked. And a folder whose every file is excluded now commits an empty baseline; without a commit there was no baseline, so every refresh walked the whole tree again trying to take one.
HTML in the viewer, two ways
An .html file used to land in the text editor. It now opens on the same white sheet Markdown and LaTeX are set on — and, when you want the real thing, in a real browser view.
Reader typesets the file: headings, justified paragraphs, blockquotes inset from both margins, ordered and unordered lists, definition lists, tables as real grids, <pre> kept as a code block, a local <img> as a figure. <sup> and <sub> reuse the math painter's script tags, so they ride off the baseline instead of sitting on it. Entities are decoded, and <script> and <style> bodies never reach the page. The reader is a small tokenizer, not the HTML5 tree algorithm, but it closes what real pages leave open: <p> at the next block, <li> at the next item, <td> and <tr> at the next cell and row.
That is what an agent's HTML report wants. It is not what a site wants. A site often builds its content at load time — this project's own index.html arrives as a shell of empty containers that data.js and main.js fill in, and no work on a reader fixes that.
Rendered is therefore a real WKWebView parked over the viewer pane. The file loads through loadFileURL:allowingReadAccess, so the page's own stylesheets, scripts and images resolve beside it. Scripts run. Layout is WebKit's. A page can reach the network exactly as it would in Safari.
The header chip cycles Rendered / Reader / Source. The web view stands down whenever it should not be over the pane: another tab, the reader, the editor, a dialog. It reloads when the file is opened afresh and when the chip comes back from Source, so an edit shows.
Ctrl and ⌘ work on a non-Latin keyboard
On a Thai layout, Ctrl+O typed Ctrl+ญ. No shortcut matched that and no control byte encoded it. So ^O never reached nano, and every ⌘ key in the app went dead.
macOS falls back to a Latin layout for its own shortcuts. Tigriden now does the same, for both modifiers. Slint delivers only the character the layout typed, so the key's position is read earlier: the winit event still names the physical key, and its US-layout character is kept until Slint's callback runs. The substitution happens only when Ctrl or ⌘ is held and the typed character is a single non-ASCII one. Plain Thai typing, Dvorak and AZERTY letters, arrows and F-keys pass through untouched.
Six waits came off the shared event loop
Every window runs on one Slint event loop. Anything that blocks it freezes them all, which two windows made obvious: work started in one stopped the other.
- Terminal teardown waited on a process.
Child::killsignals the shell alone and sleeps up to 250 ms before escalating, thenChild::waitblocks. A shell wedged on its way out heldwait4for over two minutes in testing. Teardown now signals the shell's process group and the tty's foreground group, then hands the child to a thread that escalates and reaps. - Two windows on one folder fought over its snapshot repository. Opening the same folder twice re-took the baseline and discarded every change the first window still offered to roll back. An existing baseline is left alone now, and only "watch from now" re-takes it.
- Git ran a thread per 250 ms batch of file system events. An agent writing files left a full-tree
git statusrunning every quarter second, doubled when a second window watched the same folder. Each session now has one thread with a coalescing queue and a per-folder lock. - Each window scanned the system fonts and kept its own duplicate database. One is shared.
- Opening a PDF parsed it on the event loop. The worker opens the document and sends the page list back.
- Cmd+C on a PDF ran the text extraction there too — 11.8 s on a 1.3 MB paper in a debug build, the largest of the six. The text is extracted when the file opens, so the copy is a field read.
Downloads
| File | For |
|---|---|
Tigriden-0.2.0-macos-universal.app.zip |
macOS app, Apple Silicon + Intel — unzip, drag to /Applications, first launch right-click → Open |
tigriden-0.2.0-macos-arm64.tar.gz |
bare binary, Apple Silicon |
tigriden-0.2.0-macos-x86_64.tar.gz |
bare binary, Intel |
tigriden-0.2.0-windows-x86_64.zip |
tigriden.exe, x86_64 |
On Windows, Rendered needs WKWebView, so an HTML file opens in Reader there. The Latin-layout fallback for Ctrl and ⌘ reads the physical key through winit, so it applies on every platform.
Full Changelog: v0.1.9...v0.2.0
Tigriden 0.1.9
Thai in the terminal, marks and all
A Thai syllable is one grid cell holding more than one letter: a consonant carrying zero-width vowels and tone marks. A terminal has nowhere to put a mark that takes no width, so alacritty stacks them onto the base cell instead of giving them columns of their own — and the renderer only ever read that cell's base character. Every mark was dropped on the way to the screen:
typed: สวัสดีครับ ที่นี่
drawn: สวสดครบ ทน
Consonants standing, vowels and tones gone — which, if you write Thai, is the same thing as not being able to type into the terminal at all.
A cell's whole stack is now shaped as one cluster, which is also what puts each mark over the right part of the letter rather than beside it. A cell carrying nothing but a mark draws instead of being skipped as blank, and a syllable under the block cursor keeps its marks instead of dropping to a bare consonant. Copying was never the problem — the marks were always in the clipboard; only the drawing was losing them.
What else came with it
Every mark a terminal stores this way travels the same path: Lao vowels and tones, Hebrew niqqud, Arabic harakat, a combining accent on a Vietnamese or Greek letter. An emoji written with a variation selector now gets its emoji form, since the selector reaches the shaper with the character it modifies.
On Windows the fix is the same code — nothing about it is platform-specific — and it lands on a better font: Windows falls back to Leelawadee UI for Thai, an OpenType face with real mark attachment, where macOS reaches for Ayuthaya, which has none. Tone marks over a bare consonant sit slightly better there as a result.
Downloads
| File | For |
|---|---|
Tigriden-0.1.9-macos-universal.app.zip |
macOS app, Apple Silicon + Intel — unzip, drag to /Applications, first launch right-click → Open |
tigriden-0.1.9-macos-arm64.tar.gz |
bare binary, Apple Silicon |
tigriden-0.1.9-macos-x86_64.tar.gz |
bare binary, Intel |
tigriden-0.1.9-windows-x86_64.zip |
tigriden.exe, x86_64 |
Full Changelog: v0.1.8...v0.1.9
Tigriden 0.1.8
Display math set the way TeX sets it
\left(…\right) delimiters were scaled to the body's line box, which carries leading no glyph reaches into, so every fence came out oversized and each nesting level multiplied the last — LN(ReLU(Wf + b)) in four different paren sizes. Fences are now measured against the body's ink either side of the math axis and grown by TeX's delimiter factor, whose slack is exactly what stops the cascade. Scripts, roots and accents measure the same way, so a superscript sits on the base it belongs to and a radical over a fraction stays a radical. Atom spacing grew a left and a right side: punctuation takes its space on the right only, and a named operator is followed by the thin space that the \! of \LN\!\left( is written to cancel.
align keeps every row — the math parser stopped at \\ and the block-level code never split there, so all but the first row vanished. Each row is now its own numbered equation, breaks nested in a matrix are left alone, and a \label binds to the row carrying it.
Plus \mathbb and \mathcal letters, a real minus sign, spacing accents in place of combining marks that shape to nothing, a second script level for inline math (R^{d_{model}} no longer reads as R^d_(model)), and a wide equation nudged clear of its own number.
The terminal gets a font of its own
Settings now has an Editor font and a Terminal font, each picked separately — a grid of cells and a page of prose do not want the same face. Both lists are built from the families the font database really holds, and both names are checked at startup: a family this machine lacks is swapped for the first installed fallback and written back to config.toml.
That is the Windows fix — cosmic-text answers a family it cannot find with the platform's interface font, so a config carried from a Mac drew the terminal in proportional Segoe UI.
The picker also opens inline in the dialog instead of in a popup, which was placed from its unscrolled position and could open outside the window once the dialog had been scrolled, swallowing the click. A config written before the split keeps one family for both until you choose a terminal font, and a settings change that only touches the terminal no longer re-typesets the open document.
Downloads
| File | For |
|---|---|
Tigriden-0.1.8-macos-universal.app.zip |
macOS app, Apple Silicon + Intel — unzip, drag to /Applications, first launch right-click → Open |
tigriden-0.1.8-macos-arm64.tar.gz |
bare binary, Apple Silicon |
tigriden-0.1.8-macos-x86_64.tar.gz |
bare binary, Intel |
tigriden-0.1.8-windows-x86_64.zip |
tigriden.exe, x86_64 |
Full Changelog: v0.1.7...v0.1.8
Tigriden 0.1.7
Read a .tex file as the page it compiles to
- The page comes from the document class — the viewer reads
\documentclass(and ageometrycall, when there is one) and sets the file on that page: letter or A4, the class's own margins, and two columns for the journal classes (IEEEtran, ACM/SIG, RevTeX, or any[twocolumn]document). The sheet fits the pane the way a PDF page does and the type is sized from it, so a paper reads at page size instead of at editor size. - It is paginated, not one long strip — numbered sheets with the page number in the bottom margin, paragraphs continuing into the next column the way TeX breaks them, headings kept with the text under them, and full-width
figure*/table*set across both columns at the top of a page. - Floats float — a figure or table that will not fit where it stands moves to the top of the next column and the text keeps flowing past it, as LaTeX places
[htbp]; a[H]float stays pinned. No more half-empty pages in front of a big table. - Front matter as
\maketitlesets it — the title block spans the page,\thanksleaves the byline and becomes the affiliation footnote,\textsuperscriptmarkers stay raised, and the abstract andIEEEkeywordsget their labels (bold run-inAbstract—in a journal, a centered label over an inset block in an article). - The class's own numbering — 1, 1.1, 1.1.1 for an article; I, A, 1) with centered small-caps heads for a journal; none at all under
\setcounter{secnumdepth}{0}.\citeprints the number its\bibitemwill carry ([12], not [smith2019]), and captions are labelled the way the class labels them ("Figure 1:" / "Table 2:", or "Fig. 1." / "TABLE II"). - Inline math is finally inline — subscripts and superscripts are drawn small and off the baseline (V_S, x², km s⁻¹) instead of being spelled out as
_S. A display equation too wide for its column is set a size smaller rather than running into the next one. - Figures and tables of real papers —
\graphicspathis searched (vector PDF plots included) and a picture scales with theminipagearound it;tabularxjoinstabularandlongtable, all set booktabs style on paper: a rule above the head, under it and at the foot, nothing else. - The rest of the preamble is respected too —
\parindent/\parskipdecide the paragraph shape,center/flushleft/\centeringtheir alignment, and\LARGEdown to\scriptsizetheir size — each stopping at the end of the group or environment that opened it, which is what used to leak a table's\scriptsizeinto the rest of a paper. - Zoom re-typesets — Cmd+= / Cmd+- / Cmd+0 change the page size and set the document again at it; a resized pane does the same.
Install
Download Tigriden-0.1.7-macos-universal.app.zip (Apple Silicon and Intel in one), unzip, drag into /Applications. First launch: right-click → Open, or xattr -d com.apple.quarantine /Applications/Tigriden.app.
Bare binaries: tigriden-0.1.7-macos-arm64.tar.gz, tigriden-0.1.7-macos-x86_64.tar.gz, tigriden-0.1.7-windows-x86_64.zip.
Tigriden 0.1.6
Manage your files from the sidebar — and read Markdown as a page
- Drag files in from Finder — drop a file on a folder in the panel and it is copied there, with the target row highlighted as you drag; drop below the last row and it lands in the workspace root. Dropping on the terminal still types the shell-quoted path, so attaching a file to an agent prompt works exactly as before.
- Cut / Copy / Paste files — Cmd+X / Cmd+C / Cmd+V go through the system pasteboard as file URLs, so files move both directions between Tigriden and Finder. Cut then Paste moves, Copy then Paste copies, and a clashing name takes a " 2" suffix rather than overwriting anything.
- Delete moves to the Trash — Delete or Cmd+Backspace on the selected row, behind a confirmation; the context menu's Move to Trash now asks too. A session root closes the folder instead of deleting it.
- The panel has a keyboard — rows carry a selection: ↑/↓ walk them and scroll it into view, ←/→ collapse, expand or step up to the parent, Return opens, F2 or Cmd+R renames, Cmd+D duplicates. Right-click still has the full menu, now with Cut / Copy / Paste on it.
- Markdown is set on the same page as LaTeX — white sheet, serif face, justified columns and paper margins, so notes and papers written in Markdown read the way a
.texfile does. Tables, code blocks, inline images and links are unchanged, just on paper. - Markdown math is typeset, not dumped —
$…$and$$…$$go through the same box layout a LaTeX file gets: numerators stack over fraction bars,\sumand\intcarry their limits, delimiters stretch, and\tag{1}is set flush right as the equation number. Inline math falls back to Unicode (x², xᵢ, α) so it still flows inside a line. Fencedmathblocks work too, and a$in a code span is still a dollar sign. - The terminal has its own text size — Settings ▸ Typography sizes the editor and the terminal separately, so an agent's TUI can run small while a paper renders large. A config written before the split carries one size for both and keeps it until you move either one.
Install
Download Tigriden-0.1.6-macos-universal.app.zip (Apple Silicon and Intel in one), unzip, drag into /Applications. First launch: right-click → Open, or xattr -d com.apple.quarantine /Applications/Tigriden.app.
Bare binaries: tigriden-0.1.6-macos-arm64.tar.gz, tigriden-0.1.6-macos-x86_64.tar.gz, tigriden-0.1.6-windows-x86_64.zip.
Tigriden 0.1.5
Copy text from anything — including PDFs
- Select text in the viewer — drag across Markdown paragraphs, code blocks and CSV tables, double-click for a word, Cmd+A for all, Esc to clear. Cmd+C / Cmd+X copy; the view is read-only, so cut copies.
- Selectable PDF pages — rendered pages now carry a real text layer, built from the same content stream the renderer draws, so the highlight sits exactly on the glyphs — on cropped and rotated pages too. Two-column papers copy one column at a time instead of zig-zagging across the gutter. Cmd+C with nothing selected still copies the whole document.
- Right-click menu — Copy / Paste / Select All on the terminal, editor and viewer. Copy greys out with nothing selected, Paste is hidden where nothing can be pasted, and right-clicking no longer clears the selection you just made.
- The wheel scrolls inside full-screen apps — TUIs run on the alternate screen, which keeps no scrollback of its own, so the wheel used to do nothing at all in Claude Code,
vimorless. Apps that asked for mouse reporting now get real wheel events at the pointer's cell; the rest get arrow keys, matching xterm's alternate-scroll. Ordinary scrollback is unchanged. - opencode preset — a fourth agent button. A config still holding an earlier build's stock list picks it up once; a preset list you have edited is left alone.
Install
Download Tigriden-0.1.5-macos-universal.app.zip (Apple Silicon and Intel in one), unzip, drag into /Applications. First launch: right-click → Open, or xattr -d com.apple.quarantine /Applications/Tigriden.app.
Bare binaries: tigriden-0.1.5-macos-arm64.tar.gz, tigriden-0.1.5-macos-x86_64.tar.gz, tigriden-0.1.5-windows-x86_64.zip.
Tigriden 0.1.4
Fast viewers: background rendering, scrollbar, smoother zoom
- Smooth PDF scrolling — pages rasterize on a background worker thread with a persistent render cache and the next page prefetched, so scrolling never freezes the UI. Page bitmaps blit with fast row copies instead of per-pixel blending.
- Fast image loading — pictures open instantly (layout from the file header) while decoding and high-quality rescaling happen off the UI thread; a nearest-neighbor preview covers the gap and sharpens when the real bitmap lands. Applies to standalone images and pictures embedded in Markdown.
- Viewer scrollbar & keys — a scrollbar on the right edge of the viewer (drag the thumb, or click the track to jump) plus PageUp/PageDown, Home/End and ↑/↓ scrolling.
- Reliable ⌘ zoom — Cmd/Ctrl+scroll-wheel zoom and Cmd+= / Cmd+- / Cmd+0 now read the modifier state directly from the OS, fixing combos that previously arrived with stale flags; wheel repaints are throttled so 120 Hz scroll events can't backlog the event queue.
- Live scrollback setting — changing the scrollback limit in Settings now applies to already-running terminals immediately.
Install
Download Tigriden-0.1.4-macos-universal.app.zip (Apple Silicon + Intel), unzip, drag into /Applications. First launch: right-click → Open → Open, or xattr -d com.apple.quarantine /Applications/Tigriden.app.
Bare binaries are also attached for macOS arm64/x86_64 and Windows x86_64.
Tigriden 0.1.3
Better viewers, PDF pages, terminal scrollback
- Zoom for images and PDFs — Cmd+= / Cmd+- zoom in and out, Cmd+0 resets, Ctrl/Cmd+scroll-wheel zooms too, and magnifier buttons appear in the viewer header. Zoomed content pans in every direction (0.25×–8× over fit-to-width).
- Real PDF pages — PDFs now render as actual pages instead of extracted text, rasterized lazily as they scroll into view so large documents stay light. Files that can't be parsed (e.g. encrypted) still fall back to text extraction.
- Markdown tables — the rendered Markdown view draws real tables: grid lines, shaded header row, and word-wrapped cells with columns sized to their content.
- Terminal scrollback keys — Shift+PageUp/PageDown page through history, Shift+Home/End jump to its ends, Shift+↑/↓ scroll line by line. The unshifted keys still reach the shell, and full-screen apps (vim, TUIs) are unaffected.
Install
Download Tigriden-0.1.3-macos-universal.app.zip (Apple Silicon + Intel), unzip, drag into /Applications. First launch: right-click → Open → Open, or xattr -d com.apple.quarantine /Applications/Tigriden.app.
Bare binaries are also attached for macOS arm64/x86_64 and Windows x86_64.
Tigriden 0.1.2
Settings UI
File ▸ Settings… (⌘,) opens an in-window settings dialog. Everything applies immediately to all open windows and is saved to config.toml:
- Theme — Dark/Light × Classic/Minimal/Vivid (6 themes). One pick restyles the chrome, the terminal's 16-color palette and the editor's syntax highlighting together, without restarting your shells or losing unsaved edits.
- Accent color — the theme's own, or one of six presets.
- Font — any monospaced family installed on your Mac, plus a size stepper for the terminal and editor.
- Interface text size — Small / Normal / Large; sidebar and tab rows scale with it.
- Terminal scrollback — 1k / 10k / 50k / 100k (applies to new terminals).
- Changes panel — whether new windows start with git change tracking on.
Presets and agent teams are still edited in config.toml; the dialog links straight to it. Note that saving from Settings rewrites that file, so hand-written comments in it are not preserved.
Existing configs keep working — the old theme = "dark" / "light" values still load.
Install
Download Tigriden-0.1.2-macos-universal.app.zip (Apple Silicon + Intel), unzip, drag into /Applications. First launch: right-click → Open → Open, or xattr -d com.apple.quarantine /Applications/Tigriden.app.
Bare binaries are also attached for macOS arm64/x86_64 and Windows x86_64.
Tigriden 0.1.1
New in 0.1.1
File change tracking & rollback
- File ▸ Show Changes Panel — a live Changes (N) list under each folder showing every file the agent modified/added/deleted, updated automatically within ~1 s of a write (watcher-driven, no polling; off by default with zero overhead).
- Click a row for a syntax-highlighted diff against the baseline; the File chip jumps to the editable file.
- Roll back: right-click a row ▸ Discard Changes… reverts one file; the ↺ button on the header (or Discard All Changes…) reverts the whole run — always behind a confirmation.
- Two modes, picked automatically: folders with git compare against the last commit; folders without git get invisible shadow snapshots stored in the app's data dir — no
.gitappears in your project and the agent never sees it.
Multiple windows & agent teams
- File ▸ New Window opens an independent window with its own folders and terminals, running in parallel.
- Define named preset groups (
[[teams]]in config.toml) and pick one per window to give different windows different agent buttons.
Downloads
| File | Platform |
|---|---|
Tigriden-0.1.1-macos-universal.app.zip |
macOS app, Apple Silicon + Intel |
tigriden-0.1.1-macos-arm64.tar.gz |
macOS bare binary, Apple Silicon |
tigriden-0.1.1-macos-x86_64.tar.gz |
macOS bare binary, Intel |
tigriden-0.1.1-windows-x86_64.zip |
Windows 64-bit, experimental |
macOS first launch (app not notarized): right-click ▸ Open ▸ Open, or xattr -d com.apple.quarantine /Applications/Tigriden.app.
Windows note: first release with a Windows build — it launches cmd.exe (or %COMSPEC%) in each terminal and is untested on real hardware; feedback welcome.
🤖 Generated with Claude Code