注意 当サイトは、Typst v0.11.1 公式ドキュメントを、日本語コミュニティが非公式に翻訳したものです。誤訳・未訳・古い情報が含まれている可能性があるため、公式ドキュメント との併用を推奨します。このサイトの内容に誤りを発見された方は、GitHubリポジトリまでご報告を頂けましたら幸いです。我々のコミュニティにご興味のある方は、ぜひ非公式Discordサーバー「くみはんクラブ」にご参加ください。
Warning: This site provides an unofficial translation of the Typst v0.11.1 documentation by the Japanese Community. Please note that there may be some inaccuracies, untranslated sections or outdated information. We highly recommend referring to the latest official documentation as well. If you find any errors in the content, please let us know through our GitHub repository. If you are interested in our community, feel free to join our unofficial Discord server, “Kumihan Club.”
Typst ドキュメント日本語版

plugin

A WebAssembly plugin.

Typst is capable of interfacing with plugins compiled to WebAssembly. Plugin functions may accept multiple byte buffers as arguments and return a single byte buffer. They should typically be wrapped in idiomatic Typst functions that perform the necessary conversions between native Typst types and bytes.

Plugins run in isolation from your system, which means that printing, reading files, or anything like that will not be supported for security reasons. To run as a plugin, a program needs to be compiled to a 32-bit shared WebAssembly library. Many compilers will use the WASI ABI by default or as their only option (e.g. emscripten), which allows printing, reading files, etc. This ABI will not directly work with Typst. You will either need to compile to a different target or stub all functions.

Plugins and Packages

Plugins are distributed as packages. A package can make use of a plugin simply by including a WebAssembly file and loading it. Because the byte-based plugin interface is quite low-level, plugins are typically exposed through wrapper functions, that also live in the same package.

Purity

Plugin functions must be pure: Given the same arguments, they must always return the same value. The reason for this is that Typst functions must be pure (which is quite fundamental to the language design) and, since Typst function can call plugin functions, this requirement is inherited. In particular, if a plugin function is called twice with the same arguments, Typst might cache the results and call your function only once.

Example

#let myplugin = plugin("hello.wasm")
#let concat(a, b) = str(
  myplugin.concatenate(
    bytes(a),
    bytes(b),
  )
)

#concat("hello", "world")
Preview

Protocol

To be used as a plugin, a WebAssembly module must conform to the following protocol:

Exports

A plugin module can export functions to make them callable from Typst. To conform to the protocol, an exported function should:

Imports

Plugin modules need to import two functions that are provided by the runtime. (Types and functions are described using WAT syntax.)

Resources

For more resources, check out the wasm-minimal-protocol repository. It contains:

Constructor
If a type has a constructor, you can call it like a function to create a new value of the type.

Creates a new plugin from a WebAssembly file.

plugin() -> plugin

path
str
RequiredPositional
Positional parameters are specified in order, without names.

Path to a WebAssembly file.