Typst Live

Write Typst, read rendered math, and preview your project inside Obsidian.

Latest release Build MIT Obsidian 1.13.7 or newer Desktop only

English | 简体中文

Typst Live is an independent Obsidian frontend for the [Tinymist](https://github.com/Myriad-Dreamin/tinymist) language server. Keep `.typ` files beside your notes, edit them with language intelligence, and use Tinymist's real compiler and incremental preview. ## Highlights | Write and read in one editor | Keep the whole project in view | |:--|:--| | Switch between source and live reading mode. Math, headings, emphasis, lists, and references stay readable while the source remains editable. | Preview unsaved changes, use your project's template, and move between source and rendered pages in both directions. | ## Features | Feature | What you get | | --- | --- | | Typst editor | A CodeMirror 6 view for `.typ`, with syntax and language-server semantic highlighting. | | Language intelligence | Diagnostics, snippet completion, hover documentation, go to definition, rename, and typstyle formatting. | | Live reading mode | Rendered math and text constructs, with source revealed when you edit them. | | Math and paper hovers | Project-aware formula rendering and previews of content calls such as figures and theorem boxes. | | Incremental preview | Tinymist's SVG preview in a side pane, including unsaved changes. | | Automatic sibling PDF | Opt in per `.typ` file from its source menu or the open preview header to build a same-stem PDF beside it after saved changes, with confirmation before replacing existing or externally changed bytes. | | Source navigation | Move the editor cursor to scroll the preview; click the preview to return to the corresponding source. | | Multi-file books | Chapters can use the book main's imports and a project-owned preview template. | | Optional YOLO bridge | AI ghost text in `.typ` files using your separately configured YOLO plugin; off by default. | ## Quick Start 1. Install and enable Typst Live using the release assets below. 2. Install [Tinymist](https://github.com/Myriad-Dreamin/tinymist/releases) separately. On macOS with Homebrew: `brew install tinymist`. 3. Open a `.typ` file. If the server is not found, set its absolute executable path in **Settings → Typst Live**. 4. Use the editor's preview action or **Typst Live: Open preview**. 5. Use the book/code action to switch reading modes. Hover over math, or enable **Cursor preview** to see the formula around the cursor while typing. 6. In a Typst pane menu or the open preview header, enable **Automatic PDF export** for the selected file when you want a sibling PDF. Use **Rebuild PDF** for an explicit rebuild after an imported theme, widget, or image changes. Try a small document: ```typst #set heading(numbering: "1.") = A small example A right triangle satisfies $ x^2 + y^2 = z^2 $. ``` Requires **Obsidian 1.13.7+**, a filesystem-backed desktop vault, and a local Tinymist executable. Development and integration tests use Tinymist 0.15.2. Mobile is not supported in this release. ## Installation ### Community directory Open the [Typst Live community listing](https://community.obsidian.md/plugins/typst-live), choose **Add to Obsidian**, then enable **Typst Live**. ### GitHub release Download `main.js`, `manifest.json`, and `styles.css` from [Releases](https://github.com/qiulinfan/obsidian-tinymist/releases/latest). Create `/.obsidian/plugins/typst-live/`, copy the three files there, then reload Obsidian and enable **Typst Live** in Community plugins. The first public release is **0.1.0**. Only one enabled plugin should own the `.typ` editor in a vault. Earlier personal development installs used `obsidian-tinymist`; disable that copy before enabling this release. This plugin does not copy or migrate its settings. ### Development ```sh npm ci npm test npm run build scripts/install-dev.sh /absolute/path/to/vault ``` The development installer uses the ID in `manifest.json`. It refuses to replace an existing directory that is not a symlink. ## Styled chapter previews If a chapter imports layout functions without applying the complete document layout, place `.tinymist-preview.typ` in its folder or an ancestor inside the vault. The nearest file receives the selected source through `sys.inputs.at("preview-source")`, a root-relative Typst path: ```typst #import "template.typ": chapter-layout #show: chapter-layout #include sys.inputs.at("preview-source") ``` Your template owns the styling. Without a wrapper, the selected file is previewed directly. A `main.typ` that includes a chapter can supply book-wide labels and imports. Reopen the preview after adding or removing a wrapper. ## Project font paths If a project uses fonts stored in the Vault, open **Settings → Typst Live → Font paths**. Enter one font file or folder per line. Each entry may be an absolute path or a path relative to the Vault root. Relative paths are portable when the Vault moves; spaces in paths are kept, and blank lines are ignored. The paths are sent to both Tinymist language-server processes through Tinymist's native `fontPaths` configuration. Typing changes a draft only. Click **Apply and restart language server** to save the paths, restart the main server, restart the fragment renderer on its next render, and clear successful formula renders made with the old paths. The existing **Restart language server** command also uses the saved paths. No compiler restart or render-cache invalidation happens for each keystroke. ## Optional AI completion Install and configure [YOLO](https://github.com/qiulinfan/obsidian-yolo), then turn on **YOLO tab completion (experimental)** in Typst Live. The bridge uses YOLO's model, triggers, and enable toggle; it does not provide an AI service. - **Tab** accepts visible ghost text; **Shift-Tab** or **Escape** dismisses it. - **Enter** inserts a newline and never accepts AI text. - Ordinary completion lists take priority over AI suggestions. The bridge was checked against YOLO **1.6.9.7**. Other versions may need a new contract check. See [setup and format constraints](docs/yolo-bridge.md). ## Privacy and network use The plugin has no telemetry, analytics, account requirement, or hosted backend. It does not install or update itself or Tinymist. Tinymist is a separately installed program that the plugin starts for language intelligence and preview. - **Local preview:** Tinymist serves HTTP/WebSocket preview data on `127.0.0.1` at a temporary port. This is communication on your computer, not a remote preview service. - **Typst packages:** Tinymist/Typst may fetch an uncached `@preview` package when your document imports it. The [Typst package registry](https://github.com/typst/packages) documents these downloads and the cache. Cached packages can be used offline. - **Optional AI:** enabling the YOLO bridge passes source context to YOLO and its configured local or remote model provider. Provider accounts, charges, and data handling follow that provider and YOLO's configuration. The bridge is off by default; editing and preview do not require it. - **Files outside the vault:** executable discovery checks the configured path, Homebrew/Cargo/WinGet locations, and the login shell's PATH. The external compiler can read system fonts and Typst's package cache outside the vault. Preview project paths are rooted at the vault; the plugin also reads local project templates needed for rendering. ## Limits This release has no mobile support, dedicated find-references UI, outline panel, or general PDF/SVG/PNG export commands. Automatic PDF export is an opt-in same-stem build for saved `.typ` files; it does not watch all imported dependencies. Builds are serialized and use an isolated Tinymist export process so each build reads current saved source and dependency bytes. Use **Rebuild PDF** after dependency-only changes. AI completion is optional and depends on the installed YOLO version and your model service. Agents can call `rebuildPdf(path, { interactive: false })` to request a bounded non-interactive rebuild. The returned receipt reports whether the PDF was published, conflicted, failed, superseded, cancelled, or was busy and should be retried later. `superseded` means a newer request for the same source replaced the agent job. See [the roadmap](docs/roadmap.md) for work in progress. ## Feedback and contributions [Report a bug or suggest a feature](https://github.com/qiulinfan/obsidian-tinymist/issues). Include your operating system, Obsidian/plugin/Tinymist versions, a small reproduction, and expected versus actual behavior. Remove private document content and credentials from anything you share. Contributions are welcome. Discuss substantial changes in an issue first. Development and release conventions are in [AGENTS.md](AGENTS.md). ## Acknowledgments Built on [Tinymist](https://github.com/Myriad-Dreamin/tinymist), [Typst](https://github.com/typst/typst), and [typst.ts](https://github.com/Myriad-Dreamin/typst.ts), with Obsidian's CodeMirror and Lezer runtime. This is an independent integration, not an official product of Obsidian, Typst, or Tinymist. The README layout follows the presentation style of [YOLO](https://github.com/qiulinfan/obsidian-yolo). ## License Author-owned source and documentation are [MIT](LICENSE), copyright 2026 Qiulin Fan: use, modify, and redistribute them while retaining the copyright and permission notices. Upstream components and any upstream-derived fixture material retain their original licenses. See [third-party notices](THIRD_PARTY_NOTICES.md).