Skip to content

Freshcoat v0.4.0 — CLI, vector PDFs, and live booleans

Choose a tag to compare

@nedpals nedpals released this 11 Oct 01:38
· 84 commits to master since this release
dfe11dc

Freshcoat v0.4.0

Freshcoat 0.4.0 adds a command line for rendering templates and exporting workspaces, vector PDF output, and live boolean operations. It also brings a unified renderer API, more drawing and text features, and improvements to Studio's data editing and export workflow. This release includes changes since v0.3.0.

Highlights

  • The freshcoat CLI: render a template, render once per spreadsheet row, or run a workspace export preset to images, ZIPs, or PDFs. Validate and inspect templates and workspaces, pack portable templates, and use JS/TS modules to generate templates. Exports support worker threads, dry runs, a font cache, and record statuses for retrying failures. (#176, #180–#186, #198)
  • Vector PDFs: keep supported shapes, strokes, gradients, and text as vectors, with embedded TrueType/OpenType fonts and selectable text. Effects that need raster output use the existing CanvasKit painter and report a warning. Font subsetting and sharing across pages reduce file size; non-ASCII text extraction is fixed. (#179, #195, #199)
  • Live booleans: union, subtract, intersect, and exclude retain editable operands, including nested booleans. Results follow edits, visibility, variants, and resizing. Figma imports preserve supported boolean operations, including rectangles with uniformly rounded, smoothed corners; unsupported combinations flatten with a diagnostic. (#190, #194, #196, #200, #204)
  • More drawing and typography: procedural pattern fills, backdrop blur, text along circles and arbitrary paths, gradient and trimmed strokes, rounded vector corners, SVG filters, and improved radial gradients and text decorations. (#117–#119, #129–#139)
  • More reliable rendering: corrected blend/effect composition, group isolation and mask coverage, software fallback when WebGL creation fails, missing-character preflight, and lower memory use and repeated work in text, SVG, painting, and large exports. (#103–#116, #125, #128, #188, #192, #193, #197)

Freshcoat Studio and Figma

  • Spreadsheet-style data editing adds block copy/paste, fill down, bulk values, find/replace, and column filters. Dataset view state survives section changes. (#150)
  • Sized variants, selection by photo shape, and per-record photo framing make templates adapt to different images. Variant dropdowns and fallback choices simplify dataset bindings. (#140, #160)
  • Image placeholders and image-field bindings, field pickers and autocomplete, improved pen and vector-point editing, canvas context menus, and safer undo, deletes, and drops improve design work. (#143, #146, #151, #157, #187)
  • Recent-workspace thumbnails, clearer import issues, revised export settings, export-job visibility and recovery, and printer-profile measurement from a photo improve the workflow from import to print. (#141, #142, #145, #147–#149)
  • Figma boolean colorways now track operand changes, and Studio's variant hit-testing, operand snapping, and saved boolean caches are corrected. (#200)

SDK migration

This minor release includes public API changes:

  • Use createRenderer({ ck, fonts, load, ... }) to own rendering resources, and choose encoded bytes, pixels, or canvas output per render. Load CanvasKit through @freshcoat-js/engine/node or @freshcoat-js/engine/browser.
  • Replace coatfile's render(template, values, options, runtime) with renderTemplate(renderer, template, values, options). renderCompiled also takes the renderer first.
  • The engine's headless and runtime subpaths and coatfile's headless and browser subpaths are removed, along with the old environment/runtime assembly APIs.
  • Barcode encoding is part of compile(). Remove encoder registration; use encodeBarcode from @freshcoat-js/coatfile when encoding directly. The old coatfile/barcode subpath and encoder registry are removed. Template frames now expose FrameWarning[], combining paint, compile, and print warnings.

See the 0.4 migration guide for replacements and before/after examples.

The coatfile format advances to 1.6, independently of package versions. Existing templates remain readable; older applications can drop new fields when re-saving newer files. Workspace archives using variant fallback are written as format 1.1. Apple Numbers (.numbers) import is no longer supported; CSV/TSV, Excel, and OpenDocument spreadsheet import remain available.

Packages and downloads

The engine, for-print, coatfile, workspace, CLI, and Figma plugin share version 0.4.0. Workspace and CLI join the npm release set in this release.

npm install -g @freshcoat-js/cli@0.4.0
freshcoat render card.coat --set displayName=Alex --out out
freshcoat render club.coatworkspace --preset "All cards" --out cards.zip

For SDK usage, install the packages your application needs:

npm install @freshcoat-js/engine@0.4.0 @freshcoat-js/for-print@0.4.0 @freshcoat-js/coatfile@0.4.0 @freshcoat-js/workspace@0.4.0

Downloads include five npm package tarballs and freshcoat-figma-plugin-0.4.0.zip. To install the Figma development bundle, extract the ZIP and import its manifest.json in Figma desktop.

Full changelog: v0.3.0...v0.4.0