GameNative Documentation

Native PC gaming with Steam, Epic, GOG and Amazon integrations on Android

11,396 stars Kotlin Kotlin 2 files ยท ~2,541 tokens #gaming#mobile-gaming#pc-gaming#steam
RAW Doc

Technical Documentation: utkarshdalal/GameNative

โ„น๏ธ Provenance: Multi-Tier Ingestion ยท CodeWiki Reference

Overview (README.md)


GameNative lets you run the PC games in your Steam, Epic and GOG libraries directly on Android โ€” no streaming required. Your saves sync to the cloud, so you can stop on your PC and keep going on your phone.

It's still early. Not every game runs yet, and some need tweaking to play well, but the community is constantly finding and sharing configs that work โ€” and these get applied automatically. You can see if anyone has tried running your game successfully at https://gamenative.app/compatibility.

What you get

  • Play games you actually own on Steam, Epic, GOG and Amazon
  • Cloud saves that carry over between your PC and your phone
  • Automatically applied known configs, so many games just work out of the box with no tweaking required
  • Controller and touch support, with a custom control editor and on-screen HUD
  • Steam DLC, workshop and branch support
  • Active support over Discord if you need help getting a game running

Demo

TechDweeb walks through setting up GameNative on an Android handheld in a couple of minutes:

How to use

  1. Download the latest release here
  2. Install the APK on your Android device
  3. Log in to your Steam account
  4. Install your game
  5. Hit play and enjoy

Support

The fastest way to get help is the Discord server โ€” we're 35k+ strong and someone's usually around.

Please don't open issues on GitHub; they're closed automatically. Bring it to Discord instead.

If you'd like to chip in, you can support the project on Ko-fi.

Contributing

Want to help out? Message us to get into the #development channel on Discord, or open a thread there. Things we're currently looking for help with live on our Trello board.

Fix a game that doesn't work

Every night we publish the list of games that don't run in GameNative, built from real usage data, at GameNative/gamenative-compat. Each broken game has an open issue with the numbers behind it: how many players hit it, what they report, whether the game window ever renders.

If you want to take one on:

  1. Pick a game from the list and open its issue. Check the comments to see whether someone is already on it, then leave a comment saying you are taking it.
  2. Work out why it fails. Most fixes land in this repo, in proton-wine, in FEX, in the GPU driver wrappers or in the per-game config.
  3. Open a pull request in the right repo, then comment on the game's issue with a link to it. Once the fix ships and players start getting the game to run, the issue closes itself.

Own a broken game and want to donate a key so someone can fix it? Email [email protected].

Building

Most of the time you don't need this โ€” if you just want to play, grab the release above. This is for contributors.

  1. Build it like any normal Android Studio project. Ask on Discord if you get stuck.
  2. SteamGridDB API key (optional): to pull game artwork for custom games, add your key to local.properties:
    properties
    STEAMGRIDDB_API_KEY=your_api_key_here
    You can get one from your SteamGridDB preferences. Without it everything still works โ€” it just won't fetch images.

Analytics & privacy

GameNative uses PostHog for anonymous analytics. No personal information is ever collected โ€” no names, emails, IPs or device identifiers.

Always collected, to improve game compatibility:

  • Game launch, close and exit events (game name, store, session length, average FPS, container config)
  • Game install, cancel and uninstall events

This is how we figure out which games work, how well they run, and which configs to apply automatically for the next person. It can't identify you.

Optional, and switchable under Settings โ†’ Info โ†’ Usage Analytics:

  • Feature usage (on-screen keyboard, controller, HUD, control editor)
  • Login success/failure events
  • Recommendation interactions
  • App lifecycle events (foreground/background)
  • Cloud sync events

The full Privacy Policy has the details.

Supporters

Thanks to our Ko-fi sponsors and GitHub sponsors, including CodeRabbit.

License

GPL 3.0.

See THIRD_PARTY_NOTICES for attributions, copyleft source offers, and notices about third-party and proprietary components bundled with the app.


Disclaimer: This software is meant for playing games that you legally own. Don't use it for piracy or anything else illegal. The maintainer takes no responsibility for misuse.


Posthog Recipes (`docs/posthog-recipes.md`)

PostHog recipes

Queries we derive server-side instead of adding client tracking. All of them use events that already
ship behind the usage-analytics setting.

Time away after a store click

The app does not record when a user comes back from a store page. Derive it from the click event and
the next Application Opened event for the same person. That is the PostHog SDK's own lifecycle event
and it fires on every return to the foreground. Do not use our custom app_foregrounded; as of
September 2026 it does not appear in PostHog at all. Use recommendation_link_clicked for the Discover
buy button and featured_action_clicked for campaign CTAs; both carry sid (the CJ sub-ID), source
and rank.

sql
SELECT sid, game_name, source, rank, click_ts, next_fg,
       dateDiff('second', click_ts, next_fg) AS away_s
FROM (
    SELECT event, timestamp AS click_ts,
           properties.sid AS sid,
           properties.game_name AS game_name,
           properties.source AS source,
           properties.rank AS rank,
           -- first foreground after this row, per person
           minIf(timestamp, event = 'Application Opened') OVER (
               PARTITION BY person_id ORDER BY timestamp
               ROWS BETWEEN 1 FOLLOWING AND UNBOUNDED FOLLOWING
           ) AS next_fg
    FROM events
    WHERE timestamp >= now() - INTERVAL 7 DAY
      AND event IN ('recommendation_link_clicked', 'Application Opened')
)
WHERE event = 'recommendation_link_clicked'
  AND next_fg > click_ts                          -- minIf returns epoch 0 when nothing follows
  AND next_fg <= click_ts + INTERVAL 30 MINUTE    -- longer gaps are a new session, not a return
ORDER BY click_ts DESC

Notes:

  • One scan of events; no join. minIf over the window finds the next foreground per person.
  • Clicks with no foreground inside 30 minutes drop out. Count them separately if you want a
    "never came back" rate: same query without the two next_fg filters, then countIf(next_fg = 0 OR next_fg > click_ts + INTERVAL 30 MINUTE).
  • hero source with rank -1 is the All-tab hero card, not Discover.

Joining CJ sales to placements

The sub-ID on GOG affiliate links is gn_{source}_r{rank}_{clickId}. clickId is present only when
usage analytics is on. In the CJ commission report, split the SID on _ to get source and rank, and
match clickId to properties.click_id on recommendation_link_clicked or featured_action_clicked
for the rest of the click's properties.

Campaign to install or launch

game_install_started and game_launched carry campaign_id, campaign_source and
campaign_click_age_s when the Steam app was reached through a campaign CTA in the last 14 days. No
derivation needed; filter on campaign_id being set.


--- METRICS ---