Repository navigation
Releases
FireCraft v0.2.5
FireCraft v0.2.5 (2026-11-03)
Phase 19 daily-driver batch continued: path-node add/delete, the
canvas geometry dialogs, and object duplication.
Path competence (Phase 19b.1)
- Double-click on a path segment inserts an anchor at the click point
(splitting the segment viavector::insert_point) - Double-click on an existing anchor deletes it
(vector::delete_point), with the two-endpoint guard preserved - Both fold into a single "Reshape" undo step; covered by new
crates/vector/src/tests.rsround-trip batteries
Shell reachability (Phase 19.6, batch 2)
- Modify ▸ Canvas ▸ Canvas Size… — absolute canvas resize with the
CS6 nine-anchor grid - Modify ▸ Canvas ▸ Canvas Color… — document matte color
- Edit ▸ Duplicate (Ctrl+Alt+D) and Edit ▸ Clone (Ctrl+Shift+C),
both bound toobject.duplicate— the copy lands on top, a
following drag separates it (CS6 behavior)
The inert census drops 144 → 129 of 289 menu items; the
inert_count_never_rises ceiling gate is re-pinned at 129, and the
figure is now printed by reachability_census (--nocapture) so the
docs quote a derived number.
Community / policy
.github/added: Code of Conduct, Contributing guide, Security
policy, PR template, issue templates (bug / feature)
Release-path defect fix (WebOS appinfo stamping)
- Defect: the v0.2.3→v0.2.4 window shipped a WebOS
appinfo.jsonpinned to 0.2.3 — the template hardcoded a
literal version, so the dist stampingreplacewas silently a
no-op. - Fix:
packaging/webos/appinfo.jsonnow carries an
@VERSION@placeholder, andxtask dist --webgates on it: a
template with no placeholder fails the build, and any file still
carrying@VERSION@after stamping fails too (host.htmlis
version-free by design and exempt). Verified: the staged bundle's
appinfo reads 0.2.5.
Verification
- Full gate: all green (
cargo run -p xtask -- ci— aegis,
coverage, fmt, clippy, tests, layers, wasm, corpus, svg-roundtrip,
web-golden, perf, fuzz, parity, scorecard, changelog) xtask changelogverifies one workspace version across all stamps- Dist verification:
xtask dist --webgreen with the new appinfo
stamp gate; staged appinfo.json reads 0.2.5; web smoke passed
Artifacts
See the release assets; hashes are pinned in the attached
MANIFEST.sha256. Web bundle deployed to
https://firecraft-web.pages.dev.
GitHub release: https://github.com/aliasfoxkde/FireCraft/releases/tag/v0.2.5
FireCraft v0.2.3
FireCraft 0.2.3
Phase 11.4 pixel-selection tools + paint/IO batch.
Pixel selection (Phase 11.4)
- Marquee, ellipse, lasso, polygonal-lasso, and magic-wand tools with marching-ants overlay
- Select all / deselect / inverse / feather
- Expand, contract, border, smooth (
bitmap.adjustPixelSel) - Selection-mask move (
bitmap.moveSelectionMaskBy); fuzz driver covers the new verbs
Paint / IO
- Brush and eraser hardening
- fwpng tile-decode fixes
- Lossy WebP export via libwebp-sys (feature-gated), CLI plumbing
Verification
- GitForge CI: 7/7 jobs green on
00d2bf8(fmt-layers, clippy-test, wasm-web, corpus-golden, perf-budgets, fuzz, generated-docs) - wasm bundle 13.0 MB (ceiling 14 MB); bridge smoke green
Artifacts
| File | SHA-256 |
|---|---|
| firecraft-0.2.3-linux-x86_64.tar.gz | bae4c16bc73c6deba85f48b211fd7e3843409742ec6cfca6185dc340ed9fb337 |
| firecraft-cli-0.2.3-linux-x86_64.tar.gz | 560e03d1c157a806e5fb40499f5f9524ed088d4cef27f99e8c45cff3d98a3f11 |
| firecraft_0.2.3_amd64.deb | 122cf75cd477bd40390c80bd7948bafc7d2d2024ead66aeaeb7537f8fd3b1264 |
| firecraft-web-0.2.3.zip | 9bc558e3929b90b691177b278f3ed549ef9402b4d562d63395706da3e7409bcb |
🤖 Generated with Claude Code
FireCraft 0.2.2
FireCraft v0.2.2 — release notes (2026-10-19)
What changed
CLI export error message now correctly lists all 9 supported formats
(png, jpg, bmp, tiff, wbmp, webp, svg, psd, gif). WebOS packaging
dry-run: appinfo.json and host.html are now staged in dist/web
during build. Decision docs added: AVIF decode policy (pure-Rust wasm-safe
decoder), HEIC refusal (patent pools, OS-decoder-only), and smoke
budget (60s virtual time covers app logic, not wasm fetch/compile).
54 unit tests added for the scripting marshal helpers and text lib
helpers.
Features
- io: lossless WebP export (05e91b3)
- path: pattern fill authoring (5a17fd9)
- bitmap: bilinear importFile resample (84b45fc)
- compose: resolve shared-layer links (052ff13)
- bake: rasterize non-image selections (deb4abc)
- mask: pasteAsMask add unions masks (6df4903)
- mask: rasterize vector clipboards as image masks (420fd66)
- object: deep-clone groups on duplicate (8b06184)
- fwpng: tile-bank load and write path (2a6abf6)
- bitmap: importFile placement verb (fd828c0)
- symbol: duplicateSymbolForAlias verb (074890b)
- text: custom anti-alias dial setters (cdeeea5)
- text: multi-run model and markup verbs (55de409)
- text: paragraph attribute setter trio (ab9e1fb)
- bitmap: pixel-mask move and adjust commands (d4f6b3d)
- text: on-path mode/offset/reverse commands (a0304d4)
- engine: loose-ends setter commands (d482b5d)
- document: canvas trim + delete-all commands (51a3c3e)
- text: text rectangle fit commands (8f2919d)
- symbol: anim instance parameter commands (d98764b)
- web: hotspot/group/web-layer setter commands (12b5e40)
- filters: convolve + motionBlur bake commands (8eae611)
- document: setImageSize - the last M verb (a4455d6)
- filters: filterSelection bake family (3f67491)
- clipboard: copy/cut/paste + paste-mask trio (1d1c8dc)
- selection: named saved selections (f668d85)
- bitmap: place-image trio (addImage family) (7ea2288)
- symbol: button behaviors + button options (3d74723)
- scripting: view flags as session state (a363f0f)
- engine: page rotation with geometry re-bake (48ec811)
- engine: convertToPaths freezes glyph outlines (56c6f2f)
- vector: knife cuts + splitPaths commands (3baf178)
- engine: flatten family via compositor bakes (235e4d4)
- engine: fill edge, crop, tween (df8fe42)
- engine: web-object point append (3516d89)
- engine: autoshape redraw (614bc64)
- engine: rectangle primitive params + quadrangle (93c59b4)
- engine: selection-to-frames fans (ba60816)
Infrastructure
- ci: Aegis PII scan integrated into
xtask cichain - ci: llvm-cov coverage gate (60% lines/functions, workspace-wide)
- ci: GitHub Actions workflow mirrors 7-job GitForge pipeline
- test: 54 unit tests for scripting marshal and text lib helpers
Artifacts
| File | SHA-256 |
|---|---|
firecraft-0.2.2-linux-x86_64.tar.gz |
54f49225ed4154b5510a258c37c0ced548f2c6f2dc9d3fd1e75603943a157f59 |
firecraft-cli-0.2.2-linux-x86_64.tar.gz |
9123a46e15ab1299c12a7a876f309cf84f9b1e9c88cd840178bf808e76858a30 |
firecraft_0.2.2_amd64.deb |
5fc384716ea05f205d7424e10fade10438ffaa6c838bdf0262ec684c89135b43 |
firecraft-web-0.2.2.wasm |
0820a44550e6d8319ae7dbb2a3be0f4fb0c2b7fbc2266d8b3cf0774acac6bded |
appinfo.json |
68dc6f6c700b754849907b4d56bf01652a4b496a83cf2d59ad9e5414484f63af |
Deployed to: https://firecraft-web.pages.dev (v0.2.2)
Carried from v0.2.1
- Shell surfaces M13 (CS6 tool panel, align/distribute, point editing,
Auto Shape library) - Live filters M14 (24 kernels, CS6 filter enumeration parity)
- Style/vector depth M15 (gradient styles, compound paths, masks)
- CS6 DOM verb-surface parity: 268 covered / 3 partial (evidence-gated) /
0 missing; 241-command engine registry - Native WebP encode (lossless VP8L) and WebP import; PNG/JPEG round
trip; SVG export with golden parity
Platforms
Built and verified on Linux x86_64. Web bundle is the primary target.
Other platform recipes (packaging/) are untested on this release cycle.
v0.2.1 — web bridge hotfix
FireCraft v0.2.1 — hotfix release
v0.2.0's web bundle shipped with a dead browser bridge: File > Open,
Import, and Save did nothing in the browser (the wasm shell panicked
on its first bridge call), and the build-time smoke check that should
have caught it was reading its own script source instead of the page's
runtime state — green while broken. This release replaces the v0.2.0
web zip. Desktop and CLI artifacts are unchanged in behavior; all
artifacts are re-cut at the new version.
Fixed:
- web: the eframe shell now overrides the wasm-only as_any_mut entry,
so bridge calls (postMessage open/apply/export, the hidden file
input, downloads) reach the app instead of panicking. - web: bridge-driven mutations now repaint the canvas — an opened
document renders immediately, with zero input events. - build: the dist --web bridge smoke strips <script> bodies before
asserting on the DOM and also requires the failure marker's
absence; it can no longer pass on its own inputs. - build: the fmt gate now covers the workspace-excluded web crate.
The deployed instance at https://firecraft-web.pages.dev serves this
release and was verified in a real browser: open (menu and host-page
bridge) -> draw -> save, end to end.
Carried from v0.2.0 (full notes in the v0.2.0 release):
- Shell surfaces M13 (CS6 tool panel, align/distribute, point editing,
Auto Shape library), live filters M14 (24 kernels, CS6 filter
enumeration parity), style/vector depth M15 (gradient styles,
compound paths, masks). - CS6 DOM verb-surface parity: 268 covered / 3 refused with recorded
evidence / 0 missing; 241-command engine registry. - Native WebP encode (lossless) and WebP import; PNG/JPEG round trip;
SVG export with golden parity.
Platforms: this release was built and verified on Linux x86_64
(desktop tarball, CLI tarball, deb, WASM bundle). The web bundle is
the primary release target. Other platform recipes live in the repo.
Web bundle: serve the unzipped contents over HTTP(S) (any static
server); opening documents and saving use the browser's file dialogs
via a hidden input and blob downloads, and hosts can drive the app
with postMessage (ping/openDocument/exportRequest — see docs/WEBOS.md).
SHA-256:
665002a62a4ff893b2781e72724ef595af71f73b3d7445f81d4a0d1ac70459a7 dist/native/firecraft-0.2.1-linux-x86_64.tar.gz
9a56579ed151c9ba21aad381e2ec9d3df269c4493e6254aac171a5c7e836a02a dist/native/firecraft-cli-0.2.1-linux-x86_64.tar.gz
d7b919ff563b2e2e0f53101094a3ca14ee240e464f3671d6c6990af8bfd22d9e dist/firecraft-web-0.2.1.zip
74188dd5121da965efbfb41979ac623d706d0b48665514103fe2fb40fbd27aff dist/native/firecraft_0.2.1_amd64.deb
68ca3a2f91ed5cdcbc90837fd20f19810a67fc66a18121d3d903b7dd4545defc dist/native/MANIFEST.sha256
FireCraft v0.2.0
FireCraft v0.2.0 — the CS6 verb-surface campaign + first enhancements
A clean-room reimplementation of Adobe Fireworks CS6 in pure Rust.
Since v0.1.0 (M0–M12) the application gained the full CS6 shell
(M13), the complete native live-filter surface (M14), the style and
fill system (M15), and the complete CS6 DOM verb surface as a
scripting campaign — plus the first enhancement features beyond CS6.
== What shipped since v0.1.0 ==
Shell and tools (M13)
- CS6 menu bar, keymap, shell chrome, per-tool cursors, space-drag
pan, Auto Shape flyout with preview glyphs, live move, alt-clone,
double-click entry points, drag constraint matrix.
Live filters (M14)
- The full CS6 native filter surface: bevel/emboss, shadow/glow,
clouds, per-channel levels, colorize HLS, curve knots, motion
blur, convolve — with a live Filters panel, composited in real
time, golden-image parity gates, and a zero unknown-GUID floor.
Styles and fills (M15)
- Style model with byte-exact ZSLv/ZSTv persistence, .stl import,
Styles panel, gradient fills (decode, render, goldens, SVG
gradient paint servers and export), pattern fills end to end,
canvas background painting, brush size/edge/pressure model,
reshape-area and redraw-path tools, intersect/polygon selection.
Document structure
- Layer/page ordering, locks, master pages, typed shared layers
(shareToPages/detachShared), element masks as groups with pixel
planes and JPEG stash, object transform family, frame management,
guides/grid/onion-skinning, page rotation with geometry re-bake.
Scripting surface — the DOM verb campaign
- 241 registered commands covering the CS6 verb surface: selection
model (hierarchy selects, selectSimilar), flatten family,
knife/splitPaths, convertToPaths, clipboard (copy/cut/paste,
paste-as-mask with union), saved selections, place-image trio,
importFile with bilinear resampling, button symbols and options,
text setter families (paragraph attrs, multi-run markup, rectangle
fits, on-path mode/offset/reverse, anti-alias dials), web-object
setters, anim instance parameters, canvas trim and delete-all,
deep-clone duplicate, tile-bank load/write, pattern fill authoring
(path.setPatternFill), filter bake family (filterSelection,
convolve, motionBlur), image size with pre-flight bake hoisting. - CS6 DOM parity matrix: 268 carried / 3 partial / 0 missing
(docs/planning/generated/dom-parity.md). The 3 partial rows are
permanent CS6-native runtime behaviors or evidence-gated pending a
Wine oracle — documented in docs/PROGRESS.md, none silently
dropped.
Enhancements beyond CS6
- Lossless WebP export joins the raster matrix: png, jpg, bmp,
tiff, wbmp, webp — pixels in, the same pixels out, alpha
preserved.
Quality gates
- Every change is gated by
cargo run -p xtask -- ci(fmt, clippy
-D warnings, tests, layer enforcement, wasm build) and the 7-job
GitForge CI pipeline: golden-image corpus, 256-seed command fuzz
sweep, performance/memory budgets, rising test floors.
License: dual-licensed MIT OR Apache-2.0 (LICENSE-MIT /
LICENSE-APACHE). Clean-room method: built from public specs and
observed behavior; no Adobe code or assets.
== Web bundle (WASM — the primary target) ==
firecraft-web-0.2.0.zip — static bundle for any static host:
index.html + one .js + one .wasm + MANIFEST.sha256. The same bundle
is live at https://firecraft-web.pages.dev (Cloudflare Pages).
Cloudflare Pages quick start:
- Download and unzip (files sit at the zip root).
- Cloudflare dashboard -> Workers & Pages -> Create -> Pages ->
"Upload assets", and drop the unzipped folder. Or:
npx wrangler pages deploy - Done — Pages serves over HTTPS with the right application/wasm
MIME type, which the bundle's streaming instantiation requires.
file:// will not work.
For WebOS embedding (iframe + postMessage bridge: openDocument /
apply / exportPng / exportDocument), see docs/WEBOS.md in the repo —
its worked host page is executed verbatim by the release gate's
bridge smoke.
== Linux x86_64 ==
firecraft-0.2.0-linux-x86_64.tar.gz desktop shell + CLI
(firecraft-0.2.0/{bin,share/licenses})
firecraft-cli-0.2.0-linux-x86_64.tar.gz headless CLI alone
firecraft_0.2.0_amd64.deb pinned-control deb;
apt install ./firecraft_0.2.0_amd64.deb
MANIFEST.sha256 over the three above;
sha256sum -c verifies
Requires glibc >= 2.31. GPU not required — the compositor is
deterministic CPU.
== Other platforms ==
This release was built and verified on Linux x86_64. Recipes for
AppImage (packaging/build-appimage.sh), macOS universal dmg
(packaging/build-macos-dmg.sh) and Windows portable zip + installer
(packaging/build-windows.ps1) ship in the repo — the repo carries no
artifact it did not build and verify (docs/TOOLCHAINS.md).
== SHA-256 ==
dbd70489dfd08f73ce0eb7f1df0daf81e398d7daca710c4cfe20b69b6b297b04
firecraft-web-0.2.0.zip
Native archives are hashed inside the release's MANIFEST.sha256.
FireCraft v0.1.0
FireCraft v0.1.0 — first tagged release (M0–M12 complete)
A clean-room reimplementation of Adobe Fireworks CS6 in pure Rust:
the Fireworks PNG (.fw.png) format read/write with full node-tree
fidelity, a deterministic CPU compositor, vector editing with boolean
ops and Auto Shapes, bitmap layers with live filters, text (including
text-on-path), symbols and nine-slice, .jsf scripting with a History
panel, and import/export across PSD, SVG, PNG, JPEG, BMP, TIFF, WBMP
and animated GIF. Every milestone gate is green and the
performance/memory ceilings are enforced on CI
(docs/planning/generated/parity.md).
License: dual-licensed MIT OR Apache-2.0 (LICENSE-MIT /
LICENSE-APACHE). Clean-room method: built from public specs and
observed behavior; no Adobe code or assets.
== Web bundle (WASM — the primary target) ==
firecraft-web-0.1.0.zip — static bundle for any static host:
index.html + one .js + one .wasm (~10.9 MB) + MANIFEST.sha256.
Cloudflare Pages quick start:
- Download and unzip (files sit at the zip root).
- Cloudflare dashboard -> Workers & Pages -> Create -> Pages ->
"Upload assets", and drop the unzipped folder. Or:
npx wrangler pages deploy - Done — Pages serves over HTTPS with the right application/wasm
MIME type, which the bundle's streaming instantiation requires.
file:// will not work.
For WebOS embedding (iframe + postMessage bridge: openDocument /
apply / exportPng / exportDocument), see docs/WEBOS.md in the repo —
its worked host page is executed verbatim by the release gate's
bridge smoke.
== Linux x86_64 ==
firecraft-0.1.0-linux-x86_64.tar.gz desktop shell + CLI
(firecraft-0.1.0/{bin,share/licenses})
firecraft-cli-0.1.0-linux-x86_64.tar.gz headless CLI alone
firecraft_0.1.0_amd64.deb pinned-control deb;
apt install ./firecraft_0.1.0_amd64.deb
MANIFEST.sha256 over the three above;
sha256sum -c verifies
Requires glibc >= 2.31. GPU not required — the compositor is
deterministic CPU.
== Other platforms ==
This release was built and verified on Linux x86_64. Recipes for
AppImage (packaging/build-appimage.sh), macOS universal dmg
(packaging/build-macos-dmg.sh) and Windows portable zip + installer
(packaging/build-windows.ps1) ship in the repo — the repo carries no
artifact it did not build and verify (docs/TOOLCHAINS.md).
== SHA-256 ==
340ec09dfda307eaa51627e60b8fff1fdbaf3a200f174ac56fb615afdecd6ca1 firecraft-web-0.1.0.zip
Native archives are hashed inside the release's MANIFEST.sha256.
== What shipped (M0–M12) ==
- Format: Fireworks PNG read/write, byte-identical round-trips,
unknown-node preservation, 16-file corpus pinned by digest - Engine: journaled command registry, undo/redo, replay-exact,
fuzz-armed (10 targets, 60s+ campaigns, 0 crashes) - Vector: booleans, simplify/expandStroke/inset, 11 Auto Shapes,
align/distribute, point editing - Bitmap + filters: selections, retouch brushes, live filter stacks
(brightness/contrast, levels, HSL, blur, unsharp, find-edges...) - Text: shaping via cosmic-text, bundled Liberation Sans (OFL),
text-on-path - Symbols: definitions/instances, rich symbols, nine-slice, Common
Library import/export - Import/export: PSD (layered, RLE) both ways, SVG both ways, raster
codecs, animated GIF states, web export (HTML+Images shim tables,
CSS layers, sprites, pages-to-files) - Automation: .jsf scripting host (ES3 semantics), CLI with stdin
control channel, MCP server — all through the same registry ids - Web: egui shell compiled to wasm32, postMessage bridge, ~10.9 MB
bundle, bridge smoke-tested on the release bytes