Crispy Print: A New Typst Based Print Format Engine

Announcing Crispy Print for Frappe — 0.1.0-alpha.2 Release

Hi everyone,

I’m sharing an update on Crispy Print, a Typst-based print/report formatting app for Frappe.

It is currently at 0.1.0-alpha.2.

What is Crispy Print?

Crispy Print adds a modern print pipeline to Frappe using Typst for high-quality PDF output, with a Vue-based visual builder and preview workflow for both DocType formats and Query Report formats. Regardless of platform, the output is always a crisp PDF with embedded SVGs and consistent formatting.

Current Stage

This is still an alpha release.

  • Report formats are currently fragile in some cases.

  • Report template parity is still evolving and being refined from real usage.

  • Expect iterative changes as feedback comes in.

  • Still thinking through the best UX for the builder and preview flows. Simplified logic is the goal, but we also want to support the flexibility that Typst enables.

If you test it and hit issues, please share details/screenshots/sample report names. That feedback is directly driving improvements.

Key Features (alpha-2)

  • Supports crisp SVG embedding for Letteread and logos

  • Visual builder for custom print formats

  • Typst-powered PDF rendering

  • Dedicated preview flow for reports and print formats

  • Raw Typst editing for advanced users

  • Query Report support with parity-focused templates

  • Filters / summary / chart / totals toggles in report preview

  • Typst code preview and save-back workflow

  • Letterhead and page settings integration

  • Improved API typing and stricter frontend type checks

  • Expanded test coverage and test script consistency

Requirements

  • Frappe/ERPNext bench (Frappe v15)

  • Python 3.11

  • Node.js 25 (for asset build/dev)

  • Typst CLI (required)

Install Typst

macOS


brew install typst

Linux

Use the official installation instructions for your OS/architecture: Typst Installation

Install Crispy Print

From bench root:


# Recommended (stable for this release)*

bench get-app https://github.com/agatho-daemon/crispy_print --branch v0.1.0-alpha.2

bench --site <your-site> install-app crispy_print

bench --site <your-site> migrate

bench build --app crispy_print

bench restart

If you explicitly want the latest work-in-progress changes (not stable), use:


bench get-app https://github.com/agatho-daemon/crispy_print --branch develop

Optional check:


bench --site <your-site> execute crispy_print.get_typst_local_fonts

Important Note

The repository* README is not fully up to date yet for the current alpha-2 behavior and latest refinements.
We are updating docs incrementally as the feature set stabilizes.*

Screenshots

UX reflects that of Frappe Print Builder with tweaks.

Four Columns page from left to right:

  1. Form’s fields
  2. Basic mode builder
  3. Preview
  4. Typst/Page settings

Typst code support

Print Preview Page with Settings (WIP)

Typst Code Modal (“View code button”)

Looking for Feedback On

  • Report parity issues (HTML/Jinja vs Typst output differences)

  • Large-report behavior and formatting edge cases

  • Builder UX rough edges

  • Missing report-specific formatting behaviors

7 Likes

Hi @Ismail_Tabtabai

Looks Interesting. Would you like to fill out this form on community marketplace to gain wider coverage: -

1 Like

Thanks. Done.

Installation and Demo of Crispy Print.

Installation

After installing Typst. You can proceed installing Crispy Print by getting then installing for the site.

Crispy Print Live Demo

  • Access Crispy Print List from Awesom bar
  • Creating a new Crispy Print Format (One format of a DocType must be set as default)
  • Editing the format in basic (drag/drop) mode.
  • Live Crispy preview (hopefully without glitches) of format.
  • You can view/copy the generated Typst code.
  • You can manipulate the settings of:
    • Page size
    • Page Orientation
    • Page Margins
    • Section, labels and values typography related settings.
    • Tables spacing, header and footer typography.
    • Branding includes Letterhead and logo settings.
    • QRCode settings

Form Print Preview

The preview page to display/download the PDF as Crispy as seen on your screen.

Regarding the four columns in one page, the screen is divided into four fixed columns: Fields, Layout Builder, Typst Preview, and Typst Settings.

As a result:

  • The Typst Preview is too small to accurately verify font sizes and fine layout details without excessive zooming.

  • The Layout Builder becomes cluttered when managing complex sections or multiple fields.

  • Text within the Fields and Settings panels can feel cramped, leading to a diminished user experience on smaller monitors or laptops.

The Proposed Solution: Collapsible Sidebars

Implementing collapsible functionality for the outer panels (Fields and Typst Settings) would allow the workspace to become dynamic. By allowing users to toggle these panels, the central columns—the Layout Builder and Typst Preview—can expand to fill the screen.

Along with following modifications as well:

  1. Toggle Controls: Add “collapse/expand” icons at the top of the Fields and Settings columns to allow users to hide them when not actively in use.

  2. Focus Mode: Allow the Typst Preview to expand to a full-width or half-width view, ensuring that the final output can be inspected at 100% scale.

  3. Responsive Persistence: The system should remember the user’s last panel state (collapsed or expanded) to maintain a consistent workflow across sessions.

  4. Flexible Widths: Consider allowing users to manually drag the borders of the columns to resize them according to their immediate priority (e.g., widening the code/builder view while narrowing the fields list).

4 Likes

Thanks for your feedback.

Your observations and suggestions are all valid and appreciated.

I totally agree with the remarks you’ve made. I am still in the process of contemplating a solution that would stick. I do face the problems you’ve mentioned when I check the app on a small screen laptop.

Typst Preview is indeed in need of refinment, in as far as zooming and panning. But the solution I have in mind is much more ambitious than those two features, specially when Typst code is used.

I think I do have to resort to having both ends collapsed by default. Since they are refinement related that the user would touch in the final stage of accepting the format.

Thanks for trying the application out. Hope you find it useful in your work flow.

Any other suggestions, specially to simplify use interaction logic are welcome.

Some of your ideas will be coming up in the next update.

1 Like

Latest PR. Implemented UI refinments.

4 Likes

First, I would like to express my sincere thanks and appreciation for your hard work and the impressive effort you’ve put into this project; it’s a much-needed addition to the ecosystem.

In addition to the UI improvements discussed earlier, I have a few recommendations to further enhance the scalability and efficiency of Crispy Print:

1. Global “Crispy Style” Settings & Templates

The Problem: Currently, styling configurations (Typography, Branding, Table Settings) often need to be defined individually for each DocType. This leads to repetitive work and potential inconsistencies across different print formats.

The Solution: Implement a centralized settings feature similar to Frappe’s standard Print Settings or Print Style. This would allow users to:

  • Create Reusable Style Profiles: Define global typography, color palettes, and margins that can be applied to any layout with one click.

  • Header/Footer Templates: Manage standardized headers and footers in one place, ensuring changes are reflected across all associated print formats (e.g., updating a logo once for all documents).

2. Shared Custom Typst Components (Cross-DocType Logic)

The Problem: Users often need the same custom logic or “Custom Typst” blocks across related documents, such as Sales Orders, Purchase Orders, Invoices, and Receipts. Manually copying and pasting code between these formats is time-consuming and difficult to maintain.

The Solution: Introduce a Shared Library for Custom Typst.

  • Example: If you create a complex “Terms and Conditions” block or a specialized “Tax Breakdown” using custom Typst code, you should be able to save it as a Shared Component.

  • Benefit: You could then simply reference this component across all sales and purchase-related DocTypes. If the logic needs to change, you update it in the shared library once, and it automatically updates across all invoices, orders, and receipts.

3. Collapsible Workspace Panels

The Problem: The current four-column layout restricts horizontal space, making the Typst Preview and Layout Builderfeel cramped on standard screens.

The Solution: Add toggle controls to collapse the Fields and Typst Settings panels. This allows the central workspace to expand, providing a high-clarity environment for complex layout tasks and full-scale previews.

These enhancements would transform Crispy Print from a layout tool into a powerful, scalable design system for ERPNext. Thank you again for the great work!

Hello Abdullah.

I do see where you’re heading with these feature suggestions. They are not as simple to implement as stated. The mere logic once I get into the details are twisting my mind. I like to make things simple, intuitive and user friendly.

That being said, I share with you the same ideas listed below. It is just not the time to implement them yet since their logic is not finalized.

Notice, if you have dug into crispy-format page, you’d notice a list under the Type field (crispy_format_type). Other that DocType, there is Report and Contract doctypes. I have made it into a Select field so that in the future it can be expanded. While Report type is being worked on, Contract type is not touched still. Just keep in mind that the plan is more ambitious than what is being displayed on the surface and presented in the introductory post.

As far as your requests:

That is planned, but as Crispy Branding Profile rather than Settings and Templates. The idea is to take into account the presence of several companies and each has a profile as a corporate identity. Why this approach? Because then the designers might get involved and the profile could be exported/imported. Possibly a new rich market for Frappe/ERPNext.

As far as templating similar DocTypes goes, this is out of my scope of knowledge. I have to have a list of similar doctypes. If you try the Report type you would notice that something similar was done since Financial Reports are drawn from one set of variables. I can’t do that for other DocTypes without the required knowdge from an Accountant/Bookkeeper. Way over my head.

Regarding Header/Footer templates, that also is a DocType related kind of format. Notice that the example you’ve mentioned would already be used in Crispy Branding Profile. Logo and Letterhead are both SVG based and have a crisp output that have header and footer parts. When you say Header and Footer elements, I would have to think of something else. For example Terms & Conditions that could be printed on the back of an Invoice would be an element that fits even if it is not a header/footer. Mention some examples please for header/footer that do not fit into Letterhead and Logo category.

As I have mentioned above, Terms & Conditions is an element that could be reused. I have to comtemplate the logic for fitting that in.Will work on it.

That is already done. Update and you should see a Frappe style collapse button for both Fields and Settings columns along with a resize handle between the Builder and Preview columns. Also added three preset for sizing the preview column and zoom settings for the preview with the readout being editable for precise zoom level setting. Panning the preview is also possible now.

2 Likes

Crispy Print development update

The development branch has received a major alpha update. Feature work is now frozen unless a necessary release-blocking item was missed.. This is not tagged as an alpha 3 GitHub release yet; please pull the default develop branch if you want to test the latest work.

:warning:
Please back up existing formats before pulling. This update changes format/presentation data structures and may require opening existing formats in the builder and verifying layout, branding, tables, QR settings, and raw Typst snippets.

New features and architecture

  • Added Crispy Branding Profile (CBP)
    A reusable branding and presentation layer for page size, margins, typography, tables, logo, letterhead, QR placement, and company-wide document styling.

  • Added Crispy Branding Profile Builder
    A dedicated builder for configuring and previewing branding profiles, including visual controls and generated Typst preview output.

  • Added Crispy Typst Block (CTB)
    A reusable Typst-native component layer for document fragments such as field renderers, table blocks, address blocks, QR/regulatory blocks, headers, footers, signatures, payment sections, and custom document sections.

  • Added Crispy Typst Block Applicable Document
    Allows Typst blocks to be scoped to specific document types so they can be reused safely inside builder layouts.

  • Added new report-format infrastructure
    Reports now have linked report rows, generic/custom report format support, and Basic/Advanced editing modes. Reports are still WIP and need testing.

  • Added lazy loading for heavy builder/preview assets
    Crispy Print now avoids loading the large builder and preview bundles globally on every Desk page.

  • Added Typst compile caching and report preview optimization
    Repeated preview generation should be faster when inputs have not changed.

QR, regulatory, and document-code foundation

  • Added Crispy QR Regulatory Profile
    Foundation for defining country/authority-specific QR behavior, payload format, encoding, signature/hash expectations, and online verification requirements.

  • Added Crispy Fiscal Credential
    Stores company/environment-specific fiscal identity data used by future regulatory QR and document-code workflows.

  • Added Crispy Document Code Profile
    Defines how document codes or verification payloads should be generated for a company, environment, purpose, and document context.

  • Added Crispy Document Code Rule
    Provides rule-level matching for document types, roles, and conditions.

  • Added document-code APIs
    These can resolve and generate encoded document values for future QR/regulatory usage.

Crispy Issued Document foundation

  • Added Crispy Issued Document (CID)
    A foundation DocType for future immutable issued-document records. The goal is to distinguish a live ERP document from a frozen issued business artifact.

  • Added Crispy Issued Document Artifact
    Child table for future archival PDFs, PDF/A files, rendered SVG, XML/JSON payloads, signatures, certificates, authority receipts, and related generated artifacts.

  • Added Crispy Issued Document Trust Event
    Placeholder child table for future signature, certificate, timestamp, revocation-check, validation, and trust-chain events.

  • Added Crispy Issued Document Regulatory Submission
    Placeholder child table for future authority submission, sandbox validation, response payloads, authority references, and submission statuses.

  • Added issued-document API scaffolding
    Basic APIs exist for reading CID records, resolving verification tokens, returning minimal verification summaries, and reserving the future snapshot-creation API shape.

Important status notes

  • QR/regulatory features are foundation scaffolding, not finalized compliance workflows.
  • CID, trust-event, regulatory-submission, fiscal credential, and document-code structures are still placeholders until feedback is collected from users in regulated regions.
  • My country does not currently have tax-related QR document regulations, so I cannot fully validate real-world regional requirements myself.
  • If your country requires invoice QR, tax QR, clearance, reporting, fiscal signatures, XML payloads, or authority submission workflows, your feedback is especially important.

Testing requested

Please test:

  • DocType print preview and PDF generation with real ERPNext documents.
  • Crispy Branding Profile Builder, including logo, letterhead, typography, page margins, table styling, and QR placement.
  • Crispy Typst Blocks inside builder layouts.
  • Format save/reload/export/import workflows.
  • Report preview and report PDF generation, but treat reports as WIP.
  • QR and document-code setup where applicable in your region.
  • CID-related doctypes from a data-model/admin perspective, especially whether the placeholder structure makes sense for your region.

For QR/regulatory feedback, please report:

  • Required QR fields in your country/region.
  • Required data types and source ERPNext documents/fields.
  • Required payload format: TLV, JSON, XML, URL, plain text, etc.
  • Encoding rules: Base64, URL encoded, signed payloads, hashes, etc.
  • Whether authority submission is required.
  • Whether sandbox/production environments are required.
  • Example payload structure if publicly documented.
  • Any validation or clearance response structure used by the authority.

Development contributions wanted

Help is welcome in:

  • QR regulatory profile design for specific countries.
  • Fiscal credential field requirements.
  • Document code payload mapping.
  • CID issuance architecture.
  • Verification-token and public verification flows.
  • PDF/A, digital signature, timestamping, and certificate-chain research.
  • Authority submission workflows.
  • Tests for regional QR/document-code rules.
  • Documentation and setup guides for regulated regions.

How to test

This update is currently on the default develop branch. There is no GitHub alpha 3 tag yet.

bench migrate applies the new DocTypes/schema changes and runs the update patches. Fresh install hooks are not re-run during update, so update-safe setup is handled through patches.

cd ~/frappe-bench/apps/crispy_print
git pull

cd ~/frappe-bench
bench --site your-site migrate
bench build --app crispy_print
bench --site your-site clear-cache
bench clear-website-cache
bench restart
1 Like

Just Added Crispy Print workspace so it would expose Pages and DocTypes clearly,
and renamed preview route.

The renaming was necessary so workspace Crispy Print wouldn’t be in conflict with the old name of the preview page.

Also added a logo that will be used as the icon for the workspace entry.

2 Likes

I have posted a poll regarding the direction of Crispy Print. If you like the idea of the app, your participation will make a difference:

Crispy Print v0.2.0-beta.1 is out

Crispy Print is now entering beta with support for Frappe v15, v16, and current dev-17.

Crispy Print is a Typst-powered document publishing engine for Frappe/ERPNext. It moves business documents away from fragile browser-print HTML pipelines and toward deterministic, structured, publication-grade PDF generation.

This release is not just another print-format builder. It is an architectural evolution in how ERP documents can be designed, approved, rendered, and verified.

What makes Crispy Print different?

  • Typst-native PDF generation
    Documents are rendered through Typst instead of browser print engines or wkhtmltopdf, giving better control over pagination, typography, layout, and PDF output.

  • Visual document builder
    Build invoice, quotation, order, receipt, and voucher layouts with sections, columns, fields, child tables, branding, QR codes, and reusable Typst blocks.

  • Template-driven publishing
    Runtime previews and PDFs use approved active Crispy Template snapshots, creating a clearer separation between draft design work and approved document output.

  • Company-scoped rendering
    Formats, templates, branding profiles, and Typst blocks can resolve by company, making multi-company deployments more predictable.

  • Reusable branding profiles
    Centralize page setup, typography, table styling, letterhead, logo, QR placement, and document presentation rules.

  • Reusable Typst blocks
    Govern shared document fragments such as headers, titles, signatures, legal notes, or reusable layout sections.

  • PDF standards support
    Supports PDF/A-oriented output options for more serious archival and compliance-oriented document workflows.

  • Runtime diagnostics
    Preview diagnostics expose the resolved format/template, company, branding profile, Typst version, render timing, page count, cache state, and raw Typst mode.

  • Regulatory QR and document-code foundation
    Crispy Print includes the groundwork for structured QR, document-code, fiscal credential, and verification workflows.

  • Issued document foundation
    The app includes early infrastructure for immutable issued-document records, artifact tracking, verification tokens, trust events, and regulatory submission metadata.

The Evolution

Crispy Print is best described as an evolution in business print systems.

Traditional ERP printing treats documents as web pages that happen to be printed. Crispy Print treats them as structured business documents with explicit layout, approved templates, deterministic rendering, reusable branding, and future verification workflows.

For Frappe/ERPNext, that is a meaningful shift.

Compatibility

  • Frappe v15
  • Frappe v16
  • Current dev-17, tested as of 2026-07-01
  • Typst CLI 0.15.0 or newer

Beta status

This is a beta release. Core document-format workflows are ready for broader testing, while report support is still being stabilized and contract workflows remain foundation-level.

Please test real documents, company-specific templates, branding profiles, Typst blocks, report previews, QR/document-code workflows, and migration from older alpha formats.

Release: v0.2.0-beta.1

3 Likes

Crispy Print v0.2.0 RC1 is ready for testing

RC1 is intended for broad community testing before the stable v1 release.

Important: fresh installations only

RC1 better be installed on a fresh site where an earlier Crispy Print alpha or beta has not been installed.

There is currently no supported migration path from earlier prereleases.

What users should test

Please test Crispy Print using real—but non-sensitive—business documents and report any rendering errors, confusing behavior, missing translations, or compatibility problems.

Useful areas include:

  • Creating, editing, saving, and reopening Crispy Formats
  • Dragging fields and configuring item-table columns
  • Compact table presets
  • PDF preview and final PDF generation
  • Multipage invoices and reports
  • Branding Profiles, logos, letterheads, fonts, margins, and QR placement
  • Format export, import dry-run, and publication
  • Frozen Crispy Templates
  • Custom Document QR field selection and payload order
  • Regulatory Document Code profiles
  • Arabic and Persian RTL interfaces and documents
  • Mixed RTL and Latin content
  • Negative amounts, currencies, dates, identifiers, email addresses, URLs, QR codes, and barcodes
  • Frappe v15, v16, and current develop compatibility

Native-language review requested

Automated tests can verify direction, shaping, alignment, overflow, and PDF generation, but they cannot determine whether a translation sounds natural or uses the correct professional terminology.

We especially welcome native review of all included languages. Arabic has already received an initial native review; other catalogs still need broader native validation.

For RTL languages, please also test:

  • Interface mirroring and logical reading order
  • Drag handles, menus, drawers, dialogs, badges, icons, and keyboard navigation
  • Arabic or Persian text mixed with English names and identifiers
  • Leading negative signs, such as -700.000
  • Currency and percentage values
  • Logical table-column ordering
  • Headers, footers, totals, page numbers, logos, QR codes, and barcodes
  • Long and multipage documents
  • Font appearance and missing-glyph substitution

Please include screenshots.

Country and regulatory review requested

Crispy Print provides infrastructure for regulatory document codes and QR payloads, but RC1 does not claim legal or tax certification in any jurisdiction.

Local accountants, tax professionals, implementers, and compliance specialists are needed to test it against the requirements of their countries.

Review matrix:

  • Mandatory invoice and credit/debit-note fields
  • Seller and buyer legal names and addresses
  • Tax-registration and commercial-registration identifiers
  • Invoice numbering and sequencing rules
  • Issue date, supply date, due date, and time requirements
  • Currency and exchange-rate presentation
  • Tax categories, rates, exemptions, and exemption wording
  • Line-level and document-level discounts and charges
  • Tax-exclusive and tax-inclusive totals
  • Rounding and payable-amount rules
  • Credit/debit-note references and reason requirements
  • Required language or bilingual presentation
  • Mandatory headings, declarations, or legal wording
  • QR or barcode symbology
  • Required QR fields and their exact order
  • QR encoding, character set, byte format, signatures, hashes, or TLV structures
  • Authority environment rules, such as sandbox versus production
  • Electronic submission or clearance requirements
  • Required XML, JSON, or other structured data in addition to the PDF
  • Digital signatures, certificates, and timestamps
  • Archival period and PDF-standard requirements
  • Consumer, B2B, B2G, export, simplified, and tax-invoice differences
  • Whether printed and electronic copies have different requirements

Test both the browser preview and downloaded PDF. Scan any generated QR code and compare the decoded payload with the source document.

The bundled regulatory registry is an implementation catalog, not a legal certification. Every jurisdiction requires independent professional approval before production use.

Reporting a problem

When opening an issue, please include enough applicable information to make a better diagnostics, e.g.:

  • Crispy Print version: v0.2.0-rc.1
  • Frappe and ERPNext versions
  • Operating system
  • Browser version
  • Typst version
  • UI language and document language
  • Country and regulatory authority, if applicable
  • Reproduction steps
  • Expected and actual results
  • Screenshots or sanitized documents
  • Browser console errors or server traceback

Thank you to everyone willing to test, review translations, and help validate country-specific document requirements.

Your feedback will determine what must be corrected before the stable v1 release.

1 Like