> ## Documentation Index
> Fetch the complete documentation index at: https://docs.harborframework.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Registries

> Create custom registries of datasets.

Harbor supports running and downloading datasets from custom registries via `--registry-url` or `--registry-path`.

<Note>
  This document describes how anyone can create a custom registry. By default, Harbor uses Harbor Hub as the registry.
</Note>

## Schema

`registry.json` is a JSON array. Each entry defines one version of a dataset and must include `name`, `version`, `description`, and `tasks`. The `metrics` field is optional.

```json title="registry.json" theme={"system"}
[
  {
    "name": "<dataset>",
    "version": "<version>",
    "description": "<description>",
    "tasks": [
      {
        "name": "<task>",
        "git_url": "https://github.com/<org>/<repo>.git",
        "git_commit_id": "<commit-sha>",
        "path": "<path/to/task>"
      }
    ],
    "metrics": [
      {
        "type": "mean",
        "kwargs": {}
      }
    ]
  }
]
```

### Dataset fields

<ParamField body="name" type="string">
  Dataset name used with `--dataset`.
</ParamField>

<ParamField body="version" type="string">
  Dataset version. Define another top-level entry to publish another version of the same dataset.
</ParamField>

<ParamField body="description" type="string">
  Human-readable description of the dataset.
</ParamField>

<ParamField body="tasks" type="list[Task]">
  Tasks included in the dataset.
</ParamField>

<ParamField body="metrics" type="list[Metric]" default="[]">
  Optional reward aggregations. See [Metrics](/core-concepts/datasets/metrics).
</ParamField>

### Task fields

Every task must include `name` and `path`. The Git fields are optional.

<ParamField body="tasks[].name" type="string">
  Task name.
</ParamField>

<ParamField body="tasks[].git_url" type="string | null" default="null">
  Git repository containing the task. Without `--repo`, omitting this field makes `path` a local path.
</ParamField>

<ParamField body="tasks[].git_commit_id" type="string | null" default="null">
  Commit containing the task. If omitted, Harbor resolves the repository's default branch.
</ParamField>

<ParamField body="tasks[].path" type="string">
  Path to the task directory, relative to the Git repository root when `git_url` is set.
</ParamField>

### Metric fields

<ParamField body="metrics[].type" type={'"sum" | "min" | "max" | "mean" | "uv-script"'} default={'"mean"'}>
  Metric implementation used to aggregate task rewards.
</ParamField>

<ParamField body="metrics[].kwargs" type="object" default="{}">
  Keyword arguments passed to the metric implementation.
</ParamField>

<Note>
  When loading the registry with [`--repo`](/core-concepts/datasets/git-repos), Harbor fills omitted `git_url` and `git_commit_id` values from the selected repository and resolved commit.
</Note>

<Tip>
  Use unique dataset name and version pairs, and pin remote tasks to full commit SHAs for reproducible runs.
</Tip>
