tinymist/editors/vscode
Myriad-Dreamin 1210b54515
Some checks are pending
tinymist::ci / publish-vscode (push) Blocked by required conditions
tinymist::ci / build-vsc-assets (push) Blocked by required conditions
tinymist::ci / build-vscode (push) Blocked by required conditions
tinymist::ci / build-vscode-others (push) Blocked by required conditions
tinymist::ci / Duplicate Actions Detection (push) Waiting to run
tinymist::ci / Check Clippy, Formatting, Completion, Documentation, and Tests (Linux) (push) Waiting to run
tinymist::ci / Check Minimum Rust version and Tests (Windows) (push) Waiting to run
tinymist::ci / E2E Tests (darwin-arm64 on macos-latest) (push) Blocked by required conditions
tinymist::ci / E2E Tests (linux-x64 on ubuntu-22.04) (push) Blocked by required conditions
tinymist::ci / E2E Tests (linux-x64 on ubuntu-latest) (push) Blocked by required conditions
tinymist::ci / E2E Tests (win32-x64 on windows-2022) (push) Blocked by required conditions
tinymist::ci / E2E Tests (win32-x64 on windows-latest) (push) Blocked by required conditions
tinymist::ci / prepare-build (push) Waiting to run
tinymist::ci / build-binary (push) Blocked by required conditions
tinymist::gh_pages / build-gh-pages (push) Waiting to run
feat: finally directly generate markdown files (#1881)
* feat: finally directly generate markdown files

* fix: trim

* fix: await
2025-07-07 13:11:23 +08:00
..
e2e-workspaces fix: errors in the template (#1875) 2025-07-06 14:33:45 +08:00
icons dev: transparentize the typst icon's background (#313) 2024-05-23 20:03:01 +08:00
scripts feat: split config crate (#1516) 2025-03-16 17:33:41 +08:00
src fix: show svg in vscode-remote (#1878) 2025-07-07 11:10:09 +08:00
syntaxes feat: disable unicode pair autocompletion (#726) 2024-10-22 23:02:52 +08:00
.gitignore feat: employ l10n to tinymist-cli and vscode extension (#1505) 2025-03-15 10:38:07 +08:00
.vscodeignore feat: employ l10n to tinymist-cli and vscode extension (#1505) 2025-03-15 10:38:07 +08:00
CHANGELOG.md docs: update typstyle changelog links to the correct URL (#1848) 2025-06-25 11:49:15 +08:00
Configuration.md feat: export to tex by tasks (#1826) 2025-06-19 14:10:42 +08:00
esbuild.system.mjs feat: initialize tinymist-vscode-html extension (#1378) 2025-02-23 18:56:47 +08:00
esbuild.web.mjs feat: initialize tinymist-vscode-html extension (#1378) 2025-02-23 18:56:47 +08:00
LICENSE feat: generate documentation in PDF format 2025-03-11 10:56:02 +08:00
package.json fix: vesrion in package.json files are wrong (#1834) 2025-06-22 22:31:36 +08:00
package.other.json feat: add tinymist.startDefaultPreview and revise documentation about preview (#1448) 2025-03-06 15:49:53 +08:00
README.md feat: finally directly generate markdown files (#1881) 2025-07-07 13:11:23 +08:00
tsconfig.json fix: vscode check command (#1665) 2025-04-17 13:54:22 +08:00
tsconfig.test.json dev: reformat code (#461) 2024-08-04 17:11:51 +08:00
vitest.config.ts feat: configure word pattern to exclude -A like words (#1552) 2025-03-20 18:52:36 +08:00

Tinymist Typst VS Code Extension

A VS Code or VS Codium extension for Typst. You can find the extension on:

Features

See Tinymist Features for a list of features.

Usage Tips

Initializing with a Template

To initialize a Typst project:

  • Use command Typst init template (tinymist.initTemplate) to initialize a new Typst project based on a template.
  • Use command Typst show template (tinymist.showTemplateGallery) to show available Typst templates for picking up a template to initialize.

🎉 If your template contains only a single file, you can also insert the template content in place with command:

  • Use command Typst template in place (tinymist.initTemplateInPlace) and input a template specifier for initialization.

Configuring LSP-Enhanced Formatters

  1. Open settings.
  2. Search for "Tinymist Formatter" and modify the value.
    • Use "formatterMode": "typstyle" for typstyle.
    • Use "formatterMode": "typstfmt" for typstfmt.

Tips: to enable formatting on save, you should add extra settings for typst language:

{
  "[typst]": {
    "editor.formatOnSave": true
  }
}

Configuring Linter

  1. Open settings.
  2. Search for "Tinymist Lint" and modify the value.
    1. Toggle "Enabled" to enable or disable the linter.
    2. Change "When" to configure when the linter runs.
      • (Default) onSave run linting when you save the file.
      • onType run linting as you type.

Configuring/Using Tinymists Activity Bar (Sidebar)

If you dont like the activity bar, you can right-click on the activity bar and uncheck "Tinymist" to hide it.

Symbol View

  • Search symbols by keywords, descriptions, or handwriting.
  • See symbols grouped by categories.
  • Click on a symbol, then it will be inserted into the editor.

Tool View

  • Template Gallery: Show available Typst templates for picking up a template to initialize.
  • Document Summary: Show a summary of the current document.
  • Symbols: Show symbols in the current document.
  • Fonts: Show fonts in the current document.
  • Profiling: Profile the current document.

Package View

  • Create or open some local typst packages.
  • Show a list of available typst packages and invoke associated commands.

Content View

  • Show thumbnail content of the current document, which is useful for creating slides.

Label View

  • Show labels in the current workspace.

Outline View

  • Show outline of exported document, viewing typst as a markup language.
    • This is slightly different from the LSP-provided document outline, which shows the syntax structure of the document, viewing typst as a programming language.

Preview Command

Open command palette (Ctrl+Shift+P), and type >Typst Preview:.

You can also use the shortcut (Ctrl+K V).

Theme-aware template (previewing)

In short, there is a sys.inputs item added to the compiler when your document is under the context of user editing or previewing task. You can use it to configure your template:

#let preview-args = json.decode(sys.inputs.at("x-preview", default: "{}"))
// One is previewing the document.
#let is-preview = sys.inputs.has("x-preview")
// `dark` or `light`
#let preview-theme = preview-args.at("theme", default: "light")

For details, please check Previews sys.inputs.

Configuring path to search fonts

To configure path to search fonts:

  1. Open settings.
    • File -> Preferences -> Settings (Linux, Windows).
    • Code -> Preferences -> Settings (Mac).
  2. Search for "Tinymist Font Paths" for providing paths to search fonts order-by-order.
  3. Search for "Tinymist System Fonts" for disabling system fonts to be searched, which is useful for reproducible rendering your PDF documents.
  4. Reload the window or restart the vscode editor to make the settings take effect.

Note: you must provide absolute paths.

Note: you can use vscode variables in the settings, see vscode-variables for more information.

Configuring path to root directory

To configure the root path resolved for Typst compiler:

  1. Open settings.
  2. Search for "Tinymist Root Path" and modify the value.
  3. Reload the window or restart the vscode editor to make the settings take effect. Note: you must provide absolute paths.

Managing Local Packages

  1. Use Typst: Create Typst Local Package command to create a local package.
  2. Use Typst: Open Typst Local Package command to open a local package.
  3. View and manage a list of available local packages in the "PACKAGE" view in the activity bar.

Compiling PDF

This extension compiles to PDF, but it doesnt have a PDF viewer yet. To view the output as you work, install a PDF viewer extension, such as vscode-pdf.

To find a way to compile PDF:

  • Click the code len Export PDF at the top of document, or use command Typst Show PDF ..., to show the current document to PDF.
  • Use command Typst Export PDF to export the current document to PDF.
  • There are code lens buttons at the start of the document to export your document to PDF or other formats.

To configure when PDFs are compiled:

  1. Open settings.
  2. Search for "Tinymist Export PDF".
  3. Change the "Export PDF" setting.
    • onSave makes a PDF after saving the Typst file.
    • onType makes PDF files live, as you type.
    • never disables PDF compilation.
    • onDocumentHasTitle makes a PDF when the document has a title and, as you save.

To configure where PDFs are saved:

  1. Open settings.
  2. Search for "Tinymist Output Path".
  3. Change the "Output Path" setting. This is the path pattern to store artifacts, you can use $root or $dir or $name to do magic configuration
    • e.g. $root/$dir/$name (default) for $root/path/to/main.pdf.
    • e.g. $root/target/$dir/$name for $root/target/path/to/main.pdf.
    • e.g. $root/target/foo for $root/target/foo.pdf. This will ensure that the output is always output to target/foo.pdf.

Note: the output path should be substituted as an absolute path.

Exporting to Other Formats

You can export your documents to various other formats by lsp as well. Currently, the following formats are supported:

  • Official svg, png, and pdf.
  • Unofficial html, md (typlite), and txt
  • Query Results (into json, yaml, or txt), and pdfpc (by typst query --selector <pdfpc-file>, for Touying)

See Docs: Exporting Documents for more information.

Working with Multiple-File Projects

You can pin a main file by command.

  • Use command Typst Pin Main (tinymist.pinMainToCurrent) to set the current file as the main file.
  • Use command Typst Unpin Main (tinymist.unpinMain) to unset the main file.

Note

tinymist.pinMain is a stateful command, and tinymist doesn't remember it between sessions (closing and opening the editor).

Passing Extra CLI Arguments

There is a global configuration tinymist.typstExtraArgs to pass extra arguments to tinymist LSP, like what you usually do with typst-cli CLI. For example, you can set it to ["--input=awa=1", "--input=abaaba=2", "main.typ"] to configure sys.inputs and entry for compiler, which is equivalent to make LSP run like a typst-cli with such arguments:

typst watch --input=awa=1 --input=abaaba=2 main.typ

Supported arguments:

  • entry file: The last string in the array will be treated as the entry file.
    • This is used to specify the default entry file for the compiler, which may be overridden by other settings.
  • --input: Add a string key-value pair visible through sys.inputs.
  • --font-path (environment variable: TYPST_FONT_PATHS), Font paths, maybe overridden by tinymist.fontPaths.
  • --ignore-system-fonts: Ensures system fonts wont be searched, maybe overridden by tinymist.systemFonts.
  • --creation-timestamp (environment variable: SOURCE_DATE_EPOCH): The documents creation date formatted as a UNIX timestamp.
  • --cert (environment variable: TYPST_CERT): Path to CA certificate file for network access, especially for downloading typst packages.

Note: Fix entry to main.typ may help multiple-file projects but you may loss diagnostics and autocompletions in unrelated files.

Note: the arguments has quite low priority, and that may be overridden by other settings.

Contributing

You can submit issues or make PRs to GitHub.