This repository hosts the software for the COMS Console, a Raspberry Pi-based project with a unique, duck-inspired design owned by the Computing Organization for Multicultural Students.
- 🖥️ Window management of game launcher
- Manages game and launcher screen real estate
- 🎮 Displays a library of all custom-made games
- 📂 Retrieves and manages all games from a game library directory (varies by OS)
- 🛠️ Supports multiple game-making platforms (and in the process of adding more!)
- 🐍 Pygame
- 🎲 Godot
- 🌐 Web Games (No Dev API Support)
- 🛠️ Game developer libraries for Quackbox console integration
- 🏆 Support for Leaderboard entries and Save Data
- 🌍 Cross-platform support
- 🤖 Automated CI + CD builds for the Raspberry Pi, Mac, Windows, and Debian Linux
| Category | Tool/Language | Icon |
|---|---|---|
| Frontend | React | |
| JavaScript | ||
| Backend | Tauri | |
| Rust | ||
| Sqlite | ||
| Build Tools | Vite |
Check releases for the latest packaged version!
The Game Library stores all custom games accessible through the COMS Console. Upon running the application for the first time, a games folder will be automatically created in the user data directory.
If you have a zipped collection of games, unpack them into this folder to match the following structure:
coms-console
└── games
├── all-games.json
├── game1
│ ├── <game source files>
│ └── game-metadata.json
├── game2
│ ├── <game source files>
│ └── game-metadata.json
├── game3
│ ├── <game source files>
│ └── game-metadata.json
└── game4
├── <game source files>
└── game-metadata.json
Each game should reside in its own folder with the following components:
<game source files>: All essential files for the gamegame-metadata.json: Metadata file containing information about the gameall-games.json: A file containing all the games currently on the Quackbox. The ids in this file are used for the leaderboard saves
The games folder is located within the user’s application data directory, which varies by operating system:
-
Linux:
$XDG_DATA_HOME/coms-console or $HOME/.local/share/coms-console -
macOS:
$HOME/Library/Application Support/coms-console -
Windows:
$HOME\AppData\Roaming\coms-console
Note
Make sure to extract the games directly into the games folder to ensure the application can locate and display them properly.
Checkout the developer setup guide if you're interested in contributing.
- Migrated frontend from Create React App to Vite for improved performance and faster build times
- Cleaned up
package.jsonby removing unnecessary dependencies - Initialized a Tauri project to replace the previous Python backend, incurring less overhead during IPC and giving more control over window management
- Configured Vite to work seamlessly with Tauri
- Set Tauri to launch in fullscreen mode on startup for a better user experience
- Introduced error handling for file system access that propagates to the front end
- Added a http web server to handle leaderboard and save data requests made locally to port 6174
- Added a sqlite database to store user and game data
- Reorganized structure of project to promote modularity
- Created integration tests to reduce introduction of bugs
- Introduced the Quackbox Design System to improve user interface and experience
- Overhauled the controller connection and navigation systems
- Introduced CI using Github Actions and updated old CD pipelines
-
Simplified Raspberry Pi Deployment: Streamline the deployment process on the Raspberry Pi to make it more user-friendly
-
Kiosk Mode: Run with less overhead using a custom kiosk window manager like cage (for pi only)
-
Game Updating & Version Control Integrate a system for downloading updated versions of games
-
Pause Menu Screen: Implement a general overlay that communicates to the game to pause and give the options to quit out of a game
-
Global Controller Key Listening: Listen for certain inputs from the controller globally to manage game runtimes
-
Tauri v2 Migration: Transition the backend tauri api from v1 → v2 for easier IPC, further package compartmentalization, and more testing functionality
-
Unit Testing: Create unit and integration tests to establish continous integration workflow
-
TypeScript Migration: Transition the frontend codebase from JavaScript to TypeScript to improve type safety
-
Dark Mode: Introduce a dark mode option for user experience and accesibility
-
Expanded Controller Support: Increase support for various game controllers to enhance accessibility and user engagement
If you have any feedback, feature requests, or comments, please reach out to us at coms@rit.edu.
This software is licensed under the MIT License.