Skip to content

msun170/saturnlab

Repository files navigation

Saturn

A Jupyter notebook frontend with built-in memory visibility.

Saturn is a lightweight desktop notebook application designed for standard .ipynb files and existing Jupyter kernels. It makes memory usage visible at the cell, variable, and output level while maintaining the notebook workflow users already know. The full application occupies roughly 17 MB on disk rather than hundreds of megabytes.

Saturn is designed for standard .ipynb workflows, but adds memory visibility that traditional notebook interfaces do not provide.

180 MB idle | ~4s startup | 5 MB installer | 17 MB on disk


Saturn memory visibility


Why Saturn exists

Notebook workflows make it easy to execute code without understanding its resource cost. When a kernel becomes unstable or crashes, it is often difficult to determine which cell caused the spike, which variables are retaining memory, or whether notebook outputs have become unnecessarily large.

Saturn addresses this directly. Each cell displays its memory delta after execution. The variable inspector reports object sizes with deep sizing for DataFrames, arrays, and tensors. Output accounting shows which cells are responsible for notebook bloat before the file is saved.

Beyond memory visibility, Saturn is architecturally lighter than Electron-based alternatives. It uses the operating system's native WebView rather than bundling its own copy of Chromium, which is why the application is 17 MB on disk instead of 694 MB, and why it uses roughly half the RAM of JupyterLab Desktop with the same notebook open.


Memory tracking

Per-cell memory tracking

After each cell runs, Saturn displays the corresponding memory delta immediately. Small operations remain clearly distinguishable from large allocations, making it possible to identify the precise steps responsible for increased memory usage.

The variable inspector sorts objects by size and supports deep introspection for pandas, NumPy, and PyTorch objects. Large allocations can be identified quickly, inspected directly, and cleared when no longer needed.


Feature tour

Feature tour

Saturn includes the core workflow expected from a notebook environment: multi-tab notebooks, dark mode, an integrated terminal, a command palette, drag-and-drop cell reordering, collapsible headings, and kernel-powered autocomplete. The goal is to preserve the notebook experience while reducing unnecessary overhead and exposing information that standard notebook interfaces do not surface.


Comparison

Size

Saturn JupyterLab Desktop
Installer 5 MB 500 MB
On disk 17 MB 694 MB
Saturn: 16.8 MB JupyterLab: 694 MB

Startup

Saturn JupyterLab Desktop
Cold start ~4 seconds ~14 seconds
Saturn
Saturn startup
JupyterLab Desktop
JupyterLab startup

Memory

Both apps were tested on Windows x64 with 16 GB RAM, using the same notebook. The Python kernel process is excluded from both measurements since it is identical regardless of frontend. Only application processes are counted.

Step Saturn JupyterLab Desktop
Idle (no notebook) 180 MB 234 MB
Notebook open + kernel started 226 MB 433 MB
After running all cells 238 MB 443 MB

The kernel process used ~166 MB in Saturn and ~169 MB in JupyterLab Desktop, confirming equivalent kernel overhead.

Measurement details

Memory was read from Windows Task Manager's Details tab. For Saturn, the total includes saturn.exe and all associated msedgewebview2.exe processes. For JupyterLab Desktop, the total includes jlab.exe and its sub-processes. The Python kernel (python.exe) is excluded from both since it runs the same ipykernel regardless of which frontend is connected.

The browser-based version of JupyterLab (jupyter lab opened in Chrome or Firefox) has a different cost profile: a Python server process (~117 MB) plus a browser tab (200-400 MB depending on the browser and notebook content). The total is comparable to JupyterLab Desktop but distributed across separate processes.

Features

Saturn Jupyter
Per-cell RAM tracking Yes No
Variable memory inspector Built-in, deep sizing Basic, no sizes
Output size tracking Yes No
Save without outputs One click Manual
Stale cell indicators Yes No
Execution order warnings Yes No
Interactive widgets Yes (anywidget) Yes
AI code assistance Built-in Extension

Saturn reads and writes standard .ipynb files and uses standard Jupyter kernels. It is not intended to replace the broader Jupyter ecosystem. Instead, it provides an alternative frontend for users who want better visibility into notebook behavior and lower local overhead.


Screenshots

Light mode Dark mode
Variable inspector Stale cell indicators
Terminal AI explain

Included functionality

Memory tools -- per-cell RAM deltas, variable inspector with deep sizing for pandas/NumPy/PyTorch, duplicate object detection, output size accounting, save-without-outputs workflow, memory snapshots and diffs.

Notebook features -- multi-tab notebooks, dark mode, integrated terminal, anywidget support, stale cell indicators, execution order warnings, drag-and-drop cell reordering, collapsible headings, search and replace, kernel-powered autocomplete and tooltips.

AI assistance -- explain cell, fix error, with support for OpenAI, Anthropic, and local Ollama models.


Installation

Download the latest installer from Releases:

  • Windows: Saturn_0.1.0_x64-setup.exe or .msi
  • macOS: .dmg (Apple Silicon and Intel)
  • Linux: .AppImage or .deb

A Jupyter kernel must already be installed. For Python environments:

pip install ipykernel

Build from source

git clone https://github.com/YOUR_USERNAME/saturn.git
cd saturn
npm install
npm run tauri dev      # development
npm run tauri build    # production

Requires Node.js 18+, Rust 1.70+, and Tauri v2 prerequisites.


Architecture

Saturn is built on Tauri v2, which provides a Rust backend with the OS-native WebView rather than bundling Chromium as Electron does. This is a major reason the application remains small on disk relative to Electron-based notebook frontends.


Contributing

Issues and pull requests are welcome. For larger changes, please open an issue first to discuss the approach.

npm run tauri dev                              # dev server
npx tsc --noEmit                               # type check
npx vitest run                                 # frontend tests
cargo test --manifest-path src-tauri/Cargo.toml # rust tests

Roadmap

  • Plugin / extension API
  • Real-time collaboration

License

Apache 2.0

About

A Jupyter notebook frontend with built-in memory visibility

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors