The community-driven database for Steam Deck performance data, settings, and compatibility.
DeckyVault is an open-source platform where the Steam Deck community shares real-world performance benchmarks, optimized game settings, and compatibility reports. Every data point comes from actual players — not spec sheets.
Actively developed. The site is live at deckyvault.xyz. Features ship incrementally.
- Community FPS metrics — low / average / high benchmarks from real players
- Extended FPS tracking — FSR, Frame Generation, and upscaling-specific metrics
- Historical graphs — track performance across game versions, Proton builds, and SteamOS releases
- Sectioned settings tables — organized to mirror in-game menus, not flat lists
- Per-device presets — separate optimized settings for Steam Deck OLED, LCD, and Steam Machine
- One-click presets — apply community-verified settings instantly
- Proton vs. Native status — know before you launch
- Online Play & Anti-Cheat tracking — see which multiplayer games actually work
- Playable tags — straightforward compatibility labels
- Rich text comments — Tiptap-powered editor with threaded discussions
- Upvoting — surface the most helpful contributions
- Steam integration — reviews, artwork, and stats pulled directly from Steam
- Unified search — find games, hardware, and benchmarks in one place
- Device profiles — dedicated pages for each hardware device with OG image generation
- Saved games — bookmark and track the games you care about
- Admin dashboard — moderation tools for comments, reports, and content management
┌─────────────────────────────────────────────────┐
│ Next.js 16 │
│ (App Router + React 19) │
├─────────────────────────────────────────────────┤
│ app/ │ components/ │
│ ├── (auth)/ │ ├── comments/ │
│ ├── (manage)/manage/ │ ├── charts/ │
│ ├── api/[[...slugs]]/ │ ├── manage/ │
│ ├── game/[id]/ │ ├── profile/ │
│ ├── games/ │ └── wizard/ │
│ └── ... │ │
├─────────────────────────────────────────────────┤
│ Elysia API (catch-all route) │
│ lib/api/ — 24 route modules │
├─────────────────────────────────────────────────┤
│ Drizzle ORM → PostgreSQL │
│ lib/db/schema/ — 9 schema files │
├─────────────────────────────────────────────────┤
│ better-auth (Google + Discord OAuth, Passkeys) │
│ AWS S3 (file storage) · Resend (email) │
└─────────────────────────────────────────────────┘
The API layer uses Elysia mounted as a catch-all Next.js route handler at app/api/[[...slugs]]/route.ts. All route modules live in lib/api/ and are composed into a single Elysia app.
| Layer | Technology |
|---|---|
| Framework | Next.js 16 (App Router) |
| UI | React 19 · Tailwind CSS v4 |
| Language | TypeScript |
| API | Elysia |
| Database | PostgreSQL · Drizzle ORM |
| Auth | better-auth (Google, Discord, Passkeys, OTP) |
| Editor | Tiptap (rich text) |
| Animations | Motion |
| Charts | ECharts |
| Storage | AWS S3 |
| Resend | |
| Runtime | Bun |
- Bun (v1.1+)
- PostgreSQL database
- Node.js 18+ (for Next.js compatibility)
git clone https://github.com/AdrianBonpin/deckyvault.git
cd deckyvault
bun installCopy the example environment file and fill in your values:
cp .env.example .env.localRequired variables:
| Variable | Description |
|---|---|
DATABASE_URL |
PostgreSQL connection string |
BETTER_AUTH_SECRET |
Secret key for auth sessions |
BETTER_AUTH_URL |
Your app URL (e.g. http://localhost:3000) |
GOOGLE_CLIENT_ID |
Google OAuth client ID |
GOOGLE_CLIENT_SECRET |
Google OAuth client secret |
DISCORD_CLIENT_ID |
Discord OAuth client ID |
DISCORD_CLIENT_SECRET |
Discord OAuth client secret |
AWS_ACCESS_KEY_ID |
AWS S3 access key |
AWS_SECRET_ACCESS_KEY |
AWS S3 secret key |
AWS_S3_BUCKET |
S3 bucket name |
RESEND_API_KEY |
Resend API key for transactional email |
Push the schema to your database:
bun run db:pushOr generate and run migrations:
bun run db:generate
bun run db:migrateSeed the database (optional):
bun run db:seedbun run devOpen https://localhost:3000 (self-signed HTTPS via --experimental-https).
| Command | Description |
|---|---|
bun run dev |
Start dev server with HTTPS |
bun run build |
Create production build |
bun run start |
Start production server |
bun run lint |
Run ESLint |
bun run test |
Run tests with Vitest |
bun run test:watch |
Run tests in watch mode |
bun run db:push |
Push schema to database |
bun run db:generate |
Generate Drizzle migrations |
bun run db:migrate |
Run pending migrations |
bun run db:studio |
Open Drizzle Studio |
bun run db:seed |
Seed the database |
deckyvault/
├── app/
│ ├── (auth)/ # Auth pages (sign-in, reset password)
│ ├── (manage)/manage/ # Admin dashboard
│ │ ├── benchmarks/ # Benchmark moderation
│ │ ├── comments/ # Comment moderation
│ │ ├── games/ # Game management & sync
│ │ ├── hardware/ # Hardware management
│ │ ├── reports/ # Report moderation
│ │ └── users/ # User management
│ ├── api/[[...slugs]]/ # Elysia API catch-all
│ ├── compare/ # Side-by-side game comparison
│ ├── game/[id]/ # Individual game page
│ ├── games/ # Games listing
│ ├── devices/ # Hardware device pages
│ ├── profile/ # User profiles
│ └── search/ # Unified search
├── components/
│ ├── auth/ # Auth-related components
│ ├── charts/ # ECharts wrappers
│ ├── comments/ # CommentSection, CommentItem
│ ├── manage/ # Admin sidebar
│ ├── profile/ # Settings tabs
│ └── wizard/ # Contribution wizard
├── lib/
│ ├── api/ # 24 Elysia route modules
│ ├── auth.ts # better-auth server config
│ ├── auth-client.ts # better-auth client
│ ├── db/
│ │ ├── schema/ # 9 Drizzle schema files
│ │ ├── index.ts # DB connection
│ │ └── seed.ts # Database seeder
│ ├── hooks/ # Custom React hooks
│ └── steam/ # Steam API integration
├── drizzle/ # Generated migrations
├── docs/superpowers/ # Plans & specs
└── public/ # Static assets
Contributions are welcome. Here's how to get involved:
- Report bugs — Open an issue with steps to reproduce
- Suggest features — Describe the problem you're solving and your proposed approach
- Submit code — Fork the repo, create a branch, and open a PR
- Follow existing code patterns and TypeScript conventions
- Run
bun run lintandbun run buildbefore submitting - Keep PRs focused — one feature or fix per PR
- Include screenshots for UI changes
MIT
Built with love for the Steam Deck community.
Created by Adrian Bonpin.
DeckyVault is an independent project and is not affiliated with Valve Corporation.