Skip to content

Releases: dotside-studios/freshcoat

Freshcoat v0.5.0 — print tools, richer PDFs, and safer rendering

Choose a tag to compare

@nedpals nedpals released this 22 Oct 10:56
439ada0

Freshcoat v0.5.0

Freshcoat 0.5.0 adds tools for print and cut work, more faithful vector PDFs, grain and halftone effects, and styled QR codes. It also improves autosave recovery and makes rendering untrusted templates and importing spreadsheets safer. This release includes changes since v0.4.0.

Highlights

  • Pieces and cut files: mark regions of a design as slices, export them as separate pieces with bleed, and generate SVG or DXF cut files. PDF cut lines use named spot colours such as CutContour, with names you can change for your printer or cutter. Shapes can also carry spot inks for white, foil, or varnish, with optional overprint. (#218, #233, #285)
  • Sheet printing: repeat a design a set number of times or fill the sheet, align duplex backs with an offset, and allow blank backs. Add registration marks, a colour bar, and a slug alongside crop marks. A5 and A6 paper and more print document presets are included. (#222–#224, #232, #240)
  • Better PDF and colour output: more gradients, strokes, curved text, and variable fonts stay as vectors. WOFF and WOFF2 fonts can be read, text can be converted to outlines, and font embedding permissions are respected. PDFs declare sRGB as their default output intent or accept your ICC profile; JPEG ICC profiles are preserved and PNG output is tagged as sRGB. (#207, #210, #211, #215, #231, #254)
  • Print checks: catch images below a minimum effective DPI, small text, hairline strokes, rich-black text, and artwork short of the bleed. Export reports identify rasterized layers and warn when a spot ink loses its separation. Print targets and profiles can be fitted from printed charts, with warnings for mismatched targets. (#214, #216, #226, #227, #241, #244)
  • Drawing and QR styling: add grain and halftone, manage shadows and blurs in one effects list, use different stroke widths on each side of a rectangle or frame, and smooth corners with different radii. Text strokes and an option to preserve PNG transparency are included. QR codes gain module and finder styles, gradients, quiet zones, and a centre logo, with readability checks. (#205, #206, #219, #220, #225, #229, #234, #235)

Studio, datasets, and CLI

  • Studio gains a Print tab, display units in px/mm/in/pt, clearer Data and Export panels, and an Activity indicator. Bleed is visible on the canvas and sheet preview. (#208, #217, #228, #236)
  • Dataset bindings can filter records and join columns from another dataset. Saved views work with both Studio exports and the CLI. (#209)
  • Autosave failures stay visible with a Retry action. Unreadable or newer autosaves are preserved, and discarding a failed autosave keeps readable work saved by another tab. (#253, #272, #281, #287)
  • The CLI adds sheet orientation, photo-sized output, copies, printer's marks, outlined PDF text, output intents, and print-target options. It reads template ZIPs and reports warning codes. Cancelling an export preserves an existing output file, and large data or PDF jobs give warnings before continuing. (#232, #243–#245, #256, #271, #277, #282)
  • Figma conversion preserves per-side strokes, effects, styled QR codes, and layers revealed by a variant. Monotone noise maps to grain, and dropped duplicate blurs are reported. (#221, #225, #229, #235, #237, #248)

Upgrading from 0.4

This minor release includes breaking API and behaviour changes. Read the 0.5 migration guide before upgrading.

  • Coatfile throws a typed CoatError; match its code instead of parsing messages. saveTemplate() is now async for JSON as well as .coat output.
  • Engine and coatfile exports are narrower. Import engine APIs from @freshcoat-js/engine, and replace removed coatfile subpaths with imports from its root. The migration guide lists moved and removed symbols.
  • Default SDK loaders restrict URL schemes and redirects. Font fallback is configurable: replace guessGoogle: false with fallback: null. See safer defaults when rendering untrusted input.
  • Images, compressed fonts, and spreadsheet imports have new size limits. Unsafe field patterns are rejected, field lookups use own properties only, and format versions must be MAJOR or MAJOR.MINOR.
  • CSV/TSV export escapes formula-triggering text and image cells, and import reverses that escaping. PDF metadata, output intents, and font handling change generated bytes; update byte-based snapshots where needed.

The packages support Node 22 or later and Bun 1.3.13 or later. The coatfile format advances to 1.7, independently of the package version. Existing templates remain readable; older applications can drop new fields when re-saving newer files.

Packages and downloads

The engine, for-print, coatfile, workspace, CLI, and Figma plugin share version 0.5.0.

npm install -g @freshcoat-js/cli@0.5.0

For SDK usage, install the packages your application needs at 0.5.0. Downloads include five npm package tarballs and freshcoat-figma-plugin-0.5.0.zip. To install the Figma development bundle, extract the ZIP and import its manifest.json in Figma desktop.

Full changelog: v0.4.0...v0.5.0

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

Choose a tag to compare

@nedpals nedpals released this 11 Oct 01:38
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

Freshcoat v0.3.0 — faster editing, exports, and print planning

Choose a tag to compare

@nedpals nedpals released this 07 Oct 11:37

Freshcoat v0.3.0

Freshcoat 0.3.0 improves large-workspace editing, batch export, rendering, and Figma conversion. It also updates the public print-planning API. This release includes changes since v0.2.0.

Highlights

  • Faster editing and exports: virtualized records, gallery, export lists, and image picker; lower canvas and inspector overhead; less work per batch record; and large-table imports off the main thread.
  • Faster and more bounded rendering: shared paint and font caches, smaller effect surfaces, reusable LUTs, and a CPU print finish for raster surfaces.
  • More reliable workspaces and autosave: large workspaces open from file slices, imported records receive unique IDs, photo data survives file and cross-tab changes, and PDF assembly runs in a worker with progress reporting.
  • Better Figma conversion: image ellipses and polygons, corner radii, text truncation and small caps, strokes, and variant validation. Several stroke, layout, and export fidelity issues are fixed.
  • Print color balance is applied once to the composited frame, so blends and content outside individual layers receive the same measured correction.

SDK migration

This is a minor release with public API changes in @freshcoat-js/for-print:

  • Import chart, measurement, fitting, createPrintProfile, and profileFromPhoto from @freshcoat-js/for-print/calibration instead of the package root.
  • parsePrintProfile now returns { ok: true, profile } or { ok: false, message } instead of a profile or Error.
  • Call analyzeScene(sample, root, { policy, onAnalysis, cache, srcKey }) with one options object. planForPrint(root, options) now returns the planned scene and its whole-frame finish together.
  • PlanPolicy.balance, PrintOptimizeOptions.balance, and withProfile() were removed. Pass the measured balance to planForPrint or printFinish so it reaches the frame finish.

See the for-print README for examples. The coatfile format remains 1.5; package versions are independent of the file format.

Packages and Figma

The engine, for-print, coatfile, and Figma plugin share version 0.3.0. The release workflow publishes the three npm packages and attaches their tested tarballs and freshcoat-figma-plugin-0.3.0.zip.

Full changelog: v0.2.0...v0.3.0

Freshcoat v0.2.0 — SVG, layouts, typography, and Figma improvements

Choose a tag to compare

@nedpals nedpals released this 29 Sep 03:16

Freshcoat v0.2.0

Freshcoat 0.2.0 expands SVG support, template layout, typography, and native Figma conversion. This minor release follows 0.1.0 and includes the changes in #1–#17.

SDK and template changes

  • Import SVG as editable layers or render it as vector artwork, with support for images, text, markers, patterns, gradients, clips, and masks.
  • Add grid layouts, element adjustments, image focus points, and crop regions. Print corrections now compose with existing layer adjustments.
  • Add bleed and safe areas, text direction, justification, paragraph spacing, font features, stroke alignment, per-corner radii, and linear burn blending.
  • Add ITF-14 bearer bars and improve gradient validation, resized vector paths, and automatic template format version updates.
  • Cache shaped text across paints for faster editing.

Freshcoat for Figma and Studio

  • Preserve more Figma artwork natively: gradients, blend modes, text styling, grid layouts, image filters and crop, and print guides.
  • Studio gains rulers, guides, a pen tool, boolean operations, locale-aware number and date formatting, and a send-back flow for templates opened by another page.
  • Workspace archives support ZIP64 when needed.
  • Fix ruler module resolution on macOS.

Packages and downloads

The engine, for-print, coatfile, and Figma plugin share version 0.2.0. The coatfile format version remains 1.5, independently of the package version.

npm install @freshcoat-js/engine@0.2.0 @freshcoat-js/for-print@0.2.0 @freshcoat-js/coatfile@0.2.0

The release workflow publishes the three npm packages and attaches their tested tarballs and freshcoat-figma-plugin-0.2.0.zip. To install the Figma development bundle, extract the ZIP and import its manifest.json in Figma desktop. Studio is deployed separately.

Full changelog: v0.1.0...v0.2.0

Freshcoat v0.1.0 — First open-source release

Choose a tag to compare

@nedpals nedpals released this 27 Sep 10:31

Freshcoat v0.2.0

Freshcoat’s first open-source release: a rendering engine, a portable template format, a browser editor, and a Figma plugin for reusable, data-driven designs.

Included

  • @freshcoat-js/engine: the core rendering engine.
  • @freshcoat-js/coatfile: .coat template files, validation, compilation, and rendering helpers.
  • @freshcoat-js/for-print: print analysis and correction planning.
  • Freshcoat Studio: a browser-based editor for filling templates and exporting batches.
  • Freshcoat for Figma: export designs as .coat templates with text, image, color, QR code, barcode, and conditional fields.

Early-release notes

Freshcoat is early software. APIs and template behavior may evolve, and feedback, bug reports, and contributions are welcome.

Some unsupported Figma features are rasterized during conversion. Review export diagnostics and preview templates in Studio before batch production.

The Figma plugin has been submitted to Community and is awaiting review. Release bundles can be installed as development plugins in the meantime.

Getting started

See the repository README for the project overview and installation instructions, apps/figma-plugin/README.md for the Figma workflow, and docs/releases.md for release and package details.

The release workflow will attach tested npm tarballs and the Figma plugin ZIP after validation succeeds. The scoped npm packages are already available at version 0.1.0.

Licensed under Apache-2.0.