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