Test
Install with App

Details

Latest version
1.0.0
Last Updated
First Uploaded
Downloads
26
Likes
0
Size
523MB
Dependants

Categories

Spinning Seal (QA upload fixture)

A seal. It spins. Nothing else happens, but it happens at 6.3 MiB of icon.

This package exists to exercise the Thunderstore upload pipeline (usermedia multipart upload, package validation, file-tree/blob storage, icon storage, README/CHANGELOG rendering) with a realistic, dependency-free package that sits just under every limit at once. All content is procedurally generated (see docs/LICENSE.txt); nothing here is copied from any real mod.

What it pushes against

Limit (server default) This package
Package size, 500 MiB 523000000 bytes target, ~1.2 MiB under the cap
Zip entries, 10000 roughly 1042 files plus directory entries
icon.png, 6 MiB, PNG, 256x256 animated PNG (APNG), 32 frames, ~6.1 MiB
README/CHANGELOG, 100k chars this file plus a CHANGELOG
Dependencies none

Layout

Folder Files Size on disk
assets/ 897 398.2 MiB
config/ 82 0.0 MiB
docs/ 25 0.0 MiB
plugins/ 25 30.1 MiB
src/ 8 0.2 MiB

Plus the root files: manifest.json, icon.png, README.md, CHANGELOG.md, LICENSE.

File types: .json (164), .wav (154), .png (139), .pak (100), .jpg (50), .tga (46), .cfg (41), .lua (40), .csv (20), .mat (20), .prefab (20), .meta (20), .shader (20), .xml (18), .txt (16), .unity3d (15), .md (13), .ogg (11), .yaml (10), .hlsl (10), .anim (8), .dll (8), .pdb (8), .cs (8), .obj (6), .dds (6), .bmp (6), (none) (5), .ini (5), .toml (5), .cginc (5), .frag (5), .webp (5), .assetbundle (3), .html (3), .bundle (2), .mp4 (2), .pdf (2), .flac (1), .m4a (1), .mp3 (1), .opus (1), .ttf (1), .otf (1), .bin (1), .gltf (1), .mtl (1), .ply (1), .stl (1), .glb (1), .controller (1), .tif (1), .webm (1), .mkv (1), .gif (1), .mov (1), .rtf (1)

Deliberate edge cases (all valid)

  • Eight real .NET assemblies under plugins/SpinningSeal/ with embedded binary resources, PDBs and XML docs. Eight is the most before the upload page warns.
  • Several files above 8 MiB (video, audio, bundles, a 12 MiB+ streaming bundle) and hundreds under 100 KiB, so both the batched and multipart blob paths run.
  • Identical file contents under different names (textures, licence, empty .gitkeep files) to exercise blob deduplication, including the empty blob.
  • Non-ASCII file names (Finnish, Japanese), names with spaces and an en dash, upper-case extensions, a file without an extension, and a deep path.
  • A mix of stored and deflated zip entries, plus explicit directory entries.
  • A nested README.md inside plugins/, which must not confuse root detection.

Re-uploading

Thunderstore refuses a second upload of the same namespace, name and version. Use bump_version.py from the build folder to re-issue the same archive under a new version (or a new name, to test the new-package path) without rebuilding.

Credits

Inspired by the internet's favourite rotating pinniped.

Test campaign placeholder
Test campaign placeholder
Test campaign placeholder
Test campaign placeholder
Test campaign placeholder