An Electron + Vue desktop app for collecting, storing, and reviewing VRChat group data
Desktop workflow for VRChat account sign-in, local capture queues, and MariaDB-backed storage for groups, users, and worlds.
This repository is opened up publicly, but the codebase is still rough, inconsistent, and likely to contain bugs. It was not originally built with general public use in mind. If you plan to use or build on it, expect messy internals and please open an issue if you run into problems.
About • What It Does • Current App Surface • Development • Developer Notes • License Direction
VRC Group Manager is a Windows-oriented Electron desktop app for collecting and reviewing VRChat data with a heavier focus on groups, related users, and long-running local datasets. It combines a Vue 3 renderer, an Electron main process, VRChat API authentication, queue-based background work, and MariaDB-backed persistence so records can be searched, revisited, and expanded over time.
The app is built around a practical workflow:
- sign in with a VRChat account, including saved sessions and 2FA
- connect to a MariaDB database for persistent storage
- capture groups, members, users, and worlds into local records
- queue additional group and user work for paced background processing
- import baseline datasets to seed storage before later expansion
- review stored entities, queue state, and analytics in one app
This repository is intended for workflows where a one-off lookup is not enough and the useful part is keeping a growing local dataset that can be revisited later. Instead of treating groups, users, and worlds as temporary API responses, the app keeps them as persistent records that can be reviewed as part of a longer-running monitoring flow.
At a high level, the app is meant to help with:
- building and maintaining a local archive of VRChat group, user, and world data
- seeding storage from existing group or user datasets
- expanding records over time through manual and queued collection
- reviewing entity detail and aggregate activity from one desktop client
The current app surface is focused on concrete capabilities rather than general-purpose social browsing.
- VRChat account login with session restore and 2FA handling
- MariaDB-backed persistence for groups, users, worlds, captures, queue items, and settings
- optional MeiliSearch connectivity for search indexing support
- manual capture flows for individual groups, worlds, and users
- group member collection and stored detail views
- queued background processing for group and user captures with configurable delays and jitter
- dataset import for baseline exports, group ID lists, and user ID lists
- analytics summary for stored totals and recent API activity
- offline mode for local inspection without an active VRChat API session
The current navigation is organized around the following areas:
| Area | Purpose |
|---|---|
Main View |
Shows the current session mode, connected account, and top-level state |
Groups |
Stores group records, captures metadata and members, and shows profile history |
Worlds |
Stores world records and capture history |
Events |
Shows recent queue activity and backlog state |
Users |
Searches VRChat users, stores captures, and expands related records |
Analytics |
Summarizes stored totals and rolling VRChat API activity |
Capture Queue |
Configures queue pacing, enable flags, delays, jitter, and snapshots |
Settings |
Manages MariaDB settings, recapture cadence, and dataset import |
Account |
Shows identity, authentication mode, and session state |
Technical summary: v0.25.1 • Electron 33 • Vue 3 • TypeScript • Windows desktop
- Node.js
- Windows desktop environment for running the packaged app comfortably
- A MariaDB server for persistent storage
- A VRChat account if you want live API capture
- MeiliSearch only if you want search indexing support
npm run dev
npm run build
npm run typecheck| Command | Purpose |
|---|---|
npm run dev |
Runs the Electron app in development mode with electron-vite |
npm run build |
Builds the Electron app output and prepares an unpacked distribution directory |
npm run typecheck |
Runs both main/preload and renderer TypeScript checks |
npm run typecheck:node |
Type-checks src/main and src/preload |
npm run typecheck:web |
Type-checks the Vue renderer code |
npm run pack |
Produces the unpacked Electron builder output |
npm run dist |
Runs the full Electron builder packaging flow |
On a fresh run, the app starts without a database connection until one is configured. The normal setup flow is:
- launch the app
- open database settings
- enter MariaDB host, port, database, username, and password
- save and connect
- sign in with a VRChat account or use offline mode for local-only review
- import a baseline dataset or begin manual captures
| Path | Purpose |
|---|---|
package.json |
App metadata, Electron builder settings, and dev/build/typecheck scripts |
electron.vite.config.ts |
Electron Vite build configuration for main, preload, and renderer |
src/main/index.ts |
Electron app entry, window lifecycle, startup services, and shutdown handling |
src/main/ipc.ts |
IPC registration between renderer requests and main-process services |
src/main/configManager.ts |
Persists config.json in Electron user data and stores queue/database settings |
src/main/services/db.ts |
MariaDB connection, schema setup, and storage operations |
src/main/services/vrcAuthService.ts |
VRChat login, session restore, and 2FA handling |
src/main/services/vrcDataService.ts |
Capture and retrieval logic for users and related VRChat data |
src/main/services/groupCaptureService.ts |
Group profile and member capture workflow |
src/main/services/worldCaptureService.ts |
World capture workflow |
src/main/services/groupQueueWorker.ts |
Background queue scheduling and paced group/user capture work |
src/main/services/searchService.ts |
Optional MeiliSearch integration |
src/preload/index.ts |
contextBridge API exposed to the renderer |
src/renderer/src/App.vue |
Main desktop shell, login flow, navigation, and lifecycle state handling |
src/renderer/src/pages/ |
Page-level views for groups, users, worlds, analytics, queue, and settings |
src/shared/ |
Shared TypeScript contracts for auth, analytics, queue, and captured data |
Assets/ |
App assets bundled with Electron builder |
npm run devstarts Electron Vite.- The Electron main process initializes config, credential storage, and the app windows.
- IPC handlers are registered so the renderer can call into main-process services.
- If database settings already exist, the app attempts the MariaDB connection on startup.
- If MeiliSearch is configured, the search service is initialized.
- Queue workers are started and wait for runtime readiness.
- The Vue renderer loads the login flow or app shell and begins polling for database readiness.
- configuration is stored under Electron user data as
config.json - remembered credentials and restored session material are kept in encrypted local storage paths managed by the main process
- the primary persistent dataset lives in MariaDB rather than a bundled local SQLite file
- queue timing is configured in milliseconds and applied to future runs immediately after saving
- baseline imports can seed large sets of group or user IDs before live recapture fills in details
- the current application shape is desktop-first and Windows-oriented
- Electron builder is configured to produce a directory target for Windows
- the app supports offline mode for reviewing local data without an active VRChat login
- the queue system is intentionally paced, processing one queued item per scheduled pass rather than attempting to drain everything at once
This repository is licensed under the custom ComfyChloe Non-Commercial Copyleft License 1.2.
In practical terms, that means:
- people may view, share, and modify the code
- people may publish fixes, forks, and contributions
- distributed modified versions must remain under the same license
- distributed versions must include source code
- selling the code or redistributed builds is not allowed without separate written permission
- closed-source redistribution is not allowed
This is a custom license for this repository. It is not MIT, GPL, Apache, or MPL.