Skip to content

Repository files navigation

veskforge

veskforge

release badgeci badgelicense badge

veskforge-showcase


veskforge is an unofficial desktop build manager for Vesktop users who want custom Vencord plugins without hand-running the source workflow every time. it manages a Vencord checkout, installs enabled plugins into src/userplugins, builds Vencord, validates the desktop dist, and points Vesktop at that build through Vesktop's supported vencordDir state setting.

why

Vencord custom plugins are compile-time plugins. Vesktop loads a built Vencord desktop bundle, so the stable workflow is to build a custom Vencord dist and configure Vesktop to use it.

  • keeps to Vesktop's supported custom Vencord location instead of patching installed app files
  • supports local plugin files, local plugin folders, and Git plugin sources
  • stores plugin state in one manifest and recreates src/userplugins from that manifest before each build
  • validates required Vencord desktop artifacts before touching Vesktop state
  • preserves unrelated Vesktop state.json fields when applying vencordDir
  • can start with the OS session and check the managed Vencord checkout for updates
  • defaults updates to manual apply, with explicit opt-in for startup rebuild/apply automation

requirements

requirementneeded fornotes
Windows or Linuxrunning veskforgeWindows releases include installer builds. Linux releases include .deb, .rpm, and AppImage builds.
Vesktopapplying buildsveskforge writes Vesktop's vencordDir setting; it does not patch Vesktop binaries.
Gitbuilding custom Vencordused to clone/update Vencord and Git plugin sources.
Node.jsbuilding custom Vencordinstall the normal Node.js distribution that includes Corepack and npm.
pnpmbuilding custom Vencordveskforge detects normal PATH installs plus common Windows locations such as %APPDATA%\\npm, %LOCALAPPDATA%\\pnpm, Volta, Scoop, and Node.js folders.
trusted custom pluginsevery buildplugin code runs as application code; veskforge does not sandbox plugins.
Rust toolchainbuilding veskforge from source onlynot needed when using release downloads.

quickstart

for normal use, install the latest build from releases:

platformartifact
windows installerVeskforge_*_x64-setup.exe or .msi
linux.deb, .rpm, or .AppImage

to run from source:

pnpm install --trust-policy-exclude semver@6.3.1
pnpm tauri dev

the --trust-policy-exclude flag is currently needed in this environment because pnpm blocks semver@6.3.1 as a transitive trust-policy downgrade under @babel/core.

to create a linux deb package:

pnpm tauri build --bundles deb

the generated package is written under:

src-tauri/target/release/bundle/deb/

workflow

stepbehavior
add pluginpaste or drop a local source file, local plugin folder, or HTTPS GitHub repo after validating the Vencord plugin entrypoint
buildclone or update Vendicated/Vencord, recreate src/userplugins, run pnpm install --frozen-lockfile, then pnpm build
validaterequire vencordDesktopMain.js, vencordDesktopPreload.js, vencordDesktopRenderer.js, vencordDesktopRenderer.css
applywrite the validated dist path to Vesktop state.json as vencordDir
startup checkoptionally launch at login, check the managed Vencord checkout, and rebuild/apply only when Auto rebuild is enabled
restartfully restart Vesktop so it loads the custom Vencord build

architecture

veskforge keeps the risky parts explicit: plugin sources are validated before they enter the managed Vencord checkout, and Vesktop state is only updated after a desktop build produces the expected artifacts.

flowchart LR
user["User"] -->|adds sources and runs actions| ui["veskforge UI"]
ui -->|invokes commands| backend["Tauri Rust backend"]
subgraph app_state["veskforge app data"]
manifest[("Plugin manifest")]
workspace["Managed Vencord checkout"]
userplugins["src/userplugins"]
dist["Validated desktop dist"]
end
startup["OS startup entry"]
subgraph plugin_sources["Plugin sources"]
local_file["Local plugin file"]
local_folder["Local plugin folder"]
github_repo["GitHub repository"]
end
subgraph vesktop_state["Vesktop"]
state_json["state.json"]
vesktop["Vesktop runtime"]
end
backend -->|stores enabled sources| manifest
backend -->|registers login launch| startup
startup -->|opens veskforge| ui
backend -->|normalizes and validates| plugin_sources
plugin_sources -->|materializes enabled plugins| userplugins
backend -->|clones or updates| workspace
workspace -->|contains| userplugins
backend -->|runs pnpm install and build| workspace
workspace -->|emits desktop bundle| dist
backend -->|requires expected files| dist
backend -->|writes vencordDir| state_json
state_json -->|points to custom bundle| dist
vesktop -->|loads on restart| state_json
classDef boundary fill:#f7f7fb,stroke:#9ca3af,color:#111827
classDef storage fill:#eef2ff,stroke:#4f46e5,color:#1e1b4b
classDef build fill:#fdf2f8,stroke:#db2777,color:#831843
classDef external fill:#fff7ed,stroke:#c2410c,color:#7c2d12
class app_state,plugin_sources,vesktop_state boundary
class manifest,state_json storage
class workspace,userplugins,dist build
class startup,local_file,local_folder,github_repo,vesktop external
Loading

plugin sources

sourceexpected shape
local file.ts, .tsx, .js, or .jsx Vencord module with a default export; simple .plugin.js files without BdApi usage can be wrapped at build time
local folderfolder containing index.ts, index.tsx, index.js, index.jsx, or exactly one .plugin.js; veskforge can auto-detect one nested plugin folder
GitHub repohttps://github.com/owner/repo, with optional branch, tag, or commit ref; veskforge clones and auto-detects one plugin folder

veskforge recreates the managed Vencord src/userplugins folder from the manifest on each build. disabled plugins stay in the manifest but are not materialized into the next build. see plugin source formats for supported and rejected source shapes.

paths

veskforge stores its own state in the platform app data directory. the managed Vencord checkout lives under that app data directory at:

workspace/Vencord

Vesktop state detection checks common locations such as:

platformcandidate
linux~/.config/vesktop/state.json
linux flatpak~/.var/app/dev.vencord.Vesktop/config/vesktop/state.json
windows%APPDATA%\\vesktop\\state.json

you can also paste a state.json path in the app, or set VESKTOP_STATE_FILE before launching veskforge.

update model

veskforge defaults to manual updates. the app can check whether the managed Vencord checkout differs from origin/main; rebuilding is an explicit action unless Auto rebuild is enabled in settings.

Start at login registers veskforge with the OS session startup mechanism. On launch, veskforge checks the managed Vencord checkout. If Auto rebuild is off, it only reports the update. If Auto rebuild is on, it rebuilds the custom Vencord bundle and reapplies the validated dist to the detected Vesktop state.json.

this is intentional. Vencord and Discord internals can change, and a plugin that built yesterday may fail after an upstream update.

design assets

logo files:

  • design/assets/veskforge-logo-light.svg
  • design/assets/veskforge-logo-dark.svg

see design notes for the UI direction.

building from source

pnpm install --trust-policy-exclude semver@6.3.1
pnpm build
cd src-tauri
cargo check

build a desktop binary and deb package:

pnpm tauri build --bundles deb

build all configured linux bundles:

pnpm tauri build

windows installers are built by GitHub Actions on windows-latest using the same pnpm tauri build command. Tagged releases attach the NSIS .exe and MSI artifacts to the GitHub release.

verification

current local verification:

checkstatus
frontend buildpnpm build passes
rust backendcargo check passes
rust testscargo test passes
linux bundlespnpm tauri build passes for deb, rpm, and AppImage
windows installerconfigured in GitHub Actions with windows-latest and NSIS .exe artifact upload
release binary smoke teststarts under xvfb-run and stays alive until timeout
rendered UI smoke testchecked with agent-browser at http://localhost:1420/

license

mit license

About

unofficial custom Vencord build manager for Vesktop.

Topics

Resources

Stars

4 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages