Counter-Strike 2 container opening, collectible opening, glossary, and Trade-Up simulator built with Flutter and Dart.
The project focuses on reproducing CS2-style opening behavior, supporting more and more CS2 collectible content, and keeping the local item database generated from external data in a reproducible way.
This project is an unofficial fan-made simulator and is not affiliated with Valve.
Counter-Strike, Counter-Strike 2, item names, icons, images, and other related game assets are trademarks or property of their respective owners.
Unless explicitly stated otherwise, the repository license applies to the source code of this project and does not automatically grant rights to third-party game content, trademarks, or externally sourced assets or data.
- Case opening with roulette animation
- Optional X-Ray opening mechanic
- Souvenir packages with tournament-based dates
- Skin pattern seed and finish variant support, including phase-aware finishes
- Persistent collection tracking with a saved inventory and recent activity
- Collection-aware glossary browsing with per-item collected counts
- Collection progress and per-source stats across containers and collections
- Broad automated test coverage across simulator, collection, repository, and helper layers
- Major tournament section covering CS:GO and CS2 eras
- Major teams and players browsing
- Operation and Armory reward collections
- Legacy operation collections
- Sticker capsules
- Sticker collections
- Collectible pins capsules
- Music Kit Boxes, including
StatTrak™music kits - Agent collections
- Graffiti boxes
- Patch packs and patch collections
- Charm collections
- Item glossary hub with dedicated screens for skins and collectibles
- Trade-Up simulator
- Flutter
- Dart
- Local JSON assets for all generated content
- Dart-based importer for containers, skins, stickers, pins, music kits, agents, graffiti, patches, charms, and unified source metadata
- lib/ application code
- assets/data/ generated JSON data
- assets/containers/ images for containers and collection-type sources
- assets/skins/ skin images
- assets/stickers/ sticker images
- assets/pins/ pin images
- assets/music_kits/ music kit images
- assets/agents/ agent images
- assets/graffiti/ graffiti images
- assets/patches/ patch images
- assets/charms/ charm images
- tool/import_cs_data.dart main importer entrypoint
- tool/prune_generated_assets.dart cleanup tool for orphaned generated assets
- Flutter SDK
- Dart SDK
The project currently targets Dart ^3.11.3.
flutter pub getflutter runPrebuilt builds are published on the GitHub Releases page.
The app uses generated local JSON files and image assets. If you want to rebuild them:
dart run tool/import_cs_data.dartCompression modes:
dart run tool/import_cs_data.dart --compression=fast
dart run tool/import_cs_data.dart --compression=max-compressfastis the default mode and is intended for normal development workmax-compressis intended for rare clean release rebuilds
The main generated source registry is assets/data/containers.json.
It includes regular containers as well as collection-type sources such as reward collections, legacy operation collections, agent collections, sticker collections, patch collections, and charm collections.
After a large migration or a clean import, you can remove orphaned generated assets:
dart run tool/prune_generated_assets.dart- Existing generated assets are not overwritten during normal imports
- The importer stores the actual generated extension, including
.webpwhere applicable - Collection-type source images are stored alongside regular container images in
assets/containers/ - Container dates are resolved locally instead of trusting API sale dates
- Supported container types fail the import if a hardcoded release date is missing
- Generated assets can be rebuilt in
fastormax-compressmode depending on whether you are doing normal development or a release rebuild
- Run
flutter pub get - Run
dart run tool/import_cs_data.dart - Optionally run
dart run tool/prune_generated_assets.dart - Launch the app with
flutter run
The importer consumes public CS data from ByMykel's API and then normalizes it locally for simulator-specific behavior.
The source code in this repository is licensed under AGPL-3.0.
The project is actively evolving, with current work focused on:
- maintaining data quality for tournaments, teams, players, and item metadata
- continuing UI/codebase cleanup to reduce duplicated screen logic
- stabilizing the simulator experience ahead of a 1.0 release
- deciding which remaining quality-of-life features belong in a final pre-1.0 update
- Final pre-1.0 quality-of-life pass across inventory, glossary, and simulator flows
- Decide which remaining convenience features should land before 1.0 and which should move to post-1.0
- Release-readiness pass on wording, navigation, empty states, and general UX consistency
- Freeze the core feature set around simulator, collection, glossary, and Major history
- Focus on stability, maintainability, and product consistency instead of broad new content expansion
- Keep future additions optional unless they clearly strengthen the main simulator experience
- Music Kit preview playback if a maintainable preview-audio import pipeline becomes available
- Optional China / Perfect World visual mode once a reliable alternate asset source is available
- In-game store for items purchased directly instead of opened from containers
- Souvenir-O-Matic support for majors without traditional souvenir packages
- Improved tournament metadata importer for logos, dates, teams, rosters, playoffs, and winners
- Tournament history with richer team, roster, playoff, and winner browsing
- Collection goals and achievements
- Favorites, tags, and custom collection showcases
- Saved Trade-Up contract templates
- Tentative: inventory-based Trade-Up suggestions for contracts that can be assembled from collected skins
- Multiple local profiles
- Save import and export
- Historical operations, passes, and limited stores