Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
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
32 changes: 25 additions & 7 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,9 +1,27 @@
# Logs
logs
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
pnpm-debug.log*
lerna-debug.log*

node_modules
dist
dist-ssr
*.local

# Editor directories and files
.vscode/*
!.vscode/extensions.json
!.vscode/settings.json
.idea
.DS_Store
/node_modules/
*.tsbuildinfo
*.suo
*.ntvs*
*.njsproj
*.sln
*.sw?

# React Router
/.react-router/
/build/
user_*.json
/dist/
.react-router
3 changes: 3 additions & 0 deletions .vscode/extensions.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
{
"recommendations": ["tauri-apps.tauri-vscode", "rust-lang.rust-analyzer"]
}
15 changes: 4 additions & 11 deletions .vscode/settings.json
Original file line number Diff line number Diff line change
@@ -1,16 +1,9 @@
{
"editor.insertSpaces": false,
"files.trimTrailingWhitespace": true,
"editor.formatOnSave": true,
"editor.tabSize": 2,
"files.insertFinalNewline": true,
"files.trimTrailingWhitespace": true,
"typescript.tsdk": "node_modules/typescript/lib",
"search.exclude": {
"**/node_modules": true,
"**/bower_components": true,
"**/*.code-search": true,
"**/lib": true,
"**/build": true,
"**/dist": true
"editor.insertSpaces": false,
"editor.codeActionsOnSave": {
"source.organizeImports.biome": "explicit"
}
}
48 changes: 25 additions & 23 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,33 +1,35 @@
# ValPal

I've created this project to allow Valorant players to create loadouts which can be randomized when joining a game. It supports agent specific loadouts, player cards, player titles, sprays, buddies, skin levels, and skin chromas.
A desktop app for Valorant players to create and randomize loadouts when joining a game. Supports agent-specific loadouts, player cards, player titles, sprays, buddies, skin levels, and skin chromas.

# Screenshots
## Features

Configurator main screen showing a loadout
<img src="images/main-loadout.png" />
Configurator main screen showing an agent specific loadout
<img src="images/agent-loadout.png" />
- **Auto Shuffle** — automatically equips a random loadout when you lock in an agent
- **Agent Detection** — filters loadouts to ones matching your selected agent
- **Non-Pregame Shuffle** — randomizes loadouts for modes without agent select (Deathmatch, Escalation, Team Deathmatch, etc.)
- **Manual Equip** — equip any saved loadout on demand from the app

# Installation
## Installation

1. You can find the latest release [here](https://github.com/zachrip/valpal/releases/latest) - download valpal.exe
2. Create a folder somewhere (desktop or your user directory, or wherever else, you do you)
3. Run the .exe - windows will probably complain, click "more info" then "run anyway"
4. You should see an item added to your system tray - right click on it and click "Open ValPal" - this will open your browser to the configurator
5. Open Valorant (you must run the game for this to work)
6. Add a loadout and configure it with your skins
7. When you join a match, the app will detect when you've locked in as an agent. If you have `Agent specific loadouts` enabled it will configure loadouts for that agent if there are any (otherwise it will fall back to all enabled loadouts). You can disable the loadout shuffling all together if you prefer to equip loadouts by hand in the configurator
1. Download the latest `.msi` installer from [Releases](https://github.com/zachrip/valpal/releases/latest)
2. Run the installer — Windows may complain, click "More info" then "Run anyway"
3. Launch ValPal — it will appear in your system tray
4. Open Valorant
5. Create a loadout and configure it with your skins
6. When you join a match, the app will detect your agent lock-in and equip a random matching loadout

# Architecture
## Architecture

This app is based around [Remix](https://remix.run) and packaged using [pkg](https://github.com/vercel/pkg). It uses the local websocket/http server that Valorant runs to authenticate and detect when matches start.
ValPal is a [Tauri](https://tauri.app) app with a [React Router](https://reactrouter.com) frontend and a Rust backend. The backend connects to Valorant's local WebSocket/HTTP APIs to authenticate, detect game events, and manage loadouts.

# Contribute
- `src/` — React frontend (UI, loadout editor)
- `src-tauri/` — Rust backend (game detection, Valorant API integration, system tray)

1. Clone this repo
2. `npm install`
3. `npm run dev`
4. Run Valorant
5. Open [http://localhost:3000](http://localhost:3000)
6. The configurator code mostly lives in app/ - the rest of the stuff is in server/ (such as the game detection, system tray stuff, etc)
## Development

Prerequisites: [Node.js](https://nodejs.org), [pnpm](https://pnpm.io), [Rust](https://rustup.rs)

```
pnpm install
pnpm tauri dev
```
17 changes: 0 additions & 17 deletions app/app.css

This file was deleted.

76 changes: 0 additions & 76 deletions app/root.tsx

This file was deleted.

44 changes: 0 additions & 44 deletions app/routes.ts

This file was deleted.

19 changes: 0 additions & 19 deletions app/routes/index.tsx

This file was deleted.

Loading