Skip to main content

Documentation Index

Fetch the complete documentation index at: https://mintlify.com/harness/harness-cli/llms.txt

Use this file to discover all available pages before exploring further.

Harness Artifact Registry provides support for Dart packages, allowing you to host private Dart and Flutter libraries.

Overview

Dart registry features:
  • Standard pub.dev protocol
  • Automatic metadata extraction from pubspec.yaml
  • .tar.gz package format support
  • Version management following SemVer
  • Integration with pub and flutter CLI

Pushing Dart packages

Use the hc artifact push dart command:
hc artifact push dart <registry-name> <package-file-path> \
  --pkg-url <pkg-url>

How it works

The CLI automatically:
  1. Validates the package archive format
  2. Extracts pubspec.yaml from the archive
  3. Reads package name and version
  4. Uploads the package to the registry

Creating Dart packages

1

Create pubspec.yaml

Define your package metadata:
pubspec.yaml
name: my_package
version: 1.0.0
description: A useful Dart package
environment:
  sdk: '>=3.0.0 <4.0.0'

dependencies:
  # Your dependencies

dev_dependencies:
  test: ^1.24.0
2

Package your library

Create the package archive:
# Using dart pub
dart pub publish --dry-run

# Or create manually
tar -czf my_package-1.0.0.tar.gz .
3

Upload to registry

Push the package:
hc artifact push dart my-registry ./my_package-1.0.0.tar.gz \
  --pkg-url https://app.harness.io/registry/pkg

Installing Dart packages

Configure pub to use your Harness registry:

In pubspec.yaml

Add a custom dependency:
pubspec.yaml
dependencies:
  my_package:
    hosted:
      name: my_package
      url: https://<registry-url>/
    version: ^1.0.0

Using pub credentials

Configure authentication:
# Set up credentials
dart pub token add https://<registry-url>/
# Enter your Harness API token when prompted

Install dependencies

dart pub get

# Or for Flutter projects
flutter pub get

Examples

# Package and push a Dart library
tar -czf my_package-1.0.0.tar.gz . --exclude='.git' --exclude='.dart_tool'
hc artifact push dart my-registry ./my_package-1.0.0.tar.gz \
  --pkg-url https://app.harness.io/registry/pkg

Pubspec.yaml requirements

The pubspec.yaml must contain name and version fields
Minimal configuration:
name: my_package
version: 1.0.0
environment:
  sdk: '>=3.0.0 <4.0.0'
For Flutter packages:
name: my_flutter_package
version: 1.0.0
description: A Flutter package
environment:
  sdk: '>=3.0.0 <4.0.0'
  flutter: '>=3.0.0'

dependencies:
  flutter:
    sdk: flutter

Package structure

Typical Dart package structure:
my_package/
├── lib/
│   └── my_package.dart
├── test/
│   └── my_package_test.dart
├── pubspec.yaml
├── README.md
├── CHANGELOG.md
└── LICENSE

CI/CD integration

- name: Setup Dart
  uses: dart-lang/setup-dart@v1

- name: Package and publish
  run: |
    dart pub get
    dart test
    tar -czf my_package-${{ github.ref_name }}.tar.gz .
    hc artifact push dart my-registry ./my_package-*.tar.gz \
      --pkg-url https://app.harness.io/registry/pkg
  env:
    HARNESS_API_KEY: ${{ secrets.HARNESS_API_KEY }}

Version constraints

Dart uses Semantic Versioning with caret syntax:
  • ^1.0.0 - Compatible with 1.0.0, allows >=1.0.0 <2.0.0
  • >=1.0.0 <2.0.0 - Explicit range
  • 1.0.0 - Exact version
  • any - Any version (not recommended)

Troubleshooting

Ensure your pubspec.yaml is valid:
# Validate pubspec.yaml
dart pub publish --dry-run
The archive filename should match the package name and version:
# ✅ Correct
my_package-1.0.0.tar.gz  # matches pubspec.yaml name: my_package, version: 1.0.0
Re-add your pub token:
dart pub token add https://<registry-url>/
# Enter your Harness API token

See also

Build docs developers (and LLMs) love