Features • Architecture • Local Development • API • Report a Bug
Vanilla Slops is a searchable database of launch options for thousands of games on Steam, live at launchoptions.dev. Every option names the source it was documented in. New to launch options? Start with Steam launch options, explained.
The name Vanilla Slops is a nod to the use of vanilla JavaScript, with our back-end powered by an Express.js API and Supabase (PostgreSQL).
The core philosophy of this project aims to recreate some of the functionality that modern frameworks abstract away, while remaining lightweight, fast, and secure.
Steam Launch Options (SLOPS) are custom command-line parameters that can improve game performance or unlock features outside of the standard game menus.
- Real-time search suggestions across titles, developers, and publishers
- Filtering by developer, engine, release year, and launch-option count
- Column sorting by title, developer, or number of launch options
- Normalized data model — each command is stored once and shared across every game that uses it
- Source attribution showing where each option came from (PCGamingWiki, ProtonDB, community curation)
- Accessibility-first with semantic HTML, ARIA, and full keyboard navigation
- Security hardened with Zod input validation, CORS policies, and rate limiting
- Tested with a Vitest suite plus lint + test CI on every pull request
- Frontend: Vanilla JavaScript (ES6+, no framework) with a custom Redux-style state manager, bundled by Vite
- Backend: Node.js + Express with a routes → controllers → services structure
- Database: Supabase (PostgreSQL) — normalized many-to-many schema with trigram search indexes
- Data collection: Python scraper pulling from the Steam API, PCGamingWiki, and community sources
- Hosting: Deployed on Vercel, live at launchoptions.dev
Maintainer reference. Vanilla Slops is not licensed for use or deployment by others — see License.
# Install dependencies
npm install
# Set up environment variables
cp .env.example .env
# Then, add your Supabase credentials to the new .env file# Example .env
SUPABASE_URL=your_supabase_project_url
SUPABASE_SERVICE_ROLE_KEY=your_service_role_key
NODE_ENV=development
PORT=8000
CORS_ORIGIN=placeholder.com
DOMAIN_URL=placeholder.com| Command | Description |
|---|---|
npm run dev |
Start full dev environment (client + server) |
npm run dev:client |
Start Vite dev server only |
npm run dev:server |
Start backend with nodemon only |
npm run build |
Build for production |
npm start |
Run production server |
npm test |
Run the test suite (Vitest) |
npm run lint |
Check code with ESLint |
npm run lint:fix |
Fix ESLint issues automatically |
npm run db:verify |
Test the Supabase connection |
| Endpoint | Description |
|---|---|
GET /api/games |
List games with filtering & search |
GET /api/games/suggestions |
Search autocomplete suggestions |
GET /api/games/{id} |
Get game details with launch options |
GET /api/games/{id}/launch-options |
Get launch options only |
GET /api/games/facets |
Get available filter options |
GET /health |
API health check |
Retrieve games with advanced filtering and pagination.
Query Parameters:
search- Search term for games, developers, publishersdeveloper- Filter by developer nameoptions- Filter by launch-option count (has-options,no-options,many-options,few-options)year- Filter by release yearsort- Sort field (title,developer,options)order- Sort direction (asc,desc)page- Page number (default: 1)limit- Items per page (default: 20, max: 100)
Response:
{
"games": [
{
"app_id": 440,
"title": "Team Fortress 2",
"developer": "Valve",
"total_options_count": 15
}
],
"total": 1250,
"totalPages": 63,
"currentPage": 1,
"hasNextPage": true,
"facets": {
"developers": [{"value": "Valve", "count": 12}],
"engines": [{"value": "Source", "count": 5}]
}
}Retrieve launch options for a specific game.
Response:
[
{
"id": "uuid-here",
"command": "-windowed",
"description": "Runs the game in windowed mode",
"source": "PCGamingWiki",
"risk_level": "safe",
"categories": ["display"]
}
]Vanilla Slops is built and maintained by one person, and the codebase is closed to outside contributions. Bug reports and launch-option submissions are still very welcome, and they're the most useful thing you can send.
- 🐛 Something broken? → Open a bug report
- 🎮 Know a launch option we're missing? → Submit it here
Pull requests are not accepted.
Copyright © 2025-2026 soundwanders. All rights reserved.
This source is published for transparency and review. It is not open source and carries no license to use, copy, modify, deploy, or redistribute it. Please see the LICENSE file for the full terms.
Built with ❤︎

