name: vdm-next-integration
description: Create the configuration definition for a new VDM Next (Visual Data Mapper) destination. Registers the destination, defines capabilities, and sets up authentication.
argument-hint: auth-type:oauth|apikey
VDM Next — Configuration Definition
Objective: Create the configuration files that register a new VDM Next destination in the RudderStack system.
Inputs
- Destination name:
$ARGUMENTS[0](lowercase, e.g.,zoho,salesforce) - Auth type:
$ARGUMENTS[1]—oauthorapikey
Context
This is Step 1 in building a VDM Next integration.
File Structure
src/configurations/destinations/<dest_name>/
├── db-config.json
├── ui-config.json
├── schema.json
└── accounts/<dest_name>_<auth_type>/
├── db-config.json
├── ui-config.json
└── schema.json
Refer src/schemas/destinations/, src/schemas/account for adding any additional needed fields in the definition.
Reference
Find existing VDM destinations by searching for supportsVisualMapper: true in src/configurations/destinations/*/db-config.json. Read their complete config (db-config, ui-config, schema, and accounts/) for patterns.
Also read the account definition schemas for structural rules:
src/schemas/account/account-db-config-schema.jsonsrc/schemas/account/account-schema-schema.jsonsrc/schemas/account/account-ui-config-schema.json
VDM Mandatory Fields in db-config.json
Every VDM Next destination must include:
{
"name": "<DEST_NAME_UPPER>",
"displayName": "<Display Name>",
"version": "1.0",
"config": {
"supportsVisualMapper": true,
"disableJsonMapper": true,
"supportedSourceTypes": ["warehouse"],
"supportedMessageTypes": { "cloud": ["record"] },
"transformAtV1": "router",
"syncBehaviours": ["mirror"],
"supportedConnectionModes": { "warehouse": ["cloud"] },
"destConfig": {
"defaultConfig": [""]
}
}
}
For API Key auth: change auth.type to "custom" and remove rudderScopes.
Account Definition (Optional)
OAuth pattern:
authenticationType: "oauth",refreshOAuthToken: trueoptionFields: non-secret config (e.g.,["region"])- Name format:
DESTINATION_<DEST_NAME_UPPER>_OAUTH - Requires corresponding implementation in
rudder-authrepo
API Key pattern:
authenticationType: "custom"secretFields: encrypted credentials (e.g.,["apiKey"])optionFields: non-secret config- Name format:
DESTINATION_<DEST_NAME_UPPER>_APIKEY
Steps
- Create
src/configurations/destinations/<dest_name>/ - Create
db-config.jsonusing the VDM template above — update name, displayName, auth, account definitions - Create
accounts/<dest_name>_<auth_type>/with db-config.json, ui-config.json, schema.json (use existing VDM destination as template) - Create root
ui-config.json— must includeaccountManagementInputfield, connection mode, consent settings - Create root
schema.json— must validaterudderAccountIdand consent management - Run validation:
npm test -- --testPathPattern="<dest_name>"
Critical Rules
disableJsonMapper: trueis mandatory — without it, JSON mapper UI shows instead of visual mappertransformAtV1: "router"is required — VDM always uses router pathversion: "1.0"is required on every destination db-config (major.minor); start new destinations at"1.0"supportedSourceTypesmust include"warehouse"supportedMessageTypesmust be{ cloud: ["record"] }- Account definition name format:
DESTINATION_{DEST_NAME_UPPER}_{AUTH_TYPE_UPPER} - For OAuth: the
rudder-authrepo must have a matching passport strategy and refresh token implementation