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

Catalog URLs are HTTPS JSON endpoints. 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 following values:
In-game category buttons primarily focus on map-specific sharing cases: All, StartPos, Auto Kill, and Auto Deafen.

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 4 MiB.
  • Optional catalog image sources are no larger than 100 MiB before optimization.
  • Optimized catalog images stored in R2 are no larger than 4 MiB.
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.

Catalog validation

Before publishing, verify the catalog-facing pack contract:
  • Verify that the archive contains exactly manifest.json and setup.json.
  • Verify that the manifest Kind is setup.
  • Ensure that setup.json uses the akron-setup-v2 format.
  • Verify that the entry section matches the setup section, unless a different scope is intended.
  • Confirm that the download URL returns the expected .akr archive.
  • Reject Whole setup packs from the public Discord catalog.
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. 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.