Pulto
Pulto brings 3D notebook outputs into Apple Vision Pro for teams working with LiDAR, robotics, scanning, simulation, and spatial AI.
01 · Bio
Built by a software engineer with deep technical range
15+ years of software engineering experience, Python open source work, and conference talks at DEF CON, Skytalks, and PyOhio.
Engineering background
Undergraduate degree with schoolwork in quantum computing and knot theory.
Applied math interests
Recreational applied mathematics, including QMCpy and CA.
02 · Why
3D data is trapped in flat notebook workflows
Jupyter is where spatial data work already happens, but review still happens in flat browser tabs, screenshots, or separate viewers. Pulto gives notebook outputs a native spatial workspace on Apple Vision Pro.
Flat review
Browser tabs and laptop screens compress outputs that need depth, scale, and space.
Fragmented tools
Teams jump between notebooks, viewers, exported files, and screenshots.
Spatial data is already there
Point clouds, Gaussian splats, and USDZ assets already appear in notebook workflows. They should be inspectable in 3D.
03 · Spatial Computing
Spatial computing gives digital work room to exist
Instead of keeping every result inside a flat window, spatial computing lets digital objects occupy space with depth, scale, and position. For notebook teams, that means reviewing code, context, and 3D results together.
Flat computing
Work is organized as tabs, panels, screenshots, and files on a single 2D surface.
Spatial computing
Work can be placed around the user, inspected at scale, and understood from multiple viewpoints.
Traditional notebooks
Code, prose, charts, and 3D outputs compete for attention in one scrolling document.
Spatial notebooks
The notebook stays readable while spatial outputs open beside it for native 3D review.
04 · Product
What Pulto does today
Pulto is a native visionOS notebook viewer that connects to Jupyter servers, displays saved notebook content, and renders 3D outputs inline.
Notebook viewer
Read markdown, code cells, saved outputs, and previews in one Vision Pro window.
Jupyter connection
Connect to a server you control over HTTPS or local-network discovery.
Inline outputs
View tables, charts, images, video, and markdown without leaving the notebook.
Spatial outputs
Inspect 3D notebook outputs as native spatial content.
05 · Workflow
From notebook to spatial review
Start with samples or connect your own Jupyter server, then review notebook outputs in a spatial workspace.
Open Pulto
Start with bundled samples or connect your own Jupyter server.
Choose a notebook
Browse notebooks and load the one you want to inspect.
Review saved outputs
Read markdown, tables, charts, images, video, and code output inline.
Inspect 3D results
Open 3D notebook outputs in a spatial workspace.
06 · Roadmap
Run cells, then build live USD scenes
Pulto is adding live cell execution first, then Spatial Notebook USD: linked scene objects that preserve where outputs came from and how they changed.
Live kernels
Planned support for running code cells against a connected Jupyter kernel.
Fresh outputs
Render new tables, charts, markdown, images, and media as they are produced.
USD-backed scenes
Turn executed cell outputs into scene objects with stable paths, exportable as USD or USDZ.
Linked history
Keep cells, outputs, spatial objects, and execution history connected as the scene changes.
07 · Status
Working app and renderer already implemented
Pulto already has a native visionOS viewer, Jupyter connectivity, bundled samples, secure credential storage, and a spatial rendering pipeline.
Working app
Native visionOS notebook viewer with server connectivity and bundled samples.
Spatial renderer
USDZ, point cloud, and Metal-based Gaussian splat rendering are implemented.
Developer tooling
Server extension and Python helpers are planned to make spatial outputs easier to emit from notebook code.
Roadmap underway
Spatial Notebook USD is in development; live linked scene behavior remains planned.
08 · Architecture
A clean path from notebook output to spatial render
Pulto normalizes Jupyter outputs into an app-native content model before rendering, keeping server communication, notebook parsing, UI layout, and 3D rendering separate.
Jupyter boundary
One client handles server communication, credentials, and local-network discovery.
Neutral output model
Notebook outputs become renderable content slots before reaching the UI.
Spatial rendering layer
RealityKit handles USDZ and point clouds; Metal handles Gaussian splats.
09 · Development
Architecture built around a narrow shipping path
The active 1.0 runtime is focused: connect to user-owned Jupyter servers, load saved notebooks, and render outputs through native SwiftUI and RealityKit paths. Release flags keep future systems out of the default user flow.
Active notebook hot path
EntryPoint opens SingleNotebookView; SingleNotebookState coordinates JupyterAPIClient and output conversion.
Native output model
Jupyter MIME bundles become CompositeGridSlot values before reaching SwiftUI, RealityKit, or Metal-backed renderers.
Release-gated roadmap
Execution controls, broad imports, JupyterLab browser, and Spatial Notebook USD remain disabled for 1.0.
Security and regression tests
Tokens use validated transport and Keychain storage; focused tests cover MIME conversion, Jupyter client behavior, and security boundaries.
Help bring spatial notebooks to Vision Pro
We're looking for early users working with LiDAR, robotics, 3D scanning, simulation, and spatial AI. Try Pulto, share real notebook workflows, or partner with us on Spatial Notebook USD.