Skip to main content
The Community Packs browser reads a public JSON index, filters entries by the current map, and imports selected .akr packs.

Catalog URL

Remote catalog URLs are HTTPS JSON endpoints. Local testing can use an explicit file:/// index path. Command examples use this placeholder:
Replace this placeholder with a full catalog URL. Custom URLs enable local testing, self-hosted packs, or recovery if the primary catalog is unavailable. The official Akron catalog is served at:
The Akron website handles the public akron.micr.dev catalog routes and rewrites reserved asset paths to Cloudflare R2: Players and catalog entries should use the Akron-branded URLs. Raw R2 URLs are a storage fallback, not the public catalog contract.

JSON shape

The catalog is a JSON document with the following structure. Replace angle-bracket placeholders with valid HTTPS URLs:

Pack fields

The section field must be one of the three community-supported values:
The in-game categories are All, StartPos, Auto Kill, and Auto Deafen. All is a browser filter, not a pack section.

Publishing guidelines

Each catalog entry must point to a .akr file for a specific map and sharing scope. Before adding archives to the catalog, ensure that:
  • The mapSid matches the Celeste map SID.
  • The downloadUrl is a stable HTTPS URL for the .akr file.
  • Catalog metadata is updated whenever the pack changes.
  • The .akr is no larger than 512 MiB.
  • Optional catalog image sources submitted through Akron are no larger than 24 MiB before optimization.
  • The images list and legacy imageUrls list each declare no more than 16 entries. The legacy imageUrl field can add one single preview. Akron removes duplicate URLs when it builds the preview list.
  • Optimized catalog images are no larger than 2 MiB, no wider or taller than 2048 pixels, and no larger than 4,194,304 pixels in total.

Catalog reader limits

The official in-game upload flow accepts StartPos, Auto Kill, and Auto Deafen packs. Auto Kill and Auto Deafen areas are coordinate-based setup state, so catalog maintainers should reject area packs when the submitted map SID does not match the map those areas were created for. One in-game upload captures at most 10 marked rooms. For StartPos uploads, Akron orders candidate rooms by the lowest saved StartPos slot in each room before applying that limit.

Catalog validation

Before publishing, verify the catalog-facing pack contract:
  • Verify that the archive contains manifest.json, setup.json, and the exact v10 snapshot entry named by each StartPos.
  • Verify that the manifest kind is setup.
  • Ensure that setup.json uses the akron-setup-v7 format.
  • Verify that the entry section exactly matches the setup section.
  • Confirm that the download URL returns the expected .akr archive.
  • Reject every section except StartPos, AutoKill, and AutoDeafen.
The official Discord bot also enforces implementation-level safety checks before publishing:
  • Open archives in memory and never extract uploaded archives to the filesystem.
  • Reject absolute paths, .. traversal, nested archives, unexpected files, suspicious compression ratios, oversized JSON payloads, and suspicious command-like or credential-like text.
See Akron .akr archives for the full archive contract and import safety rules.

Storage and publication architecture

The official catalog separates unreviewed upload storage from public catalog storage. In-game uploads go to the Upload Worker first. The Worker stores source .akr files and marked-room captures in a private quarantine bucket, records batch, submission, and object state in its database, and exposes signed bot-only endpoints for moderation. Nothing from quarantine is public. The Discord bot polls the Worker for queued jobs, posts moderation messages, handles attribution confirmation, and sends approve, reject, or request-changes actions back to the Worker. Moderation messages should attach every marked-room capture and expose next/previous controls when Discord-side pagination is needed. Approval is the only path that copies a pack into public catalog storage. The StartPos, Auto Kill, and Auto Deafen Discord forums are bot-authored showcases for approved catalog packs. Members can read and reply, but cannot create posts there. Keybind, HUD, audio, and recorder forums still accept direct member posts and remain outside the map catalog. When a submission is approved, the Worker writes the .akr archive to the public pack path, transforms each marked-room capture into an optimized catalog preview image, stores those previews at the public capture path, and rebuilds catalog/index.json with an images array. The public website serves branded Akron URLs and routes the reserved catalog and map asset paths to the public storage objects. Operational capacity depends on the number and size of approved public packs, optimized preview images, retained quarantine objects, catalog refreshes, pack downloads, and image transformations. Keep provider quotas in deployment configuration and monitoring, not in the player-facing catalog contract.

Runtime logic

Akron filters catalog entries using the following criteria:
  • Current map SID.
  • Selected category.
  • Search terms against title, description, author, map URL, section label, and tags.
When a player imports a pack, Akron downloads it to Saves/AkronSetups/community-*.akr and imports the declared scope.

Automation commands

Debug and live verification can drive the same browser flow:
list prints the currently filtered zero-based entries. import uses the same download and scoped import path as the in-game button.