Changelog
v0.3.5 August 21, 2026
Highlights
-
How a single newline inside a paragraph is treated is now up to you. By the strict Markdown syntax, a lone newline inside a paragraph is not a line break, just a space — you fold the source across several lines, and the reader still sees one paragraph, rewrapped to the reading width. But Typora and Obsidian default to the other dialect (a single newline is a break), so a document written line by line arrives in telari squashed into one block. ⌘, ▸ General ▸ Line breaks & spaces ▸ Single newline now offers two settings: Merge into a paragraph (Markdown standard) and Keep the break; you can also change just one tab — View ▸ Line breaks in this tab (Follow settings / Merge into a paragraph / Keep the break), so the same file can sit in two tabs under two different settings. The choice is remembered per tab and disappears when the tab is closed. The factory default (merge into a paragraph) is unchanged
-
Emphasis markers pressed against Chinese punctuation now work. Writing something like
在**「保留换行」档下……**。used to render as literal bare asterisks — CommonMark’s flanking rules were designed for text with spaces between words, Chinese is written without them, and**therefore often lands exactly on a Han-character↔Chinese-punctuation seam, where the rules let it neither open nor close (our own manual pages, shipped with the app, carried bare asterisks because of this). Telari now follows the CommonMark CJK-friendly emphasis amendment (drafted by tats-u; merged upstream in pulldown-cmark, not yet released): the seam opens or closes as long as CJK characters or CJK punctuation sit on either side of it.
Improved
-
Runs of spaces inside inline code are no longer collapsed.
-
Runs of spaces in body text can now be preserved. The option lives in ⌘, ▸ General ▸ Line breaks & spaces, and coexists with justification: the first space of a run stretches as before, the rest contribute width but no elasticity, so the greyness of a justified line is unaffected and two spaces are always wider than one.
Fixed
-
A price list is no longer mistaken for inline math. A line with two prices written together, like
$4.99/mo·$89.99, used to be read as a single$…$formula. Fixed. -
An escaped bracket is no longer taken for a reference link.
见[文档]\[id]。used to render 文档 as a hyperlink and drop both pairs of brackets from the page — even though\[is exactly how an author declares “this is a literal bracket”. It is now shown as written (backported upstream fix). -
Fixed the background of the install DMG window — the disk image drew its background incorrectly on some macOS versions. Fixed, and the background itself simplified.
v0.3.4 August 20, 2026
Highlights
-
The empty window now lists recent folders and favourite folders. The blank page you get at launch, on ⌘N, or after closing the last article now offers three things: recent files, recent folders, and favourite folders.
-
A wide formula in a narrow window is no longer silently truncated. A formula is rigid — it cannot rewrap the way a paragraph does;
\operatorname{MultiHead}(Q,K,V) = \ldotsis simply that wide. Narrow the window far enough and you eventually meet “this formula is wider than the text column”, and until now the part that stuck out past the column just disappeared.It now happens in two steps. First, the formula may reach symmetrically into the margins, borrowing up to 1.5 em from space that was empty anyway — the everyday “doesn’t quite fit” ends here, at full size. Second, only if it still doesn’t fit is it clipped, with a small triangle drawn at the cut.
Swipe sideways to read the rest of the formula, or double-click it to open a panel that shows it in full. Both are on by default; to keep just one (or turn both off), run
defaults write dev.telari.reader TelariMathEscape pan— the other three values arepopover/both/off— and restart.Not shrinking the formula by default is a deliberate trade-off: shrinking makes a symbol in this formula smaller than the same symbol one formula further up, and two or three sizes on a page of math look worse than a page of math carrying one marker. If you would rather “see the whole thing, smaller is fine”, edit the typesetting preset as text and set
[layout] math_shrink_to_fit = true; step two then becomes a proportional shrink, down to the equivalent of 9pt body text (about 0.56× at a 16pt body size).
Improved
-
A working folder picked in an empty window survives a restart. Until now a window with no document open was not recorded at quit at all — including the folder you had just picked for it — so the next launch gave you a blank slate. Now, as long as the window holds a folder you explicitly chose, it comes back as it was; a genuinely empty window with nothing chosen is still not recorded, since there is nothing there worth restoring.
-
The window can be dragged narrower (minimum width 480 → 401pt). At its smallest it is roughly a phone-width reading preview — a way to see how your own document reads on a narrow screen without exporting it or reaching for another tool.
v0.3.3 August 17, 2026
Highlights
-
Three math fonts to choose from (⌘, ▸ Presets ▸ Fonts ▸ Math): NewCM Regular (the default — the classic TEX look), NewCM Book (the same Computer Modern skeleton in a heavier weight, rules included; a face made for reading on screen, where thin rules are easy to lose track of), and Pagella Math (Palatino-flavoured, so formulas and body text come from one design when you set TEX Gyre Pagella as the body face; the cost is that a few uncommon symbols have no glyph, and a formula using one shows its source instead). All three ship with the app — nothing to install — and switching re-typesets the open document immediately. The math font is part of the typesetting preset rather than a global switch, so it travels with whichever preset you pick.
Latin Modern Math, the previous default, is retired. It covered the symbols telari already supported, but only 65% of the full Unicode math character set — so every symbol added from here on risked hitting “this font has no such glyph” (
\subsetneqqis exactly how a reader ran into it). NewCM is a modern remake of the same Computer Modern skeleton with 100% coverage, and the two agree item for item on their typesetting constants, so your existing formulas keep their look. A few places do shift slightly — accents, integral limits and blackboard-bold letters are the easiest to spot. -
Hard line breaks inside a paragraph are now rendered faithfully. A trailing backslash
\(or two trailing spaces) is Markdown’s way of saying “break the line, not the paragraph” — addresses, signatures, verse, lyrics and lists of short clauses all rely on it. telari used to treat it as an ordinary space and join the two lines; now it really breaks, both on screen and in exported PDFs. Soft breaks (nothing at the end of the line) are unchanged and still flow into one continuous paragraph.
Improved
-
New setting: Quit when the last window closes (⌘, ▸ General ▸ Window, off by default). With it on, closing the window after finishing a document no longer leaves Telari sitting in the Dock. The next launch still returns you to the window you closed last — that document, and the position you had reached in it; the position is the one recorded at the moment you closed the window, not whatever happened to be saved earlier. When several windows are open and you close them one by one, only the last one comes back; to put the whole set away and get all of it back next time, use ⌘Q as before.
-
Fraction bars are back to TEX’s rule: the bar spans the numerator and denominator exactly, instead of sticking out a little on each side. Short fractions (
\frac{a}{b},\frac{1}{2}) used to leave the bar hanging in mid-air at both ends, and inside a radical or a pair of tall parentheses the overhanging end came close to touching the fence. A bar slightly longer than its content is a legitimate house style, so it was not deleted but demoted to a knob: edit the preset as text and set[typeset] math_frac_bar_overhang = 0.09to reproduce the 0.3.2 geometry exactly. -
When a formula falls back to showing its source, the message now says which kind of fallback it is: “The current math font is missing a required glyph — try another math font” (another face may well draw it) versus “Will be rendered in a future version” (the construct isn’t supported yet, and changing fonts won’t help). The two call for opposite next steps.
Fixed
-
Fixed a rare case where the settings file could be silently reset to factory defaults.
settings.tomlis a plain text file you are meant to be able to edit by hand; if it became unreadable — an editor saving it in a non-UTF-8 encoding, an interrupted disk write — the previous behaviour was to replace it with the factory default at launch, so fonts, theme, zoom and colour scheme all reverted and the original was gone. The original file is now kept intact (renamed tosettings.broken-<timestamp>.tomlbeside it), so fixing the encoding and renaming it back restores everything. If even the rename fails, Telari runs from in-memory defaults and stops writing to that file rather than overwriting what you wrote. -
Chinese characters in narrow table columns were being sliced in half. When the columns genuinely did not fit, every column used to be scaled down proportionally — one column’s overflow was billed to all of them — and the narrowest could end up under one ideograph wide, cutting every character in it. The allocator now shaves from the top instead: columns that are already narrow keep their width in full, and only those above the waterline are cut back to it. The width measurement behind it was fixed too: a cell holding something like a long URL, which can only break in a few places, had its “how narrow can this go” measured as “how wide with no break at all”, skewing the whole table’s allocation.
-
Formulas in table cells had a corner clipped off. Accents, arrows and the like legitimately paint outside their typesetting box (on both sides), and that ink used to run into the cell’s clipping edge. Clipping now follows the formula’s actual ink extent while still staying within the cell padding — the rule that an over-long unbreakable word gets cut at the cell edge is untouched.
-
\sqrt[n]{…}: the index collided with the radical sign. The radical’s horizontal position should be a function of the index box’s width, but was treated as a constant — with a single-digit index that looks like a matter of taste, while\sqrt[n^2]{y}drew the index right on top of the sign. In the same batch: the radical’s rule and box were each 0.1em wider than they should be at every level, and it accumulated through nesting (\sqrt{\sqrt{x}}differed by 2.4pt at 12pt). Rule length and box width now match LuaTEX. -
Accented formulas sat in the wrong place. For
\hat,\vecand family over a base in a reduced size (as in scripts), the engine read the anchor of the full-size glyph while drawing the font’s reduced-size variant — placing B by A’s anchor, and the deeper the nesting the more visible it got. The opposite direction was fixed in the same batch: the difference between the two anchors is legitimately allowed to be negative (the accent should be able to reach left of the base’s origin), but was being clamped at zero, so on narrow bases with a left-leaning anchor — italics especially — the hat sat too far right of the letter it belongs to (about 0.6pt at 12pt for\hat{b}). -
Nested scripts now use the right small-size glyphs. Math fonts draw a separate, more legible set of glyphs for reduced sizes, in two steps — one for scripts, a smaller one for scripts-on-scripts. telari took the first step no matter how deep the nesting went, so the
2innermost inx^{y^2}was drawn one size too large. All three math fonts benefit. -
Superscripts sat too low and subscripts too high. Both clearances should come from the font’s own typesetting constants; telari was using the formulas a typesetting engine falls back on when a font has no such table. The two Computer Modern faces barely show it (those fallback formulas were derived from that very design); Pagella is where it shows: about 0.46pt for superscripts and 0.75pt for subscripts.
-
Five math commands added:
\Updownarrow,\subsetneqq,\supsetneqq,\subseteqqand\supseteqqwere not recognised, and one of them was enough to make the whole formula fall back to its source.\Updownarrownow renders in all three fonts; the other four render in the two NewCM faces. Pagella Math has no glyphs for them, so under that face a formula using one still shows its source. -
Digits now follow the alphabet variant they are in, as in
\mathbf{2024}. Digits in the bold, blackboard, sans-serif and monospace families used to fall back to ordinary glyphs, leaving a few normal-weight digits in the middle of a run of bold letters. (Italic, script and fraktur have no digit variants — that is the character set’s own rule — and are unchanged.)
v0.3.2 August 6, 2026
Highlights
- Cross-document links now honor anchors: clicking a link like
[text](other-file.md#some-heading)opens the target document and scrolls straight to that heading, landing the same way in-document jumps do (target at the top of the viewport). Previously the anchor was ignored and the file opened at the beginning.
Fixed
- Inline math in table cells (e.g. a
\dfracfraction) taller than the text line is no longer clipped top and bottom. The line carrying the formula now opens up so the numerator and denominator are fully visible; plain-text lines in the same cell keep their normal line spacing.
v0.3.1 July 29, 2026
Fixed
- Fixed a problem on macOS 26 where resting the pointer near the left or right edge of the window — most often while hovering over the scroll bar on the right — would slide out a blank panel and squeeze the text column. This is a behaviour the new system adds on its own to a collapsed sidebar; earlier versions of macOS are unaffected.
v0.3.0 July 28, 2026
Highlights
- Continued improvements to the reading-anchor mechanism: your reading position is now estimated more accurately after a jump or an external edit. Also fixes the position jumping after you switch typography profiles.
- Added reading-position memory. Previously, relaunching the app took you back to the top of the file; it now remembers where you left off. With several tabs open, each tab records its own position.
- You can now choose a light or dark appearance explicitly, or follow the system, from the preferences panel.
- Added a Markdown source-reading mode (⌘3) that toggles between the typeset view and the source view. Our typesetting is lovely, of course — but sometimes you just need to see what the source file actually looks like.
- Wide tables are no longer squeezed into the body measure: when the window is wide enough, a wide table now expands symmetrically past the text column to its natural column widths (tables still always fit inside the window — never a horizontal scroll).
- Added a floating table toolbar for changing a table’s alignment and width:
left / center / right, and body-width / full-window. Changes apply live and
globally. Alignment only affects columns that carry no alignment marker in the
file; explicit
:---:/---:columns keep the alignment written in the file. This is a display-layer change only — your source file is never modified. - You can now relaunch Telari from the menu, with ⌃⌘R.
Improved & Fixed
- Fixed the left rounded corner of an inline-code capsule being clipped flat inside a table cell.
- Improved the horizontal padding of inline-code capsules — slightly more
breathing room. When editing a typography profile as text you can now set
code_capsule_pad(default 0.2); raising it widens the capsule margins, but it can make line-breaking worse overall, especially at narrow page widths. It’s a genuine trade-off.
v0.2.6 July 25, 2026
Highlights
- Improved where outline, anchor, and footnote jumps land. Previously, clicking a heading in the outline left the target sitting at the very bottom of the viewport; it now lands at the top.
- Fixed jumping to an already-open document opening a duplicate tab.
- Fixed the sidebar’s open/closed state and width being lost on restart.
v0.2.5 July 24, 2026
Highlights
- Improved the reading-anchor mechanism. Previously, editing a file in an external editor could make your reading position jump; the anchor mechanism now does its best to keep your place.
- Smoother scrolling. Reworked how scrolling is rendered, and document layout now warms up progressively while idle — reducing dropped frames and stutter in long documents.
v0.2.4 July 22, 2026
Highlights
- Fixed tabs not responding to clicks on macOS 15
- Tabs are now implemented in AppKit instead of SwiftUI, with a modest performance improvement
- Fixed content shifting for an instant at launch on older versions of macOS
- Fixed images not rendering when the image’s alt text contains an inline formula
v0.2.3 July 20, 2026
Fixed
- Support for a large batch of long-tail math commands, starting with
\centernot— four families landed this round: centered negation\centernot(the slash sits centered over relations like⟹); a set of symbols and delimiters (\leqq/\geqq, semantic brackets\llbracket…\rrbracket, corner brackets\ulcorner…\urcorner,\lgroup/\rgroup, plus aliases such as\owns/\Join/\thicksim); numbering-pipeline commands like\label{…}/\tag{…}/\allowbreak, which are now correctly swallowed — they are extremely common in textbooks and in AI-generated formulas, and until now a single\labelmade the whole formula render as source; and finally mathtools’dcases(display-size cases), the zero-width overlap boxes\rlap/\llap/\clap, and the function names\sech/\csch/\arccot.
v0.2.2 July 18, 2026
Highlights
- File links now work — clicking a link that points to a local file (relative or absolute path) opens it: markdown files open in Telari (following the File ▸ Open policy — an empty tab is filled in place, otherwise a new tab opens), other file types are handed to the system’s default app. Clicking a link whose target doesn’t exist does nothing.
Improved
- Faster find — typing the first character into ⌘F no longer triggers a full-document reshape in long documents; results appear as you type.
- Minor performance improvements.
- Adjustable radical clearance (
math_radical_gap) — an inline\sqrt{f}hugging the vinculum is TEX-faithful behavior, but faithful doesn’t mean you have to like it. Style TOML gains[typeset] math_radical_gap: a multiplier on the clearance between the radical rule and its content, default 1.0 = bit-identical to LuaTEX. Raising it gives inline radicals more daylight, and the clearance feeds variant selection. Fine-grained knob, TOML-only.
Fixed
\rvert,\textttand friends no longer knock a whole formula back to source text — a formula containing an\lvert …\rvertabsolute value or a file name like\texttt{main.c}used to display as literal source.\rvertand the\texttt/\textsf/\textbf/\textitfamily now render correctly (monospace / sans-serif / bold / italic faces).- Reading position occasionally lost when reopening a window — a timing race that could snap the reading position back to the top when reopening after closing all windows (or restoring a session at launch) is fixed.
- Line-initial brackets no longer poke past the margin, and brackets next to Latin text no longer carry a wide gap — a fullwidth mark at the start of a split text segment, butted against Latin text, picked up an extra 0.5em of system-added blank. Such marks are now clamped back to the standard 1em fullwidth cell.
- Korean no longer breaks or stretches inside words — Korean paragraphs now use keep-all: lines break only at spaces and punctuation, justification falls entirely on interword spaces, and very long words keep a last-resort break in extremely narrow columns. Chinese and Japanese behavior is unchanged.
v0.2.1 July 11, 2026
Highlights
\(…\)and\[…\]math rendering — markdown produced by ChatGPT and other AI tools often marks math with LATEX’s native delimiters —\(x^2\)inline,\[…\]for display equations — rather than the$…$/$$…$$convention of the markdown world. Those formulas used to render as literal characters; now they render as proper math the moment the file opens, no search-and-replace needed. The conversion errs firmly on the side of caution: code blocks and inline code, HTML blocks, and link reference definitions are all exempt, and mid-line brackets like\[1\]citations are never touched — when in doubt, the source is left exactly as written. Quick Look previews benefit too.
Improved
- Front matter is no longer rendered as body text — the metadata block at
the very top of a file, fenced by
---(YAML) or+++(TOML) — the common convention of Obsidian, Jekyll, Hugo and AI tools — is now stripped by default: not rendered, excluded from find and copy, and the first screen starts right at the content. It used to be typeset as markdown — key-value lines merged into a paragraph, indented tags became a real list, and a single-line block even turned into an H2 heading. A---mid-document or without a closing fence still renders as a thematic break; the source file is untouched. - The Fonts pane, reorganized — Preferences ▸ Fonts now reads top-down: Base size first (the one parameter that scales everything), then Body & code (the Latin and code fonts), then a CJK group — Han family, the Chinese bold/italic face pickers, Han scale, and the baseline trims collected into one subsection (its name follows each interface language’s natural order: 中日韩 / 日中韓 / 한중일). A pure rearrangement — every control behaves as before.
- “Edit as Text…” moved where it belongs — the button opens the whole preset file (layout keys included), yet it used to sit at the bottom of the Fonts pane only. It now lives in the preset editor’s bottom bar, shared by the Fonts and Layout tabs and always visible; “Restore Factory Settings” appears alongside once the preset has been modified. The behavior itself is unchanged.
Fixed
- Math italic correction — a slanted math letter leans right at the top,
and TEX compensates with a small correction after it; without it a following
parenthesis crashes into the letter’s shoulder. The layout engine used to
drop that correction:
f(x)looked cramped and the P inP(A|B)nearly touched its parenthesis. It is now implemented to full TEX semantics — between a letter and what follows, in superscript placement (riding the shoulder) vs subscript (tucked to the stem), the ±IC/2 shear of\limitsbounds on integrals, numerator/denominator centering, and radical/accent box widths — coordinate-identical to LuaTEX with the same font (pinned by 18 new golden-oracle cases). Also fixed along the way: hanging punctuation no longer misfires on inline formulas that start with.(a line-final$.5x$used to hang its whole box past the margin). $$formulas with=on its own line are no longer bisected — ChatGPT habitually writes display equations with the=alone on a line; CommonMark’s setext-heading rule cuts such a paragraph apart before math pairing gets a chance — the first half used to render as a giant bold heading, the rest as plain text. That block shape (and its\[…\]twin) is now recognized before parsing and renders as a proper formula; matrix\\row separators and formulas inside lists and blockquotes are rescued too — a real ChatGPT test document with 33 display blocks, 12 of them bisected, now renders every one. Every conversion is verified by re-parsing the result and is abandoned wholesale if anything but the expected formula comes out —$$inside code blocks and real list/table/heading structure stay exactly as written.- Large images no longer distort — images taller than the height limit used to be squeezed into a fixed-height letterbox (a large square image came out as a ~2:1 stretched rectangle). They now scale proportionally into a square box the width of the text measure: landscape and square images fill the measure, portrait images shrink to fit and center horizontally — never stretched; small images keep their natural size. PDF export benefits too.
- Delimiters now grow to fit large formulas —
\left(…\right), the\bigfamily, and the radical sign used to top out at the tallest ready-made glyph the font provides (about three lines tall): anything taller — a matrix of three or more rows, stacked fractions — got brackets visibly shorter than their content. They are now assembled from the font’s own pieces (top hook, extender, bottom hook) to any height, coordinate-identical to LuaTEX with the same font. - Math rendering refinements — radicals no longer come out one step too
short at boundary sizes (
\sqrt{f}and the like — TEX’s integer-rounding semantics are now replicated exactly, agreeing with LuaTEX bit for bit); top accents (hats, bars) no longer sit systematically too low, glued to their base, nested accents stack in exact vertical alignment and\overbracecentering is corrected; and the source-fallback box for not-yet-supported constructs is now measured from the real line count, so multi-line source no longer overflows the box and crushes the next block.
v0.2.0 July 8, 2026
Highlights
- Better default emphasis styling — Chinese bold now uses the Songti Black face (the Bold face is barely +10% ink over regular and drowned at body size); italics render in Kaiti (楷体), the traditional Chinese emphasis face — never a synthetic slant; bold-italic lands on Kaiti Bold. Latin bold is now real Bold (it silently resolved to Semibold before). A hairline spacing compensation keeps Kaiti↔Songti seams from touching. Headings keep Songti Bold (Black would be too heavy at heading sizes).
- New pickers in the Fonts pane — Preferences ▸ Fonts gains two pickers, so you can choose your own Chinese emphasis faces. “Chinese italic face”: Kaiti (the traditional emphasis face, unchanged default), Fangsong, Xihei, or “Don’t substitute” to keep italics upright — Fangsong has a single weight, so bold-italic stays Fangsong (the face wins); Xihei promotes bold-italic to Heiti; Kaiti is not preinstalled (a download-on-demand system font, usually already fetched on Chinese-language systems) — until it’s in place, italics stay upright and switch over once the font arrives. “Chinese bold face”: Black (the most visible, unchanged default), Bold (a restrained half-step), or Heiti — switching bold spans to the sans family, the other Simplified-Chinese tradition (Songti body, Heiti emphasis, as in ctex). Baselines stay flush in every tier; headings keep Songti Bold.
- Japanese and Korean paragraphs get their own faces — paragraphs with kana set in Japanese style: Mincho body with emphasis switching to Gothic (the orthodox Japanese convention); paragraphs with Hangul set in Korean style: Gothic body with weight-tier emphasis. Detected per paragraph, zero configuration. The same detection also scopes the punctuation correction/spacing strategies to Chinese paragraphs only — halfwidth punctuation in Japanese and Korean is legitimate usage and stays untouched.
- The sans schemes get the full emphasis system. The sans and Avenir profiles (PingFang SC) now carry their own emphasis mapping, symmetric with the serif schemes: the Chinese italic-face picker works (Kaiti by default, with a properly recentered baseline), the Chinese bold-face picker offers Semibold/Medium (PingFang has no Black face; the default is exactly the face used before), and Japanese/Korean paragraphs switch to the system Japanese/Korean fonts — Japanese set gothic-body with weight-step emphasis, matching the sans body. Chinese body text renders identically to before.
- Paragraph separation, the book way or the web way. A new two-way choice
in Preferences ▸ Layout: Spaced (gap between paragraphs, no indent — the
web convention, unchanged default) or Indented (every paragraph gets a
2-em first-line indent — including after headings, the Simplified-Chinese
book convention — and paragraphs have no gap between them). Lists and
quotes keep their spacing and stay flush. Power users can override the
exact indent (
first_line_indent) and paragraph gap (para_space_between) in the profile file; explicit values always win over the preset. - Single-click to preview, double-click to keep. Clicking a file in the sidebar now opens it immediately — in a preview tab (italic, dimmed title) that later clicks reuse, so browsing never piles up tabs and never replaces the document you’re reading. Double-click the file or the tab title (or drag the tab, or pick “Keep Open” from its context menu) to pin it. In the sidebar, Space previews and Return pins; arrow keys just move the selection. Previewed files stay out of the Recents list until you keep them, so browsing doesn’t reshuffle the list under your cursor. The preview tab survives relaunch.
Improved
- A tidier Layout pane. The four raw fine-tuning parameters (inter-character stretch/shrink, punctuation squeeze, CJK–Latin gap) moved into a collapsed “Advanced Typesetting Parameters” group at the bottom of Preferences ▸ Layout. They work exactly as before; the group just makes clear these are internals tuned as a whole — each field’s ↩ restores it anytime.
- Tabs fit their titles. Tab width now adapts to the file name (like
Safari and VS Code) instead of chopping longer names to a fixed box; titles
sit centered, and the close button appears on hover. Two open files with
the same name automatically show a small directory hint after the title
(
README.md — docs). Opening or switching to a tab that sits past the edge scrolls the tab bar to it.
Fixed
- Inline code capsules finally have side padding. The capsule background
used to hug the glyphs edge-to-edge — worst in Chinese text, where a code
span touching a full-width mark (
(,,) or a Han character rendered with zero margin. Two-part fix: the capsule may now borrow most of an existing seam for its padding (keeping a small optical gap to the neighbor), and where no seam exists at all — code against full-width punctuation, a symbol-initial span right after a Han character, tight writing like`code`bar— the typesetter now reserves a small real gap (~0.22 em of the code font), the same way web renderers reserve inline-code padding. Line-break rules (kinsoku) are untouched: none of the reserved gaps is a break opportunity. Table column sizing also got more accurate along the way (natural widths now come from the real layout, counting these gaps and punctuation compression). - Emphasis runs sit on the same visual baseline as body text: the ink-box offsets of Songti Black and Kaiti (measured per character) are compensated, so bold spans no longer float slightly above the line.
v0.1.8 July 7, 2026
Fixed
- Long numbers and URLs no longer wreck the layout. Previously, a long unbreakable run — stuck-together digits, a hash, a bare URL — forced justification to stretch CJK letter-spacing to absurd widths trying to fit the blob. Telari now breaks inside such runs as a last resort, the way a browser wraps a long URL: no hyphen, normal spacing, and only when the line would otherwise fall apart. Normal prose is provably unaffected.
- New windows remember your size. ⌘N opens at the size you last shaped a window to, cascaded so it doesn’t stack on the old one; closing every window and reopening brings the last window back in place. A frame saved on a since-unplugged external display falls back to the visible screen instead of opening off-screen.
- Opening a new window while in full screen no longer merges it into the full-screen window as a macOS-native tab (Telari has its own tab system); the same fix covers users whose System Settings prefer tabs “Always”.
Changed
- The update dialog’s release notes now display in Chinese when your system language is Chinese.
v0.1.7 July 5, 2026
Added
- Quick Look preview — press spacebar on a Markdown file in Finder and it renders through Telari’s real typesetting engine: Knuth–Plass justification, CJK punctuation handling, math, and tables, live-reflowing as you resize the preview panel. One-time setup: launch Telari once, then enable it under System Settings ▸ Login Items & Extensions ▸ Quick Look. The preview uses Telari’s factory style; remote images show as placeholders, and very long documents preview the first 500 blocks. Press Return (or double-click) to open the file in Telari itself.
Fixed
- The update dialog now shows what’s new — release notes from this changelog are embedded in the update feed, so you can see what a new version brings before installing it.
v0.1.6 July 5, 2026
Added
- More math commands — a large batch of new LATEX commands, including boxed
formulas (
\boxed), colored math, strikethrough, stretchy delimiters, and extensible arrows. - CJK in math — Chinese inside inline and display formulas now renders in a real font, aligned to the math baseline.
- Finer vertical typesetting — spacing of radicals and related constructs now matches a professional typesetting engine, for a more natural look.
Fixed
- A formula containing a glyph the math font lacks now falls back cleanly to its source text instead of half-rendering.
v0.1.5 July 2, 2026
Added
- Zoom (View menu) — ⌘+ / ⌘− step through a zoom ladder (80%–200%), ⌘0
returns to actual size, and trackpad pinch steps the same ladder. Zoom is
proportional: it scales the text size and the reading-width limit
together, so the number of characters per line — and therefore the line
breaks — stay essentially the same while everything gets bigger. Your
reading position is preserved across zoom steps, the level persists across
relaunches (
[view] zoominsettings.toml), and PDF export always uses the un-zoomed size (print semantics). With “Limit reading width” off, zoom scales the text only and the window edge sets the measure. - Code styling — fenced code blocks now sit on a rounded, warm-gray container that extends symmetrically 0.75 em past the text column (book-style outdent; the code itself stays aligned with the body), and inline code gets a subtle capsule background. Both are paint-only: line breaking, selection, and copy are unchanged. The geometry is specified in em, so containers and capsules scale with the font size — and with the new zoom. Light and dark appearances each have an explicit surface color.
v0.1.4 July 1, 2026
Added
- Reading width control (Preferences ▸ General) — a checkbox plus a slider (480–1280 pt) sets the maximum width of the body column, so full-screen or wide windows no longer leave large empty margins. Uncheck “Limit reading width” to let the text fill the window (a 32 pt side margin is kept). The default cap is now wider (960 pt), and the current width in points is shown next to the slider. Scroll position is preserved while you adjust it.
- Ragged code paragraphs — a paragraph that is mostly inline code (e.g.
a.b.c.method(...)with no spaces to stretch) now renders flush-left instead of justified, avoiding the large gaps that would otherwise open up inside identifiers. The density threshold is adjustable under Preferences ▸ Presets ▸ Layout, and it only affects justified text.
Changed
- Better line breaking around inline code and long unbreakable tokens — fewer overly loose lines in code-dense prose.
- Renamed the Preferences “Profiles” tab to “Presets” to better match a reading app (the on-disk profile format is unchanged).
- The layout debug overlay (⌘⇧D) now labels each block in the left gutter with its index and kind, making it easier to read the geometry.
Fixed
- Invalid reading-width values in
settings.toml(non-finite numbers) now fall back to the default instead of breaking layout. - The debug overlay’s left gutter no longer grows the window past the screen edge on very wide documents.
v0.1.3 June 30, 2026
Changed
- The download disk image now opens with a one-step drag-to-Applications layout — Telari on the left, an Applications shortcut on the right. The app itself is unchanged from 0.1.2; this release only improves the installer.
v0.1.2 June 29, 2026
Added
- In-app Send Feedback menu item (app menu) — opens a pre-filled email to support@telari.app with the app and macOS version.
- Privacy Policy and License Agreement menu items linking to telari.app.
- Anonymous usage statistics, on by default — sends a random ID plus the app and macOS version at most once a day (no personal data, no document content). Turn it off in Preferences ▸ Privacy.
- Hanging punctuation toggle (Preferences ▸ Layout) for CJK text.
- CJK↔Latin space justification — boundary spaces are absorbed, code spaces stay rigid, and inter-character spacing is distributed evenly (均等割付).
Fixed
- Launch crash that affected 0.1.0 on every Mac — the app aborted before any
window appeared because its bundled fonts and strings could not be found in a
packaged build. Resources now resolve from
Contents/Resources. - Reading position is kept exactly across tab switches, hot-reload, and the grow-window overlay toggle (no more jumping back to the top).
- CJK ideographs keep their natural 1em advance with per-script font families pinned, fixing inflated ideograph spacing.
- Adjacent CJK closing punctuation marks are set solid per clreq/JLREQ.
v0.1.0 June 28, 2026
First public testing build.
Added
- Knuth–Plass justified typesetting for CJK + Latin, TEX-faithful line breaking.
- Self-built OpenType MATH engine (
$…$inline /$$…$$display) rendered with Latin Modern Math. - Markdown reading: headings, paragraphs, lists, tables (scale-to-fit), images, links, footnotes, code spans/blocks.
- Selection, copy, and find across the document (resize-stable).
- PDF and PNG export with real (selectable) glyphs.
- Punctuation display strategies (faithful / spacing / fold) for CJK text.
- Preferences: justification presets, layout/style profiles, interface language (English / 简体 / 繁體 / 日本語 / 한국어).
- Self-update via Sparkle (direct-download builds).