typst_flutter 1.1.0 copy "typst_flutter: ^1.1.0" to clipboard
typst_flutter: ^1.1.0 copied to clipboard

Embed the Typst typesetting compiler natively in Flutter via Rust FFI. Compile Typst markup to PDF or rendered images on Android, iOS.

typst_flutter #

Pub Version Pub Points style: very good analysis License

Embed the Typst typesetting compiler natively into your Flutter apps via Rust FFI.

Compile Typst markup to high-quality PDF documents or rendered images on Android, iOS, macOS, Windows, and Linux. No WASM overhead, no WebView, no server required.

Features #

  • Native performance: Typst runs directly on the device using a Rust core.
  • Zero Rust required: End-users can download pre-built native binaries via a simple Dart script.
  • Virtual File System: Pass Flutter assets and raw bytes directly into the Typst compiler via FileSource.
  • Live Preview: Included TypstView widget with debounced live-reload, perfect for building editors.

Getting started #

Add the package to your pubspec.yaml:

dependencies:
  typst_flutter: ^1.0.0

Install native binaries #

To avoid compiling the Rust core from source (which requires a full Rust toolchain), run the setup script once to download the pre-built native libraries for your current platform:

dart run typst_flutter:setup

Usage #

Rendering a PDF #

import 'package:typst_flutter/typst_flutter.dart';

final compiler = await TypstCompiler.create();

final doc = await compiler.compile(
  source: r'''
    #set page(width: 148mm, height: 210mm, margin: 1cm)
    = Hello Typst!
    
    This is rendered *natively* in Flutter.
  ''',
);

print('Generated a ${doc.pageCount}-page PDF (${doc.pdf.length} bytes).');
// You can now save doc.pdf to disk or display it with printing/pdf packages.

Displaying a live preview widget #

The TypstView widget automatically recompiles and renders when the source or assets change. For scalable vector graphics, use TypstSvgView. For multi-page scrollable documents, use TypstDocumentViewer.

import 'package:flutter/material.dart';
import 'package:typst_flutter/typst_flutter.dart';

class MyEditor extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return TypstDocumentViewer(
      source: r'''
        = Multi-page Viewer
        This document spans multiple pages.
        #pagebreak()
        And scrolling is instantly fast because the document is cached!
      ''',
      useSvg: true, // Use SVG for crisp vector text
      date: DateTime.now(), // Enable #datetime.today() support
    );
  }
}

## Testing

Because this package relies on native Rust libraries via FFI, tests must be run as integration tests against a host platform.

1. Ensure you have downloaded the native binaries for your host machine:
   ```bash
   dart run typst_flutter:setup
  1. Run the integration tests using the flutter test command:
    flutter test integration_test/simple_test.dart
    

Author #

Ajmal (ajmalbuv)

0
likes
160
points
236
downloads

Documentation

API reference

Publisher

unverified uploader

Weekly Downloads

Embed the Typst typesetting compiler natively in Flutter via Rust FFI. Compile Typst markup to PDF or rendered images on Android, iOS.

Repository (GitHub)
View/report issues

Topics

#pdf #typst #document #typesetting #ffi

License

Apache-2.0 (license)

Dependencies

archive, crypto, flutter, flutter_rust_bridge, flutter_svg, http, path, plugin_platform_interface

More

Packages that depend on typst_flutter

Packages that implement typst_flutter