Everything Vardum does today.

A versioned library, a manifest per project, a CLI, signed delivery and an MCP server.

Get started
npm i -D -E @vardum/cli

Every upload is a version.

Browsers upload straight into storage. A worker checks each file, records its checksum and dimensions, and makes it the current version.

  • Images: AVIF, GIF, JPEG, PNG, SVG, TIFF, WebP
  • Video: MP4, WebM, MOV, AVI, MPEG, stored as uploaded
  • Folders and search across the workspace
  • Restore any earlier version from its history
How it fits together
brand/logo

A manifest for each project.

A Vard maps assets to paths in one repository. Add files one by one or a whole folder, and choose what each output tracks.

  • Follow latest, pin a version, or request a variant
  • Folder rules include a folder recursively
  • Writable outputs that vardum push updates
  • Public or private manifests
Vards / marketing-site

Pull files, not links.

The CLI writes what a Vard describes and records it in .vardum.lock. A frozen pull in CI never looks past the lockfile.

  • vardum login authorizes a machine in the browser
  • Conflicts with local edits stop the pull
  • --frozen checks the SHA-256 of every file
  • push and push-folder upload new versions
Read the CLI guide
~/brand-kit
$ npx vardum push-folder ./icons brand/icons
push brand/icons/arrow.svg  (1/3)
push brand/icons/check.svg  (2/3)
push brand/icons/close.svg  (3/3)
waiting for 3 upload(s) to process…
3 changes

Stable URLs, signed variants.

Each asset keeps one URL that redirects to its current version. Variants are rendered from signed parameters, once, and stored next to the original.

  • Resize up to 4096 px and convert to AVIF, JPEG, PNG or WebP
  • Unsigned or tampered requests are refused
  • Custom domains, verified with a TXT record
  • 30 days of requests, data served and cache hits
site/hero
$ HERO=https://assets.acme.com/w/acme/site/hero
$ curl -so /dev/null -w '%{http_code}\n' $HERO'?w=800&fit=inside&format=webp&q=80&sig=Jx3…'
302
# same signature, different width
$ curl -so /dev/null -w '%{http_code}\n' $HERO'?w=4000&fit=inside&format=webp&q=80&sig=Jx3…'
403
w, h
1–4096
pixels
fit
cover contain fill inside outside
default inside
format
avif jpeg png webp
svg defaults to png
q
1–100
default 80, with format
sig
HMAC-SHA256
required

Let agents manage assets.

The MCP server gives Claude and other MCP clients eleven tools for assets and Vards, scoped by a workspace API key.

  • Upload, publish and delete assets
  • Create Vards, folder rules and pins
  • REST API described at /api/openapi.json
Set up the MCP server
tool call
update_vard
{
  "workspaceId": "0b7c6f0e-…",
  "vardId": "6f1d2a9b-…",
  "folderRules": [
    { "sourcePrefix": "brand/", "outputPrefix": "src/assets/brand/" }
  ]
}

Roles, keys and an audit trail.

Organizations own members and roles. Each workspace is isolated in PostgreSQL with row-level security.

  • Roles apply across every workspace in an organization
  • API keys belong to one workspace
  • Audit log filterable by action and actor type
Permissions
ReadUploadPublishDeleteMembers
OwnerYesYesYesYesYes
EditorYesYesYesYesNo
ViewerYesNoNoNoNo
Key: readYesNoNoNoNo
Key: writeYesYesYesYesNo

Start with one logo.

Start your own instance, upload it, map it into a repository, and pull.

npm i -D -E @vardum/cli