---
tags: [VariableSet, variable set, service catalog, item_option_new_set]
---
# VariableSet

Creates a Variable Set (`item_option_new_set`) — a reusable collection of variables that can
be attached to one or more catalog items.

## Signature

```typescript fluent
VariableSet(config)
```

## Parameters

### config

`object`

Variable Set configuration — title, layout, variables, and role-based access.

**Properties:**

- **$id** (required): `string | number | ExplicitKey<string>`

- **title** (required): `string`
  Display title of the variable set (translated field)

- **createRoles** (optional): `(string | Role)[]`
  Roles that can create instances of this variable set
  An array of role names or Role references

- **description** (optional): `string`
  Description of the variable set

- **displayTitle** (optional, default: false): `boolean`
  Whether to display the title

- **internalName** (optional): `string`
  Optional : this is auto generated if not provided

- **layout** (optional, default: 'normal'): `'normal' | '2across' | '2down'`
  Layout style for the variable set
  Common values: 'normal', '2down', '2across'

- **name** (optional): `string`
  Optional name field

- **order** (optional, default: 100): `number`
  Display order of the variable set

- **readRoles** (optional): `(string | Role)[]`
  Roles that can read this variable set
  An array of role names or Role references

- **setAttributes** (optional): `string`
  Set attributes (additional configuration)

- **type** (optional, default: 'singleRow'): `'singleRow' | 'multiRow'`
  Type of variable set
  - 'singleRow': Single Row (default)
  - 'multiRow': Multi Row

- **variables** (optional): `Record<string, AnyVariable>`
  The variables for the variable set

- **version** (optional): `number`
  Version number of the variable set

- **writeRoles** (optional): `(string | Role)[]`
  Roles that can write/modify this variable set
  An array of role names or Role references



## Examples

### Basic VariableSet

Create a variable set with checkbox variables

```typescript fluent
// Source: packages/api/tests/service-catalog-plugin/fluent/variable-set-variables/create/checkbox.now.ts
/**
 * @title Basic VariableSet
 * @description Create a variable set with checkbox variables
 */

import { VariableSet, CheckboxVariable } from '@servicenow/sdk/core'

export const BasicVariableSet = VariableSet({
    $id: Now.ID['checkbox_test_set'],
    title: 'Checkbox Options',
    variables: {
        premiumSupport: CheckboxVariable({
            question: 'Premium Support',
            order: 1,
            selectionRequired: true,
            pricingDetails: [
                {
                    amount: 100,
                    currencyType: 'USD',
                    field: 'price_if_checked',
                },
            ],
        }),
        rushDelivery: CheckboxVariable({
            question: 'Rush Delivery',
            order: 2,
            selectionRequired: false,
        }),
    },
})

```

### Multi-Row VariableSet

Create a multi-row variable set with checkbox variables

```typescript fluent
// Source: packages/api/tests/service-catalog-plugin/fluent/variable-set-variables/create/checkbox.now.ts
/**
 * @title Multi-Row VariableSet
 * @description Create a multi-row variable set with checkbox variables
 */

import { VariableSet, CheckboxVariable } from '@servicenow/sdk/core'

export const MultiRowVariableSet = VariableSet({
    $id: Now.ID['multi_row_checkbox_set'],
    title: 'Multi-Row Checkbox Options',
    type: 'multiRow',
    variables: {
        premiumSupport: CheckboxVariable({
            question: 'Premium Support',
            order: 1,
            selectionRequired: true,
            pricingDetails: [
                {
                    amount: 100,
                    currencyType: 'USD',
                    field: 'price_if_checked',
                },
                {
                    amount: 50,
                    currencyType: 'GBP',
                    field: 'rec_price_if_checked',
                },
            ],
        }),
        extendedWarranty: CheckboxVariable({
            question: 'Extended Warranty',
            order: 2,
            pricingDetails: [
                {
                    amount: 200,
                    currencyType: 'EUR',
                    field: 'price_if_checked',
                },
            ],
        }),
        rushDelivery: CheckboxVariable({
            question: 'Rush Delivery',
            order: 3,
            selectionRequired: false,
        }),
    },
})

```

### VariableSet with SelectBox Variables

Create a variable set with selectbox variables using table-based and custom choices

```typescript fluent
// Source: packages/api/tests/service-catalog-plugin/fluent/variable-set-variables/create/selectbox.now.ts
/**
 * @title VariableSet with SelectBox Variables
 * @description Create a variable set with selectbox variables using table-based and custom choices
 */

import { VariableSet, SelectBoxVariable } from '@servicenow/sdk/core'

export const SelectBoxVariableSet = VariableSet({
    $id: Now.ID['selectbox_test_set'],
    title: 'SelectBox Options',
    type: 'multiRow',
    variables: {
        // SelectBox sourced from an existing table/field
        priorityFromTable: SelectBoxVariable({
            question: 'Priority (From Table)',
            order: 1,
            choiceTable: 'incident',
            choiceField: 'priority',
        }),
        // SelectBox with custom choices and pricing
        supportLevel: SelectBoxVariable({
            question: 'Support Level',
            order: 2,
            choices: {
                basic: {
                    label: 'Basic Support',
                    sequence: 1,
                    inactive: false,
                    pricingDetails: [
                        {
                            field: 'misc',
                            amount: 50,
                            currencyType: 'USD',
                        },
                    ],
                },
                standard: {
                    label: 'Standard Support',
                    sequence: 2,
                    inactive: false,
                },
                premium: {
                    label: 'Premium Support',
                    sequence: 3,
                    inactive: false,
                },
            },
        }),
        // SelectBox with simple choices (no pricing)
        deliveryMethod: SelectBoxVariable({
            question: 'Delivery Method',
            order: 3,
            choices: {
                email: {
                    label: 'Email',
                    sequence: 1,
                    inactive: false,
                },
                download: {
                    label: 'Download',
                    sequence: 2,
                    inactive: false,
                },
                physical: {
                    label: 'Physical Media',
                    sequence: 3,
                    inactive: false,
                },
            },
        }),
    },
})

```
