Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
58 commits
Select commit Hold shift + click to select a range
586cc30
Added KeyWe support
ebkr Nov 24, 2025
9731494
Merge pull request #2010 from ebkr/add-keywe
ebkr Nov 24, 2025
2a4f6de
Switched corepack and node setup to use mise action
ebkr Nov 24, 2025
f4a7a54
Updated workflows and made yarn version static
ebkr Nov 24, 2025
848f223
Merge pull request #2011 from ebkr/mise-ci
ebkr Nov 24, 2025
87accd6
Switched from --frozen-lockfile to --immutable
ebkr Nov 24, 2025
061c16d
Merge pull request #2012 from ebkr/mise-ci
ebkr Nov 24, 2025
29e8a75
Removed extra getModList calls after saving the same data to disk
ebkr Nov 28, 2025
bb4462c
Add Smushi Come Home
anttimaki Dec 1, 2025
3ba100c
Merge pull request #2019 from ebkr/smushi
anttimaki Dec 1, 2025
f8a3f8c
Add Xbox Game Pass support for Cloverpit
anttimaki Dec 1, 2025
bfa0719
Merge pull request #2020 from ebkr/clover-box
anttimaki Dec 1, 2025
599a36a
Merge pull request #2016 from ebkr/ProfileModList-performance
ebkr Dec 15, 2025
c32248f
Add RivetInstaller and RivetModInstaller
BenMcAvoy Dec 8, 2025
2ac692b
Add rivet as a runner correctly and add image
BenMcAvoy Dec 8, 2025
44af21e
Correct Rivet install configuration
BenMcAvoy Dec 9, 2025
daf3595
Fix rivet arguments
BenMcAvoy Dec 10, 2025
06dffb0
Install Rivet.ini from root
BenMcAvoy Dec 10, 2025
1d4b174
Fix mistakes in Rivet processes
BenMcAvoy Dec 11, 2025
480dea2
Merge pull request #2026 from BenMcAvoy/develop
anttimaki Dec 17, 2025
9f9e24d
Sync ecosystem data
anttimaki Dec 17, 2025
c846c49
Merge pull request #2027 from ebkr/ecosystem-sync
anttimaki Dec 17, 2025
d61c324
Significantly reduced mods.yml size and fixed mod drag ghost jumping
ebkr Jan 2, 2026
ef80e53
add game assets, update schema
ethangreen-dev Jan 14, 2026
c1dc0a4
Merge pull request #2035 from thunderstore-io/jan-game-additions
anttimaki Jan 16, 2026
020d768
Sync Thunderstore ecosystem data
anttimaki Jan 16, 2026
add35e0
Merge pull request #2036 from ebkr/ecosystem-sync
anttimaki Jan 16, 2026
565ca92
Merge pull request #2032 from ebkr/installed-list-improvements
ebkr Jan 20, 2026
59ab8cb
Improved visuals for mod lists
ebkr Jan 7, 2026
4c0817f
Added grab cursor to .handle
ebkr Jan 11, 2026
8932e43
Converted OnlineModList.vue download action to button
ebkr Jan 11, 2026
3dc51bc
Reduced input darkening in light theme
ebkr Jan 15, 2026
7a340a3
Removed redundant scrollbar width and removed colour variables
ebkr Jan 15, 2026
f263468
Made Profiles.vue more consistent with other design changes
ebkr Jan 19, 2026
bebcb9f
Merge pull request #2033 from ebkr/design/mod-list
ebkr Jan 20, 2026
f948971
Added resolve to test deck support
ebkr Nov 17, 2025
fb26d67
Updated to latest electron-builder, added env var based flatpak building
ebkr Nov 18, 2025
8334aac
Added steam_executable_launch.sh and ensure exists
ebkr Nov 21, 2025
2a65269
WIP: Steam can be launched and licence errors are shown, but games do…
ebkr Dec 18, 2025
7bf9315
WIP: Flatpak binary can now launch games on Steam Deck
ebkr Dec 29, 2025
b0411d5
Updated yarn.lock after rebase
ebkr Dec 29, 2025
620f718
Updated game runners to use new argument lists
ebkr Dec 29, 2025
d74285e
Fixed missing join on launch args
ebkr Dec 29, 2025
655d969
Updated FLATPAK.md outdated text
ebkr Dec 29, 2025
9301d24
Added additional filesystem permissions
ebkr Dec 30, 2025
2ff39d2
LinuxNativeGameSetup.vue now shows correct arguments and prompts re-e…
ebkr Dec 31, 2025
be10186
User defined args can now be parsed as part of Flatpak launch
ebkr Dec 31, 2025
93122ad
Fixed GameInstructionGenerator.ts.spec.ts
ebkr Dec 31, 2025
df84ead
Removed redundant loop
ebkr Jan 13, 2026
2d50079
Added Flatpak release image creation to release.yml
ebkr Jan 20, 2026
131af8d
Merge pull request #2028 from ebkr/deck
ebkr Jan 20, 2026
8206da2
Added Flatpak build step to build.yml and dependency install to relea…
ebkr Jan 20, 2026
f17755e
Merge pull request #2040 from ebkr/deck-build
ebkr Jan 20, 2026
6b1225a
Merge pull request #2039 from ebkr/design/profiles
ebkr Jan 20, 2026
f358cb8
Updated README and versions
ebkr Jan 20, 2026
6a20204
Merge pull request #2041 from ebkr/release-3.2.12
ebkr Jan 20, 2026
f6b3760
Re-added build formats
ebkr Jan 20, 2026
41c6baa
Merge pull request #2043 from ebkr/re-add-release-formats
ebkr Jan 20, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
36 changes: 24 additions & 12 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -16,34 +16,46 @@ jobs:
- kind: windows
os: windows-latest
platform: win
- kind: flatpak
os: ubuntu-latest
platform: flatpak
# Macos-11 is deprecated, macos-12 would require package updates, see PR #1409
# - kind: mac
# os: macos-11
# platform: osx
steps:
- uses: actions/checkout@v4

- name: Enable Corepack
run: |
npm install -g corepack@latest --force
corepack enable

- name: Set up Node
uses: actions/setup-node@v4
- uses: jdx/mise-action@v3
with:
# The talk on the street says this might be a good version for building.
node-version: 20.19.0
cache: yarn
install: true
cache: true
log_level: debug

- name: Install Yarn dependencies
run: yarn install --frozen-lockfile
run: yarn install --immutable

- if: matrix.platform == 'linux'
- if: matrix.platform == 'linux' || matrix.platform == 'flatpak'
name: Install bsdtar # Required by electron-builder when targeting pacman.
run: |
sudo apt-get update -y
sudo apt-get install -y libarchive-tools

- if: matrix.platform == 'flatpak'
name: Cache Flatpak runtimes
uses: actions/cache@v4
with:
path: ~/.local/share/flatpak
key: flatpak-${{ runner.os }}-25.08

- if: matrix.platform == 'flatpak'
name: Install Flatpak and flatpak-builder
run: |
sudo apt-get install -y flatpak flatpak-builder
flatpak remote-add --user --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo
flatpak install --user -y flathub org.freedesktop.Platform//25.08 org.freedesktop.Sdk//25.08
flatpak install --user -y flathub org.electronjs.Electron2.BaseApp//25.08

- name: Build project
id: build
uses: StarUbiquitous/command-output@v1.0.1 # Store stdout/stderr to outputs.
Expand Down
37 changes: 25 additions & 12 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -17,30 +17,43 @@ jobs:
- kind: windows
os: windows-latest
platform: win
- kind: flatpak
os: ubuntu-latest
platform: flatpak
steps:
- uses: actions/checkout@v4

- name: Enable Corepack
run: |
npm install -g corepack@latest --force
corepack enable

- name: Set up Node
uses: actions/setup-node@v4
- uses: jdx/mise-action@v3
with:
# The talk on the street says this might be a good version for building.
node-version: 20.19.0
cache: yarn
install: true
cache: true
log_level: debug

- name: Install Yarn dependencies
run: yarn install --frozen-lockfile
run: yarn install --immutable

- if: matrix.platform == 'linux'
- if: matrix.platform == 'linux' || matrix.platform == 'flatpak'
name: Install bsdtar # Required by electron-builder when targeting pacman.
run: |
sudo apt-get update -y
sudo apt-get install -y libarchive-tools

- if: matrix.platform == 'flatpak'
name: Cache Flatpak runtimes
uses: actions/cache@v4
with:
path: ~/.local/share/flatpak
key: flatpak-${{ runner.os }}-25.08

- if: matrix.platform == 'flatpak'
name: Install Flatpak and flatpak-builder
run: |
sudo apt-get install -y flatpak flatpak-builder
flatpak remote-add --user --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo
flatpak remote-add --user --if-not-exists flathub https://dl.flathub.org/repo/flathub.flatpakrepo
flatpak install --user -y flathub org.freedesktop.Platform//25.08 org.freedesktop.Sdk//25.08
flatpak install --user -y flathub org.electronjs.Electron2.BaseApp//25.08

- name: Release project
id: build
uses: StarUbiquitous/command-output@v1.0.1
Expand Down
16 changes: 5 additions & 11 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -23,20 +23,14 @@ jobs:
steps:
- uses: actions/checkout@v4

- name: Enable Corepack
run: |
npm install -g corepack@latest --force
corepack enable

- name: Set up Node
uses: actions/setup-node@v4
- uses: jdx/mise-action@v3
with:
# The talk on the street says this might be a good version for building.
node-version: 20.19.0
cache: yarn
install: true
cache: true
log_level: debug

- name: Install Yarn dependencies
run: yarn install --frozen-lockfile
run: yarn install --immutable

- name: Prepare Quasar files
run: npx @quasar/cli prepare
Expand Down
48 changes: 48 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,51 @@
### 3.2.12
#### Games added
- KeyWe
- Smushi Come Home
- Crime Simulator
- Scrap Mechanic
- Baby Steps
- Chill with You : Lo-Fi Story
- Crawlspace 2
- Goblin Buster: Incremental Tower Defense
- MineMogul
- Nuclear Option
- Pushing it! Together - Sisyphus Co-op
- RAM: Random Access Mayhem
- Unfair Flips
- RV There Yet
- Crab Game
- Cloverpit
- Xbox Game Pass PC support

#### Performance
- Mods.yml file size has been reduced by 99.35%
- This results in huge improvements to the performance of profiles
- You'll need to perform a changing action on the profile for it to take effect. This can be:
- Mod re-ordering
- Install/Uninstall/Enable/Disable
- Local mod list is loaded asynchronously and is visible far quicker than before
- Significantly reduces time spent hanging waiting for the mod list to load

#### Design changes
- Mod card buttons have been made consistent and no longer take up the entire space
- Easier to visually scan
- Less mouse movement required
- The online preview panel now has a different background colour
- Scrollbars are now app-styled rather than native
- Other tweaks to improve the user experience

#### Flatpak builds

Flatpack builds are now available for Linux users in the r2modman GitHub repository:
https://github.com/ebkr/r2modmanPlus/releases/latest

These builds are ideal for Steam Deck and can run in Game Mode.

> There are currently issues with Steam Deck's `Gamescope` compositor where dropdowns appear under the window.
You can use arrows to work around this. I'll look into a solution further down the line.
This issue is not present when running in Desktop Mode.

### 3.2.11
#### Games added
- Aeruta
Expand Down
49 changes: 49 additions & 0 deletions FLATPAK.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
# Flatpak build

This is designed to run on the Steam Deck natively.

## Running under Wayland

Electron support for Wayland is iffy.

I'm using the [COSMIC](https://system76.com/cosmic) desktop environment and this particularly has issues with Electron + Wayland due to issues apparently handling zypak-helper.

This should however get you up and running:

```shell
flatpak run com.github.ebkr.r2modman --ozone-platform=x11 --disable-gpu
```

Fortunately, Steam Deck only uses Wayland in Desktop Mode, weirdly however this isn't an issue when running the AppImage version.

## Development

### Building

There's currently no nice way to hot-reload to test Flatpak behaviour. It has approximately a 2.5m build time (insane) and you need to reinstall the built binary.

You can use the following command to automate it for you though:

```
yarn build-flatpak && flatpak install ./dist/electron/Packaged/r2modman-<version>-x86_64.flatpak
```

## Thoughts and findings

> When referring to `flatpak-spawn`, this means launching with `flatpak-spawn --host`

This is hopefully useful to people developing for flatpak and outlines my struggles and thought process.

### Outcome

Getting Flatpak to invoke Steam has been rough. Steam, when launched from a Flatpak context, doesn't appear to forward additional arguments to the game process and instead just seems to run what's manually set in the arguments via the `Properties` section of a game.

So what's the fix?

The best solution I've come up with so far is to have a wrapper script that reads additional arguments via a separate file. Since we're doing things this way, it means we can also use the `steam://` protocol as we don't need to pass any additional arguments to the game process anymore, and we let the xdg handle opening the executable. It also means it likely works with Steam installed via Flatpak as we don't try to start multiple instances.

### Quirks

Unrelated though because it's not used anymore, but Node really doesn't like calling `flatpak-spawn`. Using `child_process` to call a separate script which then calls flatpak-spawn is fine and launches as expected, but calling it directly from the `child_process` library always fails to find it. Potentially weird sandboxing from Node?

Calling via flatpak-spawn seemed to launch Steam under a minimally sandboxed environment, and so additional permissions were needed to be passed so that audio could be accessed from within the client. Weirdly, if you already had Steam open however, the one running under the host would be used instead. It may be related to my Flatpak version or some odd Node quirk, or maybe even something I've done without realising.
2 changes: 1 addition & 1 deletion mise.toml
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
[tools]
node = '22'
yarn = "latest"
yarn = "4.11.0"
17 changes: 12 additions & 5 deletions package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "r2modman",
"version": "3.2.11",
"version": "3.2.12",
"description": "A simple and easy to use mod manager for many games using Thunderstore.",
"productName": "r2modman",
"author": "ebkr",
Expand All @@ -13,10 +13,12 @@
"sync": "tsx ./scripts/sync.ts",
"build-win": "quasar build --mode electron -T win32",
"build-linux": "quasar build --mode electron -T linux",
"build-flatpak": "BUILD_FLATPAK=true quasar build --mode electron -T linux",
"build-osx": "quasar build --mode electron -T mac",
"publish": "quasar build --mode electron --publish always",
"publish-win": "quasar build --mode electron -T win32 --publish always",
"publish-linux": "quasar build --mode electron -T linux --publish always",
"publish-flatpak": "BUILD_FLATPAK=true quasar build --mode electron -T linux --publish always",
"test": "vitest run ./test/vitest"
},
"dependencies": {
Expand All @@ -33,7 +35,7 @@
"bulma-slider": "2.0.4",
"bulma-steps": "^2.2.1",
"bulma-switch": "^2.0.0",
"core-js": "^3.6.5",
"core-js": "^3.47.0",
"dexie": "^3.2.7",
"dot-prop": "^5.2.0",
"electron-updater": "4.2.5",
Expand All @@ -44,14 +46,16 @@
"github-markdown-css": "^5.7.0",
"glob-parent": "^6.0.2",
"highlight.js": "^10.4.1",
"js-yaml": "^4.1.1",
"lodash.debounce": "^4.0.8",
"modern-normalize": "^3.0.1",
"moment": "^2.29.1",
"node-ipc": "^12.0.0",
"quasar": "^2.18.1",
"quasar": "^2.18.6",
"quill": "^1.3.7",
"sanitize-filename": "^1.6.3",
"serialize-javascript": "^3.1.0",
"shell-quote": "^1.8.3",
"tar": "^6.1.11",
"trim-newlines": "^4.0.2",
"unzipper": "^0.10.5",
Expand All @@ -65,11 +69,13 @@
"devDependencies": {
"@babel/core": "^7.4.0",
"@babel/preset-typescript": "^7.14.5",
"@quasar/app-vite": "^2.2.1",
"@electron/asar": "^4.0.1",
"@quasar/app-vite": "^2.4.0",
"@types/adm-zip": "^0.4.34",
"@types/async-lock": "^1.1.2",
"@types/chai": "^4.2.11",
"@types/fs-extra": "^8.0.1",
"@types/js-yaml": "^4",
"@types/jsdom": "^21.1.7",
"@types/lodash.debounce": "^4.0.7",
"@types/node": "^20.19.1",
Expand All @@ -82,9 +88,10 @@
"autoprefixer": "^10.4.21",
"devtron": "^1.4.0",
"electron": "^38.1.2",
"electron-builder": "^24.10.5",
"electron-builder": "26.0.12",
"electron-debug": "^3.0.1",
"electron-devtools-installer": "^3.0.0",
"electron-installer-flatpak": "^0.8.0",
"electron-packager": "14.1.1",
"identity-obj-proxy": "^3.0.0",
"mock-require": "^3.0.3",
Expand Down
Binary file added public/images/game_selection/baby-steps.webp
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added public/images/game_selection/chill-with-you.webp
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added public/images/game_selection/crab-game.webp
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added public/images/game_selection/crawlspace-2.webp
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added public/images/game_selection/crime-simulator.webp
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added public/images/game_selection/keywe.webp
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added public/images/game_selection/mine-mogul.webp
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added public/images/game_selection/nuclear-option.webp
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added public/images/game_selection/rv-there-yet.webp
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added public/images/game_selection/scrap-mechanic.webp
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added public/images/game_selection/unfair-flips.webp
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
10 changes: 10 additions & 0 deletions public/steam_executable_launch.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
#!/bin/sh

if [ $# -eq 0 ]; then
echo "Error: flatpak-spawn arguments must be provided" >&2
exit 1
fi

echo "Executing: /usr/bin/flatpak-spawn $@" >&1

exec flatpak-spawn "$@"
Loading
Loading