Scigantic for VS Code and Cursor
Search the Scigantic catalog and mount public research datasets as local read-only folders. Files are fetched on demand, so a multi-terabyte bucket mounts in a couple of seconds. The mount path works anywhere: the editor, the terminal, Python, R.
Prototype. Tested on macOS (VS Code and Cursor) and Linux (Debian container with fuse3). Windows is written but untested.
Use
- Click the Scigantic icon in the Activity Bar (the left strip).
- Type in the search box at the top, and click Mount on a result.
- Pick a folder to mount (or the whole dataset).
- Browse it in the Mounts list below, or use Open Terminal Here on the mount.
Mounts live under ~/scigantic-mounts and are removed when the editor closes. If the editor crashes, the next start removes mounts the crashed session left behind; mounts owned by another open window are left alone.
For AI agents
The mount folder holds a README.md and a mounts.json that list every mounted dataset: its local path, the bucket it comes from, its Scigantic archive id and catalog page, and rclone commands to list a folder, read a file and download a file. They are rewritten on every mount and unmount, across all open windows.
Agents should use those commands. They read the bucket directly, so they work from any app with no setup. Reading the mount folder itself needs macOS "Network Volumes" permission for the app doing the reading (see How it works).
If you use Claude Code, the extension adds a short, clearly marked note to ~/.claude/CLAUDE.md after your first mount, pointing Claude at mounts.json. The notification has a Remove button, and Scigantic: Remove the Claude Code Note takes it out later. It is never added back once removed. The Scigantic MCP server (https://api.scigantic.com/mcp) gives the same instruction to any client that connects to it.
Mount links
A link can open the editor and mount a dataset, or one folder of it:
vscode://scigantic.scigantic-mount/mount?id=<archive id>&path=<optional folder>
cursor://scigantic.scigantic-mount/mount?id=<archive id>&path=<optional folder>
The editor always asks before mounting, and shows what will be mounted and whether any keys are used. Links with an unusual id or folder path (for example one containing ..) are refused.
What can be mounted
| Source |
Mounts? |
| Public S3, GCS and Azure Blob containers run by others |
Yes, anonymously |
| Credentialed or private buckets |
Only with scigantic.useLocalCredentials on, using your AWS profile chain, gcloud application default credentials or Azure CLI login. Off, they are left out of search |
| S3 Requester Pays buckets (Pennsieve Discover) |
Only with scigantic.useLocalCredentials on. The bucket owner charges the requester for data transfer, so reads are billed to your AWS account. Off, they are left out of search |
| Google Cloud Requester Pays buckets (Arc Virtual Cell Atlas) |
Not mounted: they need a Google Cloud billing project. The search result opens the dataset on Scigantic |
| Public HTTP trees (EBI, NCBI) |
Yes, rate limited to 4 requests a second |
| Buckets hosted by Scigantic |
No. The result's Open in Scigantic button opens them in a notebook |
| Zenodo records |
Yes, through a file list served on your computer (see How it works) |
| Hugging Face, git |
Not yet |
How it works
The extension runs rclone. If rclone is not on your PATH it downloads version 1.75.0 and checks it against a SHA-256 pinned in src/rclone.ts.
- macOS uses
rclone nfsmount, which talks to the built-in NFS client. No macFUSE, no admin password. macOS counts the mount as a network volume, so the editor needs Network Volumes permission (System Settings > Privacy & Security > Files & Folders). Without it, reads from the editor's terminal and from Claude Code fail with "Operation not permitted". The Scigantic panel, opening files from it, and agents using the commands in mounts.json all go through rclone instead, so none of them need it.
- Zenodo has no folder listing that rclone can read. The extension serves one on
127.0.0.1 (behind a random path) from the file list the Scigantic API publishes for each record, and answers rclone's size checks from it. File contents come directly from Zenodo. The listing lives as long as the editor, like the mount; the commands in mounts.json for a Zenodo mount use it too.
- Linux uses
rclone mount and needs fuse3.
- Windows uses
rclone mount and needs WinFsp.
Mounts always use rclone's full read cache (--vfs-cache-mode full, capped by scigantic.cacheMaxSize). Without it, each small read became its own S3 request and a 4 MB read took 50 seconds.
The view lists folders with rclone directly, not through the mount. Through the macOS NFS mount a folder of 16,000 files never finished listing; rclone lists it in about 3 seconds. For the same reason mounts are not added as workspace folders, which would make the editor's file watcher and search crawl the whole bucket.
Settings
All settings are user-level only. A workspace's .vscode/settings.json cannot set them, so a cloned repository cannot choose which binary the extension runs or where mounts go.
| Setting |
Default |
|
scigantic.apiUrl |
https://api.scigantic.com |
Catalog API |
scigantic.rclonePath |
empty |
Use this rclone instead |
scigantic.mountRoot |
~/scigantic-mounts |
Where mounts go |
scigantic.cacheMaxSize |
10G |
Read cache cap |
scigantic.useLocalCredentials |
off |
Allow credentialed datasets |
scigantic.awsProfile |
empty |
AWS profile when credentials are on |
Develop
npm install
npm run test:unit
VSCODE_PATH="/Applications/Visual Studio Code.app/Contents/MacOS/Code" npm run test:e2e
VSCODE_PATH="/Applications/Cursor.app/Contents/MacOS/Cursor" npm run test:e2e
npx @vscode/vsce package --no-dependencies --allow-missing-repository
npm run test:live (needs RCLONE_PATH and network) kills a host process mid-mount and checks the cleanup.
The e2e suite runs inside a real editor with a throwaway profile. It mounts NOAA's public CORA bucket, reads files through the mount, lists a 16,000-file folder, mounts a public GCS bucket and an EBI HTTP tree, checks that a Scigantic-hosted archive is refused, and unmounts.