Thanks for wanting to work on Vortex. Before you start, there's one thing we need to be upfront about.
Important
We can only take small pull requests at the moment.
Vortex is going through large foundational changes, and we don't have the review capacity to take on big contributions alongside that work. If you send us a large PR right now, it will most likely sit unreviewed until it no longer applies to the code underneath it, and we'd have to close it. You'd have spent real time on something we couldn't merge, which is why we'd rather tell you here than in a closed PR later.
This is about our capacity, not about the quality of what you're offering. We are hiring, and it will change.
As a rough guide, a PR we can review without a conversation first is under 400 changed lines across 10 files or fewer, ignoring lockfiles, generated files, and mass renames.
Those aren't hard limits. A 500-line change that's one self-contained fix with tests is fine. A 200-line change touching six extensions probably isn't, because the review cost is in the blast radius, not the line count.
If your change is bigger than that, or spans several extensions, open a feature request or ask on Discord before you write it and wait for a maintainer to agree on the approach. A short conversation up front saves you from writing something we can't merge.
- One logical change per PR. If the description needs the word "and", it's probably two PRs.
- Link the issue it fixes.
- Say what you tested and on which platform.
- Run
pnpm run verifybefore you open it. That covers formatting, lint, typecheck, build and tests.
Pull requests that conflict with work already planned or in progress, that don't fit the architecture, or that are too big for us to review, get closed. That's not a judgement on the code.
Use whatever tools you like. The requirement is the same either way: you are the author, and you need to understand every line you submit.
In practice that means you can explain why the change is written the way it is, you've run it, and you've read the diff. If a reviewer asks about a decision in your PR, "that's what the model produced" isn't an answer.
We close large machine-generated PRs without detailed review. We don't have the capacity to audit thousands of lines nobody on either side has read, and the size rule above applies regardless of how the code was written.
Recommended editor: VS Code with workspace extensions. You will be prompted to install them when you first open the repo.
Before you start, make sure you have:
- A GitHub account for creating pull requests,
- The
gitCLI or a GUI client such as GitHub Desktop, - An editor with TypeScript support such as VS Code download, WebStorm or Neovim.
-
Install distro-specific prerequisites:
- Windows setup
- Linux:
- Arch-based setup (Arch, CachyOS, Manjaro)
- Debian-based setup (Debian, Ubuntu, Pop!_OS, Linux Mint)
- Fedora setup
- NixOS setup
- If your distribution is not listed, try Generic Installation Instructions.
-
Continue with Shared Setup.
After you have finished the setup steps:
pnpm run buildpnpm run start
A pre-commit hook runs oxfmt over every staged file, markdown included, so
expect your formatting to be rewritten. Running pnpm run format first makes the
hook a no-op. The hook can also trigger a dependency install mid-commit, so a
commit sometimes takes about 30 seconds and prints install output.
For iterating on renderer (UI) code, pnpm run dev starts Vortex with hot
module replacement instead of the build/start cycle:
- Component (
.tsx) edits hot-swap in place via react-refresh — React and Redux state are preserved, no reload. - Edits that can't be hot-applied (reducers, utils, extension
index.tsinit code) automatically trigger a clean window reload. - Tailwind class changes rebuild
tailwind-v4.cssand swap the stylesheet in place, without a reload. - Not covered: main-process (
src/main), preload, and@vortex/sharedchanges still need a restart ofpnpm run dev; the dynamic extensions inextensions/andextensions/games/still require an app relaunch.
- F5 debugs both main and renderer processes
- Build first by running
pnpm run buildbefore debugging
See docs/DEBUGGING-GUIDE.md for detailed debugging instructions.
To build a Windows installer locally (unsigned, for testing production
behavior), run pnpm package:nosign from the repo root; the output lands in
dist/. Signed installers are produced by CI only.
- Windows packaging: commands, the version placeholder, what the pipeline does, and the traps
- Flatpak packaging
See docs/branching-and-release-strategy.md for more information.
- All documentation - indexed by topic
- Debugging
- Docker Dev Containers