Build full-stack, distributed applications for DLT, Blockchain, or databases in days.

Easy

Describe the behavior of your application in an easy to read and write smart-contract language, and let DAML take care of infrastructure and integrations.

Efficient

High levels of abstraction, clean APIs, and developer tooling mean you spend your time on the bits that differentiate your application.

Safe

Type safe, functional design across the stack, and testing tools allow you to rest assured that your application does what you had in mind.

The Tools Developers Deserve

DAML IDE

Get feedback on authorization, privacy, and application behavior as you type.

DAML Sandbox

A simple ledger that enables rapid application prototyping without an infrastructure.

DAML Assistant

CLI that helps you create, initialize, compile, and build applications.

Integrations

Describe the behavior of your application in an easy to read and write smart-contract language, and let DAML take care of infrastructure and integrations.

The Language

  • Data Model

    DAML's powerful type system makes it easy to model complex data schemas for your application following domain-driven design.
  • Fine-grained Permissions

    Specify who needs to sign a given contract, who can see it and who is allowed to perform actions on it.
  • Business Logic

    Describe the actions available on a contract, together with their parameters, assertions, and precise consequences
  • Scenario-based Testing

    Test your business logic and workflows with an expressive scenario language. Interact with the ledger using multiple parties and verify the effects of your transactions instantly.

Data Model

with
    issuer : Party
    owner : Party
    amount : Decimal

Fine-grained Permissions

signatory organizer
    observer buyer
    controller buyer can

Business Logic

cash <- fetch cashId
          assert (cash.amount == price)
          exercise cashId Transfer with
            newOwner = organizer
          create TicketAgreement with
            organizer; owner = buyer

Scenario-based Testing


validateTicketPurchase = scenario do
  issuer <- getParty "Issuer"
  organizer <- getParty "Organizer"
  buyer <- getParty "Buyer"
  cash <- submit issuer do
    create Cash with
      issuer; owner = buyer; amount = 20.0
  offer <- submit organizer do
    create TicketOffer with
      organizer; buyer; price = 20.0
  submit buyer do
    exercise offer Accept with
      cashId = cash
illus-two
template Cash
  with
    issuer : Party
    owner : Party
    amount : Decimal
  where
    signatory issuer
    controller owner can
      Transfer : ContractId Cash
        with
          newOwner: Party
        do create this with owner = newOwner
template TicketAgreement
  with
    organizer : Party
    owner : Party
  where
    signatory organizer, owner
template TicketOffer
  with
    organizer : Party
    buyer : Party
    price : Decimal
  where
    signatory organizer
    observer buyer
    controller buyer can
      Accept : ContractId TicketAgreement
        with
          cashId : ContractId Cash
        do
          cash <- fetch cashId
          assert (cash.amount == price)
          exercise cashId Transfer with
            newOwner = organizer
          create TicketAgreement with
            organizer; owner = buyer

validateTicketPurchase = scenario do
  issuer <- getParty "Issuer"
  organizer <- getParty "Organizer"
  buyer <- getParty "Buyer"
  cash <- submit issuer do
    create Cash with
      issuer; owner = buyer; amount = 20.0
  offer <- submit organizer do
    create TicketOffer with
      organizer; buyer; price = 20.0
  submit buyer do
    exercise offer Accept with
      cashId = cash

Who’s building full-stack applications with DAML?

DAML Supported Platforms

DAML is supported by a growing number of platforms:

DAML Driven Blog

Engineering Notes

Release Notes