# Canton Network Docs: App Development

## App Development

### Get Started

- [Choose Your Path](https://docs.canton.network/appdev/get-started/choose-your-path.md): Find the right learning path based on your background and goals
- [What's New](https://docs.canton.network/appdev/get-started/whats-new.md): Pointers to release notes for Canton Network components

### Module 1: Understanding Canton

- [Module 1: Understanding Canton](https://docs.canton.network/appdev/modules/m1-understanding-canton.md): Build the foundational understanding needed for Canton development
- [Mental Models for Canton](https://docs.canton.network/appdev/modules/m1-mental-models.md): Building the right intuition for Canton development
- [The Canton Development Stack](https://docs.canton.network/appdev/modules/m1-development-stack.md): Overview of tools and technologies for building on Canton Network

### Module 2: Canton for Ethereum Developers

- [Canton for Blockchain Developers](https://docs.canton.network/appdev/modules/m2-canton-for-ethereum-devs.md): Bridge your Ethereum and blockchain knowledge to Canton concepts
- [Concept Translation Tables](https://docs.canton.network/appdev/modules/m2-concept-translation.md): Comprehensive mapping of Ethereum concepts to Canton equivalents
- [Privacy Model Differences](https://docs.canton.network/appdev/modules/m2-privacy-differences.md): Understanding how Canton's privacy model differs fundamentally from Ethereum
- [Smart Contract Paradigm Shift](https://docs.canton.network/appdev/modules/m2-smart-contract-paradigm.md): Understanding the fundamental differences between Solidity and Daml programming models
- [Network Architecture Comparison](https://docs.canton.network/appdev/modules/m2-network-architecture.md): Understanding how Canton's network architecture differs from Ethereum
- [Multi-Party Workflows](https://docs.canton.network/appdev/modules/m2-multi-party-workflows.md): How Canton handles multi-party workflows differently than Ethereum
- [Migration Checklist](https://docs.canton.network/appdev/modules/m2-migration-checklist.md): Practical checklist for Ethereum developers migrating to Canton

### Module 3: Daml Smart Contracts

- [Development Environment Setup](https://docs.canton.network/appdev/modules/m3-dev-environment.md): Set up your development environment for writing Daml smart contracts
- [Language Fundamentals](https://docs.canton.network/appdev/modules/m3-language-fundamentals.md): Learn the fundamentals of Daml - a functional programming language designed for smart contracts
- [The Daml Standard Library](https://docs.canton.network/appdev/modules/m3-standard-library.md): Tour of the Daml standard library: the Prelude, important types and typeclasses, and how to browse and search the library.
- [Contract Templates](https://docs.canton.network/appdev/modules/m3-contract-templates.md): Learn how to define Daml contract templates - the core building blocks of Canton smart contracts
- [Choices](https://docs.canton.network/appdev/modules/m3-choices.md): Learn how to add behavior to Daml contracts using choices - the methods that transform contract state
- [Authorization Model](https://docs.canton.network/appdev/modules/m3-authorization.md): Understand Daml's authorization model - signatories, observers, and controllers
- [Composition and Design Patterns](https://docs.canton.network/appdev/modules/m3-design-patterns.md): Compose multi-step transactions, understand Daml's execution model and privacy, and apply common multi-party workflow patterns
- [Working with Time](https://docs.canton.network/appdev/modules/m3-working-with-time.md): Implement time-based logic in Daml contracts including expiration, deadlines, and time constraints
- [Contract Keys](https://docs.canton.network/appdev/modules/m3-contract-keys.md): Use contract keys for stable references to contracts and key-based lookups
- [Interfaces](https://docs.canton.network/appdev/modules/m3-interfaces.md): Define and implement Daml interfaces for polymorphic contract behavior and cross-template interoperability
- [Testing Daml Contracts](https://docs.canton.network/appdev/modules/m3-testing.md): Write and run tests for Daml smart contracts using Daml Script
- [Building and Packaging](https://docs.canton.network/appdev/modules/m3-building-packaging.md): Build Daml projects, manage dependencies, and package DAR files for deployment

### Module 4: Full-Stack Application Development

- [Building Applications](https://docs.canton.network/appdev/modules/m4-building-apps-intro.md): Go from Daml smart contracts to full-stack Canton Network applications
- [Application Architecture](https://docs.canton.network/appdev/modules/m4-app-architecture.md): Understand the roles, layers, and component interactions in a Canton Network application
- [SDKs and APIs](https://docs.canton.network/appdev/modules/m4-sdks-apis.md): Overview of the Canton SDK, code generation, Ledger API, JSON API, PQS, and Wallet SDK
- [Prerequisites and Installation](https://docs.canton.network/appdev/quickstart/prerequisites.md): Set up your development environment and install the Canton Network QuickStart
- [Running the Demo](https://docs.canton.network/appdev/quickstart/running-the-demo.md): Start the Canton Network QuickStart demo and walk through the licensing workflow
- [Backend Development](https://docs.canton.network/appdev/modules/m4-backend-dev.md): Build a backend service that connects to the Canton Ledger API and PQS, with code examples from cn-quickstart
- [Frontend Development](https://docs.canton.network/appdev/modules/m4-frontend-dev.md): Build a React frontend for Canton applications with TypeScript bindings and wallet integration
- [Canton and the JSON Ledger API](https://docs.canton.network/appdev/modules/m4-json-api-tutorial.md): Get started with Canton and the JSON Ledger API, first with curl and then with TypeScript.
- [Canton Coin and Traffic](https://docs.canton.network/appdev/modules/m4-canton-coin.md): How Canton Coin buys traffic credits and what application developers need to know about transaction costs
- [Featured App Activity Markers](https://docs.canton.network/appdev/modules/m4-featured-app-activity-marker.md): How to create FeaturedAppActivityMarker contracts to record app activity and earn rewards
- [Observability](https://docs.canton.network/appdev/modules/m4-observability.md): Setting up logging, metrics, and dashboards for Canton applications
- [Connect and Query PQS](https://docs.canton.network/appdev/modules/m4-pqs-tutorial.md): Connect a PQS instance to a Canton ledger and a PostgreSQL database, then explore ledger data with SQL.
- [Query Contracts and Transactions with PQS](https://docs.canton.network/appdev/modules/m4-query-with-pqs.md): Use the Participant Query Store (PQS) to query Daml contracts and transactions via SQL.

### Module 5: Testing & Deployment

- [Testing Strategies](https://docs.canton.network/appdev/modules/m5-testing-strategies.md): Testing pyramid for Canton applications, from Daml Script unit tests through integration and end-to-end testing
- [LocalNet Development](https://docs.canton.network/appdev/modules/m5-localnet-development.md): Using cn-quickstart's LocalNet as your primary development and testing environment
- [SV Operated Networks and Use-cases](https://docs.canton.network/appdev/modules/m5-networks-and-use-cases.md): DevNet, TestNet, and MainNet purpose and testing guidelines for app developers
- [Deployment Progression](https://docs.canton.network/appdev/modules/m5-deployment-progression.md): Moving your Canton application from LocalNet through DevNet, TestNet, and into MainNet production
- [Environment Configuration](https://docs.canton.network/appdev/modules/m5-environment-configuration.md): Configuring DPM, project settings, and authentication for different Canton Network environments
- [CI/CD Integration](https://docs.canton.network/appdev/modules/m5-ci-cd-integration.md): Building CI/CD pipelines for Canton applications with dpm build, test, and deployment automation
- [How to upload and query Daml packages](https://docs.canton.network/appdev/modules/m5-manage-daml-packages.md): Upload DAR files to a participant and query available Daml packages at runtime.

### Module 6: Smart Contract Upgrades

- [Smart Contract Upgrades Overview](https://docs.canton.network/appdev/modules/m6-overview.md): Why smart contract upgrades matter and how Canton's upgrade model works
- [Upgrade Compatibility](https://docs.canton.network/appdev/modules/m6-upgrade-compatibility.md): Allowed changes, breaking changes, and compatibility rules for Daml smart contract upgrades
- [Writing Your First Upgrade](https://docs.canton.network/appdev/modules/m6-writing-first-upgrade.md): Step-by-step tutorial for creating a v2 Daml package with backward-compatible changes
- [Package Selection](https://docs.canton.network/appdev/modules/m6-package-selection.md): How the Canton ledger resolves which package version to use when multiple versions coexist
- [Testing Upgrades](https://docs.canton.network/appdev/modules/m6-testing-upgrades.md): Verifying upgrade compatibility, testing cross-version workflows, and regression testing strategies
- [Upgrade Deployment](https://docs.canton.network/appdev/modules/m6-deployment.md): Deploying Daml package upgrades across environments with coordination, rollback, and migration strategies
- [Upgrade Limitations](https://docs.canton.network/appdev/modules/m6-limitations.md): Known limitations and constraints of Daml smart contract upgrades
- [Package Naming](https://docs.canton.network/appdev/modules/m6-package-naming.md): Naming conventions and package structure for Daml smart contract upgrades

### Module 7: Production Best Practices

- [Security Best Practices](https://docs.canton.network/appdev/modules/m7-security.md): Authorization patterns, API authentication, key management, and secure configuration for Canton applications
- [Package Management](https://docs.canton.network/appdev/modules/m7-package-management.md): Managing DAR files across environments, version pinning, dependency management, and coordinating package distribution
- [Smart Contract Upgrades in Production](https://docs.canton.network/appdev/modules/m7-smart-contract-upgrades.md): Operational considerations for rolling out smart contract upgrades in production
- [Performance Best Practices](https://docs.canton.network/appdev/modules/m7-performance.md): Where to find Canton application performance guidance — moved to the consolidated Performance Optimization deep-dive.
- [Error Handling](https://docs.canton.network/appdev/modules/m7-error-handling.md): Error handling and recovery patterns for Canton applications
- [Compliance Considerations](https://docs.canton.network/appdev/modules/m7-compliance.md): Privacy, audit, and regulatory considerations for Canton applications
- [Canton Coin Preapprovals](https://docs.canton.network/appdev/modules/m7-canton-coin-preapprovals.md): How TransferPreapproval contracts enable preapproved Canton Coin transfers

### Deep Dives

- [Privacy Model for App Developers](https://docs.canton.network/appdev/deep-dives/privacy-model.md): How Canton's sub-transaction privacy works in practice, including transaction views, stakeholder consensus, disclosure patterns, and auditability
- [Multi-Party Applications and Workflows](https://docs.canton.network/appdev/deep-dives/composition-multi-party.md): What multi-party applications are and why they matter, how Canton's architecture enables them, and the Daml design patterns for composing multi-party workflows
- [Decentralization](https://docs.canton.network/appdev/deep-dives/decentralization.md): Decentralization strategies at each layer of the Canton stack, from single-validator to BFT synchronizers
- [Multi-Hosting and Resilience](https://docs.canton.network/appdev/deep-dives/multi-hosting.md): Distributing parties across multiple validators for high availability, failover, and data resilience
- [Performance Optimization](https://docs.canton.network/appdev/deep-dives/performance-optimization.md): Scale Canton applications for throughput and latency: network and node scaling, contention avoidance, ACS sizing, and batching.
- [Active Contracts Head Snapshot (ACHS)](https://docs.canton.network/appdev/deep-dives/achs.md): Configure and tune the ACHS feature to accelerate ACS queries on Canton participant nodes.
- [Parties and users on a Canton ledger: How to allocate and query parties](https://docs.canton.network/appdev/deep-dives/manage-daml-parties.md): Allocate new parties on a participant and query party metadata.
- [Contracts and Transactions in Java](https://docs.canton.network/appdev/deep-dives/contracts-and-transactions-in-java.md): Work with Daml contracts and transactions through the Java client libraries.
- [Smart Contract Upgrade (SCU)](https://docs.canton.network/appdev/deep-dives/smart-contract-upgrade.md): Develop, deploy, and validate smart contract upgrades across Daml package versions.
- [Canton Network Application Architecture Design](https://docs.canton.network/appdev/deep-dives/app-architecture-design.md): Design considerations for Canton Network application components and deployment topologies.
- [Command Deduplication](https://docs.canton.network/appdev/deep-dives/command-deduplication.md): How Daml command deduplication works and how applications can use it to achieve exactly-once ledger changes.
- [Explicit Contract Disclosure](https://docs.canton.network/appdev/deep-dives/explicit-contract-disclosure.md): Disclose contracts to non-stakeholders so they can use them as inputs without being added as stakeholders.
- [Values in the Ledger API](https://docs.canton.network/appdev/deep-dives/values-in-the-ledger-api.md): Validation, normalization, and dynamic package resolution rules for values exchanged over the Ledger API.
- [Open Tracing in Ledger API Client Applications](https://docs.canton.network/appdev/deep-dives/open-tracing.md): Adding OpenTelemetry-based distributed tracing to Daml applications interacting with the Ledger API.
- [Authorization](https://docs.canton.network/appdev/deep-dives/authorization.md): Access tokens, identity providers, scopes, and rights for the Canton Ledger API.
- [Token Standard](https://docs.canton.network/appdev/deep-dives/token-standard.md): The Canton Network Token Standard APIs and Daml interfaces

#### External Signing

- [External Signing](https://docs.canton.network/appdev/deep-dives/external-signing.md): Use external cryptographic keys to sign Canton transactions - overview, onboarding, and submission
- [External Signing: Party Onboarding](https://docs.canton.network/appdev/deep-dives/external-signing-onboarding.md): Onboard external parties for external signing using the Ledger API
- [External Signing: Submitting Transactions](https://docs.canton.network/appdev/deep-dives/external-signing-transactions.md): Submit externally signed transactions to the Canton ledger
- [External Signing: Topology Transactions](https://docs.canton.network/appdev/deep-dives/external-signing-topology.md): Build, sign, and submit topology transactions with external keys
- [External Signing: Hashing Algorithm](https://docs.canton.network/appdev/deep-dives/external-signing-hashing-algorithm.md): Deterministic hashing specification for prepared transactions used by external signing.

#### QuickStart

- [Canton Network QuickStart](https://docs.canton.network/appdev/quickstart/index.md): Get a complete Canton Network application running locally with the cn-quickstart project
- [Project Structure](https://docs.canton.network/appdev/quickstart/project-structure.md): Understand the Canton Network QuickStart project layout and component architecture
- [Using the JSON Ledger API](https://docs.canton.network/appdev/quickstart/json-api.md): Use the JSON Ledger API within the Canton Network quickstart.
- [Debugging with lnav](https://docs.canton.network/appdev/quickstart/lnav.md): Use lnav to inspect Canton quickstart logs interactively.
- [Observability and Tracing](https://docs.canton.network/appdev/quickstart/observability-and-tracing.md): Observe and trace requests across Canton quickstart components.
- [Onboard External Parties in Quickstart](https://docs.canton.network/appdev/quickstart/external-parties.md): Step-by-step walkthrough for onboarding and using external parties in the Canton Network Quickstart project, including OpenSSL keygen, topology API calls, and signing flows.
- [Deploy Quickstart to DevNet](https://docs.canton.network/appdev/quickstart/deploy-to-devnet.md): Deploy the Canton Network Quickstart application from LocalNet to DevNet, including validator request, VPN setup, and end-to-end workflow verification.

### Tooling

- [Development Tools Overview](https://docs.canton.network/appdev/tooling/development-tools-overview.md): Overview of the Canton development toolchain: DPM, Daml Studio, Canton Console, Sandbox, LocalNet, and PQS
- [IDE Setup](https://docs.canton.network/appdev/tooling/ide-setup.md): Configure VS Code and other IDEs for Canton application development with Daml, Java, and full-stack tooling
- [Debugging Tools](https://docs.canton.network/appdev/tooling/debugging-tools.md): Tools and workflows for debugging Canton applications: test output, Canton Console, PQS queries, and log analysis

### App Rewards

- [App Rewards](https://docs.canton.network/appdev/app-rewards.md): How applications earn Canton Coin rewards on the Canton Network through featured app activity and reward coupons

### Troubleshooting

- [Common Issues FAQ](https://docs.canton.network/appdev/faq.md): Frequently asked questions from Canton Network validators and developers
- [Troubleshooting Cheat Sheet](https://docs.canton.network/appdev/troubleshooting.md): Index of detailed troubleshooting guides for Canton Network application development
- [Installation Issues](https://docs.canton.network/appdev/troubleshooting-guide/installation-issues.md): Troubleshooting Nix, Docker, and memory problems when setting up Canton Network development
- [Development Issues](https://docs.canton.network/appdev/troubleshooting-guide/development-issues.md): Troubleshooting Daml compilation errors, API connection problems, and transaction failures during development
- [Operational Issues](https://docs.canton.network/appdev/troubleshooting-guide/operational-issues.md): Troubleshooting traffic exhaustion, upgrade problems, and PQS failures on DevNet, TestNet, and MainNet
- [Common Questions](https://docs.canton.network/appdev/troubleshooting-guide/common-questions.md): Frequently asked questions about Canton Network application development
- [Daml Error Codes](https://docs.canton.network/appdev/troubleshooting-guide/error-code-reference.md): Reference for common error codes in Daml compilation, Canton runtime, and the Ledger API
- [Ledger API Errors](https://docs.canton.network/appdev/troubleshooting-guide/ledger-api-errors.md): Common Ledger API error codes encountered during command submission, with causes and resolutions.

### Reference

- [Daml Language Reference](https://docs.canton.network/appdev/reference/daml-language-reference.md): Reference for Daml templates, choices, data types, expressions, packages, interfaces, exceptions, and more.
- [Daml-LF Reference](https://docs.canton.network/appdev/reference/daml-lf-reference.md): Daml-LF type conversion, JSON encoding, Protobuf mapping, packages, and DAR file structure.
- [Admin API Reference](https://docs.canton.network/appdev/reference/admin-api-reference.md): Reference documentation for the Canton Admin API used for node administration
- [Configuration Reference](https://docs.canton.network/appdev/reference/configuration-reference.md): Reference for Canton configuration files, DPM project settings, storage, command line arguments, and environment variables
- [Error Codes](https://docs.canton.network/appdev/reference/error-codes.md): Reference for Canton error codes, categories, gRPC status mappings, and retry strategies
- [Smart Contract Upgrading Reference](https://docs.canton.network/appdev/deep-dives/smart-contract-upgrading-reference.md): Detailed rules for package validation on upload, and runtime upgrade and downgrade of contracts, choice arguments, and results.
