Daml Studio is the Visual Studio Code extension for Daml development. It provides real-time feedback as you write Daml code, including type errors, syntax highlighting, and integrated test visualization.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.
Installation
Via dpm
The extension is installed automatically when you set up the Daml SDK. Launch it from any Daml project directory:From the VS Code Marketplace
You can also install the extension manually from the VS Code Marketplace:- Open VS Code
- Go to the Extensions panel (Ctrl+Shift+X / Cmd+Shift+X)
- Search for “Daml”
- Install the Digital Asset Daml extension
PATH so the extension can find the compiler.
Features
Syntax Highlighting
Daml files (.daml) get full syntax highlighting for keywords, types, template definitions, choices, and expressions. The color scheme follows VS Code’s active theme.
Type Checking and Inline Errors
The extension runs the Daml compiler in the background as you type. Type errors, missing imports, and authorization issues appear as red squiggles in the editor. Hover over an error to see the full diagnostic message. For example, if you reference a party that is not in scope:missingParty immediately, before you even save the file.
Go-to-Definition
Ctrl+Click (Cmd+Click on macOS) on any identifier to jump to its definition. This works across files within the same package and for standard library functions.Code Navigation
- Find all references — Right-click an identifier and select “Find All References” to see every usage
- Outline view — The sidebar shows the structure of the current file (templates, choices, functions)
- Breadcrumbs — The editor header shows the current module and definition path
Script Results
When you open a file containing Daml Script functions, a “Script results” code lens appears above each script. Click it to run the script and see the results in a side panel. The results panel has two views:- Table view — Shows active contracts at the end of the script, with columns indicating which parties can see each contract
- Transaction view — Shows every transaction in order, including sub-transactions, useful for understanding authorization flows
Hover Information
Hover over any expression to see its inferred type. This is helpful when working with complex expressions or unfamiliar library functions.Troubleshooting
Extension Not Loading
If the extension does not activate when you open a.daml file:
- Verify the Daml SDK is installed: run
dpm --versionin a terminal - Check that the
damlbinary is on yourPATH - Reload VS Code (Ctrl+Shift+P, then “Reload Window”)
- Check the Output panel (View > Output, select “Daml” from the dropdown) for error messages
SDK Version Mismatch
The extension uses the SDK version specified in your project’sdaml.yaml. If you see unexpected errors after upgrading or switching projects:
- Run
dpm installto ensure the correct SDK version is downloaded - Close and reopen VS Code to pick up the new SDK
- If errors persist, check the
sdk-versionfield indaml.yamlmatches what you have installed
Slow Performance on Large Projects
For projects with many packages or large dependency trees, the background type checker may take a few seconds to catch up after edits. If you experience delays:- Build the project first with
dpm buildso the compiler can reuse cached artifacts - Close files you are not actively editing to reduce the number of files the extension monitors
Related Pages
- dpm CLI reference —
dpm studiocommand and other CLI tools - Daml SDK — SDK installation and components
- Development environment setup — Full setup guide for Daml development
Daml Studio
Daml Studio is an integrated development environment (IDE) for Daml. It is an extension on top of Visual Studio Code (VS Code), a cross-platform, open-source editor providing a rich code editing experience.Install
Install Daml Studio by installing the DPM, and ensuring you have Visual Studio Code version 1.87 or above installed.Configure
With Daml Studio open, navigate toExtensions on the left (Ctrl+Shift+X). Search for Daml and click the Cog icon on the first result, then press settings. The options available are listed in the Reference.
Operate
Navigate to the root of your package (directory containingdaml.yaml) or project (directory containing multi-package.yaml) and run dpm studio. This will open Visual Studio Code with the Daml extension installed and running.
Go to definition
PressF12, or right click a Daml definition and select “go to definition” to see where a value/type is defined. This will work for dependencies and data-dependencies.
Visual Studio Code Documentation.
Peak definition
Use⌥F12 on Macos, or Ctrl + Shift + F10 on Windows/MacOS, to peak inline at the definition of a value value/type.
Visual Studio Code Documentation.
Hover tooltips
Hovering over a Daml value will display its source location and type. Hovering over a Daml type will display its source location. Visual Studio Code Documentation.Diagnostics
Errors or warnings that would be raised by callingdpm build will be shown in-line in the IDE. These diagnostics are affected by the flags provided in build-options, See Daml Yaml Build Options.
Daml Snippets
Daml IDE provides a set of autocomplete snippets for common daml patterns, such as default template and choice definitions. Typing the start of these definitions (such as the word “template” or “choice”) will show these snippets. You can develop your own snippets by following the instructions in Creating your own Snippets to create an appropriatedaml.json snippet file.
Daml script results
Above any top level definition that would be run as part ofdpm test (See dpm test), a “Script Results” button will appear.
Clicking this will open a side panel, with the result of running that test, along with information about logging and the ledger state.
Changing the Daml code for that test will update the side panel in real time, and will show an error if the code does not compile. At the top of the panel is a toggle button between table and transaction view.
Table view
Table view shows all contracts that were created during the test, as well as their payloads and which parties observed them. There are also check boxes on the top for showing contracts that were archived, and for more information about which parties they were divulged to. When using the Show detailed disclosure checkbox, the party observed contract column will show one of the following:
-
S, the party sees the contract because they are a signatory on the contract. -
O, the party sees the contract because they are an observer on the contract. -
W, the party sees the contract because they witnessed the creation of this contract, e.g., because they are an actor on theexercisethat created it. -
D, the party sees the contract because they have been divulged the contract, e.g., because they witnessed an exercise that resulted in afetchof this contract.
Multi-package environments
Daml Studio will create a separate compiler environment for each package, based on the contents of eachdaml.yaml. If a multi-package.yaml is present (in the directory that Daml Studio was opened in), Daml Studio will allow Jump To Definition to jump to packages listed in this file, rather than unpacked from the package-database.
Package environments will be reloaded whenever the relevant daml.yaml file is changed, or any dependencies DARs are updated. As a result, running dpm build --all will usually cause every package environment to reload. For changes across dependencies (i.e. change to a datatype defined in one packaged and used in another), the former packages .dar file must be rebuilt for the latter to use these changes.
Package environments do not need to use the same SDK version as your main package, Daml Studio will use the version specified in the relevant packages daml.yaml to give diagnostics for that file. See Automatic SDK Installation for how Daml Studio helps with packages using non-installed Daml SDK Versions.
If Daml Studio is unable to start a package environment for a package, for example an unparsable daml.yaml, or missing dependency .dar, Daml Studio will show this diagnostic at the top of the package’s daml.yaml file. Saving this file will trigger Daml Studio to try again.
Root Multi-package SDK
As discussed above, each package runs its own environment, these environments are managed by the root environment, which if not specified, will be the most recent SDK on your system. You can override this version by providing a daml.yaml file at the root of your project (i.e. next to the multi-package.yaml) containing only the following:
Jump to definition for dependencies
Daml Studio supports unpacking dependencies to allow the user to jump to their source code. However, Daml Studio can only do this is the packages DAR is available. A .dar file will hold the source code it the main package it contains, but not to any dependencies that have been bundled with it. If you wish to jump to the source code on these transitive dependencies, their .dar paths can be listed either in thedaml.yaml of your main package, or under the dars: field in the multi-package.yaml, which exists only for this purpose. An example is given below:
Automatic SDK installation
If you open a.daml file for a package using an SDK version you do not have installed, Daml Studio will show a notification for installing this SDK version. This notification will then show status for the installation, and includes a cancel button. Daml Studio cannot provide diagnostics to a package for which the SDK version is not installed.
Directory Envrionment Tools (direnv)
Tools likedirenv are commonly used to set up dependencies and import environment variables for use with environment variable interpolation support. To make this work in Daml Studio, you need a VSCode extension that sets this up for other extensions. In the case of direnv specifically (i.e. you have a .envrc file), we recommend using this direnv extension by Martin Kühl, which we have verified is compatible. Other direnv extensions may not correctly pass environment information to the Daml Studio extension.
If the Daml extension detects a .envrc file, it recommends this extension within the IDE with the following message:
Limitations
- Jumping to non-local dependencies does not currently retain the build-options and module-prefixes for that package. This means that if you jump to a dependency that requires either of these to build, the editor shows errors in the source code.
- Some links in the Script Results tab may not resolve correctly cross-package.
- Packages with symlinks between the daml.yaml and source files may not give correct intelligence.
Upgrade
Daml Studio will upgrade as Daml Assistant upgrades, and as new versions of the extension are published to VSCode marketplace. See Daml Assistant Upgrade and the--replace flag in Reference for more details.
Decommission
Open Visual Studio Code (notdpm studio), navigate to Extensions on the left (Ctrl+Shift+X). Search for Daml and click the top result. This will open the Extension: Daml page, which includes an uninstall button to the right of the Daml Extension icon. Follow the Daml Assistant Decomission for removal Daml itself.
Troubleshoot
-
Error loading webview: Error: Could not register service worker ...when clickingScript ResultsThis can occur when you have multiple VSCode instances in the same project. Fix this by closing VSCode, and killing all processes:- Linux/MacOS:
killall code - Windows: Open Task Manager (Ctrl + Shift + Esc) and kill all VSCode processes.
- Linux/MacOS:
-
Issues with processes left behind, or read/write lock errors on build with Daml Studio open
Please report this on the GitHub Issues page, then disable
Multi-IDEsupport as shown in the Reference. -
Any other issues
It may help to read the Daml Studio output logs, and include them in a bug report on GitHub Issues page. On the top bar, click View->Output, the on the drop-down menu on the top right of the new window (May currently say
Tasks), selectDaml Language Server.
Contribute
See the open source GitHub repository:https://github.com/digital-asset/daml
References
Daml Studio Extension options
The Daml Studio Extension contains the following options:-
Autorun All TestsDefault: false Run all tests in a file once it’s opened, instead of waiting for the user to select individual tests. -
Extra ArgumentsExtra arguments passed todamlc ide. This can be used to enable additional warnings via--ghc-option -WConsider using thebuild-optionsfield in thedaml.yamlbefore resorting to this option, as these options are more difficult to distribute. -
Log LevelDefault: Warning Sets the logging threshold of the daml-ide and multi-ide -
Multi Package Ide SupportDefault: true Enables support for multi-package projects in the IDE -
ProfileDefault: false Profile the daml ide plugin, may effect performance -
TelemetryDefault: From consent popup Controls whether you send Daml usage data to Digital Asset
Daml Studio CLI options
Thedpm studio CLI command (which opens the Daml Studio editor) takes the following flags:
-
--replaceValue:published,always,neverDefault:publishedThis flag controls when thedpm studiocommand replaces the VSCode extension in your editor.publishedwill always use the most recent published (to the VSCode marketplace) version of the Daml Studio VSCode extension.alwayswill use the extension bundled with whichever SDK version is being used (as selected by thedaml.yaml, See Daml Assistant version management.neverwill not change the extension that is installed.
--replace=alwaysto launch Daml Studio correctly.