Modern, open-source Jupyter-compatible data science notebook with Rust performance
Project description
◆ PrismNote
A fast, modern, open-source data-science notebook. Rust engine · React UI · local-first · AI-native.
License: MIT · Status: Beta (v0.4)
Overview
PrismNote is a local-first alternative to Jupyter, Zeppelin, and Databricks notebooks. It pairs a Rust + Axum backend and a persistent Python kernel with a modern, VS Code-style React interface. Write Python and SQL, get rich output and live charts, ask a local AI for help, schedule notebooks as jobs, manage git, and ship to the cloud — all from one app that runs entirely on your machine.
- Local-first & private — runs on your machine; local AI via Ollama, no account required.
- Jupyter-compatible — native
.ipynbformat. - Batteries included — kernel, SQL, charts, AI, jobs, git, deploy, search, terminal.
Features
Notebook & execution
- Persistent shared kernel — variables, imports, and functions defined in one cell are available in every later cell (true notebook semantics).
- Per-cell interpreters (magics):
%python(default) — runs in the shared kernel.%sql— in-process DuckDB; can query pandas DataFrames defined in other cells.%sh/%bash/!cmd— shell commands.%md/%markdown— rendered markdown.
- Rich output — text, HTML, matplotlib figures (
image/png), and pandas DataFrames. - Chart switcher — view any DataFrame as a Table, Bar, or Line chart.
- Live streamed output over WebSocket while a cell runs.
- Interrupt a running cell (Stop) and restart the kernel from the toolbar/menu.
- Dynamic input widgets —
prism.input / slider / select / checkboxrender controls that re-run the cell when changed (Databricksdbutils.widgets-style). - Pretty-printing enabled by default via
rich.
AI assistance
Works with local models via Ollama (free, private, offline) or Claude / OpenAI.
- ⌘K in-cell edit — describe a change, review a diff, accept or reject.
- Fix with AI — one click on an errored cell.
- Explain — a teaching-oriented explanation with a contextual tip.
- Inline autocomplete — ghost-text completions when Ollama is connected.
- Teacher persona — any model explains the "why" and suggests tips/tricks.
- Agent panel — Plan/Act assistant that can propose and apply cell edits.
Errors that help
- Natural-language explanations for common Python errors (NameError, KeyError, ModuleNotFoundError, TypeError, ZeroDivisionError, SyntaxError, …).
- In-editor markers highlighting the offending line and column.
- Collapsible full traceback when you want the details.
Workflow: Jobs, Airflow, Git, Deploy
- Jobs — save a whole notebook and run it as a unit, manual / interval / daily, with status and run history (Airflow-style).
- Airflow — a stable
run-by-nametrigger plus a generated, ready-to-use DAG. - Source control —
init,clone,commit,push,pull,statusfrom the UI. - Cloud deploy — generated
Dockerfile,docker-compose.yml,k8s.yaml, andfly.toml, each with its one-line deploy command.
Workspace & UX
- VS Code-style layout: activity rail, collapsible panels, status bar.
- All panels collapsible, each with independent font +/- controls.
- Responsive — side panels auto-collapse on narrow windows.
- Global search (⌘K), command palette (⇧⌘P), working top menus.
- Integrated Terminal, a Python Console (shares the kernel), and a file browser (works in any browser via a server-side browser).
- Dark/light themes;
.ipynbimport/export.
Data connectivity
- DuckDB in-process SQL engine.
- Connection scaffolding for 8 cloud warehouses (Snowflake, BigQuery, Redshift, Azure Synapse, Databricks, Athena, Presto, Trino) — see CLOUD_WAREHOUSES.md.
Architecture
┌──────────────────────────────┐ ┌─────────────────────────────┐
│ React + TypeScript (Vite) │ HTTP │ Rust backend (Axum) │
│ Monaco · Tailwind · zustand │ ─────▶ │ REST API + WebSocket │
│ cells · panels · AI · jobs │ ◀───── │ routing, jobs, git, deploy │
└──────────────────────────────┘ WS └──────────────┬──────────────┘
│ stdin/stdout (JSON)
┌───────▼────────┐
│ Persistent │
│ Python kernel │
│ (shared globals)│
└─────────────────┘
- Backend: Rust (Axum + Tokio). Spawns one long-lived Python process and talks to it over a line-framed JSON protocol; outputs are Jupyter-style MIME bundles.
- Frontend: React 18 + TypeScript + Vite, Monaco editor, Tailwind CSS.
- Kernel: a single
pythonprocess with a shared namespace; SIGINT-interruptible, restartable, with matplotlib (Agg) and rich preloaded.
Getting started
Prerequisites
- Rust (stable) and Node.js 18+
- Python 3.8+ on your
PATHwithipykernel:pip install ipykernel pandas matplotlib rich duckdb
- (optional) Ollama for local AI: https://ollama.com — then
ollama pull qwen2.5-coder
Run in development
# 1) backend (port 8000)
cargo run
# 2) frontend (port 5173, proxies /api and /ws to the backend)
cd frontend && npm install && npm run dev
Open http://localhost:5173.
Configure AI (optional)
- Local (Ollama): start Ollama and pick a model in the AI panel.
- Claude/OpenAI: set in the AI settings, or via env:
export PRISMNOTE_AI_PROVIDER=claude # or openai / ollama export ANTHROPIC_API_KEY=... # or OPENAI_API_KEY
Settings saved in the UI persist to~/.prismnote/ai_config.json.
Deploy
Open Deploy to Cloud (rocket icon) to copy/download ready-to-use artifacts:
docker compose up -d # Docker
kubectl apply -f k8s.yaml # Kubernetes
fly launch --copy-config --now# Fly.io
Keyboard shortcuts
| Shortcut | Action |
|---|---|
⌘N / ⌘O / ⌘S |
New / Open / Save notebook |
⌘K |
Global search |
⇧⌘P |
Command palette |
⌘K (in a cell) |
AI edit |
⌘⇧⏎ |
Run all cells |
⇧⏎ |
Run cell |
Repository layout
crates/server/ Rust backend (api, kernel, jobs, db, ws, …)
frontend/ React app (components, hooks, api clients)
*.md Architecture & comparison docs
Comparisons: ZEPPELIN_COMPARISON.md · DATABRICKS_COMPARISON.md · NOTEBOOK_COMPARISON_MATRIX.md
Roadmap
- Distributed compute (Spark) and a catalog/data browser.
- Real-time collaboration (live cursors/co-editing).
- Notebook parameters and multi-notebook job composition.
License
MIT — see LICENSE.
Project details
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-0.4.0.tar.gz.
File metadata
- Download URL: prismnote-0.4.0.tar.gz
- Upload date:
- Size: 9.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f03bc8161d80e36a6293404848853eba0f782492a7070818c26d26610635dbea
|
|
| MD5 |
98e66cb9b82ee8c858ca238584641dd4
|
|
| BLAKE2b-256 |
a068282cf8ae87325582e3ed086bc829ccce6198dc98f19c8b8498345c39d0f0
|
File details
Details for the file prismnote-0.4.0-py3-none-any.whl.
File metadata
- Download URL: prismnote-0.4.0-py3-none-any.whl
- Upload date:
- Size: 8.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1bad9d18438de4a184f70a805ac146bfc89140f41858cd6a33afebf9c4575e39
|
|
| MD5 |
693a82d9a87034d4d17b9f02c38b45c9
|
|
| BLAKE2b-256 |
61ac712d50f07375cea111297f0a03d33d3de205da855326d57437ef31b454a7
|