2026-10-07 - 2026-10-14
Overview
2 Releases published by 1 user
Published
v1.0.0-rc2
Published
v1.0.0-rc1
13 Pull requests merged by 1 user
Merged
#259 Refuse a fit=outside size whose output exceeds the maximum (closes #257)
Merged
#258 Refuse a size whose computed side exceeds the maximum (closes #241)
Merged
#239 Remove the unused cache lifetime setting (closes #69)
Merged
#240 Refuse SVG sources and never save an unknown input as JPEG (closes #68)
Merged
#235 Keep counts not written by the request's deadline in memory (closes #224)
Merged
#237 Limit each client's requests to the image routes (closes #236)
Merged
#234 Save PNG compressed, WebP at effort 4 and AVIF at effort 1 (closes #232)
Merged
#233 Serve JPEG XL when a request names no format (closes #222)
Merged
#230 Serve and accept JPEG XL as an image format (part of #222)
Merged
#231 Run pixad on the Alpine release it is built on (closes #229)
Merged
#228 Eviction no longer reads a whole table while requests wait on the database (closes #227)
Merged
#226 Install libvips JPEG XL support and require it at startup (part of #222)
Merged
#225 Queue SQLite writes on one connection so none fails as locked (closes #223)
14 Issues closed from 1 user
Closed
#257 fit=outside with both sides given makes an output of unbounded size
Closed
#241 A request with one dimension 0 makes an output of unbounded size
Closed
#69 CacheConfig.CacheTTL is configured but never read — cached variants never expire
Closed
#68 Decide on SVG: it is accepted and rendered by libvips, and format=orig silently returns JPEG
Closed
#113 Delete five stale remote branches
Closed
#103 Tracking: 1.0.0 sequencing and critical path
Closed
#238 TestService_Get_WaitsForSlotBeforeReadingCachedSource fails when the host is busy
Closed
#224 TestService_Get_ReturnsByItsDeadline fails when the host is busy
Closed
#236 One client can keep every image processing slot busy: the image routes have no limit per client
Closed
#232 PNG output is saved uncompressed, and WebP, AVIF and GIF at the lowest effort
Closed
#222 JPEG XL as a first-class format, and the default output when none is specified
Closed
#229 The runtime image runs pixad on an older Alpine and libvips than it was built with
Closed
#227 Requests wait behind the eviction pass's whole-table queries on the one database connection
Closed
#223 Concurrent SQLite writes still fail with "database is locked" under load, so next is red
25 Issues created by 1 user
Opened
#222 JPEG XL as a first-class format, and the default output when none is specified
Opened
#223 Concurrent SQLite writes still fail with "database is locked" under load, so next is red
Opened
#224 TestService_Get_ReturnsByItsDeadline fails when the host is busy
Opened
#227 Requests wait behind the eviction pass's whole-table queries on the one database connection
Opened
#229 The runtime image runs pixad on an older Alpine and libvips than it was built with
Opened
#232 PNG output is saved uncompressed, and WebP, AVIF and GIF at the lowest effort
Opened
#236 One client can keep every image processing slot busy: the image routes have no limit per client
Opened
#238 TestService_Get_WaitsForSlotBeforeReadingCachedSource fails when the host is busy
Opened
#241 A request with one dimension 0 makes an output of unbounded size
Opened
#242 Memory per image and the default number of images processed at once are not bounded or documented for the container
Opened
#243 Image processing runs past the request's deadline and keeps its slot
Opened
#245 A cached variant is refused while its source URL is in the negative cache
Opened
#246 The host segment is not normalized before the allowlist, the per-host limit and the cache keys
Opened
#244 Negative-cache rows are never purged, so the database grows without bound
Opened
#247 The signed data and the cache key are ambiguous between path and query
Opened
#248 A chunked upstream body of exactly the maximum size is refused
Opened
#249 The example config allowlists public hosts that carry anyone's uploads
Opened
#250 The reconciliation pass costs one database query per cached file and runs back to back on a large cache
Opened
#251 The upaas section calls the cache size limit optional, but its default takes three quarters of a shared filesystem
Opened
#252 A cached file left empty or partial by a crash is served or re-fetched forever
Opened
#253 A source whose first bytes do not match its Content-Type answers 500 and is fetched again on every request
Opened
#254 The request metrics label every distinct URL path, so unauthenticated requests grow memory without bound when metrics are on
Opened
#255 The README gives no way to put a source query into a signed image URL, and the in-tree builder makes one that fails
Opened
#256 Logging out does not end the login session
Opened
#257 fit=outside with both sides given makes an output of unbounded size
9 Unresolved Conversations
Open
#112
Release: tag v1.0.0 on main once the milestone closes
Open
#168
Recommendations for a clearer, simpler object and data model
Open
#180
Test the /metrics basic auth and metrics recording through the router (needs approval to change an existing test)
Open
#203
The Gitea workflow runs script/docker-smoke besides script/cibuild
Open
#149
next -> main
Open
#39
Refactor: split internal/imgcache into focused packages
Open
#83
Capture upstream Last-Modified/ETag and support conditional revalidation
Open
#85
No pixa-specific Prometheus metrics, and metrics are not collected at all unless credentials are configured
Open
#147
main -> prod: first deploy of pixa