- Snapshot all four versioned docs sections at v6.1.0; master continues to serve as "Next" (lastVersion: current, banner: unreleased) so editing master keeps updating the canonical URLs - Enable the previously-disabled components plugin and version it - Rename stale "developer_portal" references to "developer_docs" across package.json scripts, manage-versions.mjs, theme files (DocVersionBadge, DocVersionBanner), DOCS_CLAUDE.md, and README.md (URL backward-compat redirect /developer_portal/* preserved) - Add admin_docs version scripts; drop dead "tutorials" plugin id from the version badge - Generalize fixVersionedImports in manage-versions.mjs to walk every section's snapshot and rewrite ../../src/ and ../../data/ imports, catching admin_docs and components files that previous version cuts would have broken - Remove orphan files: developer_portal_versions.json, tutorials_versions.json, and stray empty versions.json files inside components/ and developer_docs/ content directories
6.7 KiB
title, sidebar_position
| title | sidebar_position |
|---|---|
| SQL Lab | 1 |
SQL Lab Extension Points
SQL Lab provides 4 extension points where extensions can contribute custom UI components. Each area serves a specific purpose and supports different types of customizations. These areas will evolve over time as new features are added to SQL Lab.
Layout Overview
┌──────────┬─────────────────────────────────────────┬─────────────┐
│ │ │ │
│ │ │ │
│ │ Editor │ │
│ │ │ │
│ Left │ │ Right │
│ Sidebar ├─────────────────────────────────────────┤ Sidebar │
│ │ │ │
│ │ Panels │ │
│ │ │ │
│ │ │ │
│ │ │ │
└──────────┴─────────────────────────────────────────┴─────────────┘
| Extension Point | ID | Views | Menus | Description |
|---|---|---|---|---|
| Left Sidebar | sqllab.leftSidebar |
— | ✓ | Menu actions for the database explorer |
| Editor | sqllab.editor |
✓* | ✓ | Custom editors + toolbar actions |
| Right Sidebar | sqllab.rightSidebar |
✓ | — | Custom panels (AI assistants, query analysis) |
| Panels | sqllab.panels |
✓ | ✓ | Custom tabs + toolbar actions (data profiling) |
*Editor views are contributed via Editor Contributions, not standard view contributions.
Customization Types
Views
Extensions can add custom views (React components) to Right Sidebar and Panels. Views appear as new panels or tabs in their respective areas.
Menus
Extensions can add toolbar actions to Left Sidebar, Editor, and Panels. Menu contributions support:
┌───────────────────────────────────────────────────────────────┐
│ [Button] [Button] [•••] │
├───────────────────────────────────────────────────────────────┤
│ Area Content │
└───────────────────────────────────────────────────────────────┘
| Action Type | Location | Use Case |
|---|---|---|
| Primary Actions | Toolbar buttons | Frequently used actions (e.g., run, refresh, add new) |
| Secondary Actions | 3-dot menu (•••) | Less common actions (e.g., export, settings) |
Custom Editors
Extensions can replace the default SQL editor with custom implementations (Monaco, CodeMirror, etc.). See Editor Contributions for details.
Examples
Adding a Panel
This example adds a "Data Profiler" panel to SQL Lab:
import React from 'react';
import { views } from '@apache-superset/core';
import DataProfilerPanel from './DataProfilerPanel';
views.registerView(
{ id: 'my-extension.data-profiler', name: 'Data Profiler' },
'sqllab.panels',
() => <DataProfilerPanel />,
);
Adding Actions to the Editor
This example adds primary, secondary, and context actions to the editor:
import { commands, menus, sqlLab } from '@apache-superset/core';
commands.registerCommand(
{ id: 'my-extension.format', title: 'Format Query', icon: 'FormatPainterOutlined' },
async () => {
const tab = sqlLab.getCurrentTab();
if (tab) {
const editor = await tab.getEditor();
// Format the SQL query
}
},
);
commands.registerCommand(
{ id: 'my-extension.explain', title: 'Explain Query' },
async () => {
const tab = sqlLab.getCurrentTab();
if (tab) {
const editor = await tab.getEditor();
// Show query explanation
}
},
);
commands.registerCommand(
{ id: 'my-extension.copy-as-cte', title: 'Copy as CTE' },
async () => {
const tab = sqlLab.getCurrentTab();
if (tab) {
const editor = await tab.getEditor();
// Copy selected text as CTE
}
},
);
menus.registerMenuItem(
{ view: 'builtin.editor', command: 'my-extension.format' },
'sqllab.editor',
'primary',
);
menus.registerMenuItem(
{ view: 'builtin.editor', command: 'my-extension.explain' },
'sqllab.editor',
'secondary',
);
menus.registerMenuItem(
{ view: 'builtin.editor', command: 'my-extension.copy-as-cte' },
'sqllab.editor',
'context',
);
Next Steps
- Contribution Types - Learn about other contribution types (commands, menus)
- Development - Set up your development environment
- Quick Start - Build a complete extension