Skip to content

Releases: pndv/typst-renderer

0.6.2

Choose a tag to compare

@github-actions github-actions released this 03 Oct 02:59
26605c9

What's Changed

[0.6.2] - 2026-09-25

Added

  • A notification when a tinymist you installed yourself is older than the version the plugin is tested with. A
    tinymist from Cargo, Homebrew, Scoop, winget or a manual download is never written over; instead the plugin tells you
    which version it expects, once per IDE session, with a link to that release's notes. Skip this version keeps it
    quiet until a plugin update moves to a newer tinymist, and Don't ask again switches it off — it can be turned back
    on under Settings > Tools > Typst Renderer. A tinymist newer than the tested version is left alone.

Changed

  • tinymist updated to v0.15.8 (from v0.15.2). Every command the plugin sends, and the shape of every answer it
    reads back, was checked against the new version and found unchanged; the live preview's own page was rebuilt upstream
    and still renders in the IDE's embedded browser.

Fixed

  • A tinymist downloaded by the plugin now follows the plugin when it updates. A binary used to be downloaded once
    and kept for good, so plugin updates that moved to a newer tinymist never reached existing installs — they stayed on
    whatever version they first downloaded. Downloads now live in a folder named after the version the plugin is built
    for, so a plugin update that changes it fetches the matching tinymist the next time a .typ file is opened, and
    removes the old one once nothing is running it. A plugin release that moves back to an earlier tinymist rolls the
    binary back the same way.
  • No language-server start attempt for a restored .typ tab whose folder no longer exists. A file opened from
    outside the project, whose folder had since been deleted or belonged to another machine, was still handed to a new
    language server on the next IDE start, which failed and logged a WorkingDirectoryNotFoundException. The folder is
    now checked on disk first.
  • Downloading tinymist from the settings while the language server was running failed on Windows, which refuses to
    delete or overwrite the image file of a live process. The old binary is now moved aside to free the name and removed
    once nothing is running it — and if the replacement cannot be completed, the original is put back rather than
    leaving no language server at all.

Full Changelog: 0.6.1...0.6.2

0.6.1

Choose a tag to compare

@github-actions github-actions released this 27 Aug 19:43
Immutable release. Only release title and notes can be modified.
2014698

What's Changed

Fixed

  • Syntax colouring now covers the Typst-specific semantic tokens. Constructs such as booleans, headings, raw blocks,
    references, labels and markup emphasis were reported by tinymist under token type names the platform does not
    recognise, so they were left uncoloured. These are now mapped to matching IntelliJ text attributes, and semantic
    tokens are requested for the Typst language regardless of the platform's built-in language restriction (issue #115).

Changed

  • Build tooling updated to Gradle 9.7.1.

Pull Requests

Full Changelog: 0.6.0...0.6.1

0.6.0

Choose a tag to compare

@github-actions github-actions released this 23 Aug 06:58
Immutable release. Only release title and notes can be modified.
4d98458

What's Changed

Added

  • A "New → Typst File" action is now available. Right-click a directory in the Project view — or use File → New —
    and choose Typst File to create a .typ file with the right extension and icon already applied, instead of using
    New → File and typing the extension by hand (issue #126).
  • Ten live templates for common Typst patterns. Type an abbreviation and press Tab to expand boilerplate
    for a heading, figure, table, math block, list, footnote, set rule, show rule, import, or page-setup rule, with
    tab-stop navigation between the placeholders. Available under Settings > Editor > Live Templates > Typst, and
    scoped to .typ files only (issue #123).

Changed

  • The Typst file icon has been redesigned. The previous icon reused the plugin's own "renderer" branding, which
    looked out of place as a file icon; the new one follows the JetBrains file-icon style used by languages like JS and TS
    (issue #116).
  • Opening .typ files no longer repeatedly re-scans the filesystem for the tinymist binary — the resolved path is now
    cached. The plugin's bin/ download directory is no longer created as a side effect of every lookup, only when a
    binary is actually downloaded there (issue #54).
  • Reduced token and PSI overhead on documents with large blocks of indentation or blank lines: the lexer now groups a
    run of whitespace into a single token instead of creating one token per character (issue #55).

Fixed

  • Closed a latent gap in the Typst Output console's disposal wiring where a console rebuilt mid-session (not currently
    reachable through any existing action) could be left live but silently unreferenced, permanently dropping further
    output. Defensive fix; no known way to trigger it today (issue #125).

PRs

  • Changelog update - 0.5.1 by @github-actions[bot] in #119
  • Improve whitespace handling and enhance binary management in TinymistManager by @pndv in #121
  • Update Typst SVG Icon (fixes #116) by @pndv in #122
  • Update dependency com.squareup.okhttp3:mockwebserver to v5.5.0 by @renovate[bot] in #120
  • Add Live Templates Support for Typst Language by @pndv in #124
  • Improve console disposal logic in TypstOutputToolWindowFactory by @pndv in #125
  • Add "New Typst File" action by @pndv in #127
  • Release 0.6.0 by @pndv in #128

Full Changelog: 0.5.1...0.6.0

0.5.1

Choose a tag to compare

@github-actions github-actions released this 15 Aug 06:52
498757c

Added

  • Renaming a .typ file now updates the files that import it. Renaming chapter.typ used to leave every
    #import "chapter.typ" elsewhere in the project pointing at a file that no longer existed, so the document stopped
    compiling until each one was corrected by hand. The rename now asks tinymist which paths the change invalidates and
    rewrites them in the same step, so a single undo takes the whole thing back (issue #114).

  • A file can be renamed from its own import statement. Put the cursor on the path in #import "chapter.typ": *,
    press Shift+F6, and the file on disk is renamed along with every path that refers to it — useful when the
    file you want to rename is one you are reading about rather than one you have in front of you (issue #114).

Fixed

  • Renaming a .typ file is no longer silently ignored. Choosing Rename on a .typ file in the Project view —
    or pressing Shift+F6 on it — did nothing at all: no dialog, no error, no change. The plugin's symbol-rename
    support was claiming the file-rename action as well and then had nothing to do with it, which left the IDE's own file
    rename with no chance to run. Symbol rename inside the editor was unaffected and continues to work as before (issue
    #114).

  • The rename dialog is pre-filled with the right name. It offered a name worked out by scanning the text around the
    cursor rather than the one the language server reported, so anything that was not a plain identifier came through
    truncated — renaming an import path called chapter.typ was offered as chapter. The server's name is now used for
    every rename (issue #114).

  • Rename is no longer sent to the wrong language server. With a .typ file open from outside the project, a rename
    could be handed to the server responsible for that outside folder, which knows nothing about the project's files and
    answers nothing — so the rename appeared to refuse for no reason, reporting that the symbol could not be renamed. The
    request now goes to the server that owns the file, and waits for one that has finished starting up (issue #114).

Infrastructure

  • Gradle upgraded to 9.7.0

Known issues

  • Renaming a .typ file straight after starting the IDE does not update the files that import it. The import paths
    are worked out by the tinymist language server, which does not start until the first .typ file is opened — so a
    rename done before that renames the file and leaves every #import "old.typ" untouched, without saying so. Opening
    any .typ file first is enough to avoid it. Being fixed for 0.5.2 (issue #117).

What's Changed

  • Changelog update - 0.5.0 by @github-actions[bot] in #113
  • Fix rename refactoring (#114) and Release 0.5.1 by @pndv in #118

Full Changelog: 0.5.0...0.5.1

0.5.0

Choose a tag to compare

@github-actions github-actions released this 14 Aug 15:11
987c839

Added

  • Live preview that updates as you type. The preview pane can now render through tinymist's own preview engine
    instead of exporting a PDF and displaying it. Edits appear in the pane within a few milliseconds of the keystroke — no
    save, no export, and only the changed part of the page is redrawn. A Live / PDF toggle in the preview toolbar
    chooses the renderer per editor tab, so several .typ files can be open in different modes; the new Default preview
    mode
    setting picks what a freshly opened tab starts in. Live preview is the default. If it cannot start — an old
    tinymist, a refused port — the pane falls back to the PDF renderer on its own and says so in the Typst Output console.
    Compile and Export write a PDF and report to the console whichever renderer the pane is using, and never
    switch it: a pane in PDF mode reloads, a pane in Live mode carries on rendering live (issue #109).
  • Editors showing the same document share one live preview. With a main entry pinned, every open chapter compiles
    through that main, so they all display the same document — one render serves them all, started when the first such tab
    opens and stopped when the last one closes. With no main entry pinned, every file gets its own live preview, as do
    .typ files outside the project (issue #109).
  • The live preview follows the cursor. It scrolls to the part of the document you are editing, keeps up as you move
    around, and re-syncs when you switch back to a tab — so the preview shows the passage you are working on rather than
    wherever you last left it. Turn it off with Scroll the live preview to follow the cursor in Settings > Tools >
    Typst. Two things to know: editors sharing one live preview scroll together, because the scroll belongs to the shared
    render rather than to a pane; and a file opened for the very first time has its cursor at the start, so the preview
    begins at the top of the document until you move it (issue #109).
  • Click the preview to jump to the source. Clicking a spot in the live preview takes the editor to the matching
    place in the .typ file that produced it, opening the file if it is not already open — useful in a multi-file
    project, where the passage you are looking at often lives in a chapter you do not have in front of you (issue #109).
  • Pin a main entry file for multi-file projects. In a project where main.typ #includes a tree of chapter files,
    opening a chapter on its own used to compile it in isolation, so every cross-file reference (@ch:cases pointing at a
    label declared elsewhere) reported "label does not exist" — errors that vanished only when main.typ was reopened.
    Right-click a .typ file and choose Pin as Typst Main File (or set it in Settings > Tools > Typst > Project
    Overrides) and the whole project is compiled through that entry instead: cross-references resolve, the editor stops
    reporting phantom errors, and the preview shows the complete document while you edit any chapter. Unpin Typst Main
    File
    reverts to compiling whichever file is focused. The pin is re-applied automatically whenever the language
    server restarts (issue #97).

Fixed

  • tinymist is no longer re-downloaded after every plugin update. The managed binary was kept inside the plugin's
    own installation folder, which an update deletes and replaces, so each upgrade silently threw it away and downloaded
    it again. It now lives alongside the IDE's other cached data and survives updates. Upgrading to this version
    downloads it once more, into the new location.
  • The preview no longer gets stuck on "Compiling…" after a compile fails. A failed compile now keeps its error pane on
    screen until the next successful compile, instead of being painted over by the waiting splash and hiding the
    diagnostic (issue #98).
  • .typ files outside the project are compiled as themselves even when a main entry is pinned, rather than being
    redirected to the project's document (issue #99).
  • Several reliability problems on the compile path (issue #101):
    • Compiling no longer fails with "failed to persist temporary file: Access is denied" when several editor tabs refresh
      at once; simultaneous compiles of the same document are now merged into one.
    • Compile requests are no longer sent to the wrong language server, which reported "file not found" for files that
      exist — most visibly after a file was created or replaced outside the IDE.
    • Applying a project setting no longer leaves out-of-project .typ files without a language server until their editor
      is closed and reopened.
    • Compile now saves modified files first, so it no longer produces a PDF of the previously saved text while
      reporting success.
    • A language server that stops unexpectedly is restarted automatically, instead of leaving the preview waiting
      indefinitely.

Changed

  • Saving no longer writes a PDF while the preview is in Live mode. Previously the preview refreshed by exporting, so
    every save left an updated PDF in the export directory (target/ by default) as a side effect. A live preview renders
    without producing a file, so with the new default the PDF on disk is written only when you ask for one — Compile
    (Ctrl+Shift+T) or Export. If you relied on save-writes-a-PDF (a build script watching
    target/, an external viewer open on the file), switch the preview toolbar toggle to PDF, or set Default preview
    mode
    to PDF to restore the previous behaviour everywhere.
  • The preview follows your typing rather than your saves. In Live mode the pane no longer waits for
    Ctrl+S. It can be put back on a save cadence with the Update live preview on every keystroke setting
    without leaving Live mode.
  • A compile error leaves the Live preview showing the last good version, not an error page. The live renderer keeps
    the most recent successful render, so a document that has never compiled shows an empty pane instead of a message.
    The errors themselves are unaffected — they appear in the editor gutter and in the Typst Output console as
    before. Switch the pane to PDF for the previous behaviour, where a failed compile replaces the preview with an
    error page.
  • Jumping from the preview to the source does not move the keyboard focus when the target file is already open in
    front of you: the line is highlighted, but the cursor stays where it was and typing still goes to the preview. Click
    into the editor to carry on. Jumping to a file that is not already open behaves normally, placing the cursor and
    moving focus with it. This is the IDE's handling of the language server's request rather than a limit of Typst
    itself, and it is being tracked for a follow-up.
  • The bundled tinymist language server is now pinned to v0.15.2 (from v0.14.18). Users who already have an
    auto-downloaded tinymist keep their existing binary — the new pin applies to fresh downloads.

0.4.3

Choose a tag to compare

@github-actions github-actions released this 21 Jul 05:21
fb38dcb

Fixed

  • The live PDF preview no longer crashes with NoClassDefFoundError: com/intellij/ui/jcef/JBCefApp
    on the 2026.2 line. From build 262 the platform ships JCEF as a separate bundled plugin (com.intellij.modules.jcef)
    that is no longer on every plugin's classpath by default; the plugin now declares a dependency on it so the embedded
    browser previewer loads.
  • .typ files opened from outside the project (a résumé in the home directory, a one-off letter on another drive)
    now get a language server, so compile and the live preview work for them. The platform only lets a plugin start an LSP
    for files inside the project's content roots; such files now get their own tinymist client rooted at the file's
    folder, started explicitly on editor open and swept up at project startup. The exported PDF lands in the configured
    export directory (default target/) next to the file (issue #92).

Changed

  • The minimum supported build is now 262 (2026.2); the supported range is 262.*. The 2026.1 (261)
    line is no longer supported — the JCEF split that broke the preview only exists from 262, and pinning the baseline
    there keeps the plugin descriptor honest.

Infrastructure

  • Six extension-dependent integration tests are now gated behind a plugin-loaded check. The minimal 2026.2 test
    framework omits intellij.libraries.lucene.common, which excludes the plugin from plugin-set resolution so its
    extensions never register; the affected tests skip with a logged reason on that platform and run in full again once a
    complete test framework ships. The real IDE is unaffected — the JetBrains Plugin Verifier reports the plugin
    compatible with IU-262.8665.258.

0.4.2

Choose a tag to compare

@github-actions github-actions released this 14 Jul 17:34
9e27db0

A maintenance release: auto-format now works on prose-heavy documents, and the plugin is compatible with the 2026.2
line following the migration to the platform's LspClient integration API.

What's Changed

  • Changelog update - 0.4.1 by @github-actions[bot] in #75
  • Update versions and dependencies by @pndv in #76
  • Centralise Workflow Action Versioning by @pndv in #77
  • Update qodana to v2026.1.3 by @renovate[bot] in #78
  • Update Gradle to v9.6.0 by @renovate[bot] in #79
  • Add Gradle wrapper version drift-guard and realign gradleVersion by @pndv in #82
  • Update dependency org.jetbrains.intellij.platform to v2.17.0 by @renovate[bot] in #81
  • Migrate to LspClient API and Update Build Compatibility by @pndv in #84
  • Update Gradle to version 9.6.1 by @pndv in #86

Full Changelog: 0.4.1...0.4.2

0.4.1

Choose a tag to compare

@github-actions github-actions released this 21 Jun 04:17
b2240fd

What's Changed

  • Changelog update - 0.4.0 by @github-actions[bot] in #49
  • Enhance PDF Export Handling, Modal Progress Handling and Remove obsolete code by @pndv in #73

Full Changelog: 0.4.0...0.4.1

0.4.0

Choose a tag to compare

@github-actions github-actions released this 11 Jun 21:32
02261ed

What's Changed

  • Migrate to tinymist LSP for PDF export and compilation by @pndv in #48
  • Improve localisation, UI consistency, and theming support by @pndv in #43
  • Update dependency mozilla/pdf.js to v6 by @renovate[bot] in #41
  • Update dependency com.squareup.okhttp3:mockwebserver to v5 by @renovate[bot] in #39
  • Update codecov/codecov-action action to v7 by @renovate[bot] in #46

Full Changelog

[0.4.0] - 2026-06-10

The plugin now compiles entirely through the bundled tinymist language server — the standalone typst
command-line binary is no longer invoked. This release stops using the typst CLI; the CLI-backed code remains
in the tree, unwired, as a revert hatch and will be removed in a later release.

Added

  • Per-project export directory setting (typstExportPath, default target) on the project-scoped settings page.
    The plugin wraps it as tinymist's $root/<dir>/$dir/$name output template, so the source tree is mirrored under the
    chosen directory and every file keeps a unique output path.
  • TinymistCommands — a typed wrapper over tinymist's workspace/executeCommand surface (tinymist.exportPdf,
    tinymist.pinMain, tinymist.getServerInfo), with a structured ExportPdfResult (Exported / Failed /
    Unavailable) that carries tinymist's formatted compile diagnostic instead of scraping stderr.

Changed

  • Manual Compile now triggers a tinymist tinymist.exportPdf export rather than spawning a typst compile
    subprocess. The PDF is written to the configured export directory and the path is taken from tinymist's response.
  • PDF preview now drives compilation itself: opening a preview, or saving the previewed file, runs a debounced
    tinymist.exportPdf and reloads the panel from the returned path — there is no typst watch subprocess. A successful
    render hot-swaps the PDF in place (preserving scroll); the panel falls back to a full reload only when the viewer page
    is not currently shown.
  • Preview startup is gated on the language server being ready: while tinymist is still starting, the panel shows a
    waiting page and polls for readiness rather than reporting spurious "no PDF returned" errors. Transient export
    failures while the server is up are retried briefly before surfacing a hard error.
  • The compile diagnostic shown in the Typst Output console is now tinymist's own formatted error: … text
    (multi-line, with file-location links preserved), replacing the previous stderr parsing.
  • The tinymist binary is pinned to v0.14.18 as the download target, which includes the workspace-root output-path
    fix required for the default export layout.

Removed

  • The explicit Watch action — both the editor right-click "Watch Typst File" entry and the Watch toggle on the Typst
    Output toolbar. An open preview now recompiles automatically on every save and so serves as the live watch; the
    standalone "watch and write to the project without an open preview" workflow is dropped for the time being.
  • The typst CLI settings UI — the "Compilation (Typst CLI)" group (binary-path field, "Download typst" button,
    status row, and auto-compile-on-save checkbox) has been removed from the Typst settings page, since compilation now
    goes through tinymist. The underlying settings keys and download service are retained internally for now.

Tests

  • TinymistCommandsTest — covers the export-path extraction, error formatting, and Rust-debug unescaping helpers.
  • TypstFilePreviewerDecisionsTest — covers the preview pipeline's readiness-poll, transient-retry, and
    hot-swap-vs-full-navigation decisions, plus the ExportPdfResult contract.
  • TinymistLspServerDescriptorTest — covers the export-directory → output-path template construction.

Infrastructure

  • PDF.js held at the 4.10.x line with a Renovate <5.0.0 ceiling and a build-gate assertion, so an automated bump can't
    silently move past what the bundled JCEF Chromium supports.

Full Changelog: 0.3.0...0.4.0

0.3.0

Choose a tag to compare

@pndv pndv released this 28 May 01:28
829a93d

What's Changed

  • Add hyperlinked Typst diagnostics in Typst Output window
  • Add project-level overrides,
  • Refine CLI argument handling
  • Improve release workflow
  • Extract reusable logic
  • Enhance test coverage

Full Changelog: 0.2.0...0.3.0