PrismNote
A Jupyter-compatible data-science notebook with a Rust backend and a React frontend: real local SQL execution, a real sandboxed code-execution engine, and connectors for cloud data warehouses.
What this is
- Backend: Rust (Axum). Serves the API, runs SQL against local and remote databases, and launches Docker containers for sandboxed code execution.
- Frontend: React + TypeScript (Vite). Notebook UI, SQL cells, schema explorer, results grid.
- The release binary embeds the built frontend, so
prismnoteis a single executable that serves the whole app.
Install
pip install prismnote
prismnote
pip install installs a thin Python launcher (python/) — on first run it
downloads the matching prebuilt server binary from
GitHub Releases and
execs it. As of this version, a prebuilt binary is published for macOS
(Apple Silicon) only; other platforms need to build from source (see
Building below) until more platform binaries are uploaded.
SQL execution
SQL cells run against real databases — there is no mocked or placeholder query path:
| Backend | Status |
|---|---|
| SQLite | Real, embedded (via sqlx), no server required |
| DuckDB | Real, embedded (bundled DuckDB, compiled from source), no server required |
| PostgreSQL | Real, via sqlx; requires a reachable Postgres server |
| MySQL | Real, via sqlx; requires a reachable MySQL server |
All four are covered by integration tests that run genuine
CREATE TABLE / INSERT / SELECT round trips
(crates/server/src/db/executor.rs). SQLite and DuckDB tests always run.
The Postgres/MySQL tests connect to a real server and skip (rather than
fail) when one isn't reachable — point them at a running server with
PRISMNOTE_TEST_PG_PORT / PRISMNOTE_TEST_MYSQL_PORT.
MongoDB is not implemented; connecting to it returns an explicit error rather than a fake success.
Sandboxed code execution
docker_executor.rs runs untrusted code in a brand-new, disposable Docker
container per execution (docker run --rm):
- No network access by default (
--network=none) - Memory, CPU, and process-count limits enforced per run
- A wall-clock timeout that force-kills and cleans up the container
- Real stdout/stderr/exit-code capture
Requires a working Docker installation. Supported languages: Python, Bash/shell, JavaScript (Node), Ruby.
Cloud warehouse connectors
Real connection + query execution for Snowflake, BigQuery, Redshift, Azure
Synapse, Databricks, Athena, Presto, and Trino (crates/server/src/cloud_warehouse/).
AWS-signed requests (Athena, Redshift) use a real SigV4 implementation.
Other integrations
All real API calls, not placeholders:
| Integration | What's real |
|---|---|
| Cloud storage | S3 (SigV4), GCS (service-account JWT), Azure Blob (Shared Key signing), Google Drive (OAuth) — upload/download/list/delete |
| dbt | Shells out to the real dbt CLI; parses its manifest.json/run_results.json |
| GitHub | Real Contents API for notebook backup/sync |
| Airflow | Real REST API v1 (list/trigger DAGs, run status, tasks). DAG creation writes a file to a configured local DAGs folder, since Airflow's API has no DAG-creation endpoint |
| Kubernetes | Real kubectl apply/get pods/scale |
| RunPod | Real GraphQL API for training-instance lifecycle and serverless endpoint deployment |
Two data-quality-scoring code paths (api::get_quality_score,
lineage::data_quality_score) are the one area still not wired to real
execution — they'd need an assertion-storage and table-to-queryable-data
layer that doesn't exist yet, rather than something fakeable in isolation.
Building
git clone https://github.com/Mullassery/PrismNote.git
cd PrismNote
make build
make build builds the frontend first and embeds it into the release
binary — this is the only build path that produces a binary that actually
serves the UI. Running cargo build --release directly will build a
backend with no frontend assets. The binary is written to
target/release/prismnote.
Requirements: Rust (stable), Node 20.19+ (required by Vite 8), and Docker if you want sandboxed code execution or want to test the container-management endpoints.
Development
# Terminal 1: backend on http://localhost:8000
cargo run
# Terminal 2: frontend dev server on http://localhost:5173
cd frontend && npm install && npm run dev
Tests
cargo test --workspace --release # backend
cd frontend && npm test # frontend (vitest)
Configuration
Everything runs with no environment variables set — Google Sign-In and AI
features (code explain/fix/complete, NL-to-SQL, RunPod fine-tuning) are
just disabled until configured. Copy .env.example to
.env and fill in what you need; see the comments in that file for which
variables are required together (e.g. PRISMNOTE_AI_PROVIDER=claude needs
ANTHROPIC_API_KEY) and which are backend-only vs. frontend (VITE_-prefixed).
Project layout
crates/server/ Rust backend: API, SQL executors, Docker sandbox, cloud warehouse connectors
frontend/ React app (components, hooks, API clients)
python/ PyPI launcher package
docs/ architecture notes and screenshots
License
Proprietary — free to use with explicit attribution. See LICENSE for the full terms.
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file prismnote-1.11.0.tar.gz.
File metadata
- Download URL: prismnote-1.11.0.tar.gz
- Upload date:
- Size: 21.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/7.0.0 CPython/3.11.16
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2c7f98599fae11fcb6c6b47a0827254b2c9af805ac6349f99fb95e368e657a13
|
|
| MD5 |
774f6a318dedfc00b07797f435b15263
|
|
| BLAKE2b-256 |
430922c0010c9a744e8ace9e5efb9da96e671d7395bf7ee7dfb4b2d48556c792
|
File details
Details for the file prismnote-1.11.0-py3-none-any.whl.
File metadata
- Download URL: prismnote-1.11.0-py3-none-any.whl
- Upload date:
- Size: 19.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/7.0.0 CPython/3.11.16
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0e500e1f88c773112c82d01284d6189e201e5ca8372b5792a9e6896ee5c3e790
|
|
| MD5 |
2061c0bf7fa96a65cb32d13e083620a6
|
|
| BLAKE2b-256 |
2241bf239d4bdb48cee1f86f452a5b19a9854c30f3f31a36b1df6fc5b11928fa
|