A comprehensive library for building CloudQuery plugin configuration UIs with minimal effort.
The fastest way to create a new plugin UI is to use the CLI generator:
npx --legacy-peer-deps @cloudquery/plugin-config-ui-libThis command runs the interactive generator that creates a complete plugin UI project with all necessary files and dependencies.
The generator will prompt you for:
- Plugin Label: The human-readable name (e.g., "AWS", "GitHub")
- Plugin Name: The machine-readable name (e.g., "aws", "github")
- Plugin Kind: Source or destination
- Plugin Team: Typically "cloudquery" or your organization
- Plugin Version: The semantic version (e.g., "v1.0.0")
- Plugin Logo: Path to your logo image (optional but recommended)
- Table Selection: For source plugins, whether it supports table selection
- Service Selection: For source plugins, whether it supports service selection
- Authentication Type: OAuth, token-based, or both
- Authentication Properties: For token-based auth, what fields are needed
- Advanced Options: Additional configuration options
After answering these questions, the generator creates a complete UI project in a cloud-config-ui directory with:
- All necessary configuration files
- Basic UI components
- Proper authentication flows
- Unit test setup
- Development environment
Initializes the form with values from CloudQuery:
const { initialValues, initialized, teamName, context, isDisabled } = 
  useFormInit(pluginUiMessageHandler);The main wrapper component that provides context to all child components:
<PluginContextProvider
  config={config}
  teamName={teamName}
  getTablesData={getTablesData}
  hideStepper={context === 'wizard'} 
  pluginUiMessageHandler={pluginUiMessageHandler}
  initialValues={initialValues}
  isDisabled={isDisabled}
>
  {/* Your plugin UI components */}
</PluginContextProvider>The main form component that handles the entire UI:
<ConfigUIForm 
  container={container} 
  prepareSubmitValues={prepareSubmitValues} 
/>Should be rendered only when initialized is true.
Defines your plugin's configuration structure, including authentication methods, steps, and form fields:
export const useConfig = ({ initialValues }) => ({
  name: 'my-plugin',
  type: 'source',
  label: 'My Plugin',
  docsLink: 'https://hub.cloudquery.io/plugins/source/myteam/my-plugin/latest/docs',
  iconLink: 'images/logo.png',
  auth: [AuthType.OAUTH, AuthType.OTHER],
  steps: [
    {
      title: 'Connect',
      children: [
        // Form sections and components
      ]
    }
  ],
  // Optional guide configuration
  guide: { /* guide configuration */ }
});- ControlTextField: Text input with validation
- ControlNumberField: Number input with validation
- ControlSelect: Dropdown selection
- ControlSwitch: Toggle switch
- ControlPassword: Password input with visibility toggle
- ControlCheckbox: Checkbox input
- TableSelector: UI for selecting tables (for source plugins)
- ServiceSelector: UI for selecting services
- SecretInput: Secure input for credentials
- UploadJSON: Component for uploading JSON files
- MultiAutocomplete: Multiple selection with autocomplete
You can customize the form by defining sections and components in the useConfig hook:
{
  component: 'section',
  title: 'Authentication',
  children: [
    {
      component: 'control-text-field',
      name: 'api_key',
      label: 'API Key',
      required: true
    }
  ]
}You can conditionally show sections or fields:
{
  component: 'section',
  title: 'Advanced Settings',
  shouldRender: (values) => values.show_advanced === true,
  children: [/* components */]
}Use Yup schemas for validation:
{
  component: 'control-text-field',
  name: 'api_key',
  label: 'API Key',
  schema: yup.string().when('_step', {
    // Only validate on step 1
    is: 1,
    then: (schema) => schema.required('API Key is required')
  })
}After generating your UI:
cd cloud-config-ui
npm startThis starts a development server where you can test your plugin UI locally.
The generator includes unit tests:
npm run testor in watch mode
npm run test:watchnpm run buildThis creates optimized production files in the dist directory that can be deployed to CloudQuery.