pub struct TypstEngine<T = TypstTemplateCollection> { /* private fields */ }Expand description
Main entry point for compiling Typst documents.
Use TypstEngine::builder() to construct an instance. You can optionally set a
main file with main_file(), which allows
compiling without specifying the file ID each time.
§Examples
With main file (compile without file ID):
static TEMPLATE: &str = "Hello World!";
static FONT: &[u8] = include_bytes!("../examples/fonts/texgyrecursor-regular.otf");
let engine = TypstEngine::builder()
.main_file(TEMPLATE)
.fonts([FONT])
.build();
// Compile the main file directly
let doc: PagedDocument = engine.compile().output.expect("Compilation failed");Without main file (must provide file ID):
static TEMPLATE: &str = "Hello World!";
static FONT: &[u8] = include_bytes!("../examples/fonts/texgyrecursor-regular.otf");
let engine = TypstEngine::builder()
.fonts([FONT])
.with_static_source_file_resolver([("template.typ", TEMPLATE)])
.build();
// Must specify file ID for each compile
let doc: PagedDocument = engine.compile("template.typ").output.expect("Compilation failed");See also: Examples directory
Implementations§
Source§impl TypstEngine<TypstTemplateCollection>
impl TypstEngine<TypstTemplateCollection>
Sourcepub fn builder() -> TypstTemplateEngineBuilder
pub fn builder() -> TypstTemplateEngineBuilder
Creates a new builder for configuring a TypstEngine.
§Example
static FONT: &[u8] = include_bytes!("../examples/fonts/texgyrecursor-regular.otf");
let engine = TypstEngine::builder()
.fonts([FONT])
.build();Source§impl TypstEngine<TypstTemplateCollection>
impl TypstEngine<TypstTemplateCollection>
Sourcepub fn compile_with_input<F, D, Doc>(
&self,
main_source_id: F,
inputs: D,
) -> Warned<Result<Doc, TypstAsLibError>>
pub fn compile_with_input<F, D, Doc>( &self, main_source_id: F, inputs: D, ) -> Warned<Result<Doc, TypstAsLibError>>
Compiles a Typst document with input data injected as sys.inputs.
The input will be available in Typst scripts via #import sys: inputs.
To change the injection location, use custom_inject_location().
§Example
static TEMPLATE: &str = "#import sys: inputs\n#inputs.name";
static FONT: &[u8] = include_bytes!("../examples/fonts/texgyrecursor-regular.otf");
let engine = TypstEngine::builder()
.fonts([FONT])
.with_static_source_file_resolver([("main.typ", TEMPLATE)])
.build();
let mut inputs = Dict::new();
inputs.insert("name".into(), "World".into_value());
let doc: PagedDocument = engine.compile_with_input("main.typ", inputs)
.output
.expect("Compilation failed");See also: resolve_static.rs
Sourcepub fn compile<F, Doc>(
&self,
main_source_id: F,
) -> Warned<Result<Doc, TypstAsLibError>>where
F: IntoFileId,
Doc: Document,
pub fn compile<F, Doc>(
&self,
main_source_id: F,
) -> Warned<Result<Doc, TypstAsLibError>>where
F: IntoFileId,
Doc: Document,
Compiles a Typst document without input data.
Sourcepub fn world_builder<I>(
&self,
main_source_id: I,
) -> TypstWorldBuilder<'_, TypstTemplateCollection>where
I: IntoFileId,
pub fn world_builder<I>(
&self,
main_source_id: I,
) -> TypstWorldBuilder<'_, TypstTemplateCollection>where
I: IntoFileId,
Returns a TypstWorldBuilder for constructing a TypstWorld bound to a specific file.
This is an advanced low-level API. The caller is responsible for driving compilation
(e.g. via typst::compile) and for managing the comemo cache afterwards.
No cache eviction is performed automatically — use with_world
if you want eviction handled for you.
§Example
let engine = TypstEngine::builder().build();
let world = engine.world_builder("/main.typ")
.with_inputs(my_inputs)
.build()?;
let doc = typst::compile(&world).output.expect("Failed");
comemo::evict(30); // caller manages cache evictionSourcepub fn with_world<F, I, R>(
&self,
main_source_id: I,
f: F,
) -> Result<R, TypstAsLibError>
pub fn with_world<F, I, R>( &self, main_source_id: I, f: F, ) -> Result<R, TypstAsLibError>
Execute a closure with a TypstWorld for a specific file,
optionally injecting custom inputs.
Runs the comemo cache eviction after the closure returns.
For full control use world_builder instead.
§Example
let engine = TypstEngine::builder().build();
let pdf_bytes = engine.with_world("/main.typ", |world| {
let doc = typst::compile(world).output.expect("Failed");
typst_pdf::pdf(&doc, Default::default()).expect("Failed")
}).unwrap();
// With inputs:
let pdf_bytes = engine.with_world("/main.typ", |world| { ... }).unwrap();Source§impl TypstEngine<TypstTemplateMainFile>
impl TypstEngine<TypstTemplateMainFile>
Sourcepub fn compile_with_input<D, Doc>(
&self,
inputs: D,
) -> Warned<Result<Doc, TypstAsLibError>>
pub fn compile_with_input<D, Doc>( &self, inputs: D, ) -> Warned<Result<Doc, TypstAsLibError>>
Compiles the main file with input data injected as sys.inputs.
The input will be available in Typst scripts via #import sys: inputs.
To change the injection location, use custom_inject_location().
§Example
static TEMPLATE: &str = "#import sys: inputs\nHello #inputs.name!";
static FONT: &[u8] = include_bytes!("../examples/fonts/texgyrecursor-regular.otf");
let engine = TypstEngine::builder()
.main_file(TEMPLATE)
.fonts([FONT])
.build();
let mut inputs = Dict::new();
inputs.insert("name".into(), "World".into_value());
let doc: PagedDocument = engine.compile_with_input(inputs)
.output
.expect("Compilation failed");See also: small_example.rs
Sourcepub fn compile<Doc>(&self) -> Warned<Result<Doc, TypstAsLibError>>where
Doc: Document,
pub fn compile<Doc>(&self) -> Warned<Result<Doc, TypstAsLibError>>where
Doc: Document,
Compiles the main file without input data.
Sourcepub fn world_builder(&self) -> TypstWorldBuilder<'_, TypstTemplateMainFile>
pub fn world_builder(&self) -> TypstWorldBuilder<'_, TypstTemplateMainFile>
Returns a TypstWorldBuilder using the engine’s pre-configured main file.
This is an advanced low-level API. The caller is responsible for driving compilation
(e.g. via typst::compile) and for managing the comemo cache afterwards.
No cache eviction is performed automatically — use with_world
if you want eviction handled for you.
§Example
let engine = TypstEngine::builder().main_file("= Hello").build();
let world = engine.world_builder()
.with_inputs(my_inputs)
.build()?;
let doc = typst::compile(&world).output.expect("Failed");
comemo::evict(30); // caller manages cache evictionSourcepub fn with_world<F, R>(&self, f: F) -> Result<R, TypstAsLibError>where
F: FnOnce(&TypstWorld<'_>) -> R,
pub fn with_world<F, R>(&self, f: F) -> Result<R, TypstAsLibError>where
F: FnOnce(&TypstWorld<'_>) -> R,
Execute a closure with a TypstWorld using the engine’s pre-configured main file,
optionally injecting custom inputs.
Runs the comemo cache eviction after the closure returns.
For full control use world_builder instead.
§Example
let engine = TypstEngine::builder().main_file("= Hello").build();
let pdf_bytes = engine.with_world(|world| {
let doc = typst::compile(world).output.expect("Failed");
typst_pdf::pdf(&doc, Default::default()).expect("Failed")
}).unwrap();Auto Trait Implementations§
impl<T = TypstTemplateCollection> !Freeze for TypstEngine<T>
impl<T = TypstTemplateCollection> !RefUnwindSafe for TypstEngine<T>
impl<T> Send for TypstEngine<T>where
T: Send,
impl<T> Sync for TypstEngine<T>where
T: Sync,
impl<T> Unpin for TypstEngine<T>where
T: Unpin,
impl<T> UnsafeUnpin for TypstEngine<T>where
T: UnsafeUnpin,
impl<T = TypstTemplateCollection> !UnwindSafe for TypstEngine<T>
Blanket Implementations§
Source§impl<S, D, Swp, Dwp, T> AdaptInto<D, Swp, Dwp, T> for Swhere
T: Real + Zero + Arithmetics + Clone,
Swp: WhitePoint<T>,
Dwp: WhitePoint<T>,
D: AdaptFrom<S, Swp, Dwp, T>,
impl<S, D, Swp, Dwp, T> AdaptInto<D, Swp, Dwp, T> for Swhere
T: Real + Zero + Arithmetics + Clone,
Swp: WhitePoint<T>,
Dwp: WhitePoint<T>,
D: AdaptFrom<S, Swp, Dwp, T>,
Source§fn adapt_into_using<M>(self, method: M) -> Dwhere
M: TransformMatrix<T>,
fn adapt_into_using<M>(self, method: M) -> Dwhere
M: TransformMatrix<T>,
Source§fn adapt_into(self) -> D
fn adapt_into(self) -> D
Source§impl<T, C> ArraysFrom<C> for Twhere
C: IntoArrays<T>,
impl<T, C> ArraysFrom<C> for Twhere
C: IntoArrays<T>,
Source§fn arrays_from(colors: C) -> T
fn arrays_from(colors: C) -> T
Source§impl<T, C> ArraysInto<C> for Twhere
C: FromArrays<T>,
impl<T, C> ArraysInto<C> for Twhere
C: FromArrays<T>,
Source§fn arrays_into(self) -> C
fn arrays_into(self) -> C
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<WpParam, T, U> Cam16IntoUnclamped<WpParam, T> for Uwhere
T: FromCam16Unclamped<WpParam, U>,
impl<WpParam, T, U> Cam16IntoUnclamped<WpParam, T> for Uwhere
T: FromCam16Unclamped<WpParam, U>,
Source§type Scalar = <T as FromCam16Unclamped<WpParam, U>>::Scalar
type Scalar = <T as FromCam16Unclamped<WpParam, U>>::Scalar
parameters when converting.Source§fn cam16_into_unclamped(
self,
parameters: BakedParameters<WpParam, <U as Cam16IntoUnclamped<WpParam, T>>::Scalar>,
) -> T
fn cam16_into_unclamped( self, parameters: BakedParameters<WpParam, <U as Cam16IntoUnclamped<WpParam, T>>::Scalar>, ) -> T
self into C, using the provided parameters.Source§impl<T> CheckedAs for T
impl<T> CheckedAs for T
Source§fn checked_as<Dst>(self) -> Option<Dst>where
T: CheckedCast<Dst>,
fn checked_as<Dst>(self) -> Option<Dst>where
T: CheckedCast<Dst>,
Source§impl<Src, Dst> CheckedCastFrom<Src> for Dstwhere
Src: CheckedCast<Dst>,
impl<Src, Dst> CheckedCastFrom<Src> for Dstwhere
Src: CheckedCast<Dst>,
Source§fn checked_cast_from(src: Src) -> Option<Dst>
fn checked_cast_from(src: Src) -> Option<Dst>
Source§impl<T, C> ComponentsFrom<C> for Twhere
C: IntoComponents<T>,
impl<T, C> ComponentsFrom<C> for Twhere
C: IntoComponents<T>,
Source§fn components_from(colors: C) -> T
fn components_from(colors: C) -> T
Source§impl<T> Filterable for T
impl<T> Filterable for T
Source§fn filterable(
self,
filter_name: &'static str,
) -> RequestFilterDataProvider<T, fn(DataRequest<'_>) -> bool>
fn filterable( self, filter_name: &'static str, ) -> RequestFilterDataProvider<T, fn(DataRequest<'_>) -> bool>
Source§impl<T> FromAngle<T> for T
impl<T> FromAngle<T> for T
Source§fn from_angle(angle: T) -> T
fn from_angle(angle: T) -> T
angle.Source§impl<T, U> FromStimulus<U> for Twhere
U: IntoStimulus<T>,
impl<T, U> FromStimulus<U> for Twhere
U: IntoStimulus<T>,
Source§fn from_stimulus(other: U) -> T
fn from_stimulus(other: U) -> T
other into Self, while performing the appropriate scaling,
rounding and clamping.Source§impl<T, U> IntoAngle<U> for Twhere
U: FromAngle<T>,
impl<T, U> IntoAngle<U> for Twhere
U: FromAngle<T>,
Source§fn into_angle(self) -> U
fn into_angle(self) -> U
T.Source§impl<WpParam, T, U> IntoCam16Unclamped<WpParam, T> for Uwhere
T: Cam16FromUnclamped<WpParam, U>,
impl<WpParam, T, U> IntoCam16Unclamped<WpParam, T> for Uwhere
T: Cam16FromUnclamped<WpParam, U>,
Source§type Scalar = <T as Cam16FromUnclamped<WpParam, U>>::Scalar
type Scalar = <T as Cam16FromUnclamped<WpParam, U>>::Scalar
parameters when converting.Source§fn into_cam16_unclamped(
self,
parameters: BakedParameters<WpParam, <U as IntoCam16Unclamped<WpParam, T>>::Scalar>,
) -> T
fn into_cam16_unclamped( self, parameters: BakedParameters<WpParam, <U as IntoCam16Unclamped<WpParam, T>>::Scalar>, ) -> T
self into C, using the provided parameters.Source§impl<T, U> IntoColor<U> for Twhere
U: FromColor<T>,
impl<T, U> IntoColor<U> for Twhere
U: FromColor<T>,
Source§fn into_color(self) -> U
fn into_color(self) -> U
Source§impl<T, U> IntoColorUnclamped<U> for Twhere
U: FromColorUnclamped<T>,
impl<T, U> IntoColorUnclamped<U> for Twhere
U: FromColorUnclamped<T>,
Source§fn into_color_unclamped(self) -> U
fn into_color_unclamped(self) -> U
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§impl<T> IntoStimulus<T> for T
impl<T> IntoStimulus<T> for T
Source§fn into_stimulus(self) -> T
fn into_stimulus(self) -> T
self into T, while performing the appropriate scaling,
rounding and clamping.Source§impl<T> OverflowingAs for T
impl<T> OverflowingAs for T
Source§fn overflowing_as<Dst>(self) -> (Dst, bool)where
T: OverflowingCast<Dst>,
fn overflowing_as<Dst>(self) -> (Dst, bool)where
T: OverflowingCast<Dst>,
Source§impl<Src, Dst> OverflowingCastFrom<Src> for Dstwhere
Src: OverflowingCast<Dst>,
impl<Src, Dst> OverflowingCastFrom<Src> for Dstwhere
Src: OverflowingCast<Dst>,
Source§fn overflowing_cast_from(src: Src) -> (Dst, bool)
fn overflowing_cast_from(src: Src) -> (Dst, bool)
Source§impl<T> Pointable for T
impl<T> Pointable for T
Source§impl<T> SaturatingAs for T
impl<T> SaturatingAs for T
Source§fn saturating_as<Dst>(self) -> Dstwhere
T: SaturatingCast<Dst>,
fn saturating_as<Dst>(self) -> Dstwhere
T: SaturatingCast<Dst>,
Source§impl<Src, Dst> SaturatingCastFrom<Src> for Dstwhere
Src: SaturatingCast<Dst>,
impl<Src, Dst> SaturatingCastFrom<Src> for Dstwhere
Src: SaturatingCast<Dst>,
Source§fn saturating_cast_from(src: Src) -> Dst
fn saturating_cast_from(src: Src) -> Dst
Source§impl<T, C> TryComponentsInto<C> for Twhere
C: TryFromComponents<T>,
impl<T, C> TryComponentsInto<C> for Twhere
C: TryFromComponents<T>,
Source§type Error = <C as TryFromComponents<T>>::Error
type Error = <C as TryFromComponents<T>>::Error
try_into_colors fails to cast.Source§fn try_components_into(self) -> Result<C, <T as TryComponentsInto<C>>::Error>
fn try_components_into(self) -> Result<C, <T as TryComponentsInto<C>>::Error>
Source§impl<T, U> TryIntoColor<U> for Twhere
U: TryFromColor<T>,
impl<T, U> TryIntoColor<U> for Twhere
U: TryFromColor<T>,
Source§fn try_into_color(self) -> Result<U, OutOfBounds<U>>
fn try_into_color(self) -> Result<U, OutOfBounds<U>>
OutOfBounds error is returned which contains
the unclamped color. Read more