Skip to content
| Marketplace
Sign in
Visual Studio Code>Data Science>DuckweedNew to Visual Studio Code? Get it now.
Duckweed

Duckweed

chaffed

|
1 install
| (0) | Free
Browse and edit SQLite, DuckDB and CSV/TSV files in VS Code with no native binaries: the database engines run as WebAssembly.
Installation
Launch VS Code Quick Open (Ctrl+P), paste the following command, and press enter.
Copied to clipboard
More Info

Duckweed

Browse, query and edit SQLite, DuckDB and CSV/TSV files in VS Code, with no native binaries.

Duckweed floats on the surface without roots: both database engines are WebAssembly builds that run inside VS Code's own process (sql.js for SQLite, duckdb-wasm for DuckDB and delimited files). Nothing is installed, no helper process is started, and no .exe, .dll, .so or .node file is loaded. The extension package contains only JavaScript, CSS and two .wasm files.

That makes it usable on machines where application allowlisting blocks unapproved executables. It does not bypass extension allowlisting: if your organisation controls which VS Code extensions may be installed, Duckweed needs approval like any other extension.

What it does

File Open Browse & query Edit
SQLite (.sqlite, .sqlite3, .db, .db3, .s3db, .sl3) Default editor Yes Yes: cells, add/delete rows, any SQL
DuckDB (.duckdb, .ddb) Default editor Yes Read-only (see below)
Delimited (.csv, .tsv, .tab, .psv) Open With… → Duckweed Yes, with DuckDB SQL Yes: cells, add/delete rows

Files are recognised by content, so a .db file that is really DuckDB opens correctly.

  • Grid: 200 rows per page, arrow-key navigation. Type or press Enter/F2 to edit a cell, Delete to set NULL.
  • SQL panel: ⌘/Ctrl+Enter runs the selection or the whole box. Results show the first 1,000 rows.
  • Undo/redo and save use VS Code's normal commands. Unsaved changes survive a window reload (hot exit).
  • Delimited files: the delimiter, quote character and header are detected automatically. Values are kept as text, so 007 stays 007 and 1.50 stays 1.50. Line endings (\n or \r\n) are preserved. You can query the file with DuckDB SQL using its name without the extension: SELECT city, count(*) FROM people GROUP BY city.

Limitations

  • DuckDB files are read-only. duckdb-wasm's Node runtime does not reliably persist writes to .duckdb files yet: in testing, checkpoints left data only in the WAL, and reopening and appending lost earlier rows. Browsing and querying work, and Duckweed patches a runtime bug so data still in a .wal file is read correctly. Write support will return when upstream is reliable.
  • SQLite works on an in-memory copy. The whole database is loaded into memory and written back atomically on save. That's fine up to a few hundred MB. If the file changes on disk while it's open, Duckweed warns before overwriting.
  • SQLite files with a non-empty -wal file open read-only. sql.js only reads the main file, so saving would drop the changes waiting in the WAL. Close the other program so SQLite can checkpoint, then reopen.
  • Delimited files are re-written when saved. Content is preserved, but quoting is normalised: fields are quoted only when needed, and an empty quoted field "" becomes empty. Files must be UTF-8.
  • Query panel on DuckDB and delimited files accepts read-only statements (SELECT, WITH, DESCRIBE, SUMMARIZE, …). Edit rows in the grid.
  • SQL that changes a SQLite database is undone by restoring a snapshot taken before it ran, which briefly doubles memory use.

Install

Download duckweed-<version>.vsix from Releases, then in VS Code run Extensions: Install from VSIX…, or:

code --install-extension duckweed-0.1.0.vsix

Develop

npm install
npm test          # engine tests in plain Node
npm run typecheck
npm run package   # builds duckweed-<version>.vsix
npm run samples   # writes synthetic test files to samples/

Press F5 in VS Code to launch an Extension Development Host with the samples/ folder open.

npm run samples generates a seeded, identical-every-run shop dataset: shop.sqlite (500 customers, 5,000 orders, a view, blobs, a 64-bit integer, a generated column, a WITHOUT ROWID table, awkward identifiers), shop.duckdb (the same shop with DECIMAL, TIMESTAMP, ENUM, LIST, STRUCT, MAP and UUID columns, a view and an archive schema), customers.csv (CRLF) and inventory.tsv (leading zeros). They're built with the same WASM engines, so the DuckDB data lives in shop.duckdb.wal until a native DuckDB checkpoints it.

Layout:

  • src/engines/: SQLite (sqlite.ts) and DuckDB/CSV (duckdb.ts) behind one Engine interface. There are no vscode imports here, so the engines are tested in plain Node.
  • src/editorProvider.ts: VS Code custom editor (documents, undo/redo, save, backup).
  • media/: the webview UI, plain JS and CSS themed with VS Code's colour variables.

The build tools (esbuild, TypeScript, vsce) are native binaries, but they're only used to build the extension and never ship in the .vsix.

License

MIT

  • Contact us
  • Jobs
  • Privacy
  • Manage cookies
  • Terms of use
  • Trademarks
  • Your Privacy Choices
  • Consumer Health Privacy
© 2026 Microsoft