Skip to main content

Documentation Index

Fetch the complete documentation index at: https://mintlify.com/analogdevicesinc/codefusion-studio/llms.txt

Use this file to discover all available pages before exploring further.

CodeFusion Studio uses two JSON-based configuration file formats to capture the full hardware and project setup for a workspace. The .cfsworkspace file is a lightweight workspace descriptor created during workspace setup and consumed when reopening or sharing a project. The .cfsconfig file is the detailed SoC configuration produced by System Planner: it records pin assignments, clock configuration, peripheral settings, memory allocations, AI model entries, and the plugin bindings for each processor core. Together these two formats form the machine-readable contract between the CFS UI, the CLI (cfsutil), and code generation plugins.

File naming and location conventions

CFS configuration files follow a predictable naming pattern and live inside a hidden .cfs/ directory at the workspace root:
my-workspace/
├── .cfs/
│   └── <soc>-<package>.cfsconfig    # e.g. max32690-tqfn.cfsconfig
├── <workspace-name>.cfsworkspace
├── m4/                               # Cortex-M4 project folder
└── rv/                               # RISC-V project folder (dual-core SoCs)
The .cfsconfig filename is derived from the SoC name and package variant in lowercase, separated by a hyphen (for example max78000-ctbga.cfsconfig, adsp-21835w-bga_ed.cfsconfig). The .cfsworkspace file sits at the workspace root and carries the workspace name.

.cfsworkspace format

The .cfsworkspace file is created when you complete the Workspace Creation Wizard (or run cfsutil workspace configure / cfsutil workspace create). It records which SoC, board, and package were chosen, the plugin bound to each core, and workspace-level metadata.

Top-level fields

FieldTypeDescription
DataModelVersionstringSemVer of the CFS data model schema used to generate this file
TimestampstringISO 8601 creation or last-modified timestamp
SocstringSoC name (e.g. "MAX32690")
PackagestringPackage variant (e.g. "WLP", "TQFN")
BoardstringBoard identifier (e.g. "AD-APARD32690-SL")
WorkspacePluginIdstringReverse-DNS plugin ID for the workspace template plugin, or empty string for manually configured workspaces
WorkspacePluginVersionstringSemVer of the workspace plugin
WorkspaceNamestringHuman-readable workspace name
LocationstringFilesystem path to the workspace root
ProjectsarrayArray of per-core project descriptors (see below)

Projects array entry fields

FieldTypeDescription
IdstringUnique opaque identifier for this core partition
CoreIdstringCore identifier (e.g. "CM4", "RV", "CM33")
NamestringHuman-readable core name (e.g. "Arm Cortex-M4F")
IsPrimarybooleanWhether this is the primary core of the workspace
IsEnabledbooleanWhether code generation is active for this core
PluginIdstringReverse-DNS ID of the project plugin for this core
PluginVersionstringSemVer of the project plugin
FirmwarePlatformstringFirmware platform: "msdk", "zephyr", or "SHARC-FX"
PlatformConfigobjectPlatform-specific settings saved from the Workspace Creation Wizard

Minimal skeleton (sample.cfsworkspace)

The empty skeleton that CFS generates when initializing a new workspace:
{
  "DataModelVersion": "0.0.1",
  "Timestamp": "2024-11-18T12:25:18.955Z",
  "Soc": "",
  "WorkspacePluginId": "",
  "Board": "",
  "Package": "",
  "Projects": [],
  "WorkspacePluginVersion": "",
  "WorkspaceName": "",
  "Location": ""
}

Populated example (persisted-sample.cfsworkspace)

A persisted workspace for the MAX32690 with a Zephyr Cortex-M4 primary project and an MSDK RISC-V secondary project:
{
  "DataModelVersion": "0.0.1",
  "Timestamp": "2025-03-17T13:17:04.502Z",
  "Soc": "MAX32690",
  "WorkspacePluginId": "",
  "Board": "AD-APARD32690-SL",
  "Package": "WLP",
  "WorkspacePluginVersion": "1.0.0",
  "WorkspaceName": "test-workspace-name",
  "Location": "test/workspace/path",
  "Projects": [
    {
      "Id": "corepart_01jrdgezrce69rsqvja125h3v2",
      "CoreId": "CM4",
      "Name": "Arm Cortex-M4F",
      "IsPrimary": true,
      "IsEnabled": true,
      "PluginId": "com.analog.project.zephyr.plugin",
      "PluginVersion": "1.0.0",
      "FirmwarePlatform": "zephyr",
      "PlatformConfig": {
        "ProjectName": "myProject",
        "BuildSystem": "ninja",
        "ZephyrBoardName": "zephyr_board_name",
        "ZephyrVersion": "4.2.0",
        "KConfigFlags": "# Build for debug (no optimizations) by default\nCONFIG_DEBUG=y\nCONFIG_NO_OPTIMIZATIONS=y\n\n# Enable thread awareness when debugging\nCONFIG_THREAD_NAME=y\nCONFIG_DEBUG_THREAD_INFO=y\nCONFIG_THREAD_ANALYZER=y\n",
        "CMakeArgs": "# Include compiler flags to enable source navigation with ELF File Explorer\nzephyr_cc_option(-fstack-usage)\nzephyr_cc_option(-fdump-ipa-cgraph)\nzephyr_cc_option(-gdwarf-4)\n",
        "EnableTFM": false,
        "MCUbootImgtoolPath": "${config:cfs.sdk.path}/SDK/zephyr/bootloader/mcuboot/scripts",
        "MCUbootKeyType": "rsa-3072"
      }
    },
    {
      "Id": "corepart_01jrdgezrce6a8zq3xaqac6wkg",
      "CoreId": "RV",
      "Name": "RISC-V",
      "IsPrimary": false,
      "IsEnabled": true,
      "PluginId": "com.analog.project.msdk.plugin",
      "PluginVersion": "1.1.0",
      "FirmwarePlatform": "msdk",
      "PlatformConfig": {
        "ProjectName": "myProject",
        "MsdkBoardName": "msdk_board_name",
        "Cflags": "-fdump-rtl-expand\n-fdump-rtl-dfinish\n-fdump-ipa-cgraph\n-fstack-usage\n-gdwarf-4"
      }
    }
  ]
}
The WorkspacePluginId is empty for manually configured workspaces (those created via Manually configure the workspace in the wizard). It is populated only when a workspace template plugin was selected.

.cfsconfig format

The .cfsconfig file is the primary hardware configuration artefact. It is read and written by System Planner, and consumed by code generation plugins and cfsutil commands. The file schema is versioned via DataModelVersion (a SemVer range expression) and SchemaVersion (a fixed version string).

Top-level fields

FieldTypeDescription
CopyrightstringADI copyright notice
DataModelVersionstringSemVer range (e.g. "^1.1.0") specifying the required CFS data model version
SchemaVersionstringSchema version of this file format (e.g. "2.1.0")
TimestampstringISO 8601 timestamp of the last save
SocstringSoC name (e.g. "MAX78000", "ADSP-21835W")
PackagestringPackage variant (e.g. "CTBGA", "BGA_ED")
BoardNamestringBoard identifier
PinsarrayPin multiplexing assignments (populated by Pin Config tool)
ClockNodesarrayClock tree node overrides (populated by Clock Config tool)
ProjectsarrayArray of per-core project configurations

Projects array entry fields

FieldTypeDescription
CoreIdstringCore identifier: "CM4", "CM33", "RV", "FX"
ProjectIdstringUnique project identifier within this workspace
PluginIdstringReverse-DNS ID of the code generation plugin
PluginVersionstringSemVer range of the plugin
FirmwarePlatformstring"msdk", "zephyr", or "SHARC-FX"
ExternallyManagedbooleanIf true, CFS does not manage build tasks for this project
SecurebooleanPresent on TrustZone-enabled cores: true for the secure world project
PlatformConfigobjectPlugin-specific project settings (project name, Zephyr board name, etc.)
PartitionsarrayTrustZone memory partition assignments
PeripheralsarrayPeripheral configuration entries (name, signals, config map)

Dual-core example (MAX78000 MSDK — max78000.cfsconfig)

The MAX78000 exposes a Cortex-M4 (CM4) and a RISC-V core (RV). Each receives its own project entry:
{
  "DataModelVersion": "^1.0.25",
  "SchemaVersion": "2.1.0",
  "Soc": "MAX78000",
  "Package": "CTBGA",
  "BoardName": "EvKit_V1",
  "Pins": [],
  "ClockNodes": [],
  "Projects": [
    {
      "CoreId": "CM4",
      "ProjectId": "CM4",
      "FirmwarePlatform": "msdk",
      "PluginId": "com.analog.project.msdk.plugin",
      "PluginVersion": "^1.1.0",
      "ExternallyManaged": false,
      "Partitions": [],
      "Peripherals": [
        {
          "Name": "CM4 SysTick",
          "Signals": [],
          "Config": { "ENABLE": "FALSE" }
        }
      ],
      "PlatformConfig": { "ProjectName": "m4" }
    },
    {
      "CoreId": "RV",
      "ProjectId": "RV",
      "PluginId": "com.analog.project.msdk.plugin",
      "PluginVersion": "^1.1.0",
      "FirmwarePlatform": "msdk",
      "ExternallyManaged": false,
      "Partitions": [],
      "Peripherals": [
        {
          "Name": "RV mtime",
          "Signals": [],
          "Config": { "ENABLE": "FALSE" }
        }
      ],
      "PlatformConfig": { "ProjectName": "rv" }
    }
  ]
}

Mixed-platform example (MAX32690 — max32690-tqfn.cfsconfig)

The MAX32690 configuration below assigns a Zephyr plugin to the Cortex-M4 and an MSDK plugin to the RISC-V co-processor:
{
  "DataModelVersion": "^1.1.0",
  "SchemaVersion": "2.1.0",
  "Soc": "MAX32690",
  "Package": "TQFN",
  "BoardName": "AD-APARD32690-SL",
  "Pins": [],
  "ClockNodes": [],
  "Projects": [
    {
      "CoreId": "CM4",
      "ProjectId": "CM4",
      "PluginId": "com.analog.project.zephyr.plugin",
      "PluginVersion": "^1.0.0",
      "FirmwarePlatform": "zephyr",
      "ExternallyManaged": false,
      "PlatformConfig": {
        "ProjectName": "m4",
        "ZephyrVersion": "4.2.0",
        "ZephyrBoardName": "max32690-evkit/evkit/m4"
      },
      "Partitions": [],
      "Peripherals": [
        {
          "Name": "CM4 SysTick",
          "Signals": [],
          "Config": { "ENABLE": "FALSE" }
        }
      ]
    },
    {
      "CoreId": "RV",
      "ProjectId": "RV",
      "PluginId": "com.analog.project.msdk.plugin",
      "PluginVersion": "^1.1.0",
      "FirmwarePlatform": "msdk",
      "ExternallyManaged": false,
      "Partitions": [],
      "Peripherals": [
        {
          "Name": "RV mtime",
          "Signals": [],
          "Config": { "ENABLE": "FALSE" }
        }
      ],
      "PlatformConfig": { "ProjectName": "rv" }
    }
  ]
}

TrustZone example (MAX32657 — max32657-tz.cfsconfig)

The MAX32657 uses ARM TrustZone on its Cortex-M33 core. Two Projects entries share the same CoreId ("CM33") but carry distinct ProjectId values and a Secure boolean flag to separate the secure and non-secure worlds:
{
  "DataModelVersion": "^1.0.0",
  "SchemaVersion": "2.1.0",
  "Soc": "MAX32657",
  "Package": "WLP",
  "BoardName": "EvKit_V1",
  "Pins": [],
  "ClockNodes": [],
  "Projects": [
    {
      "CoreId": "CM33",
      "ProjectId": "CM33-NS",
      "PluginId": "com.analog.project.zephyr.plugin",
      "PluginVersion": "^1.0.0",
      "FirmwarePlatform": "zephyr",
      "Secure": false,
      "PlatformConfig": {
        "ProjectName": "m33-ns",
        "ZephyrVersion": "4.2.0",
        "ZephyrBoardName": "max32657evkit/max32657/ns"
      },
      "Partitions": [],
      "Peripherals": [
        {
          "Name": "CM33 SysTick (NS)",
          "Signals": [],
          "Config": { "ENABLE": "FALSE" }
        }
      ]
    },
    {
      "CoreId": "CM33",
      "ProjectId": "CM33-S",
      "PluginId": "com.analog.project.msdk.plugin",
      "PluginVersion": "^1.1.0",
      "FirmwarePlatform": "zephyr",
      "Secure": true,
      "PlatformConfig": { "ProjectName": "m33-s" },
      "Partitions": [],
      "Peripherals": [
        {
          "Name": "CM33 SysTick (S)",
          "Signals": [],
          "Config": { "ENABLE": "FALSE" }
        }
      ]
    }
  ]
}
The manual TrustZone configuration option has been removed from the Workspace Creation Wizard for MAX32657 and MAX32658 in CFS 2.2.0. TrustZone support is available only through the TF-M Secure Partition workspace template, which has been verified to build correctly.

SHARC-FX example (ADSP-21835W — adsp-21835w-bga_ed.cfsconfig)

Single-core SHARC-FX workspace with the com.analog.project.sharcfx.plugin plugin and SHARC-FX firmware platform:
{
  "DataModelVersion": "^1.0.25",
  "SchemaVersion": "2.1.0",
  "Soc": "ADSP-21835W",
  "Package": "BGA_ED",
  "BoardName": "EV-SOMCRR-EZKIT",
  "Pins": [],
  "ClockNodes": [],
  "Projects": [
    {
      "CoreId": "FX",
      "ProjectId": "FX",
      "FirmwarePlatform": "SHARC-FX",
      "PluginId": "com.analog.project.sharcfx.plugin",
      "PluginVersion": "^1.0.0",
      "ExternallyManaged": false,
      "Partitions": [],
      "Peripherals": [],
      "PlatformConfig": { "ProjectName": "fx" }
    }
  ]
}

AI model entries in .cfsconfig

When an AI model is added to a project (via the System Planner’s Embedded AI Tools section or cfsutil ai model add), the model configuration is stored inside the relevant Projects entry in the .cfsconfig file. The AI section contains the backend identifier, model file path, and backend-specific properties (such as Section, Symbol, ArenaSize for tflm, or Softmax, ClockDivider for izer). These values are read by cfsutil ai build and the CFS code generation pipeline to produce the deployable C/C++ source files.
You can inspect and modify .cfsconfig files directly in any text editor. After editing, re-open the file in System Planner or run cfsutil ai build to regenerate code from the updated configuration. Changes to Pins or ClockNodes arrays made outside the GUI require a manual re-trigger of the code generation step.

Build docs developers (and LLMs) love