[RFC] tech_stack - Canister Metadata Standard extension

Feature complete

A more concise design was adopted and the PR was merged!

  "tech_stack": {
    "language": {
      "rust": {
        "version": "1.75.0"
    "cdk": {
      "ic-cdk": {
        "version": "0.13.0"
    "lib": {
      "ic-cdk-timers": {},
      "ic-stable-structures": {}
    "other": {
      "bitcoin": {
        "address": "bcrt1qfe264m0ycx2vcqvqyhs0gpxk6tw8ug6hqeps2d"
    "tool": {
      "dfx": {}

Please check the documentation for more details of the final design.

State of the Art

In the same PR, I added corresponding support for canister types known by dfx.

  • For Rust and Motoko canisters, dfx sets tech_stack if they don’t define tech_stack explicitly in dfx.json .
  • For Azle and Kybra projects created with dfx new, the corresponding tech_stack configuration will be added to dfx.json by default. (cc @lastmjs )

For CDKs not yet known by dfx (e.g., @icpp), the CDK providers can add this tech_stack section in dfx.json of the project templates.

For Canister Explorers (e.g. icp.zone by @ZenVoich), it’s expected that more canisters will have a public metadata with key “dfx”, in which there is a “tech_stack” object.

What’s Next?

We don’t envision that canister developers will define these values in dfx.json by themselves.

Upcoming work will enable CDK providers to set tech_stack fields for their users.