platform/<version>/apps.json is served uncompressed
@miaulalala is already working on this.
Since Sep 17, 2026.
Assessment
This issue has not been assessed yet.
Description
AppsView carries @method_decorator(gzip_page, name="dispatch") (nextcloudappstore/api/v1/views.py:110) but the versioned listing served at platform/<version>/apps.json never has, so the single largest endpoint in the API is the one shipped uncompressed. It is also the one every Nextcloud instance fetches: lib/private/App/AppStore/Fetcher/AppFetcher.php in nextcloud/server points at it.
Measured against production on 2026-09-17, with Accept-Encoding: gzip sent and no content-encoding in the response: 30.0.0 is 10.9 MB, 31.0.0 11.3 MB, 32.0.0 14.7 MB, 33.0.0 12.3 MB. Gzipping the real 31.0.0 body gives 4.6 MB, so roughly 6.7 MB per response is avoidable — only on a cache miss, since conditional requests already answer 304 correctly in well under a second.
Proposed fixes, cheapest first:
- Add
@method_decorator(gzip_page, name="dispatch")to the view behind theapproute, matchingAppsView. One line, no behaviour change. - Or compress at the edge instead: responses carry
via: 1.1 Caddy, so enablingencodeforapplication/jsonthere fixes every endpoint at once and keeps compression out of the application. Pick one, not both. - While looking:
AppApiAppsView,CategoryView,NextcloudReleaseView,DiscoverViewandAppRatingViewhave nogzip_pageeither.AppsViewis currently the only view in the module that does, which suggests it was added to one endpoint reactively rather than as a policy. - Worth deciding explicitly whether compression belongs in the app or at the proxy, and writing that down, so the next large endpoint does not repeat this.
Note the compression ratio is only about 2.5x rather than the usual 8-10x for JSON, because much of the payload is base64 signatures and certificates.
- Dominant language
- Python
- Stars
- 392
- Forks
- 177
- Avg merge
- 1d 2h
- Merged PRs (30d)
- 29
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from nextcloud/appstore
-
enhancement feature: scaffolding
Difficulty 4/5 3-5 days Newbie friendliness 52/100
-
enhancement technical debt
Difficulty 4/5 3-5 days Newbie friendliness 52/100
-
enhancement feature: api
-
design enhancement technical debt
Difficulty 4/5 3-5 days Newbie friendliness 48/100
-
enhancement feature: ratings
Difficulty 4/5 3-5 days Newbie friendliness 52/100
All issues in nextcloud/appstore
Similar issues
-
area/auth bug comp/agent P3 platform/discord type/security
Difficulty 2/5 1-3 hours Newbie friendliness 88/100
NousResearch/hermes-agent#117848 ·
-
Difficulty 2/5 1-3 hours Newbie friendliness 74/100
bancolombia/sentinel#23 ·
-
test md OpenCI
Difficulty 2/5 1-3 hours Newbie friendliness 74/100
-
integration:quickjs org:external priority:backlog topic:code-interpreter topic:middleware type:feature
Difficulty 2/5 1-3 hours Newbie friendliness 74/100
langchain-ai/deepagents#6450 ·
-
bug client
Difficulty 2/5 1-3 hours Newbie friendliness 88/100