Reference: DAML packages

This page gives reference information on DAML package dependencies:

DAML archives

When a DAML project is build with daml build, build artifacts are generated in the hidden directory .daml/dist/ relative to the project root directory. The main build artifact of a project is the DAML archive, recognized by the .dar file ending. DAML archives are platform independent. They can be deployed on a ledger (see deploy) or can be imported into other projects as a package dependency.

Importing DAML archives

A DAML project can import DAML archive dependencies. Note that currently there is no tooling for DAML package management. To import a package Bar in project Foo, add the file path of the Bar DAML archive to the dependencies section of the daml.yaml project file:

sdk-version: 0.0.0
name: foo
source: daml
version: 1.0.0
exposed-modules:
  - Some.Module
  - Some.Other.Module
dependencies:
  - daml-prim
  - daml-stdlib
  - /home/johndoe/bar/.daml/dist/bar-1.0.0.dar

The import path needs to be the relative or absolute path pointing to the created DAML archive of the bar project. The archive can reside anywhere on the local file system. Note that the SDK versions of the packages foo and bar need to match, i.e. it is an error to import a package that was created with an older SDK.

Once a package has been added to the dependencies of the foo project, modules of bar can be imported as usual with the import Some.Module directive (see Imports). If both projects foo as well as bar contain a module with the same name, the import can be disambiguated by adding the package name in front of the module name, e.g. import "bar" Some.Module.

Note that all modules of package foo that should be available as imports of other packages need to be exposed by adding them to the exposed-modules stanza of the daml.yaml file. If the exposed-modules stanza is omitted, all modules of the project are exposed by default.

Importing archives compiled with different SDK’s

All DAML archive dependencies of a project need to be compiled with the same SDK as the project itself. However, it is possible to import templates and data types of an archive compiled with an older SDK, by listing them under the data-dependencies stanza:

sdk-version: 0.0.0
name: foo
source: daml
version: 1.0.0
exposed-modules:
  - Some.Module
  - Some.Other.Module
dependencies:
  - daml-prim
  - daml-stdlib
  - /home/johndoe/bar/.daml/dist/bar.dar
data-dependencies:
  - /home/jondoe/bar-0.0.0/.daml/dist/bar-0.0.0.dar

Modules from data dependencies can be imported as usual, but need to be qualified by the (generated) instances package:

import "instances-bar" Foo