Configuration Reference

Every configurable field, documented. Tune backup behavior to your needs.

Ways to Configure

Ginkgo Backup offers three ways to configure: the GUI (recommended for most users), the CLI (ginkgo init command), and the HTTP API (for automation). All config is stored in a SQLite database and can be changed at any time.

Backup Source Configuration

Fields available when creating or updating a backup source. Use a JSON body when creating via API.

FieldTypeDefaultDescription
pathstringSource path (required)
namestringdirectory nameDisplay name
groupstringGroup label for organizing sources
enabledbooltrueWhether the source is active (false when paused)
schedulestringmanualSchedule: manual / hourly / daily / weekly / monthly
schedule_configstring (JSON)Schedule detail, e.g. {"hour":2,"minute":30}
retentionstringsmartRetention policy: keep_all / smart / custom
retention_customstringCustom retention rules (when retention=custom)
excludes[]string[]Exclude patterns (glob syntax, comma-separated)
enable_aiboolfalseEnable AI-powered snapshot notes
watch_modestringautoWatch mode: auto / poll / disabled
compression_typestringzstdCompression algorithm (fixed zstd, not changeable)
compression_levelint1Compression level (fixed 1, not changeable)
chunk_concurrencyint0 (auto)Chunk concurrency, 0 = auto by CPU
repo_paths[]stringRepository paths (multi-target for 3-2-1)

Schedule Types in Detail

The schedule_config field uses different JSON structures depending on the schedule type:

scheduleschedule_configDescription
manualNo automatic backup, manual trigger only
hourly{"interval_minutes": 60}Run at a fixed interval (default 60 min)
daily{"hour": 2, "minute": 30}Run daily at the specified time
weekly{"day": "monday", "hour": 3}Run weekly on the specified day and time
monthly{"date": 1, "hour": 2}Run monthly on the specified date and time

Retention Policies in Detail

Ginkgo uses GFS (Grandfather-Father-Son) retention to manage historical versions:

retentionDescription
keep_allKeep all snapshots, never delete (highest space usage)
smartSmart GFS (recommended): 24 hourly + 30 daily + 12 weekly + 12 monthly + 3 yearly
customCustom GFS bucket sizes via retention_custom

Exclude Patterns

The excludes field uses glob syntax, comma-separated. You can also create a .ginkgo-backupignore file in the source directory (same syntax as .gitignore).

patternmatches
**/Cache/**Any directory named Cache at any depth
**/*.tmpAll .tmp files
**/logs/**Any directory named logs at any depth
node_modules/**node_modules in the source root
!**/important/**Negative pattern: re-include important directories

Compression

Ginkgo always uses zstd (level 1) for all backup data. It is not configurable:

algorithmlevelDescription
zstd1Fixed algorithm and level, applied to all backup sources

File Watch Modes

watch_mode controls how file changes are detected for real-time backup:

watch_modeDescription
autoAuto-select: prefer native OS file events, fall back to polling
pollForce polling: scan directory periodically, best compatibility but slightly higher CPU
disabledDisable real-time watch, only run on schedule

Repository Configuration

Fields available when creating a repository:

FieldTypeDefaultDescription
pathstringRepository path (local path or cloud://backendID/path)
display_namestringDisplay name
typestringlocalType: local / s3 / webdav
encryptedboolfalseEnable encryption
passwordstringEncryption password (required when encrypted=true)
compressionstringzstdCompression algorithm

Global Settings

Read/write app-level settings via the /api/v1/settings endpoint:

Shell

# View current settings curl http://127.0.0.1:9275/api/v1/settings \ -H "Authorization: Bearer $TOKEN" # Update settings curl -X PUT http://127.0.0.1:9275/api/v1/settings \ -H "Authorization: Bearer $TOKEN" \ -H "Content-Type: application/json" \ -d '{"language": "en", "theme": "dark"}'

Snapshot Pinning

Pinned snapshots are protected from retention and GC. Useful for preserving critical points in time:

curl

# Pin a snapshot curl -X POST http://127.0.0.1:9275/api/v1/pins/create \ -H "Authorization: Bearer $TOKEN" \ -H "Content-Type: application/json" \ -d '{"snapshot_id": 123}' # Unpin curl -X POST http://127.0.0.1:9275/api/v1/pins/delete \ -H "Authorization: Bearer $TOKEN" \ -H "Content-Type: application/json" \ -d '{"snapshot_id": 123}'

See Also