Paths and Locations

Reference for where Divekit reads and writes its files.

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 (divekit or divekit.exe).
  • divekit.db stores 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.json stores host aliases and secret/env lookup keys.
  • install.json tracks the managed install location and PATH integration for divekit uninstall.
  • members/ is the default base directory for members files.
  • scripts/run/ contains extensions resolved by divekit 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

  1. .divekit/distributions/<distribution>/individualization.json
  2. .divekit/individualization.json
  3. ~/.divekit/individualization.json
  4. built-in defaults

Variation definitions

  1. .divekit/distributions/<distribution>/individualization.json
  2. .divekit/distributions/<distribution>/variation.json
  3. .divekit/individualization.json
  4. .divekit/variation.json
  5. ~/.divekit/individualization.json
  6. 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

  1. Absolute path
  2. Relative ./ or ../ path from the current working directory
  3. $DIVEKIT_MEMBERS/...
  4. 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>/.

PathCreated byPurpose
.divekit/local-data/<distribution>/local/<run-id>/divekit distribute -p localLocal filesystem distribution output.
.divekit/local-data/<distribution>/gitlab/<timestamp>/divekit fetch, divekit run --fetch-firstTimestamped GitLab repository snapshot.
.divekit/local-data/<distribution>/runs/<timestamp>/divekit runRun 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

  1. Distribution-specific files under .divekit/distributions/<distribution>/eval-pipeline/
  2. Project-level files under .divekit/eval-pipeline/
  3. 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_eval becomes <path> in the work repo and is copied into the eval repo during eval setup.
  • <path>_overwrite_to_eval becomes <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

VariablePurpose
DIVEKIT_INSTALL_DIROverride the managed binary install directory.
DIVEKIT_MEMBERSBase directory used for members file lookup.
DIVEKIT_HOMEOverride for the Divekit home directory resolution.
DIVEKIT_API_TOKENGeneric 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/bin when that directory already exists or is already on PATH; 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.json and remotes.json as generated state, not as primary authoring inputs.

Related pages: