npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

steam-vault

v1.0.3

Published

CLI tool to back up Steam screenshots to Microsoft OneDrive

Readme

SteamVault

If you take a lot of Steam screenshots, they're probably just sitting on your PC with no backup. One bad drive and they're gone.

SteamVault is a small CLI tool that automatically backs them up to OneDrive (more providers coming soon). Screenshots are sorted by game, duplicates are removed, and everything shows up nicely organized in your Photos library.

Demo Gif

License: MIT Node.js

Features

  • Automatically organizes screenshots into folders by game name
  • Skips duplicates won't upload the same screenshot twice
  • Screenshots show up correctly sorted in OneDrive Photos
  • Auto-detects your Steam library on Windows
  • Dry-run mode to preview before uploading
  • Fast, uploads up to 5 files in parallel

Prerequisites

  • Windows (requires %APPDATA% and the Windows registry for Steam path detection)
  • Microsoft account with OneDrive access
  • Node.js ≥ 20 – required for the npm version (includes auto-update notifications).
    Alternatively: download the standalone .exe, no Node.js required, but no auto-updates.
  • Steam installed with at least one screenshot taken

Installation

npm install -g steam-vault

Quick Start

  1. Run steamvault in your terminal.
  2. On first launch you'll be prompted to authenticate with Microsoft using a device code - open the URL shown in your browser and enter the code.
  3. SteamVault tries to auto-detect your screenshot directory. If it can't find it, you'll be prompted to enter the path manually. It should point to the 760/remote folder inside your Steam userdata directory, e.g. C:/Program Files (x86)/Steam/userdata/12345678/760/remote.
  4. Select Backup Screenshots from the main menu.

CLI Flags

| Flag | Description | | ----------- | ------------------------------------------------------ | | --debug | Disable console clearing for easier debugging | | --dry-run | Show what would be uploaded without actually uploading | | --version | Print the version number and exit | | --help | Show help |

Configuration

SteamVault stores its config at:

%APPDATA%/SteamVault/steamvault.config.json

| Key | Description | | --------------------- | ----------------------------------------------------------------------- | | screenshotDirectory | Path to the Steam 760/remote screenshots folder | | oneDriveBaseFolder | Name of the top-level folder in OneDrive (default: SteamVault) | | oneDriveRootPath | OneDrive API root path (default: special/photos - your Photos folder) | | entraClientId | Microsoft Entra application (client) ID | | gameTitleCache | Path to the game title cache file | | screenshotHashes | Path to the screenshot hash file | | msalCache | Path to the MSAL authentication token cache | | logDirPath | Directory for log files | | backupPath | Temporary directory for EXIF backup copies |

Path values support the %APPDATA% placeholder, which is resolved at runtime.

Authentication

SteamVault uses the Microsoft device code flow:

  1. On first run the app displays a URL and a one-time code.
  2. Open the URL in any browser, sign in with your Microsoft account, and enter the code.
  3. Tokens are cached locally at %APPDATA%/SteamVault/msal.cache.json - subsequent runs authenticate silently.

To log out, select Account => Logout from the main menu. This clears the token cache.

How It Works

Scan screenshot folders
        ↓
Resolve game titles (Steam API + cache)
        ↓
Hash each file (SHA-256)
        ↓
Skip already-uploaded duplicates
        ↓
Write EXIF metadata (DateTimeOriginal)
        ↓
Upload to OneDrive (up to 5 concurrent)
        ↓
Persist hash file to OneDrive

OneDrive Structure

Screenshots are uploaded to your OneDrive Photos folder by default:

OneDrive/
└── Photos/
    └── SteamVault/
        ├── Counter-Strike 2/
        │   ├── 20240115120000_1.jpg
        │   └── 20240115120001_1.jpg
        ├── Half-Life 2/
        │   └── 20240201143000_1.jpg
        └── screenshot.hashes.json

The base folder and root path are configurable in settings.

Troubleshooting

No screenshots found

  • Make sure your screenshot directory is set correctly. Go to Settings => Set Screenshot Directory.
  • The directory should point to the 760/remote folder
    inside your Steam userdata directory (e.g. C:/Program Files (x86)/Steam/userdata/12345678/760/remote).

Authentication failure

  • Check your internet connection.
  • Try logging out (Account => Logout) and logging back in.
  • If the device code expires, restart the app to get a new code.

APPDATA not set

  • SteamVault requires the %APPDATA% environment variable. This is set by default on Windows. If missing, set it manually or run from a standard Windows terminal.

"Unknown Game (appId)" folders

  • Some Steam games get removed, split, or re-released over time (e.g. GTA V => Legacy Edition + Enhanced Edition). When that happens, the Steam Store API no longer returns a title for the original app ID.
  • Your screenshots are still backed up normally, they just end up in a folder called Unknown Game (12345) instead of the actual game name.
  • This is purely cosmetic. You can rename the folder in OneDrive at any time.

Windows SmartScreen warning when running the .exe

  • Windows may flag the standalone .exe as potentially dangerous because it is not code-signed. This is a false positive.
  • Click "More info" => "Run anyway" to proceed.
  • Alternatively, install via npm install -g steam-vault to avoid this entirely.

Upload failures

  • Uploads are retried up to 3 times automatically.
  • Check the log files at %APPDATA%/SteamVault/logs for detailed error information.
  • Ensure your OneDrive has sufficient storage space.

Roadmap

  • Additional cloud providers - support for Google Drive, Dropbox, and others beyond OneDrive
  • Remote hash sync - compare remote and local hash files for portability across machines
  • Partial backup - upload screenshots from selected games only
  • Steam background recordings - back up video recordings in addition to screenshots
  • Configurable upload concurrency - adjust the number of parallel uploads
  • Multi-user support - handle multiple Steam user profiles
  • Scriptable CLI - additional flags for non-interactive automation

Development

# Install dependencies
npm install

# Run in development mode (enables --debug flag)
npm run dev

# Lint
npm run lint
npm run lint:fix

# Type check
npm run typecheck

# Run tests
npm test

# Build standalone executable (requires Bun)
npm run build

Disclaimer

This project is not affiliated with, endorsed by, or associated with Valve Corporation or Steam. "Steam" is a trademark of Valve Corporation. All trademarks are the property of their respective owners.

License

MIT