The core infrastructure backend (API, database, Docker, etc).
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 
Mick Letofsky 0624981ab6
Rename CLI endpoint to Preset instead of Seed (#7340)
1 day ago
..
Commands Rename CLI endpoint to Preset instead of Seed (#7340) 1 day ago
Configuration PM-34033 - Add user & org API key seeding and improve CLI output (#7324) 4 days ago
Helpers PM-34033 - Add user & org API key seeding and improve CLI output (#7324) 4 days ago
Program.cs Rename CLI endpoint to Preset instead of Seed (#7340) 1 day ago
README.md Rename CLI endpoint to Preset instead of Seed (#7340) 1 day ago
SeederUtility.csproj Refactoring structure of the CLI to be more maintainable long-term (#7042) 1 month ago

README.md

Bitwarden Seeder Utility

A CLI wrapper around the Seeder library for generating test data in a Bitwarden database.

Getting Started

Build and run from the util/SeederUtility directory:

dotnet build
dotnet run -- <command> [options]

Login Credentials: All seeded users use password asdfasdfasdf by default (override with --password). For org presets the owner email is owner@<domain>; for individual presets the email comes from the preset's user.email field. For the individual command with --first-name/--last-name, the email is {first}.{last}@individual.example; without names, a random Faker identity is generated and mangling is auto-enabled.

Commands

organization - Seed an Organization

Full control over the org shape via CLI flags — user count, domain, structure, region, density, and plan type. Reach for this when you need flexibility the preset catalog doesn't offer, including orgs with no vault data (every preset includes ciphers).

# Users only — no vault data
dotnet run -- organization -n MyOrgNoCiphers -u 100 -d myorg-no-ciphers.example

# 10,000 users for load testing
dotnet run -- organization -n LargeOrgNoCiphers -u 10000 -d large-org-no-ciphers.example

# With vault data (ciphers, groups, collections)
dotnet run -- organization -n SmallOrg -d small.example -u 3 -c 10 -g 5 -o Traditional -m

# Mid-size Traditional org with realistic status mix
dotnet run -- organization -n MidOrg -d mid.example -u 50 -c 1000 -g 15 -o Traditional -m

# Large Modern org
dotnet run -- organization -n LargeOrg -d large.example -u 500 -c 10000 -g 85 -o Modern -m

# Stress test — massive Spotify-style org
dotnet run -- organization -n StressOrg -d stress.example -u 8000 -c 100000 -g 125 -o Spotify -m

# Regional data variants
dotnet run -- organization -n EuropeOrg -d europe.example -u 10 -c 100 -g 5 --region Europe
dotnet run -- organization -n ApacOrg -d apac.example -u 17 -c 600 -g 12 --region AsiaPacific

# With ID mangling for test isolation
dotnet run -- organization -n IsolatedOrg -d isolated.example -u 5 -c 25 -g 4 -o Spotify --mangle

# With custom password and plan type
dotnet run -- organization -n CustomPwOrg -d custom-password-05.example -u 10 -c 100 -g 3 --password "MyTestPassword1" --plan-type teams-annually

# Free plan org
dotnet run -- organization -n FreeOrg -d free.example -u 1 -c 10 -g 1 --plan-type free

# Teams plan org
dotnet run -- organization -n TeamsOrg -d teams.example -u 20 -c 200 -g 5 --plan-type teams-annually

# Production-realistic KDF iterations (600k) for e2e auth testing
dotnet run -- organization -n E2eOrg -d e2e.example -u 5 -c 25 --kdf-iterations 600000 --mangle

individual - Seed an Individual User

Full control over the user via CLI flags — subscription tier, identity, and optional vault data. Reach for this when you need a named user with a predictable email or a personal vault with generated items; the individual presets create bare accounts with no vault data.

# Named user — predictable email (john.doe@individual.example), no mangling needed
dotnet run -- individual --subscription free --first-name John --last-name Doe

# Premium named user with personal vault (~75 ciphers, 5 folders)
dotnet run -- individual --subscription premium --first-name Jane --last-name Smith --vault

# Random name — mangling auto-enabled (no names = random Faker identity)
dotnet run -- individual --subscription premium --vault

# With custom password
dotnet run -- individual --subscription free --first-name John --last-name Doe --vault --password "MyTestPassword1"

# Production-realistic KDF iterations for e2e auth testing
dotnet run -- individual --subscription premium --first-name Test --last-name User --kdf-iterations 600000

preset - Fixture-Based Seeding

Loads a named configuration from the embedded catalog. Presets are curated JSON fixtures with specific users, groups, collections, and cipher relationships — the same data every time. Reach for this when you need a known, reproducible scenario rather than generated data.

# List available presets and fixtures
dotnet run -- preset --list

# Load the Dunder Mifflin preset (58 users, 14 groups, 15 collections, ciphers)
dotnet run -- preset --name qa.dunder-mifflin-enterprise-full

# Zero Knowledge Labs — 429 users, named folders, favorites
dotnet run -- preset --name qa.zero-knowledge-labs-enterprise --mangle

# Load with ID mangling for test isolation
dotnet run -- preset --name qa.dunder-mifflin-enterprise-full --mangle

dotnet run -- preset --name qa.stark-free-basic --mangle

# Scale preset for performance testing
dotnet run -- preset --name scale.xs-central-perk --mangle

dotnet run -- preset --name qa.dunder-mifflin-enterprise-full --password "MyTestPassword1" --mangle

# Override KDF iterations for a preset (overrides preset's kdfIterations value)
dotnet run -- preset --name qa.enterprise-basic --kdf-iterations 600000 --mangle

# Seed a free individual user
dotnet run -- preset --name individual.free --mangle

# Seed a premium individual user
dotnet run -- preset --name individual.premium --mangle