Paths and Locations
This page summarizes the default file locations and path resolution rules used by the current CLI.
User-Level Paths
~/.divekit/
├── .env
├── bin/
├── divekit.db
├── gui-runs/
├── hosts.json
├── install.json
├── members/
├── scripts/
│ └── run/
├── logs/
└── secrets/
Notes:
bin/is the fallback managed binary installation directory (divekitordivekit.exe).divekit.dbstores central local SQLite state such as managed GUI authentication data.gui-runs/stores per-origin SQLite run state for queued and executed GUI actions.hosts.jsonstores host aliases and secret/env lookup keys.install.jsontracks the managed install location and PATH integration fordivekit uninstall.members/is the default base directory for members files.scripts/run/contains extensions resolved bydivekit run <name>.scripts/also contains built-in hook helpers such as Java transformers.secrets/is a fallback storage area when no OS credential manager is available.
Project-Level Paths
<origin-repo>/.divekit/
├── variation.json
├── individualization.json
├── local-data/
│ └── <distribution>/
│ ├── local/
│ │ └── <run-id>/
│ │ ├── <target>/<project>/repo
│ │ └── remotes.json
│ ├── gitlab/
│ │ └── <timestamp>/
│ │ ├── work/<uuid>/repo
│ │ ├── artifacts/<uuid>/pages/export.json
│ │ └── remotes.json
│ └── runs/
│ └── <timestamp>/
├── eval-pipeline/
│ ├── work/
│ │ ├── .gitlab-ci.yml
│ │ └── .gitlab/
│ │ └── ci/
│ │ └── divekit/
│ │ └── eval-trigger.yml
│ ├── materialization.json
│ ├── plugins.json
│ └── eval/
│ ├── .gitlab-ci.yml
│ └── .gitlab/
│ └── ci/
│ └── divekit/
│ └── plugins/
│ ├── <plugin-id>.yml
│ └── <plugin-id>/
│ └── feedback/
└── distributions/
└── <distribution>/
├── config.json
├── feedback/
│ ├── _all.json
│ └── <uuid>.json
├── variation.json
├── individualization.json
├── individuals.json
├── remotes.json
└── eval-pipeline/
├── work/
│ ├── .gitlab-ci.yml
│ └── .gitlab/
│ └── ci/
│ └── divekit/
│ └── eval-trigger.yml
├── materialization.json
├── plugins.json
└── eval/
├── .gitlab-ci.yml
└── .gitlab/
└── ci/
└── divekit/
└── plugins/
├── <plugin-id>.yml
└── <plugin-id>/
└── feedback/
Resolution Rules
individualization.json
.divekit/distributions/<distribution>/individualization.json.divekit/individualization.json~/.divekit/individualization.json- built-in defaults
Variation definitions
.divekit/distributions/<distribution>/individualization.json.divekit/distributions/<distribution>/variation.json.divekit/individualization.json.divekit/variation.json~/.divekit/individualization.json- built-in defaults with no variations
Omitting variations from a unified file continues this lookup. An explicitly
empty variation section stops it. The obsolete
~/.divekit/templates/variation.json is no longer a runtime fallback; current
versions remove an unchanged managed copy during install/update and preserve a
customized copy with a warning.
members.path
- Absolute path
- Relative
./or../path from the current working directory $DIVEKIT_MEMBERS/...- Other relative paths under the configured members base directory
If DIVEKIT_MEMBERS is unset, Divekit uses ~/.divekit/members.
Local Data Storage
Divekit stores generated local working data under .divekit/local-data/<distribution>/.
| Path | Created by | Purpose |
|---|---|---|
.divekit/local-data/<distribution>/local/<run-id>/ | divekit distribute -p local | Local filesystem distribution output. |
.divekit/local-data/<distribution>/gitlab/<timestamp>/ | divekit fetch, divekit run --fetch-first | Timestamped GitLab repository snapshot. |
.divekit/local-data/<distribution>/runs/<timestamp>/ | divekit run | Run result output for local execution. |
GitLab snapshots contain real Git repositories under work/<uuid>/repo. Local provider outputs are generated filesystem distributions under <target>/<project>/repo.
Research snapshots created by divekit snapshot are pushed to GitLab and do not
use .divekit/local-data/ by default. The command stages rewritten repositories
in a temporary directory and removes that directory after the run. If
--output-dir <path> is set, that directory is used for local staging and kept
after the push.
GUI action state is stored outside the project tree in
~/.divekit/gui-runs/<origin-hash>.db. Older projects may still have a legacy
.divekit/gui-runs.db; the CLI migrates it into the user-level gui-runs/
directory when the GUI run state is opened.
Managed GUI authentication state is stored in the central user-level
~/.divekit/divekit.db database rather than in project repositories.
Evaluation Pipeline authoring
- Distribution-specific files under
.divekit/distributions/<distribution>/eval-pipeline/ - Project-level files under
.divekit/eval-pipeline/ - Built-in defaults
Root-level .gitlab-ci_workrepo.yml and .gitlab-ci_evalrepo.yml are explicit CI overrides and take precedence over the .divekit/eval-pipeline/ copies.
The work-repo trigger include is authored at .divekit/eval-pipeline/work/.gitlab/ci/divekit/eval-trigger.yml and generated into work repositories as .gitlab/ci/divekit/eval-trigger.yml.
Materialization rules can be authored explicitly in .divekit/eval-pipeline/materialization.json, but the common path-based form is usually clearer:
<path>_copy_to_evalbecomes<path>in the work repo and is copied into the eval repo during eval setup.<path>_overwrite_to_evalbecomes<path>in the work repo and replaces the matching eval-repo path during eval setup.
In generated eval repositories, Divekit writes the compiled runtime manifest to .divekit/materialization.json.
See materialization.json for the full file format.
Managed plugin child pipeline files are written to .gitlab/ci/divekit/plugins/<plugin-id>.yml in the eval repository.
Optional plugin feedback assets are written under .gitlab/ci/divekit/plugins/<plugin-id>/feedback/.
Plugin implementation code under src/ ships in the plugin’s container image
and is not materialized into the eval repository.
Plugin result artifacts may include feedback/, issues/, and logs/ under
plugin-results/<plugin-id>/; the generated Pages report exposes them through
feedback.json, issues.json, and index.html.
Manual feedback authored with divekit feedback is stored under
.divekit/distributions/<distribution>/feedback/. _all.json applies to every
eval report in the distribution; <uuid>.json applies to one UUID. divekit patch feedback writes the runtime file .divekit/feedback/index.json into eval
repositories, where divekit report renders it as teaching-team feedback.
Manual report overrides authored with divekit plugin override are stored in
eval repositories under .divekit/overrides/. The older
.divekit/plugin/overrides/ location is still read for compatibility.
Environment Variables
| Variable | Purpose |
|---|---|
DIVEKIT_INSTALL_DIR | Override the managed binary install directory. |
DIVEKIT_MEMBERS | Base directory used for members file lookup. |
DIVEKIT_HOME | Override for the Divekit home directory resolution. |
DIVEKIT_API_TOKEN | Generic fallback token for GitLab hosts. |
DIVEKIT_API_TOKEN_<HOST> | Host-derived token key, for example DIVEKIT_API_TOKEN_GITLAB_COM. |
Binary Install Location
- Unix: Divekit prefers
~/.local/binwhen that directory already exists or is already onPATH; otherwise it falls back to~/.divekit/bin. - Windows:
%USERPROFILE%\.divekit\bin\divekit.exe
Practical Guidance
- Put shared defaults at project root
.divekit/. - Put distribution-specific overrides into
.divekit/distributions/<distribution>/. - Put Evaluation Pipeline defaults under
.divekit/eval-pipeline/and distribution-specific overrides under.divekit/distributions/<distribution>/eval-pipeline/. - Treat
individuals.jsonandremotes.jsonas generated state, not as primary authoring inputs.
Related pages: