# [0.11.0](https://github.com/siddharthksah/Stirling-Image/compare/v0.10.0...v0.11.0) (2026-03-27)
### Bug Fixes
* **a11y:** add aria-hidden to decorative GemLogo SVG ([d47548a](d47548a1d7))
* **api:** allow Scalar docs through auth and CSP ([a46d500](a46d500012))
* **api:** use content instead of spec.content for Scalar v1.49 API ([05854fd](05854fd61f))
* **ui:** clean up settings, automate page, fullscreen logo, and README ([e3a8558](e3a8558134))
### Features
* **api:** add all remaining endpoints to OpenAPI spec ([9ed1090](9ed1090651))
* **api:** add all tool endpoints to OpenAPI spec ([2bf8689](2bf86894d0))
* **api:** add llms.txt and llms-full.txt endpoints ([cff1930](cff1930920))
* **api:** add OpenAPI 3.1 spec skeleton with common schemas ([9488201](9488201806))
* **api:** add Scalar docs route and install dependency ([abb2916](abb2916233))
* **api:** register docs route in server and test helper ([849878e](849878e72f))
* **branding:** add faceted gem SVG logo assets ([0214ac1](0214ac11b1))
* **branding:** add favicon and meta tags to index.html ([0364927](036492725e))
* **branding:** add OG social preview image ([dcd926c](dcd926c57e))
* **branding:** add PWA manifest and PNG logo assets ([26cc183](26cc18342f))
* **branding:** show gem icon in app header as default logo ([39dfb93](39dfb93679))
* **docs:** add gem favicon to VitePress site ([42ec0f2](42ec0f2490))
* **docs:** add llms.txt and llms-full.txt to GitHub Pages ([e6dc7b0](e6dc7b0a18))
- Remove @fastify/swagger and @fastify/swagger-ui (API docs live on GitHub Pages)
- Run typecheck, build, and docker CI jobs in parallel instead of sequentially
Consolidate all access to localhost:1349 — Vite dev server serves on 1349
and proxies API calls to an internal dev port (13490). Production API
defaults to 1349. Also includes strip-metadata improvements, UI component
updates, and compress operation fixes.
# [0.3.0](https://github.com/siddharthksah/Stirling-Image/compare/v0.2.1...v0.3.0) (2026-03-23)
### Bug Fixes
* add SSE progress endpoint to public paths ([b3f590c](b3f590c8b3))
* apply continuous progress bar to erase-object and OCR ([8db84a7](8db84a753c))
* continuous progress bar (no 100%→0% reset) ([28cd950](28cd950ede))
* setError(null) was overriding setProcessing(true) ([b5cc452](b5cc452077))
### Features
* **ai:** add emit_progress() calls to all Python AI scripts ([7238429](723842988b))
* **ai:** add onProgress callback to all AI wrapper functions ([acb230c](acb230cc98))
* **ai:** rewrite bridge.ts to stream stderr progress via spawn ([7d74ddd](7d74ddd3a6))
* **api:** add SingleFileProgress type and SSE update function ([7eddac5](7eddac5119))
* **api:** wire AI route handlers to SSE progress via clientJobId ([27600a4](27600a4318))
* replace model dropdown with intuitive subject/quality selector in remove-bg ([9aa0371](9aa0371a14))
* **web:** add ProgressCard component ([01d5d66](01d5d66466))
* **web:** add ProgressCard to non-AI tool settings (Group A) ([5c64b30](5c64b306ea))
* **web:** migrate AI tool settings to ProgressCard ([dbd3bf7](dbd3bf737e))
* **web:** rewrite useToolProcessor with XHR upload progress and SSE ([60945fd](60945fd3b3))
- Set up semantic-release with zero-touch CI pipeline on push to main
- Add version sync script to keep all package.json files and APP_VERSION
constant in sync automatically
- Consolidate Docker publishing into single tag-triggered workflow that
pushes to both Docker Hub and ghcr.io with semver tags
- Add help dialog with keyboard shortcuts, getting started guide, and
resource links
- Sync all versions to 0.2.1 to match Docker Hub latest
- Add user management endpoints (register, list, delete, change password)
- Add API key management (create, list, delete)
- Add settings persistence endpoints (get, put)
- Wire settings dialog to real backend (People, API Keys, System, Security)
- Fix login auth flow (window.location.href for full reload)
- Fix download URLs returning 401 (make public since UUIDs are unguessable)
- Fix border tool shadowColor validation (accept 6-8 hex digits)
- Fix remove-bg alpha matting fallback (retry without on failure)
- Fix AI tool silent fallbacks (report errors instead of no-ops)
- Add checkerboard background to before/after slider for transparency
- Add progress bars to all AI tool components
- Add Playwright E2E test suite (131 tests across 9 test files)
- Rewrite Dockerfile for production (tsx runtime, pre-baked AI models)
- Add .dockerignore for faster builds
- Add proper accessible labels to login form
- Add replace-color tool with pixel-level color replacement and tolerance
- Register all 19 new Phase 3 tools in routes/tools/index.ts
- Map all new tool IDs to settings components in tool-page.tsx
- Add PDF, ZIP, ICO, JSON content types to download route
- Install qrcode, jsqr, potrace, pdfkit dependencies
Backend: POST /api/v1/tools/:toolId/batch accepts multiple files +
settings, processes via p-queue with CONCURRENT_JOBS concurrency limit,
streams ZIP response using archiver. Tool registry in tool-factory
enables batch to reuse any registered tool's process function. SSE
endpoint at GET /api/v1/jobs/:jobId/progress provides real-time updates.
Handles partial failures gracefully, preserves filenames, deduplicates
collisions. Frontend: use-batch-processor hook handles upload, SSE
progress tracking, and automatic ZIP download.
- Register @fastify/multipart plugin with size limits from env config
- Workspace manager: createWorkspace, getWorkspacePath, cleanupWorkspace
- File validation: magic byte detection, format check, megapixel limit
- POST /api/v1/upload: multipart upload with validation, returns jobId + file metadata
- GET /api/v1/download/:jobId/:filename: serve files with Content-Disposition
- Path traversal guards on all file-serving endpoints
- Add @stirling-image/image-engine and sharp as API dependencies
- Add apiUpload, getDownloadUrl, apiDownloadBlob to web client