Skip to content

Latest commit

 

History

History
1345 lines (637 loc) · 34.4 KB

File metadata and controls

1345 lines (637 loc) · 34.4 KB

Changelog

All notable changes to this project will be documented in this file.

[3.6.2] - 2026-07-30

Bug Fixes

  • images: Export light/dark pairs together with granular cache by @alexey1312 in #84

Other

  • deps: Update project tools 2026-07 by @alexey1312 in #85

[3.6.1] - 2026-07-17

Bug Fixes

  • ci: Regenerate mise.lock with git-cliff platform URLs by @alexey1312

  • colors: Deterministically pick fullest variable collection on name collision by @alexey1312

  • icons: Warn (not error) when a component renders empty by @alexey1312

[3.6.0] - 2026-06-19

Features

  • ios: Support SVG to WebP output for images by @alexey1312

[3.5.0] - 2026-06-02

Features

  • lint: Add icon color variable policies by @alexey1312 in #83

[3.4.0] - 2026-05-09

Documentation

  • fetch: Document --page flag for disambiguating frames by @alexey1312

Features

  • cli: Make rate-limit, max-retries, concurrent-downloads and batch settings configurable via PKL by @alexey1312 in #82

[3.3.0] - 2026-04-07

Features

  • lint: Add configurable rtlActiveValues and invalid-rtl-variant-value rule by @alexey1312 in #81

Refactor

  • docs: Extract CLAUDE.md sections into lazy-loaded rule files by @alexey1312

[3.2.3] - 2026-04-01

Bug Fixes

  • lint: Eliminate silent failures in PathDataLengthRule and improve test coverage by @alexey1312

Features

  • lint: Add path-data-length rule for Android pathData validation by @alexey1312

[3.2.2] - 2026-04-01

Bug Fixes

  • lint: Write JSON output directly to stdout bypassing quiet mode by @alexey1312

[3.2.1] - 2026-04-01

Bug Fixes

  • lint: Detect duplicate icons in variant component sets by @alexey1312

[3.2.0] - 2026-03-31

Features

  • cli: Add exfig lint command for Figma file validation by @alexey1312 in #80

[3.1.1] - 2026-03-30

Bug Fixes

  • ci: Upgrade deploy-pages to v5 for Node.js 24 compatibility by @alexey1312

  • icons: Support RTL and fix temp file collision in variable-mode dark generation by @alexey1312 in #79

[3.1.0] - 2026-03-27

Bug Fixes

  • ci: Remove duplicate deploy-docs job from release workflow by @alexey1312

Documentation

  • openspec: Archive add-penpot-support change and sync specs by @alexey1312

Features

  • icons: Add dark mode generation via Figma Variable Modes by @alexey1312 in #78

[3.0.0] - 2026-03-26

Bug Fixes

  • ci: Pin Swift container and version-aware cache keys by @alexey1312

  • api: Use cross-platform HTTPURLResponse init in tests by @alexey1312

  • test: Use /dev/null path for write-failure test on Linux by @alexey1312

  • docs: Use lowercase hosting-base-path to match GitHub Pages URL by @alexey1312

  • docs: Update DocC links from /exfig/ to /exfigcli/ after target rename by @alexey1312

  • ci: Remove unused coverage steps from macOS CI job by @alexey1312

  • ci: Update deploy-docc workflow to Swift 6.3 by @Copilot in #77

  • ci: Exclude swift-docc-plugin on Windows by @alexey1312

  • cache: Graceful degradation when granular cache node fetch fails by @alexey1312

Documentation

  • Redesign README as pain-driven, move details to DocC articles by @alexey1312

  • openspec: Revise design-source-abstraction proposal by @alexey1312

  • openspec: Add Penpot API support change specification by @alexey1312

  • openspec: Fix Penpot API assumptions and translate to English by @alexey1312

  • Extract Troubleshooting and Dependencies from CLAUDE.md to reduce size by @alexey1312

  • Refresh DocC navigation and theming by @alexey1312

Features

  • docs: Add llms.txt and llms-full.txt generation by @alexey1312

  • mcp: Add MCP server for AI agent integration by @alexey1312 in #72

  • cli: Add interactive wizards for fetch and init commands by @alexey1312 in #73

  • cli: Add exfig_export and exfig_download MCP tools by @alexey1312 in #74

  • core: Abstract design data sources behind per-asset-type protocols by @alexey1312 in #75

  • penpot: Add Penpot as alternative design source by @alexey1312 in #76

  • Add Windows CI support with Swift 6.3 by @alexey1312 in #64

Miscellaneous Tasks

  • Update mise lock by @alexey1312

  • Add skills by @alexey1312

  • Add skills by @alexey1312

  • Pin xcsift to 1.1.6 by @alexey1312

  • Upgrade mise-action v3 → v4 (Node.js 24) by @alexey1312

  • Pin Swift container in release.yml, update checkout in windows-test by @alexey1312

  • openspec: Add design-source-abstraction change by @alexey1312

  • api: Bump swift-figma-api to 0.2.0, use FigmaClient.baseURL in mock by @alexey1312

  • docs: Trigger DocC deploy on release publish by @alexey1312

  • Regenerate llms-full.txt after README redesign by @alexey1312

Refactor

  • Extract SVGKit into standalone package swift-svgkit by @alexey1312 in #70

  • Extract FigmaAPI into standalone package by @alexey1312 in #71

[2.8.1] - 2026-03-15

Bug Fixes

  • ci: Update usage CLI to 3.0.0 and fix archive path by @alexey1312

Miscellaneous Tasks

  • Migrate to DesignPipe org by @alexey1312

Other

  • Add Usage CLI spec for shell completions and docs
  • feat: add Usage CLI spec for shell completions and docs

Add exfig.usage.kdl with full specification of all 19 CLI commands, flags, and arguments. This enables generating shell completions (bash/zsh/fish) and markdown documentation from a single source of truth.

  • Add usage tool to mise.toml with completions and docs tasks
  • Generate and attach shell completions as GitHub Release assets
  • Update CLAUDE.md with completions commands and KDL sync reminder

Co-Authored-By: Claude Opus 4.6 noreply@anthropic.com

  • fix: harden release workflow and fix Usage spec inaccuracies

Pin usage tool to v2.18.2 in both mise.toml and release workflow, add --fail/pipefail to curl, validate generated completion files are non-empty. Fix version prefix (v2.8.0) and schemas default path in exfig.usage.kdl. Add version sync reminder to CLAUDE.md.

Co-Authored-By: Claude Opus 4.6 noreply@anthropic.com

  • fix: improve filter argument help texts in Usage spec

Match the Swift source help descriptions with single/multiple/wildcard examples for colors, icons, and images filter arguments.

Co-Authored-By: Claude Opus 4.6 noreply@anthropic.com


Co-authored-by: Claude Opus 4.6 noreply@anthropic.com by @alexey1312 in #69

[2.8.0] - 2026-03-10

Features

  • ios: Add assetsFolderProvidesNamespace for iOS colors by @alexey1312

[2.7.2] - 2026-03-03

Refactor

  • Update icon generation to class-based structure by @alexey1312

[2.7.1] - 2026-03-03

Features

  • android: Add codeConnectPackageName support for AndroidIconsEntry by @alexey1312

[2.7.0] - 2026-02-28

Features

  • Migrate to pkl-swift 0.8.0 + Pkl 0.31 by @alexey1312 in #68

[2.6.0] - 2026-02-25

Features

  • W3C DTCG v2025.10 design tokens compliance by @alexey1312 in #67

[2.5.2] - 2026-02-25

Bug Fixes

  • Validate and correct export-report proposal against codebase by @alexey1312 in #61

  • spec: Align w3c-tokens-v2 proposal with DTCG v2025.10 specification by @alexey1312 in #62

  • Warning by @alexey1312

Documentation

  • Add OpenSpec proposals for W3C tokens v2 and export report by @alexey1312

Features

  • cli: Add --report flag for structured JSON export reports by @alexey1312 in #66

  • Add concurrency by @alexey1312

Miscellaneous Tasks

  • Migrate Homebrew tap from homebrew-exfig to homebrew-tap by @alexey1312

Styling

  • Fix markdown table alignment in openspec design docs by @alexey1312 in #65

[2.5.1] - 2026-02-23

Bug Fixes

  • Allow HTTPS in PKL resource allowlist for package resolution by @alexey1312

[2.5.0] - 2026-02-23

Bug Fixes

  • Address 6 security vulnerabilities by @alexey1312 in #59

Features

  • Migrate template engine from Stencil to swift-jinja by @alexey1312 in #60

Miscellaneous Tasks

  • Some fix by @alexey1312

[2.4.0] - 2026-02-17

Bug Fixes

  • Warning found 2 file(s) which are unhandled by @alexey1312

Other

  • Add Figma Code Connect generation for Android (Jetpack Compose)
  • feat: add Figma Code Connect generation for Android

Introduce functionality to generate Figma Code Connect Kotlin files for Jetpack Compose. The AndroidCodeConnectExporter class and related methods allow linking Figma design components to Compose code, creating an important connection for designers to view Compose implementations in Figma Dev Mode.

  • Added AndroidCodeConnectExporter with a method to generate Kotlin files from image packs.
  • Expanded AndroidIconsEntry and AndroidImagesEntry to include a codeConnectKotlin field for file path configuration.
  • Updated configuration schemas and generator logic for Code Connect inclusion.
  • Integrated Code Connect generation into icon and image export workflows within the AndroidIconsExporter and AndroidImagesExporter classes.
  • Created tests for AndroidCodeConnectExporter to ensure expected behavior, including asset filtering, URL generation, and file output.
  • fix: after review by @alexey1312 in #58

[2.3.1] - 2026-02-13

Bug Fixes

  • Filter out deleted but referenced variables by @alexey1312 in #57

Miscellaneous Tasks

  • Update CLAUDE.md by @alexey1312

[2.3.0] - 2026-02-11

Features

  • Add parallel entry processing for all platform exporters by @alexey1312 in #56

[2.2.2] - 2026-02-11

Bug Fixes

  • Flutter export by @alexey1312

[2.2.1] - 2026-02-11

Bug Fixes

  • Code Connect using variant node IDs instead of component set node IDs by @alexey1312 in #55

Miscellaneous Tasks

  • Update tools verson by @alexey1312

[2.2.0] - 2026-02-11

Features

  • Add page-level filtering for icons and images by @alexey1312 in #54

Refactor

  • Standardize WebpOptions type to Common across platforms by @alexey1312 in #53

[2.1.0] - 2026-02-10

Features

  • Add RTL variant detection via Figma component property by @alexey1312 in #52

[2.0.1] - 2026-02-09

Bug Fixes

  • Use correct target name ExFigCLI for DocC build by @alexey1312 in #50

  • Use correct mise hooks syntax (shell+script instead of run) by @alexey1312 in #51

[2.0.0] - 2026-02-09

Other

  • Migrate to PKL configuration and plugin architecture (v2.0)
  • feat!: migrate to PKL config and plugin architecture by @alexey1312 in #48

[1.3.2] - 2026-02-06

Miscellaneous Tasks

  • Remove Rainbow dependency and update Package.resolved by @alexey1312

[1.3.1] - 2026-02-06

Bug Fixes

  • tests: Eliminate unreachable code warnings on Linux by @alexey1312

  • Unify JSON handling across platforms by @alexey1312

[1.3.0] - 2026-02-05

Bug Fixes

  • linux: Use #if os(macOS) instead of canImport for YYJSON by @alexey1312

  • tests: Skip platform-specific tests on Linux by @alexey1312

Features

  • Integrate Noora terminal UI design system by @alexey1312 in #46

  • Add YYJSON by @alexey1312 in #47

Miscellaneous Tasks

  • Update doc by @alexey1312

[1.2.34] - 2026-02-02

Refactor

  • batch: Consolidate TaskLocal state into BatchSharedState actor by @alexey1312

  • Replace TaskLocal with BatchSharedState by @alexey1312

[1.2.33] - 2026-02-02

Bug Fixes

  • Preserve existing BatchContext fields in ComponentPreFetcher by @alexey1312

Documentation

  • Document @Sendable Linux crash in gotchas.md by @alexey1312

  • Update batch processing rules for BatchContext by @alexey1312

Other

Refactor

  • Unify batch TaskLocal storage into BatchContext by @alexey1312

[1.2.32] - 2026-02-02

Refactor

  • Remove @Sendable to fix Linux runtime issue by @alexey1312

[1.2.31] - 2026-02-02

Bug Fixes

  • Replace nested @Sendable closures with switch-case in withBatchContext by @alexey1312

[1.2.30] - 2026-02-02

Refactor

  • Enhance export flow to support batch caching by @alexey1312

  • Simplify BatchConfigRunner export flow by @alexey1312

  • Simplify batch processing and context management by @alexey1312

  • Restructure image loading functions by @alexey1312

  • Streamline iOS image export process by @alexey1312

  • Streamline SVG parsing and improve code clarity by @alexey1312

[1.2.29] - 2026-01-29

Documentation

  • Add mgrep as default semantic search tool by @alexey1312

Features

  • Implement FileIdProvider for comprehensive file ID extraction by @alexey1312

  • Make lightFileId optional, improve error handling by @alexey1312

Miscellaneous Tasks

  • Fix mgrep install by @alexey1312

  • Replace mgrep with swiftindex for code search by @alexey1312

  • Update dev tools and swiftindex config by @alexey1312

[1.2.28] - 2026-01-20

Bug Fixes

  • batch: Initialize strictPathValidation in ExportIcons by @alexey1312

Miscellaneous Tasks

  • Add .xcsift.toml by @alexey1312

[1.2.27] - 2026-01-19

Features

  • android: Add xmlDisabled option for Compose-only projects by @alexey1312

[1.2.26] - 2026-01-19

Bug Fixes

  • export: Sort assets alphabetically for stable output by @alexey1312

[1.2.25] - 2026-01-19

Features

  • android: Add colorKotlin config for custom Compose output path by @alexey1312

[1.2.24] - 2026-01-15

Features

  • flutter: Add hc colors supported by @alexey1312

  • flutter: Update image by @alexey1312

  • flutter: Add image name style by @alexey1312

[1.2.23] - 2026-01-15

Bug Fixes

  • xcode: Sort CodeConnect assets for stable output by @alexey1312

[1.2.22] - 2026-01-14

Bug Fixes

  • xcode: Sort CodeConnect assets for stable output by @alexey1312

[1.2.21] - 2026-01-13

Features

  • android: Add pathData validation for VectorDrawables by @alexey1312

Miscellaneous Tasks

  • hooks: Migrate git hooks to tracked .githooks directory by @alexey1312

[1.2.20] - 2026-01-13

Features

  • SVGKit: Add fill-opacity support and shape transforms by @alexey1312

[1.2.19] - 2026-01-12

Documentation

  • Split CLAUDE.md into modular rules files by @alexey1312

Features

  • core: Add AssetMetadata for Code Connect generation by @alexey1312

[1.2.18] - 2026-01-11

Bug Fixes

  • ci: Add xcsift install path to PATH on Linux by @alexey1312 in #45

Features

  • ios: Add codeSyntax sync to Figma Variables by @alexey1312

  • core: Add Hashable conformance to ImagePack by @alexey1312

Miscellaneous Tasks

  • mise: Update to 2026.1.1 by @alexey1312

  • ci: Update workflow by @alexey1312

[1.2.17] - 2026-01-09

Features

  • cli: Improve init command next steps guidance by @google-labs-jules[bot] in #24

  • Add confirmation prompt before overwriting config file in exfig init by @google-labs-jules[bot] in #26

  • ios: Add Figma Code Connect generation for icons and images by @alexey1312 in #44

Miscellaneous Tasks

  • tooling: Simplify mise tool definitions by @alexey1312

  • Remove unused .jules agent journal files by @alexey1312

Other

  • 🎨 Palette: Improve Update Notification UX
  • feat(cli): ✨ improve update notification UX

Enhanced the update notification message with a colorful box design using box-drawing characters. The new design highlights the new version and download link, making it more noticeable and pleasant. Falls back to plain text when colors are disabled.

  • Updated Sources/ExFig/Subcommands/checkForUpdate.swift to use Rainbow and TTYDetector.
  • Updated .Jules/palette.md with critical learnings.
  • feat(cli): ✨ improve update notification UX

Enhanced the update notification message with a colorful box design using box-drawing characters. The new design highlights the new version and download link, making it more noticeable and pleasant. Falls back to plain text when colors are disabled.

  • Updated Sources/ExFig/Subcommands/checkForUpdate.swift to use Rainbow and TTYDetector.
  • Updated .Jules/palette.md with critical learnings.
  • feat(cli): ✨ improve update notification UX

Enhanced the update notification message with a colorful box design using box-drawing characters. The new design highlights the new version and download link, making it more noticeable and pleasant. Falls back to plain text when colors are disabled.

  • Updated Sources/ExFig/Subcommands/checkForUpdate.swift to use Rainbow and TTYDetector.
  • Updated .Jules/palette.md with critical learnings.
  • feat(cli): ✨ improve update notification UX

Enhanced the update notification message with a colorful box design using box-drawing characters. The new design highlights the new version and download link, making it more noticeable and pleasant. Falls back to plain text when colors are disabled.

  • Updated Sources/ExFig/Subcommands/checkForUpdate.swift to use Rainbow and TTYDetector.
  • Updated .Jules/palette.md with critical learnings.

Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com> by @google-labs-jules[bot] in #22

  • ⚡ Bolt: Optimize SVG path parsing using UTF8View
  • feat: Optimize SVG path parsing performance
  • Replaced String character iteration with String.UTF8View in PathScanner to avoid Unicode overhead.
  • Implemented byte-level scanning for SVG commands, numbers, and whitespace.
  • Reduced parsing time by approximately 25% in benchmark tests.
  • Maintained existing functionality and test coverage.
  • Optimized for ASCII-based SVG path data processing.
  • feat: Optimize SVG path parsing performance
  • Replaced String character iteration with String.UTF8View in PathScanner to avoid Unicode overhead.
  • Implemented byte-level scanning for SVG commands, numbers, and whitespace.
  • Reduced parsing time by approximately 25% in benchmark tests.
  • Maintained existing functionality and test coverage.
  • Optimized for ASCII-based SVG path data processing.
  • feat: Optimize SVG path parsing performance

Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com> Co-authored-by: alexey1312 alexey1312ru@gmail.com by @google-labs-jules[bot] in #25

[1.2.16] - 2025-12-30

Bug Fixes

  • svg: Preserve element order and support gradientTransform by @alexey1312

Documentation

  • openspec: Add ExFig Studio GUI app proposal by @alexey1312

Features

  • svg: Add Tree Traversal API support via swift-resvg upgrade by @alexey1312 in #19

Other

  • ⚡ Bolt: Implement dynamic concurrency in SharedDownloadQueue by @google-labs-jules[bot] in #18

  • 🛡️ Sentinel: Fix XXE vulnerability in SVG parser

  • feat(security): disable external entity loading in SVG parser
  • Initializes XMLDocument with .nodeLoadExternalEntitiesNever in SVGParser.swift.
  • Prevents XML External Entity (XXE) attacks when parsing untrusted SVG files.
  • Hardens the codebase against local file inclusion and SSRF vulnerabilities via malicious SVGs.
  • feat(security): disable external entity loading in SVG parser
  • Initializes XMLDocument with .nodeLoadExternalEntitiesNever in SVGParser.swift.
  • Prevents XML External Entity (XXE) attacks when parsing untrusted SVG files.
  • Hardens the codebase against local file inclusion and SSRF vulnerabilities via malicious SVGs.
  • Verified XMLDocument usage across the codebase; FileWriter.swift only writes XML and is safe.
  • feat(security): disable external entity loading in SVG parser
  • Initializes XMLDocument with .nodeLoadExternalEntitiesNever in SVGParser.swift.
  • Prevents XML External Entity (XXE) attacks when parsing untrusted SVG files.
  • Hardens the codebase against local file inclusion and SSRF vulnerabilities via malicious SVGs.
  • Verified XMLDocument usage across the codebase; FileWriter.swift only writes XML and is safe.
  • feat(security): disable external entity loading in SVG parser
  • Initializes XMLDocument with .nodeLoadExternalEntitiesNever in SVGParser.swift.
  • Prevents XML External Entity (XXE) attacks when parsing untrusted SVG files.
  • Hardens the codebase against local file inclusion and SSRF vulnerabilities via malicious SVGs.
  • Verified XMLDocument usage across the codebase; FileWriter.swift only writes XML and is safe.
  • Verified parse(contentsOf:) delegates to the patched method.

Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com> by @google-labs-jules[bot] in #21

Performance

  • cache: Parallelize hash computation + improve Sendable safety by @alexey1312

Refactor

  • queue: Add LRU eviction for unclaimed results + MigrateTests by @alexey1312

  • colors: Decompose ExportColors.swift into platform files by @alexey1312

Testing

  • cache: Add tests for parallel hashing and LRU eviction by @alexey1312

[1.2.15] - 2025-12-27

Bug Fixes

  • svg: Preserve fill on shape elements in groups by @alexey1312

Documentation

  • Use portable ./bin/mise paths in CLAUDE.md by @alexey1312

[1.2.14] - 2025-12-26

Bug Fixes

  • android: Skip SVG conversion for missing temp dirs by @alexey1312

  • svg: Handle missing fill default and clip-path inheritance by @alexey1312

  • svg: Convert mask elements to clip-path for Figma flags by @alexey1312

Documentation

  • Update Swift version and clarify platform support by @alexey1312

Features

  • icons: Add per-entry regex and nameStyle fields by @alexey1312

  • svg: Add usvg normalization before parsing by @alexey1312

  • android: Parallelize SVG to vector drawable conversion by @alexey1312

Miscellaneous Tasks

  • Use mise-action for environment setup by @alexey1312

  • Bump minimum macOS version from 12.0 to 13.0 by @alexey1312

  • Add xcsift filtering and fix shell quoting by @alexey1312

  • dev: Add actionlint for GitHub Actions linting by @alexey1312

  • Pipe Linux build/test output through xcsift by @alexey1312

  • Pipe Linux build/test output through xcsift by @alexey1312

  • Pipe Linux build/test output through xcsift by @alexey1312

  • Pipe Linux build/test output through xcsift by @alexey1312

Testing

  • icons: Add nameStyle to iOS IconsEntry test fixtures by @alexey1312

  • ci: Relax timing thresholds and image size for CI stability by @alexey1312

[1.2.13] - 2025-12-24

Miscellaneous Tasks

  • Use swift:6.2-jammy image and fix tar archive paths by @alexey1312

[1.2.12] - 2025-12-24

Miscellaneous Tasks

  • release: Use swift:6.2-jammy image for Linux builds by @alexey1312

[1.2.11] - 2025-12-24

Bug Fixes

  • batch: Clear node hashes for all files with --force flag by @alexey1312

[1.2.10] - 2025-12-24

Bug Fixes

  • core: Preserve number placement in case conversions by @alexey1312

Miscellaneous Tasks

  • mise: Forward GitHub token to avoid API rate limits by @alexey1312

Other

  • Merge branch 'main' of github.com:alexey1312/ExFig by @alexey1312

[1.2.9] - 2025-12-24

Documentation

  • Fix installation instructions by @alexey1312 in #17

Features

  • ios: Add renderMode support and fix case mismatch by @alexey1312

  • batch: Add incremental progress reporting for downloads by @alexey1312

[1.2.8] - 2025-12-21

Bug Fixes

  • ios: Handle HEIC export for large SVG files by @alexey1312

  • ios: Clean up old format files when switching PNG/HEIC by @alexey1312

  • heic: Use straight alpha and document lossless limitation by @alexey1312

Documentation

  • Update key directories after export refactoring by @alexey1312

Refactor

  • icons: Extract iOS export and shared helpers by @alexey1312

  • exports: Extract platform-specific export files by @alexey1312

  • images: Extract WebP converter factory by @alexey1312

  • images: Extract HEIC converter factory by @alexey1312

[1.2.7] - 2025-12-20

Bug Fixes

  • ios: Write PNG files before HEIC conversion by @alexey1312

  • android: Delete source PNGs after WebP/HEIC conversion by @alexey1312

  • core: Handle URL type differences in Destination.url by @alexey1312

Refactor

  • ios: Use destination.directory for imageset path by @alexey1312

[1.2.6] - 2025-12-20

Documentation

  • config: Document SVG source format and clarify config formats by @alexey1312

Miscellaneous Tasks

  • release: Fix universal binary build for macOS by @alexey1312

Other

  • Replace vendored resvg with swift-resvg package
  • build(swift): update to Swift 6.2.3
  • Bump swift-tools-version to 6.2
  • Add .swift-version file for tooling
  • Remove unnecessary await on actor-isolated method
  • ci: use swiftly-action for Swift toolchain management

Replace hardcoded Xcode paths and manual Swift version selection with vapor/swiftly-action for consistent Swift 6.2.3 toolchain across macOS workflows. Update Linux container to swift:6.2.

  • build(deps): replace vendored resvg with swift-resvg package

  • ci: improve SPM cache and add clean tasks

Add Package.swift to cache key for better invalidation when dependencies change. Add SPM cache step to Linux build job. Add mise tasks for cleaning build artifacts and all caches.

  • build(deps): update mise to 2025.12.12

  • Disable GitHub attestations in mise.toml by @alexey1312 in #15

  • Add HEIC output format for iOS images
  • docs(images): add HEIC conversion research and implementation plan

Research findings for iOS HEIC image export:

  • Xcode asset catalogs support HEIC since Xcode 10.1
  • Apple ImageIO provides native encoding on macOS (not Linux)
  • libheif is cross-platform but has GPL licensing (x265)
  • Recommended: Phase 1 with macOS-only ImageIO approach
  • docs(web): archive web spec

  • docs(images): add HEIC conversion research and implementation plan

  • docs(images): add HEIC conversion research and implementation plan

  • feat(images): add HEIC output format for iOS images

Add HEIC encoding support for iOS image exports using native ImageIO. HEIC provides ~40-50% smaller file sizes than PNG while maintaining full transparency support.

  • Add NativeHeicEncoder for RGBA → HEIC encoding (macOS only)
  • Add SvgToHeicConverter for SVG → HEIC pipeline via resvg
  • Add HeicConverter for batch PNG → HEIC conversion
  • Support both lossy and lossless encoding modes with quality control
  • Gracefully fall back to PNG on Linux with warning
  • Update Xcode asset catalog export to reference .heic files
  • Add outputFormat and heicOptions config parameters for iOS images

Co-authored-by: Claude noreply@anthropic.com by @alexey1312 in #16

[1.2.6-beta.2] - 2025-12-19

Other

  • resvg: Switch from dynamic to static library linking by @alexey1312

[1.2.6-beta.1] - 2025-12-19

Features

  • images: Add SVG source format with local rasterization via resvg by @alexey1312 in #13

Miscellaneous Tasks

  • release: Add pre-release tag support by @alexey1312

[1.2.5] - 2025-12-18

Bug Fixes

  • cli: Keep numbers with letters in case conversion by @alexey1312

Testing

  • timing: Increase delays and thresholds for CI stability by @alexey1312

[1.2.4] - 2025-12-18

Bug Fixes

  • images: Use native libwebp for lossless WebP encoding by @alexey1312

[1.2.3] - 2025-12-16

Bug Fixes

  • android: Standardize theme attrs file paths with ".." components by @alexey1312

  • android: Standardize theme attrs file paths with ".." components by @alexey1312

[1.2.2] - 2025-12-16

Features

  • android: Expose Kotlin hex values in Compose color template by @alexey1312

[1.2.1] - 2025-12-16

Features

  • android: Add theme attributes export for colors by @alexey1312

Miscellaneous Tasks

  • templates: Remove trailing newlines from stencil files by @alexey1312

[1.2.0] - 2025-12-14

Features

  • cli: Add migrate command for figma-export configs by @alexey1312

Miscellaneous Tasks

  • tooling: Reorganize format tasks with parallel execution by @alexey1312

  • tooling: Migrate from pre-commit to hk for git hooks by @alexey1312

Other

  • Modify CI workflow for Swift and Markdown formatting

Updated CI workflow to check formatting for Swift and Markdown, removed separate markdown formatting check. by @alexey1312

  • Add web
  • feat(openspec): add web platform export proposal

Proposal to extend ExFig with native Web/React support:

  • CSS variables and TypeScript constants for colors
  • React TSX components via SVGR pattern for icons
  • Raw SVG/PNG asset export with barrel index files
  • New WebExport module following FlutterExport patterns
  • feat(web): add web platform export support

  • feat(web): add SVG to JSX converter for React components

  • feat(web): add SVG to JSX converter for React components by @alexey1312

[1.1.3] - 2025-12-11

Documentation

  • docc: Migrate documentation from GitHub docs to DocC by @alexey1312

Features

  • batch: Add nodes and components pre-fetch for granular cache by @alexey1312

[1.1.2] - 2025-12-09

Bug Fixes

  • cache: Sort children by name for stable granular cache hashing by @alexey1312

Miscellaneous Tasks

  • release: Add static Swift stdlib for Linux builds by @alexey1312

[1.1.1] - 2025-12-09

Features

  • icons: Ensure light/dark pairs export together with granular cache by @alexey1312

[1.1.0] - 2025-12-09

Other

  • Update batch
  • feat(batch): add pipelined download queue for parallelism

Introduce SharedDownloadQueue to coordinate CDN downloads across parallel configs in batch mode. Downloads are prioritized by config submission order and processed with shared concurrency pool.

  • Add DownloadJob/DownloadJobResult for batch coordination
  • Add PipelinedDownloader helper with TaskLocal injection
  • Add SharedDownloadQueueStorage for config-level context
  • Update BatchConfigRunner to inject queue and priority
  • Update ExportIcons/ExportImages to use PipelinedDownloader
  • Scale total download slots by parallel workers count

Benefits: eliminates per-config download bottlenecks, improves throughput in multi-config batch runs, maintains FIFO ordering.

  • feat(batch): add rich progress view with ETA and status
  • Add BatchProgressView integration with per-config status tracking
  • Calculate and display ETA based on export progress
  • Coordinate UI suppression via BatchProgressViewStorage TaskLocal
  • Clear/redraw progress display for log/error output
  • Update rate limiter status every 500ms during execution
  • Suppress spinners and progress bars in batch mode to prevent corruption
  • feat(batch): centralize update check to end of batch

Suppress individual update checks during batch exports and check once after all configs complete. by @alexey1312

[1.0.8] - 2025-12-09

Documentation

  • batch: Clarify granular cache merge sequence by @alexey1312

Features

  • batch: Add shared granular cache for parallel configs by @alexey1312

[1.0.7] - 2025-12-08

Bug Fixes

  • release: Use v-prefixed version format consistently by @alexey1312

[1.0.6] - 2025-12-08

Features

  • svg: Add CSS styles, use/symbol refs, stroke-dasharray parsing by @alexey1312

  • cli: Add --timeout flag for API request timeout override by @alexey1312

  • cache: Add granular node-level cache tracking by @alexey1312

[1.0.5] - 2025-12-07

Features

  • terminal: Add unified warning types with TOON formatting by @alexey1312

  • terminal: Add unified error formatting with recovery suggestions by @alexey1312

  • batch: Pre-fetch file versions for cache-enabled batch runs by @alexey1312

[1.0.4] - 2025-12-07

Bug Fixes

  • batch: Skip unconfigured asset types and simplify output by @alexey1312

Miscellaneous Tasks

  • release: Use git-cliff for release notes generation by @alexey1312

[1.0.3] - 2025-12-07

Bug Fixes

  • api: Increase default retry base delay to 3 seconds by @alexey1312

Documentation

  • oxipng: Update doc to oxipng by @alexey1312

Features

  • batch: Add cache and concurrency options to batch command by @alexey1312

[1.0.2] - 2025-12-06

Bug Fixes

  • cli: Improve help text and add version to main command by @alexey1312

Miscellaneous Tasks

  • release: Use v-prefixed tags for mise/ubi compatibility by @alexey1312

[1.0.1] - 2025-12-06

Miscellaneous Tasks

  • release: Rename binary from exfig to ExFig in dist by @alexey1312

[1.0.0] - 2025-12-06

Features

  • Complete ExFig implementation by @alexey1312