config.json
Reference for the primary distribution configuration file.
config.json is the primary distribution configuration file used by divekit distribute, fetch, patch, overview, and related commands.
Default location:
.divekit/distributions/<distribution>/config.json
Current Stored Format
The current persisted format is a flat version: "2.0" document.
Internally, Divekit still expands this into named targets such as work and eval.
{
"version": "2.0",
"remote": "gitnrw",
"groupId": 12345,
"members": {
"path": "$DIVEKIT_MEMBERS/st2_members.json",
"permissions": "developer"
},
"evaluationPipeline": {
"enabled": true,
"groupId": 67890
},
"snapshot": {
"remote": "research",
"groupId": 24680
}
}
Keys
| Key | Type | Notes |
|---|---|---|
version | string | Current format version. Use "2.0". |
remote | string | Host alias from ~/.divekit/hosts.json. |
groupId | integer | Work target group ID. |
name | string | Optional repository name template. When omitted, Divekit uses {{distribution}}-{{uuid}}. |
members | object | Member source and default permissions. |
members.path | string | Path to the members.json file. Supports $DIVEKIT_MEMBERS/... and relative paths resolved through the members base directory. |
members.permissions | string | GitLab access level assigned to configured members, for example guest, reporter, developer, maintainer, or owner. |
evaluationPipeline | object | Enables separated eval target handling. |
evaluationPipeline.enabled | boolean | Enables the generated eval target and cross-repository setup. |
evaluationPipeline.groupId | integer | Optional group ID for eval repositories. |
groupLayout | object | Controls how student and eval groups are derived. |
groupLayout.mode | string | Group-resolution strategy, for example legacy or distribution-subgroups. |
groupLayout.rootGroupId | integer | Optional root group ID used to derive distribution subgroups. |
snapshot | object | Optional research snapshot target configuration. |
snapshot.remote | string | Host alias from ~/.divekit/hosts.json used for snapshot writes. Defaults to the work target remote. |
snapshot.groupId | integer | Snapshot root group used by divekit snapshot. Interactive runs can store this after you choose a root group. |
deleteExistingRepositories | boolean | Destructive reset option before distribution. |
scripting | object | Language and file-extension mapping used by scripting and token tooling. |
scripting.languages | array of strings | Enabled language packs. If omitted in auto mode, Divekit can discover languages. |
scripting.extensions | object | Maps file patterns such as *.java to language packs. |
scripting.files | object | File-specific mapping alias that is merged with scripting.extensions. |
scripting.mode | string | Scripting mode. auto enables language discovery; object form may also use manual mappings. |
variables | object | Global token delimiter and fixed values. |
variables.variableDelimiter | string | Opening delimiter for tokens. |
variables.variableDelimiterEnd | string | Optional closing delimiter when start and end should differ. |
variables.values | object | Fixed token values available during distribution. |
Repository Name Templates
The optional top-level name value is rendered once for each repository group.
When omitted, Divekit uses {{distribution}}-{{uuid}}.
For example, use the first configured member’s GitLab username:
{
"name": "exercise-{{username}}"
}
See Repository Name Templates for the complete data-field and function reference, Go template syntax, stable numbering, examples, and error behavior.
Notes
members.pathpoints to amembers.jsonfile. See members.json.namecontrols the generated repository names. The default does not need to be stored:{{distribution}}is replaced with the distribution folder name and{{uuid}}with the group UUID. For example, distributionST2M4creates names such asST2M4-b8520e99-.... Setnameonly when you need a custom naming pattern.- Repository name templates can use group context from
members.json, including usernames, labels, metadata, and stable repository indexes. divekit patch nameuses the samenamerule to reconcile already distributed GitLab project names and URL paths.evaluationPipelineis the canonical stored key. OldersecurePipelineconfigs are still accepted on read.- When the evaluation pipeline is enabled, Divekit creates the
evaltarget internally. It is not configured as a second top-level target in the stored file. - The implicit
evaltarget inherits the repository name rule from the work target. Divekit does not add an automatic-evalsuffix to repository names. linkingis inferred at runtime when the evaluation pipeline is enabled. It is an implementation detail and is normally not written back toconfig.json.snapshotis optional. When omitted,divekit snapshotuses the work remote and derives the snapshot group fromgroupLayout.rootGroupIdorgroupId.snapshot.groupIdis the only root group value prefilled in the interactive snapshot prompt; the workgroupIdis shown as a fallback placeholder.divekit initcreates this file for a distribution. It does not requirevariation.jsonorindividualization.json.
Related pages:
Last modified July 13, 2026: docs: document repository name templates (daf0c1a)