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

# Daml SDK

> Install and use the Daml SDK for developing smart contracts and applications on Canton.

The Daml SDK is the core development kit for building on Canton. It bundles the Daml compiler, Daml Script runner, Canton Sandbox, and supporting tools into a single installable package managed through `dpm`.

## What's Included

The Daml SDK provides the following components:

* **Daml compiler** -- Compiles Daml source files into DAR (Daml Archive) packages that can be deployed to validators
* **Daml Script runner** -- Executes test scripts and ledger initialization scripts written in Daml
* **Canton Sandbox** -- A single-participant Canton node for local development and integration testing
* **Canton runtime** -- The Canton participant runtime used by Sandbox and production deployments
* **Code generators** -- Produce type-safe TypeScript and Java bindings from compiled DAR files
* **Project templates** -- Scaffold new projects with `dpm new`

## Installation

Install the Daml SDK through `dpm`:

```bash theme={"theme":{"light":"github-light","dark":"github-dark"}}
dpm install
```

This downloads and installs the SDK version specified in your project's `daml.yaml` file. If no version is specified, `dpm` installs the latest compatible release.

To check which SDK version is installed:

```bash theme={"theme":{"light":"github-light","dark":"github-dark"}}
dpm --version
```

### Prerequisites

* **Java 17 or later** -- The Daml compiler and Canton runtime require a JDK
* **Node.js 18 or later** -- Required for TypeScript code generation and frontend tooling
* **dpm** -- See [dpm installation](/sdks-tools/cli-tools/dpm) for setup instructions

## Key Commands

Once the SDK is installed, you interact with it through `dpm`:

```bash theme={"theme":{"light":"github-light","dark":"github-dark"}}
# Create a new project from a template
dpm new my-project --template daml-intro-contracts

# Compile Daml source code
dpm build

# Run Daml Script tests
dpm test

# Start a local sandbox
dpm sandbox

# Generate TypeScript bindings
dpm codegen-js .daml/dist/my-project.dar -o generated-ts

# Generate Java bindings
dpm codegen-java .daml/dist/my-project.dar -o generated-java

# Open Daml Studio in VS Code
dpm studio
```

## Daml Language

Daml is a functional smart contract language with a strong type system, built-in authorization model, and privacy controls. Contracts are defined as templates with fields, signatories, observers, and choices.

```haskell theme={"theme":{"light":"github-light","dark":"github-dark"}}
template Asset
  with
    owner : Party
    issuer : Party
    description : Text
  where
    signatory issuer
    observer owner

    choice Transfer : ContractId Asset
      with newOwner : Party
      controller owner
      do create this with owner = newOwner
```

For a full introduction to the Daml language, see [Module 3: Daml Smart Contracts](/appdev/modules/m3-dev-environment).

## Version Compatibility

Each Daml SDK release is paired with a specific Canton protocol version. Your DAR files must be compiled with an SDK version compatible with the Canton version running on the target network.

The `daml.yaml` file in your project pins the SDK version:

```yaml theme={"theme":{"light":"github-light","dark":"github-dark"}}
sdk-version: 3.4.0
name: my-project
source: daml
version: 1.0.0
dependencies:
  - daml-prim
  - daml-stdlib
build-options:
  - --target=3.4
```

When deploying to DevNet, TestNet, or MainNet, verify that your SDK version matches the network's supported protocol version. Network operators publish supported SDK versions in their documentation.

## Further Reading

* [dpm command reference](/sdks-tools/cli-tools/dpm) -- Full list of `dpm` commands and options
* [Daml Studio](/sdks-tools/development-tools/daml-studio) -- VS Code extension for Daml development
* [Sandbox](/sdks-tools/development-tools/sandbox) -- Local single-node testing environment
* [Choose your path](/appdev/get-started/choose-your-path) -- Pick a development workflow
