No description
Find a file
2026-04-26 16:25:12 +03:00
.config feat: Bundled NW.js with appimages 2026-04-26 03:26:15 +03:00
.forgejo/workflows feat: implemented a basic store and emulatorjs 2026-03-14 02:15:57 +02:00
.github docs: Updated screenshots and readme 2026-04-26 16:25:12 +03:00
.vscode feat: Bundled NW.js with appimages 2026-04-26 03:26:15 +03:00
drizzle fix: logins now refresh on plugins load 2026-04-21 23:21:50 +03:00
scripts feat: added update notes and moved update to own tab 2026-04-26 14:56:54 +03:00
src fix: Made self update work on windows 2026-04-26 15:46:03 +03:00
vendors fix: Fixed tests 2026-04-17 21:21:14 +03:00
.gitattributes feat: Implemented audio effects 2026-04-01 21:20:34 +03:00
.gitignore feat: added update notes and moved update to own tab 2026-04-26 14:56:54 +03:00
bun.lock feat: added update notes and moved update to own tab 2026-04-26 14:56:54 +03:00
bun.lockb build: updated bun 2026-01-23 05:58:49 +02:00
bunfig.toml feat: Implemented launching and downloading of roms 2026-02-19 16:10:29 +02:00
CHANGELOG.md chore(release): 1.4.0 2026-04-26 15:46:22 +03:00
drizzle.config.ts feat: Implemented launching and downloading of roms 2026-02-19 16:10:29 +02:00
LICENSE doc: Added license 2026-03-22 16:39:30 +02:00
package.json chore(release): 1.4.0 2026-04-26 15:46:22 +03:00
README.md docs: Updated screenshots and readme 2026-04-26 16:25:12 +03:00
tailwind.config.js feat: implemented a basic store and emulatorjs 2026-03-14 02:15:57 +02:00
tsconfig.json Added nw.js launch options 2026-04-22 18:31:32 +03:00
vite-env-override.d.ts feat: massive front-end overhaul and initial github release 2026-02-08 21:18:10 +02:00
vite.config.ts feat: Bundled NW.js with appimages 2026-04-26 03:26:15 +03:00

Gameflow Deck

A Cross-Platform open source Retro gaming frontend designed for handheld and controllers. Focused on building a simple user experience and intuitive UI as a curated community driven experience.

Warning

This app is actively in development, it is contantly chaning and improving. It will have an opinionated design and will be used as an experiment in discovering a good UX.

Features

Integrations

  • ROMM - download, sync and update roms and platforms.
  • Emulator JS - play your games with emulator js right within the app. Uses RetroArch cores.
  • RClone - sync saves between devices or cloud. Some Emulators and store games support it.
  • UMU - UMU Launcher for playing windows games on linux without needing steam. (Only used for store games for now)

Store

  • Emulators - (WIP) Download and install emulators and automatically configure them from a list of supported in the store. Some even come with advanced features like cloud saves.
  • Free Curated Games - Download free curreted games and homebrew roms without ever leaving the app

Others

  • Cross Platform - Can run on multiple platforms. Built with web technologies and bun backend.
  • Steam Deck Support - Extensively tested with the steam deck. It can use flatpak installed browsers.
  • Lightweight - It uses the window's webview as a frontend, reducing build size and ram usage.
    • On Windows it first uses webview2 then your browser
    • On linux it does ship with NW.js to work on most distros. A big one is the steam deck missing WebKitGTK.
    • Not tested on Mac yet
  • Great for Controllers - The UI is inspired by the switch and works great with joysticks and dpads.
  • Automatic Downloads - Downloads roms from ROMM automatically
  • Automatic Emulator Discovery - Using the configs of the excellent ES-DE to discover installed emulators and launch roms. You can bring your existing configurations.
    • Easy fallback configuration with built in file browser.
  • Responsive Layout - Optimized mainly for the steam deck with responsive layout support and dynamic switching of inputs.
  • Cloud/Device Save Sync - For supported games and emulators.
  • Dark and Light - Dark and light themes for your preference.

Screenshots

Goals

  • I want to build an open and free platform where you can play and discover new hidden gems from the past.
  • I plan to add a free store where you can download all your needed emulators, the goal is to not have to leave the UI for anything.
  • I really want to add matrix chat support in the app for engaging with your favorite community. Having access to so many nodejs libraries would make it quite straight forward.
  • I'm sick of closed source and private store fronts, and want a way to share community currated free experiences. I'm also sick of the profit driven nature of games and promotions.
  • Being self contained, I want to avoid writing as little as possible to system and contain and manage settings in a custom changeable directory. This was mainly a side-effect of having the low storage steam deck and always running out of space on my internal hard drive.

Development

  1. Install dependencies:

    bun install
    
  2. Run in development mode:

    # Use 'bun run dev:hmr' for hot reload
    bun run dev
    
  3. Build for production:

    bun run build:prod
    

    Builds will go in /builds/<platform>.

  4. Additional Commands:

    • bun run mappings:generate converts the es-de configs into local sqlite configs with mappings to rom systems
    • bun run drizzle:generate generates sqlite migrations based on the app schema
    • bun run openapi-ts generated the openapi client calls from romm's API
    • bun run package:windows builds an package to be distributed on windows
    • bun run package:linux builds an AppImage to be distributed on linux
    • bun run test run tests
    • bun run download:chromium downloads degoogled chromium to use as the frontend
    • bun run download:nwjs downloads NW.js to use as a frontend.

Tech Stack

  • Bun for the backend
  • React for the frontend
  • tailwindcss for styling
  • daisyUI for base theme
  • Vite for building the frontend
  • Tanstack router and query for navigation and data
  • elysia for the APIs
  • webview for launching existing system webviews instead of full browser if possible.
  • emulatorjs for playing lots of roms inside the app without having to deal with external emulators

Credits