Add Achievements to Any Game on Linux: A Practical Step-by-Step Guide
guideslinuxmodsachievements

Add Achievements to Any Game on Linux: A Practical Step-by-Step Guide

AAlex Mercer
2026-04-08
8 min read
Advertisement

A hands‑on Linux guide to inject achievements into non‑Steam games — install, configure, avoid pitfalls, and sync to Discord or Steam as a visual overlay.

Add Achievements to Any Game on Linux: A Practical Step-by-Step Guide

If you've ever wished non‑Steam games on Linux had achievements, you're not alone. A small but growing niche of developers has built tools that inject achievements into games that never shipped with them. This guide walks Linux gamers through how these tools work, how to install and configure one on your system, common pitfalls to watch for, and ways to sync or display those achievements in Steam and Discord. Expect practical, actionable steps you can try tonight.

Why add achievements to non‑Steam games?

Achievements can increase replay value, encourage exploration, and give players bite‑sized goals. For modders and completionists, being able to add a lightweight achievement layer to a game that lacks one is a fun way to extend life and community engagement. While you can't convert a non‑Steam game into an official Steamworks title without the developer's involvement, achievement injectors offer a local, third‑party alternative to track milestones and announce them via overlays, logs, or Rich Presence.

How these tools generally work

Most achievement injectors for Linux follow a similar architecture:

  • A small wrapper/launcher that starts your game and injects a runtime hook.
  • A configuration file (JSON/YAML) that lists achievements, triggers, and conditions.
  • A local tracker service or process that listens for triggers and records unlocks.
  • Optional integrations: Discord Rich Presence, an overlay, or a web dashboard.

Because implementations vary, this guide focuses on the common practical steps you will encounter and gives concrete examples you can adapt to your preferred tool or fork.

Before we start: checklist

  • Linux distribution with a working package manager (Debian/Ubuntu, Fedora, Arch, etc.).
  • Basic command line familiarity (git, pip, systemctl or user services).
  • Your game installed and runnable locally.
  • If the game uses Proton/Wine, be ready for additional compatibility work.

Step 1 — Install the achievement injector

While specific repo names differ, the installation steps are usually similar. The example below uses a hypothetical open‑source project called achievement-injector. Replace names/URLs with the actual repo you choose.

  1. Clone the repo:
    git clone 'https://github.com/username/achievement-injector.git' ~/achievement-injector
  2. Install dependencies. The project might use Python, Node.js, or a compiled language. Example for a Python-based tool:
    cd ~/achievement-injector && python3 -m venv venv && source venv/bin/activate && pip install -r requirements.txt
  3. Build or install the launcher if needed:
    make && sudo make install
    (or use the project's packaging instructions).
  4. Optionally, install a systemd user service to run the local tracker automatically:
    cp achievement-tracker.service ~/.config/systemd/user/ && systemctl --user enable --now achievement-tracker.service

Quick tips

  • Use your distribution packages where possible (python3, node, gcc). This avoids version mismatches.
  • If the project provides an AppImage/Flatpak, prefer those for easier sandboxing—just remember Flatpak sandboxing can block injections unless you grant permissions.

Step 2 — Configure achievements (practical example)

Achievements are usually declared in a JSON or YAML file. A minimal JSON example looks like this:

{
  "game_id": "mygame-local",
  "achievements": [
    {"id": "first_blood", "title": "First Kill", "desc": "Defeat your first enemy", "trigger": "on_enemy_defeated", "value": 10},
    {"id": "explorer", "title": "Explorer", "desc": "Visit 10 different rooms", "trigger": "on_room_entered_count", "params": {"count": 10}}
  ]
}

Common trigger types you will see:

  • Log parsing triggers — watch the game's stdout/stderr for specific lines.
  • Memory/variable hooks — read a memory address or watch a variable (advanced).
  • Input events — trigger based on key presses or controller inputs.
  • File changes — detect save file updates for progress tracking.

Step 3 — Hooking the game (how to launch)

The wrapper launcher is how the tool monitors game activity. Two common approaches:

  1. LD_PRELOAD wrappers that inject a shared library to intercept file I/O, networking, or other system calls.
  2. A simple wrapper that runs the game and pipes its stdout/stderr into the tracker for pattern matching.

A launch example that pipes output:

./achievement-launcher --config ~/achievement-injector/configs/mygame.json -- ./path/to/game/binary 2>&1 | ./achievement-tracker --config ~/achievement-injector/configs/mygame.json

If your game runs under Proton/Wine, you may need to wrap proton's launch command instead. Expect extra troubleshooting when crossing the native/Wine boundary.

Step 4 — Displaying and syncing achievements

There are three practical display/sync options:

1) Local overlay or notification

Many injectors ship with a simple desktop notification or overlay module. If you're using a compositor that supports overlays (X11 with xfwm, KDE, etc.), enable the overlay in the injector settings. Example using notify-send for desktop notifications:

notify-send 'Achievement Unlocked' 'First Kill — 10 XP'

2) Discord Rich Presence

Discord Rich Presence is straightforward to integrate. Tools use libraries like pypresence (Python) or discord-rpc (Node) to push a presence that mentions current achievement progress. Example conceptual steps:

  1. Register a Discord Application in the Discord Developer Portal and copy the client ID.
  2. Configure the injector with the client ID and RPC payload (title, small/large images).
  3. The injector calls the Discord RPC when achievements unlock: it can set a small status like "Unlocked: Explorer" or increment a custom counter.

Note: Discord Rich Presence is visible to friends and in your profile. It won't add achievements to Steam or your public game stats, but it makes unlocks sharable.

3) Steam integration — what you can and cannot do

Important: You cannot push official Steam achievements to a game's Steam page unless the game is integrated with Steamworks and you have access to the developer tools. However, there are two practical workarounds for personal use:

  • Add your launcher as a non‑Steam game in your Steam library (Steam -> Add a Game -> Add a Non‑Steam Game). When you run the game via Steam, Steam will overlay and you can use Steam Achievements-like notifications from your injector. This doesn't create official Steam achievements, but the overlay provides a familiar visual.
  • Use a community tracker: log your unlocks to a local or online tracker page (hosted by you or a community service). Then add a shortcut to that page from your Steam profile or link it in your social posts.

For developers: if you control the game and want true Steam achievements, integrate Steamworks server‑side APIs. For community injectors, treat Steam as a visual launcher only.

Common pitfalls and how to fix them

  • Wayland vs X11: Many injection techniques rely on X11. If your distro defaults to Wayland, either switch to an X11 session or use a tool that supports Wayland-specific APIs.
  • Permissions and sandboxing: Flatpak or Snap can prevent the injector from seeing game logs or injecting libraries. Use portal permissions or install the tool outside the sandbox.
  • Anti‑cheat and anti‑tamper: Injecting code into online or anti‑cheat protected games can trigger bans. Never use injection tools with competitive multiplayer games that have anti‑cheat unless you know it’s safe.
  • Proton/Wine issues: If the game runs through Wine, you might need a Wine‑aware wrapper or to parse Windows logs. Test locally with small, easy triggers first.
  • Discord privacy: If you rely on Discord Rich Presence, double‑check your privacy settings to ensure your presence shows correctly to friends.

Practical workflows for modders and streamers

Here are a few practical use cases you can try:

  1. Create a community achievement set for a mod: write the JSON for 10 fan‑made achievements, host the config file in your mod repo, and add the launcher script so friends can run the mod with achievements.
  2. Streamer-friendly notifications: combine the injector with OBS browser sources to show achievements on stream. Your injector can POST webhooks to a small local webserver that OBS can read.
  3. Event ladders: for speedrunning events, use the injector to automatically detect completion and push unlocks to an event scoreboard or Discord channel.

Further reading and community resources

Modding tools and niche projects evolve quickly. If you want to explore adjacent topics like automated asset creation for achievement badges or how AI is changing game mod tooling, check out our piece on The Rise of AI in Gaming: Implications for Asset Creation. For broader reliability tips and how to respond to service outages (useful if you host online trackers), see Responding to Digital Outages: How Gamers Can Stay Informed and Connected.

Final thoughts and safety reminder

Achievement injectors offer a fun, low-effort way to add structure to games that never shipped with achievements. They’re especially useful for single‑player mods, community challenge sets, and streaming. However, use them responsibly: avoid running injectors with anti‑cheat systems, and clearly mark any community achievement packs as unofficial. If you’re a developer, consider collaborating — community tools can show demand and inspire official support.

If you try a tool and build a neat achievement pack, consider sharing it with the community. Small projects like these are a great way to learn about Linux modding tools and to keep the gaming ecosystem creative and active.

Advertisement

Related Topics

#guides#linux#mods#achievements
A

Alex Mercer

Senior SEO Editor

Senior editor and content strategist. Writing about technology, design, and the future of digital media. Follow along for deep dives into the industry's moving parts.

Advertisement
2026-04-09T19:18:16.004Z