Exasol Extension for Visual Studio Code

May 29, 2026 · View on GitHub

A Visual Studio Code extension for working with Exasol databases. Provides database management, intelligent SQL editing, and query execution.

Note: This extension is a community-supported prototype and not officially supported by Exasol.

Quickstart

  1. Install from the VS Code Marketplace (search "Exasol") or from a .vsix file
  2. Click the Exasol icon in the sidebar, then + to add a connection
  3. Open a .sql file and press Cmd+Enter (Mac) / Ctrl+Enter (Windows/Linux) to execute

Features

  • Connection management — multiple connections, secure password storage, status bar indicator
  • Query execution — full file or selection, cancellable, automatic LIMIT, multi-statement support
  • Separate result tabs — toggle via Command Palette to view each statement's result in its own tab
  • IntelliSense — context-aware completions for keywords, functions, tables, views, and columns
  • Object explorer — browse schemas, tables, views, columns, scripts, functions, virtual schemas, constraints, indices, and system tables
  • Object actions — right-click to preview data, show DDL, generate SELECT, describe table
  • Results viewer — sortable, filterable grid with CSV export and cell inspection
  • Query history — automatic tracking with execution time, row counts, and error indicators
  • SQL Notebooks — interactive .exabook notebooks with SQL cells, inline results, and markdown documentation
  • SQL formatting — configurable keyword case, indentation, and statement spacing
  • Session management — active schema tracking, persistent state across restarts

Keyboard Shortcuts

ActionWindows/LinuxMac
Execute queryCtrl+EnterCmd+Enter
Execute selectionCtrl+Shift+EnterCmd+Shift+Enter
Execute entire scriptCtrl+Alt+EnterCmd+Alt+Enter
Find database objectCtrl+Shift+F (objects view)Cmd+Shift+F (objects view)

Configuration

Settings > Extensions > Exasol, or search "exasol" in Settings:

SettingDefaultDescription
maxResultRows10000Max rows to fetch per query
queryTimeout300Query timeout in seconds
maxQueryHistorySize1000Queries to keep in history
autoCompletetrueEnable IntelliSense
separateResultTabsfalseShow each statement result in a separate tab
formatter.*Keyword case, indent style, tab width, statement spacing

Development

git clone https://github.com/exasol-labs/exasol-vscode.git
cd exasol-vscode
npm install
npm run compile

Press F5 to launch the Extension Development Host.

npm run watch        # Auto-compile on changes
npm run test:unit    # Unit tests (192 tests)
npm run test:local   # Webview rendering tests (jsdom)
npm run test:e2e     # E2E tests (requires compile first)

Known build warnings

npm ci prints two transitive deprecation warnings (prebuild-install via keytar, whatwg-encoding via cheerio). Both come from @vscode/vsce and have no upstream fix yet. Tracked at https://github.com/microsoft/vscode-vsce/issues/1237.

A third warning, npm warn skipping integrity check for git dependency ssh://git@github.com/mikhail-zhadanov/exasol-driver-ts.git, appears because @exasol/exasol-driver-ts is installed from a git URL (the fork branch) instead of an npm tarball, so npm cannot verify a registry integrity hash. The SHA pin in package.json provides integrity (any tampering would change the SHA). Will go away once the upstream PR (exasol/exasol-driver-ts#59) merges and we switch back to the npm release.

Forked driver

@exasol/exasol-driver-ts is temporarily sourced from a fork at mikhail-zhadanov/exasol-driver-ts (v0.4.1, rebased on upstream 0.4.0). The fork replaces node-forge with Node's built-in node:crypto in both the RSA login path and the local CSV import TLS-certificate path, removing node-forge from the bundle entirely (~280 KB of extension.js). The pin reverts to the upstream package once the change lands there (exasol/exasol-driver-ts#59).

Limitations

  • Large result sets (>10,000 rows) may impact rendering performance
  • Query cancellation relies on driver support; some queries may not cancel immediately
  • Local file import from the extension is supported for CSV only, via IMPORT INTO <table> FROM LOCAL CSV FILE '<path>'. The extension intercepts the statement and streams the file to Exasol over the driver's TLS tunnel, so the cluster must be able to open a connection back to the client machine for the import tunnel. Other local formats (e.g. FBV) and multi-file local imports are not supported; cloud file imports continue to work via raw SQL. Cancelling an in-progress local import does not stop the load already streaming to the cluster

Support

  • GitHub Issues
  • Contributions welcome — submit issues or pull requests

License

MIT