All notable changes to this project will be documented in this file.
- images: Export light/dark pairs together with granular cache by @alexey1312 in #84
- deps: Update project tools 2026-07 by @alexey1312 in #85
-
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
- ios: Support SVG to WebP output for images by @alexey1312
- lint: Add icon color variable policies by @alexey1312 in #83
- fetch: Document --page flag for disambiguating frames by @alexey1312
- cli: Make rate-limit, max-retries, concurrent-downloads and batch settings configurable via PKL by @alexey1312 in #82
- lint: Add configurable rtlActiveValues and invalid-rtl-variant-value rule by @alexey1312 in #81
- docs: Extract CLAUDE.md sections into lazy-loaded rule files by @alexey1312
- lint: Eliminate silent failures in PathDataLengthRule and improve test coverage by @alexey1312
- lint: Add path-data-length rule for Android pathData validation by @alexey1312
- lint: Write JSON output directly to stdout bypassing quiet mode by @alexey1312
- lint: Detect duplicate icons in variant component sets by @alexey1312
- cli: Add
exfig lintcommand for Figma file validation by @alexey1312 in #80
-
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
- ci: Remove duplicate deploy-docs job from release workflow by @alexey1312
- openspec: Archive add-penpot-support change and sync specs by @alexey1312
- icons: Add dark mode generation via Figma Variable Modes by @alexey1312 in #78
-
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
-
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
-
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
-
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
-
Extract SVGKit into standalone package swift-svgkit by @alexey1312 in #70
-
Extract FigmaAPI into standalone package by @alexey1312 in #71
- ci: Update usage CLI to 3.0.0 and fix archive path by @alexey1312
- Migrate to DesignPipe org by @alexey1312
- 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
- ios: Add assetsFolderProvidesNamespace for iOS colors by @alexey1312
- Update icon generation to class-based structure by @alexey1312
- android: Add codeConnectPackageName support for AndroidIconsEntry by @alexey1312
- Migrate to pkl-swift 0.8.0 + Pkl 0.31 by @alexey1312 in #68
- W3C DTCG v2025.10 design tokens compliance by @alexey1312 in #67
-
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
- Add OpenSpec proposals for W3C tokens v2 and export report by @alexey1312
-
cli: Add --report flag for structured JSON export reports by @alexey1312 in #66
-
Add concurrency by @alexey1312
- Migrate Homebrew tap from homebrew-exfig to homebrew-tap by @alexey1312
- Fix markdown table alignment in openspec design docs by @alexey1312 in #65
- Allow HTTPS in PKL resource allowlist for package resolution by @alexey1312
- Address 6 security vulnerabilities by @alexey1312 in #59
- Migrate template engine from Stencil to swift-jinja by @alexey1312 in #60
- Some fix by @alexey1312
- Warning found 2 file(s) which are unhandled by @alexey1312
- 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
AndroidCodeConnectExporterwith a method to generate Kotlin files from image packs. - Expanded
AndroidIconsEntryandAndroidImagesEntryto include acodeConnectKotlinfield 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
AndroidIconsExporterandAndroidImagesExporterclasses. - Created tests for
AndroidCodeConnectExporterto ensure expected behavior, including asset filtering, URL generation, and file output.
- fix: after review by @alexey1312 in #58
- Filter out deleted but referenced variables by @alexey1312 in #57
- Update CLAUDE.md by @alexey1312
- Add parallel entry processing for all platform exporters by @alexey1312 in #56
- Flutter export by @alexey1312
- Code Connect using variant node IDs instead of component set node IDs by @alexey1312 in #55
- Update tools verson by @alexey1312
- Add page-level filtering for icons and images by @alexey1312 in #54
- Standardize WebpOptions type to Common across platforms by @alexey1312 in #53
- Add RTL variant detection via Figma component property by @alexey1312 in #52
-
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
- Migrate to PKL configuration and plugin architecture (v2.0)
- feat!: migrate to PKL config and plugin architecture by @alexey1312 in #48
- Remove Rainbow dependency and update Package.resolved by @alexey1312
-
tests: Eliminate unreachable code warnings on Linux by @alexey1312
-
Unify JSON handling across platforms by @alexey1312
-
linux: Use #if os(macOS) instead of canImport for YYJSON by @alexey1312
-
tests: Skip platform-specific tests on Linux by @alexey1312
- Update doc by @alexey1312
-
batch: Consolidate TaskLocal state into BatchSharedState actor by @alexey1312
-
Replace TaskLocal with BatchSharedState by @alexey1312
- Preserve existing BatchContext fields in ComponentPreFetcher by @alexey1312
-
Document @Sendable Linux crash in gotchas.md by @alexey1312
-
Update batch processing rules for BatchContext by @alexey1312
- Merge branch 'main' of https://github.com/alexey1312/ExFig by @alexey1312
- Unify batch TaskLocal storage into BatchContext by @alexey1312
- Remove @Sendable to fix Linux runtime issue by @alexey1312
- Replace nested @Sendable closures with switch-case in withBatchContext by @alexey1312
-
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
- Add mgrep as default semantic search tool by @alexey1312
-
Implement FileIdProvider for comprehensive file ID extraction by @alexey1312
-
Make
lightFileIdoptional, improve error handling by @alexey1312
-
Fix mgrep install by @alexey1312
-
Replace mgrep with swiftindex for code search by @alexey1312
-
Update dev tools and swiftindex config by @alexey1312
- batch: Initialize strictPathValidation in ExportIcons by @alexey1312
- Add .xcsift.toml by @alexey1312
- android: Add xmlDisabled option for Compose-only projects by @alexey1312
- export: Sort assets alphabetically for stable output by @alexey1312
- android: Add colorKotlin config for custom Compose output path by @alexey1312
-
flutter: Add hc colors supported by @alexey1312
-
flutter: Update image by @alexey1312
-
flutter: Add image name style by @alexey1312
- xcode: Sort CodeConnect assets for stable output by @alexey1312
- xcode: Sort CodeConnect assets for stable output by @alexey1312
- android: Add pathData validation for VectorDrawables by @alexey1312
- hooks: Migrate git hooks to tracked .githooks directory by @alexey1312
- SVGKit: Add fill-opacity support and shape transforms by @alexey1312
- Split CLAUDE.md into modular rules files by @alexey1312
- core: Add AssetMetadata for Code Connect generation by @alexey1312
- ci: Add xcsift install path to PATH on Linux by @alexey1312 in #45
-
ios: Add codeSyntax sync to Figma Variables by @alexey1312
-
core: Add Hashable conformance to ImagePack by @alexey1312
-
mise: Update to 2026.1.1 by @alexey1312
-
ci: Update workflow by @alexey1312
-
cli: Improve init command next steps guidance by @google-labs-jules[bot] in #24
-
Add confirmation prompt before overwriting config file in
exfig initby @google-labs-jules[bot] in #26 -
ios: Add Figma Code Connect generation for icons and images by @alexey1312 in #44
-
tooling: Simplify mise tool definitions by @alexey1312
-
Remove unused .jules agent journal files by @alexey1312
- 🎨 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.swiftto useRainbowandTTYDetector. - Updated
.Jules/palette.mdwith 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.swiftto useRainbowandTTYDetector. - Updated
.Jules/palette.mdwith 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.swiftto useRainbowandTTYDetector. - Updated
.Jules/palette.mdwith 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.swiftto useRainbowandTTYDetector. - Updated
.Jules/palette.mdwith 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
Stringcharacter iteration withString.UTF8ViewinPathScannerto 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
Stringcharacter iteration withString.UTF8ViewinPathScannerto 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
- svg: Preserve element order and support gradientTransform by @alexey1312
- openspec: Add ExFig Studio GUI app proposal by @alexey1312
- svg: Add Tree Traversal API support via swift-resvg upgrade by @alexey1312 in #19
-
⚡ 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
XMLDocumentwith.nodeLoadExternalEntitiesNeverinSVGParser.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
XMLDocumentwith.nodeLoadExternalEntitiesNeverinSVGParser.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
XMLDocumentusage across the codebase;FileWriter.swiftonly writes XML and is safe.
- feat(security): disable external entity loading in SVG parser
- Initializes
XMLDocumentwith.nodeLoadExternalEntitiesNeverinSVGParser.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
XMLDocumentusage across the codebase;FileWriter.swiftonly writes XML and is safe.
- feat(security): disable external entity loading in SVG parser
- Initializes
XMLDocumentwith.nodeLoadExternalEntitiesNeverinSVGParser.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
XMLDocumentusage across the codebase;FileWriter.swiftonly 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
- cache: Parallelize hash computation + improve Sendable safety by @alexey1312
-
queue: Add LRU eviction for unclaimed results + MigrateTests by @alexey1312
-
colors: Decompose ExportColors.swift into platform files by @alexey1312
- cache: Add tests for parallel hashing and LRU eviction by @alexey1312
- svg: Preserve fill on shape elements in groups by @alexey1312
- Use portable ./bin/mise paths in CLAUDE.md by @alexey1312
-
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
- Update Swift version and clarify platform support by @alexey1312
-
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
-
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
-
icons: Add nameStyle to iOS IconsEntry test fixtures by @alexey1312
-
ci: Relax timing thresholds and image size for CI stability by @alexey1312
- Use swift:6.2-jammy image and fix tar archive paths by @alexey1312
- release: Use swift:6.2-jammy image for Linux builds by @alexey1312
- batch: Clear node hashes for all files with --force flag by @alexey1312
- core: Preserve number placement in case conversions by @alexey1312
- mise: Forward GitHub token to avoid API rate limits by @alexey1312
- Merge branch 'main' of github.com:alexey1312/ExFig by @alexey1312
- Fix installation instructions by @alexey1312 in #17
-
ios: Add renderMode support and fix case mismatch by @alexey1312
-
batch: Add incremental progress reporting for downloads by @alexey1312
-
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
- Update key directories after export refactoring by @alexey1312
-
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
-
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
- ios: Use destination.directory for imageset path by @alexey1312
- config: Document SVG source format and clarify config formats by @alexey1312
- release: Fix universal binary build for macOS by @alexey1312
- 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
- resvg: Switch from dynamic to static library linking by @alexey1312
- images: Add SVG source format with local rasterization via resvg by @alexey1312 in #13
- release: Add pre-release tag support by @alexey1312
- cli: Keep numbers with letters in case conversion by @alexey1312
- timing: Increase delays and thresholds for CI stability by @alexey1312
- images: Use native libwebp for lossless WebP encoding by @alexey1312
-
android: Standardize theme attrs file paths with ".." components by @alexey1312
-
android: Standardize theme attrs file paths with ".." components by @alexey1312
- android: Expose Kotlin hex values in Compose color template by @alexey1312
- android: Add theme attributes export for colors by @alexey1312
- templates: Remove trailing newlines from stencil files by @alexey1312
- cli: Add migrate command for figma-export configs by @alexey1312
-
tooling: Reorganize format tasks with parallel execution by @alexey1312
-
tooling: Migrate from pre-commit to hk for git hooks by @alexey1312
- 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
- docc: Migrate documentation from GitHub docs to DocC by @alexey1312
- batch: Add nodes and components pre-fetch for granular cache by @alexey1312
- cache: Sort children by name for stable granular cache hashing by @alexey1312
- release: Add static Swift stdlib for Linux builds by @alexey1312
- icons: Ensure light/dark pairs export together with granular cache by @alexey1312
- 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
- batch: Clarify granular cache merge sequence by @alexey1312
- batch: Add shared granular cache for parallel configs by @alexey1312
- release: Use v-prefixed version format consistently by @alexey1312
-
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
-
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
- batch: Skip unconfigured asset types and simplify output by @alexey1312
- release: Use git-cliff for release notes generation by @alexey1312
- api: Increase default retry base delay to 3 seconds by @alexey1312
- oxipng: Update doc to oxipng by @alexey1312
- batch: Add cache and concurrency options to batch command by @alexey1312
- cli: Improve help text and add version to main command by @alexey1312
- release: Use v-prefixed tags for mise/ubi compatibility by @alexey1312
- release: Rename binary from exfig to ExFig in dist by @alexey1312
- Complete ExFig implementation by @alexey1312