<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Aaron</title>
    <description>The latest articles on DEV Community by Aaron (@truearken).</description>
    <link>https://dev.to/truearken</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3942625%2F6767bb45-8330-454e-86f4-9ff3619d4155.png</url>
      <title>DEV Community: Aaron</title>
      <link>https://dev.to/truearken</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/truearken"/>
    <language>en</language>
    <item>
      <title>Building ValoVault: The Per-Agent Skin Loadouts Riot Never Shipped</title>
      <dc:creator>Aaron</dc:creator>
      <pubDate>Wed, 20 May 2026 16:00:22 +0000</pubDate>
      <link>https://dev.to/truearken/building-valovault-the-per-agent-skin-loadouts-riot-never-shipped-2jpn</link>
      <guid>https://dev.to/truearken/building-valovault-the-per-agent-skin-loadouts-riot-never-shipped-2jpn</guid>
      <description>&lt;h2&gt;
  
  
  The Missing Feature
&lt;/h2&gt;

&lt;p&gt;Pick Jett. You want your clean, sharp Jett skins. Pick Killjoy next game. Now you want your cyberpunk-y Killjoy skins. Pick Reyna. Different vibe again.&lt;/p&gt;

&lt;p&gt;Every Valorant player who owns more than a handful of skins has wished for the same thing: &lt;strong&gt;skins that automatically change based on the agent you pick&lt;/strong&gt;. Your Jett loadout, your Killjoy loadout, your Reyna loadout — each one waiting for you the moment you lock in.&lt;/p&gt;

&lt;p&gt;The community has been asking for per-agent skin presets for years. Browse the Valorant subreddit and you'll find dozens of threads requesting exactly this. Unfortunately, Riot has stated they don't currently plan to add it.&lt;/p&gt;

&lt;p&gt;So I decided to build it myself.&lt;/p&gt;

&lt;h2&gt;
  
  
  Prior Art
&lt;/h2&gt;

&lt;p&gt;Before writing a single line of code, I did some research to see what already existed. The most prominent project in this space is &lt;a href="https://github.com/colinhartigan/valorant-inventory-manager" rel="noopener noreferrer"&gt;valorant-inventory-manager&lt;/a&gt; by colinhartigan. It's a great project and does a lot of useful things — but it doesn't do the one thing I actually wanted: &lt;strong&gt;automatically swap your skin loadout based on the agent you pick&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;That meant I'd have to figure out the technical side myself.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Key Discovery
&lt;/h2&gt;

&lt;p&gt;Digging through the code of existing tools and poking at Valorant's local client APIs, I discovered something interesting: &lt;strong&gt;you can technically change skins during agent selection&lt;/strong&gt;. The client accepts loadout modifications at that point in the match lifecycle, which is exactly the window you need to make per-agent skins feel native.&lt;/p&gt;

&lt;p&gt;That was the unlock. If I could:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Detect when the player enters agent select&lt;/li&gt;
&lt;li&gt;Detect which agent they locked in&lt;/li&gt;
&lt;li&gt;Push the loadout tied to that agent to the client&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;...then I'd have agent-bound skins — the feature Riot never shipped.&lt;/p&gt;

&lt;h2&gt;
  
  
  Prototype #1: Python
&lt;/h2&gt;

&lt;p&gt;The first prototype was a quick-and-dirty Python app: &lt;a href="https://github.com/truearken/valorant_loadouts_python" rel="noopener noreferrer"&gt;valorant_loadouts_python&lt;/a&gt;. It proved the concept worked — when I picked an agent, my skins changed to match. It actually felt magical the first time it triggered automatically.&lt;/p&gt;

&lt;p&gt;But it was a terrible UI, no easy way to assign skins to agents visually, no good install story (I uploaded the installer to the repository itself lol). It worked and when I announced it on &lt;a href="https://www.reddit.com/r/VALORANT/comments/13ybizi/you_wanted_agent_specific_skin_loadouts_here_they/" rel="noopener noreferrer"&gt;Reddit&lt;/a&gt;, people actually liked and used it but it was just a terrible user experience without a way to change existing presets and so much more.&lt;/p&gt;

&lt;h2&gt;
  
  
  Prototype #2: ValoVault
&lt;/h2&gt;

&lt;p&gt;So I rebuilt it properly. Meet &lt;a href="https://github.com/truearken/valovault" rel="noopener noreferrer"&gt;ValoVault&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The headline feature is exactly what the community has been begging for: &lt;strong&gt;bind a skin loadout to each agent, and ValoVault swaps them in automatically during agent select.&lt;/strong&gt; Lock in Jett → Jett skins. Lock in Reyna → Reyna skins. No clicking, no menus, no thinking about it.&lt;/p&gt;

&lt;p&gt;As a bonus, you can also save multiple named presets and switch between them manually — handy for "tryhard vs. for fun" setups, or for sharing builds with friends — but the per-agent assignment is the star of the show.&lt;/p&gt;

&lt;h3&gt;
  
  
  Architecture
&lt;/h3&gt;

&lt;p&gt;The architecture ended up being a bit more interesting than a typical desktop app:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;A Go API wrapper&lt;/strong&gt; I wrote from scratch for the Valorant local client APIs&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A Go sidecar backend&lt;/strong&gt; that runs alongside the UI, watches the game state, and pushes loadouts at the right moment&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A Next.js frontend&lt;/strong&gt; for the actual interface — skin grids, agent assignment, preset management&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tauri&lt;/strong&gt; wrapping the whole thing into a lightweight native desktop app&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Why this stack?
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Go for the backend&lt;/strong&gt; — concurrency primitives are perfect for polling the game client and reacting to agent select events. A single static binary is easy to ship as a sidecar.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Next.js for the UI&lt;/strong&gt; — I wanted a real component-driven UI with proper state management, not a glorified HTML page. The skin grid alone has thousands of images to handle gracefully.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tauri instead of Electron&lt;/strong&gt; — way smaller bundle, way less RAM, and the Rust shell plays nicely with the Go sidecar pattern.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The Next.js app talks to the Go backend over HTTP on localhost, and the Go backend talks to the Valorant client. Clean separation, easy to develop each piece independently.&lt;/p&gt;

&lt;h2&gt;
  
  
  What ValoVault Can Do
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Assign a skin loadout to every agent&lt;/strong&gt; and have it applied automatically when you lock in&lt;/li&gt;
&lt;li&gt;Save additional named loadout presets for manual swapping&lt;/li&gt;
&lt;li&gt;Browse your entire skin inventory with levels, chromas, and gun buddies&lt;/li&gt;
&lt;li&gt;Pick variants and buddies per-weapon, per-preset&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It's open source, Apache-2.0 licensed, and works on Windows.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's Next
&lt;/h2&gt;

&lt;p&gt;If you want to try it, grab a release from the &lt;a href="https://github.com/truearken/valovault" rel="noopener noreferrer"&gt;GitHub repo&lt;/a&gt;. Contributions, bug reports, and feature requests are all welcome.&lt;/p&gt;

&lt;p&gt;And if you're a Riot dev reading this — please, just ship per-agent loadouts natively. I'd happily archive the repo. 🙂&lt;/p&gt;

</description>
      <category>valorant</category>
      <category>gamedev</category>
      <category>tauri</category>
      <category>go</category>
    </item>
  </channel>
</rss>
