Skip to content

Configurations

An extension can contribute extension-specific settings.

Define in Manifest Non-Proprietary

To define the settings in the package.json, you need to add the contributes.configuration field. The configuration field is an object that contains the configuration settings.

package.json
json
{
  "contributes": {
    "configuration": {
      "title": "My Extension",
      "properties": {
        "myExtension.enable": {
          "type": "boolean",
          "default": true,
          "description": "Enable My Extension"
        },
        "myExtension.greeting.message": {
          "type": ["string", "null"],
          "default": "Hello!",
          "description": "Greeting messag. Set to null to disable"
        }
      }
    }
  }
}

Visit the official documentation for more information.

Use in Extension

To use the settings in the extension, you can use the defineConfig function to define the configuration. The following examples are corresponding to the above configuration.

ts
import { 
defineConfig
,
watchEffect
} from 'reactive-vscode'
const
config
=
defineConfig
<{
enabled
: boolean
greeting
: {
// Nested configurations are also supported
message
: string | null
} }>('your-extension-id')
console
.
log
(
config
.
greeting
.
message
) // read
config
.
greeting
.
message
= 'Hi!' // write
config
.
greeting
= {
message
: 'Hello!' } // write nested object
watchEffect
(() => {
console
.
log
('Enabled:',
config
.
enabled
) // react to changes
})

Visit the official documentation for more information about the rest of the options.

Use with vscode-ext-gen

You can also use the vscode-ext-gen to generate the configuration types. For example:

ts
// ./generated-meta.ts is generated by vscode-ext-gen

import type { NestedScopedConfigs } from './generated-meta'
import { 
defineConfig
} from 'reactive-vscode'
import {
scopedConfigs
} from './generated-meta'
const
config
=
defineConfig
<NestedScopedConfigs>(
scopedConfigs
.
scope
)