> For the complete documentation index, see [llms.txt](https://developer.harness.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://developer.harness.io/artifact-registry/new-to-artifact-registry/quickstart/dart-quickstart.md).

# Dart

{% @harness-package-selector/package-selector platforms="%5B%7B%22label%22%3A%22Docker%22%2C%22slug%22%3A%22docker%22%2C%22path%22%3A%22artifact-registry%2Fnew-to-artifact-registry%2Fquickstart%2Fdocker-quickstart%22%7D%2C%7B%22label%22%3A%22Helm%22%2C%22slug%22%3A%22helm%22%2C%22path%22%3A%22artifact-registry%2Fnew-to-artifact-registry%2Fquickstart%2Fhelm-quickstart%22%7D%2C%7B%22label%22%3A%22Helm%20HTTP%22%2C%22slug%22%3A%22helm-http%22%2C%22path%22%3A%22artifact-registry%2Fnew-to-artifact-registry%2Fquickstart%2Fhelm-http-quickstart%22%7D%2C%7B%22label%22%3A%22Generic%22%2C%22slug%22%3A%22generic%22%2C%22path%22%3A%22artifact-registry%2Fnew-to-artifact-registry%2Fquickstart%2Fgeneric-quickstart%22%7D%2C%7B%22label%22%3A%22Raw%20File%22%2C%22slug%22%3A%22raw-file%22%2C%22path%22%3A%22artifact-registry%2Fnew-to-artifact-registry%2Fquickstart%2Fraw-file-quickstart%22%7D%2C%7B%22label%22%3A%22Maven%22%2C%22slug%22%3A%22maven%22%2C%22path%22%3A%22artifact-registry%2Fnew-to-artifact-registry%2Fquickstart%2Fmaven-quickstart%22%7D%2C%7B%22label%22%3A%22Python%22%2C%22slug%22%3A%22python%22%2C%22path%22%3A%22artifact-registry%2Fnew-to-artifact-registry%2Fquickstart%2Fpython-quickstart%22%7D%2C%7B%22label%22%3A%22NPM%22%2C%22slug%22%3A%22npm%22%2C%22path%22%3A%22artifact-registry%2Fnew-to-artifact-registry%2Fquickstart%2Fnpm-quickstart%22%7D%2C%7B%22label%22%3A%22Nuget%22%2C%22slug%22%3A%22nuget%22%2C%22path%22%3A%22artifact-registry%2Fnew-to-artifact-registry%2Fquickstart%2Fnuget-quickstart%22%7D%2C%7B%22label%22%3A%22RPM%22%2C%22slug%22%3A%22rpm%22%2C%22path%22%3A%22artifact-registry%2Fnew-to-artifact-registry%2Fquickstart%2Frpm-quickstart%22%7D%2C%7B%22label%22%3A%22Debian%22%2C%22slug%22%3A%22debian%22%2C%22path%22%3A%22artifact-registry%2Fnew-to-artifact-registry%2Fquickstart%2Fdebian-quickstart%22%7D%2C%7B%22label%22%3A%22Alpine%22%2C%22slug%22%3A%22alpine%22%2C%22path%22%3A%22artifact-registry%2Fnew-to-artifact-registry%2Fquickstart%2Falpine-quickstart%22%7D%2C%7B%22label%22%3A%22Wolfi%22%2C%22slug%22%3A%22wolfi%22%2C%22path%22%3A%22artifact-registry%2Fnew-to-artifact-registry%2Fquickstart%2Fwolfi-quickstart%22%7D%2C%7B%22label%22%3A%22Cargo%22%2C%22slug%22%3A%22cargo%22%2C%22path%22%3A%22artifact-registry%2Fnew-to-artifact-registry%2Fquickstart%2Fcargo-quickstart%22%7D%2C%7B%22label%22%3A%22Conan%22%2C%22slug%22%3A%22conan%22%2C%22path%22%3A%22artifact-registry%2Fnew-to-artifact-registry%2Fquickstart%2Fconan-quickstart%22%7D%2C%7B%22label%22%3A%22Go%22%2C%22slug%22%3A%22go%22%2C%22path%22%3A%22artifact-registry%2Fnew-to-artifact-registry%2Fquickstart%2Fgo-quickstart%22%7D%2C%7B%22label%22%3A%22Hugging%20Face%22%2C%22slug%22%3A%22hugging-face%22%2C%22path%22%3A%22artifact-registry%2Fnew-to-artifact-registry%2Fquickstart%2Fhugging-face-quickstart%22%7D%2C%7B%22label%22%3A%22Conda%22%2C%22slug%22%3A%22conda%22%2C%22path%22%3A%22artifact-registry%2Fnew-to-artifact-registry%2Fquickstart%2Fconda-quickstart%22%7D%2C%7B%22label%22%3A%22Dart%22%2C%22slug%22%3A%22dart%22%2C%22path%22%3A%22artifact-registry%2Fnew-to-artifact-registry%2Fquickstart%2Fdart-quickstart%22%7D%2C%7B%22label%22%3A%22PHP%20Composer%22%2C%22slug%22%3A%22php-composer%22%2C%22path%22%3A%22artifact-registry%2Fnew-to-artifact-registry%2Fquickstart%2Fphp-composer-quickstart%22%7D%2C%7B%22label%22%3A%22Swift%22%2C%22slug%22%3A%22swift%22%2C%22path%22%3A%22artifact-registry%2Fnew-to-artifact-registry%2Fquickstart%2Fswift-quickstart%22%7D%2C%7B%22label%22%3A%22Puppet%22%2C%22slug%22%3A%22puppet%22%2C%22path%22%3A%22artifact-registry%2Fnew-to-artifact-registry%2Fquickstart%2Fpuppet-quickstart%22%7D%2C%7B%22label%22%3A%22Terraform%22%2C%22slug%22%3A%22terraform%22%2C%22path%22%3A%22artifact-registry%2Fnew-to-artifact-registry%2Fquickstart%2Fterraform-quickstart%22%7D%2C%7B%22label%22%3A%22R%20(CRAN)%22%2C%22slug%22%3A%22r-cran%22%2C%22path%22%3A%22artifact-registry%2Fnew-to-artifact-registry%2Fquickstart%2Fr-cran-quickstart%22%7D%2C%7B%22label%22%3A%22RubyGems%22%2C%22slug%22%3A%22rubygems%22%2C%22path%22%3A%22artifact-registry%2Fnew-to-artifact-registry%2Fquickstart%2Frubygems-quickstart%22%7D%5D" selectedPlatform="dart" %}

### Prerequisites <a href="#prerequisites" id="prerequisites"></a>

* Ensure you have the [**Dart CLI**](https://dart.dev/tools/dart-tool) `dart` and [**Flutter CLI**](https://docs.flutter.dev/reference/flutter-cli) `flutter` installed on your local machine.
* Access to a Harness account with appropriate permissions to create registries and connectors.

***

### Create a Dart artifact registry <a href="#create-a-dart-artifact-registry" id="create-a-dart-artifact-registry"></a>

{% tabs %}
{% tab title="Interactive Guide" %}
{% embed url="<https://app.tango.us/app/embed/e35f26c7-5656-4423-82f4-a035fc60784a?skipCover=true&defaultListView=false&skipBranding=false&makeViewOnly=false&hideAuthorAndDetails=true>" %}
Create Artifact Registry in Harness
{% endembed %}
{% endtab %}

{% tab title="Step-by-Step" %}

1. Navigate to the Artifact Registry module in your Harness project.
2. Click on **New Artifact Registry**.
3. In the Registry Type dropdown, select **Dart Registry**.
4. Provide a Registry Name.
   * Your registry name must start with a letter and can include `lowercase alphanumerics`, `_`, `.` and `-`.
5. Optionally, add a Description and Labels for better organization.
6. Choose visibility between **Public** and **Private**. *By default, the visibility is set to **Private**.*
7. Click **Create Registry** to finalize.
   {% endtab %}
   {% endtabs %}

{% hint style="info" %}
**PRIVATE REGISTRY**

This registry will serve as your private Dart registry within Harness.
{% endhint %}

***

### Configure an Upstream Proxy (Optional) <a href="#configure-an-upstream-proxy-optional" id="configure-an-upstream-proxy-optional"></a>

An upstream proxy allows your registry to fetch NuGet packages from external sources if they are not available locally.

{% tabs %}
{% tab title="Interactive Guides" %}

#### Create an upstream proxy

{% embed url="<https://app.tango.us/app/embed/9140d24a-fbca-4bdd-9bcc-4d395f9fef46?skipCover=true&defaultListView=false&skipBranding=false&makeViewOnly=false&hideAuthorAndDetails=true>" %}
Configure Upstream Proxy in Harness
{% endembed %}

#### Configure the upstream proxy in your registry

{% embed url="<https://app.tango.us/app/embed/ef4c5cae-9ba3-4d41-bbee-5142847bed12?skipCover=true&defaultListView=false&skipBranding=false&makeViewOnly=false&hideAuthorAndDetails=true>" %}
Configure Upstream Proxy in Harness
{% endembed %}
{% endtab %}

{% tab title="Step-by-Step" %}

#### Create an upstream proxy

1. In the Artifact Registry module, click the dropdown next to **New Artifact Registry** and select **Upstream Proxy**.
2. Choose **Dart Registry** as the proxy type.
3. Click **Create Proxy** to establish the connection.

#### Configure the upstream proxy in your registry

1. In the Artifact Registry module, select an existing Artifact Registry.
2. Select the **Configuration** tab.
3. Under **Advanced (Optional)**, select **Configure Upstream**.
4. Select from the list of compatible proxies to add them to your registry.
5. Click **Save** to save the configuration.
   {% endtab %}
   {% endtabs %}

{% hint style="info" %}
**UPSTREAM PROXY CACHING**

If a Dart package isn't found in your Harness registry, the upstream proxy automatically fetches it from an external source like pub.dev. The package is then cached in your registry, ensuring faster downloads for subsequent requests.
{% endhint %}

***

### Install and Use Dart Packages <a href="#install-and-use-dart-packages" id="install-and-use-dart-packages"></a>

{% tabs %}
{% tab title="Dart CLI" %}
**Configure Authentication**

**Step 1**

Add authentication token to Dart pub:

```bash
dart pub token add https://pkg.harness.io/pkg/<account-id>/<dart-registry-name>/pub/
```

**Step 2**

Enter your `<TOKEN>` when prompted.

{% hint style="info" %}
Replace `<account-id>` with your Harness account ID and `<dart-registry-name>` with your registry name.
{% endhint %}

**Install a Dart Package**

**Step 1**

In your consuming project's `pubspec.yaml`, add the dependency pointing to the hosted URL:

```yaml
dependencies:
  <ARTIFACT_NAME>:
    hosted:
      name: <ARTIFACT_NAME>
      url: https://pkg.harness.io/pkg/<account-id>/<dart-registry-name>/pub/
    version: <VERSION>
```

**Step 2**

Then fetch it:

```bash
dart pub get
```

**Publish a Dart Package**

**Step 1**

In your package's `pubspec.yaml`, set the registry URL:

```yaml
publish_to: https://pkg.harness.io/pkg/<account-id>/<dart-registry-name>/pub/
name: <ARTIFACT_NAME>
version: <VERSION>
description: My first Dart package
environment:
  sdk: ">=3.0.0 <4.0.0"
```

**Step 2**

Then run:

```bash
dart pub publish
```

{% endtab %}

{% tab title="Flutter CLI" %}
**Configure Authentication**

**Step 1**

Add authentication token to Flutter pub:

```bash
flutter pub token add https://pkg.harness.io/pkg/<account-id>/<dart-registry-name>/pub/
```

**Step 2**

Enter your `<TOKEN>` when prompted.

{% hint style="info" %}
Replace `<account-id>` with your Harness account ID and `<dart-registry-name>` with your registry name.
{% endhint %}

**Install a Dart Package with Flutter**

**Step 1**

In your Flutter project's `pubspec.yaml`, add the dependency pointing to the hosted URL:

```yaml
dependencies:
  <ARTIFACT_NAME>:
    hosted:
      name: <ARTIFACT_NAME>
      url: https://pkg.harness.io/pkg/<account-id>/<dart-registry-name>/pub/
    version: <VERSION>
```

**Step 2**

Then fetch it:

```bash
flutter pub get
```

**Publish a Dart Package with Flutter**

**Step 1**

In your Flutter package's `pubspec.yaml`, set the registry URL:

```yaml
publish_to: https://pkg.harness.io/pkg/<account-id>/<dart-registry-name>/pub/
name: <ARTIFACT_NAME>
version: <VERSION>
description: My first Flutter package
environment:
  sdk: ">=3.0.0 <4.0.0"
```

**Step 2**

Then run:

```bash
flutter pub publish
```

{% endtab %}
{% endtabs %}
