Loading Python environment…
Initializing Pyodide + NumPy + SymPy
# Basic math
2 + 2
# NumPy
import numpy as np
np.linspace(0, 10, 5)
# Plotly chart (interactive)
x = np.linspace(0, 2*np.pi, 50)
plot(x, np.sin(x))
# Matplotlib (install once, then use)
%pip install matplotlib
import matplotlib.pyplot as plt
plt.plot([1, 4, 2, 3])
plt.title("Matplotlib")
plt.show()
# SymPy (LaTeX rendering)
from sympy import symbols, sqrt, solve
a, b, c, x = symbols('a b c x')
solve(a*x**2 + b*x + c, x)
# Suppress output with ;
big_array = np.arange(1000);
Install pure-Python packages from PyPI with %pip install:
%pip install requests
# Then use it
import requests
r = requests.get('https://api.github.com')
print(r.status_code)
Note: Only pure-Python packages are supported. Packages with C extensions (e.g. psutil) require pre-compiled WASM wheels.
Install R packages with install.packages() or %install:
# Standard R syntax (works out of the box)
install.packages("jsonlite")
library(jsonlite)
# Or use the %install shortcut
%install dplyr
Note: Only R packages compiled to WebAssembly are available. See repo.r-wasm.org for the package list.
Switch to R using the language selector. The webR runtime (~50 MB) downloads on first use and is cached.
# Basic math
mean(c(10, 20, 30))
# Vectors and stats
x <- rnorm(100)
summary(x)
# Static plot (PNG)
plot(1:10, (1:10)^2, main = "Quadratic")
# Interactive Plotly chart
plotly(1:50, sin(1:50 / 5), title = "Sine Wave")
# Multi-trace interactive chart
mplotly(
traces = list(
list(x = 1:10, y = (1:10)^2, name = "x²"),
list(x = 1:10, y = (1:10)^3, name = "x³")
),
title = "Power Functions"
)
# Cross-kernel file sharing
sharedfs_write("/shared/data/from_r.txt", "Hello from R!")
sharedfs_list("/shared/data")
Switch to Prolog using the language selector (Py → PL).
% Assert facts
assert(parent(tom, bob)).
assert(parent(bob, ann)).
% Query
parent(tom, X).
% Rules
assert((grandparent(X,Z) :-
parent(X,Y), parent(Y,Z))).
grandparent(tom, Z).
SciREPL has a SharedVFS (shared virtual filesystem) that lets all kernels read and write to the same files. Files under /shared/ and /tmp/ are accessible from every language.
Directory layout:
/shared/data/ — Datasets (CSV, JSON, etc.)/shared/lib/python/ — Python modules (auto-added to sys.path)/shared/lib/prolog/ — Prolog modules/shared/lib/wasm/ — WebAssembly modules/shared/bin/, /shared/config/ — Utilities and config files/tmp/ — Temporary files (shared, not persisted)Per-kernel behavior:
open() with /shared/ paths. Files are synced to SharedVFS automatically after each cell execution.sharedfs_write() and sharedfs_read() helpers to access shared files./shared/ paths directly.# Python — write a CSV to the shared folder
with open("/shared/data/results.csv", "w") as f:
f.write("x,y\n1,2\n3,4\n")
# R — read it back
sharedfs_read("/shared/data/results.csv")
% Prolog — consult a shared knowledge base
:- consult('/shared/lib/prolog/kb.pl').
Packages & workbooks: When you install a package or workbook from Browse Packages & Workbooks, files with /shared/ destination paths are written to SharedVFS automatically. Package files targeting a specific kernel (e.g., Prolog modules at /user/) go to that kernel's own filesystem.
Browsing files: Open Menu → Files & Storage to browse. Select SharedVFS from the dropdown to see shared files, or select a kernel (Python, Prolog) to see its internal filesystem. Use the Show empty folders checkbox to toggle visibility of empty directories.
Uploading: Use the "Upload File" button at the top of Files & Storage to upload files directly into SharedVFS. Set the destination path (default: /shared/data/) before uploading.
Use Export in the Menu to choose a format and image handling:
.html.zip with an images/ folder. references in a .md.zip..tex file for academic papers. Uses listings, amsmath, booktabs, graphicx. Exports as .tex.zip if images are present.Syntax highlighting: Code cells display with syntax highlighting for Python, JavaScript, R, Bash, and Prolog. Exports (HTML, DOCX) also include highlighted code.
.ipynb import with outputs: When importing a .ipynb file that already contains outputs, they are displayed directly without re-executing the code. This allows fast viewing of notebooks from Jupyter, Colab, or previous SciREPL exports.
Each cell remembers its language. To change a cell's language, click ✎ to edit, then use the language dropdown. Click All→ to apply the language to all code cells in the notebook.
Full documentation: GitHub README
SciREPL Pro v0.9.0
Includes: Multi-language (Python + Prolog), editable cells, markdown cells, session persistence with auto-save and crash recovery, Math Mode palette, .ipynb import/export with output preservation, rich export (HTML, Markdown, PDF, DOCX with native equations, LaTeX) with syntax highlighting, virtual filesystem, search paths, URL file fetching, multi-notebook support, package format (.zip/.tar.gz)
One-click install packages and workbook templates into SciREPL.
Upload any file to the shared filesystem, accessible from all kernels.
Browse persistent storage and kernel-specific filesystems.
Configure file_search_path/2 for module resolution.
| Alias | Directory |
|---|
Download a file from a URL into the virtual filesystem.
% After uploading myfile.pl:
:- consult('/user/myfile.pl').
% After adding search path mylib → /user/mylib:
:- use_module(mylib(module_name)).
% Fetch and load from URL in a cell:
fetch_file('https://example.com/kb.pl', '/user/kb.pl').
:- consult('/user/kb.pl').
% Or use load_url (fetch + consult):
load_url('https://example.com/kb.pl', '/user/kb.pl').
Last updated: February 16, 2026
SciREPL is designed to be a privacy-respecting application. All code execution happens locally on your device. We do not collect, store, or transmit any personal data to our servers.
SciREPL stores the following data locally on your device using localStorage:
This data never leaves your device. You can clear it at any time via Menu > Clear History.
SciREPL bundles most of its rendering libraries (Plotly.js, KaTeX, marked.js) directly in the app to minimize network requests. However, the following resources are loaded from third-party CDNs:
cdn.jsdelivr.net. Loaded on first launch and cached locally for subsequent use.SWI-Prolog.github.io. Loaded only when Prolog is first used, and cached locally.storage.ko-fi.comWhen these resources are fetched, the CDN providers may receive:
Caching is used to minimize connections to CDN networks — after the initial download, Pyodide and its packages are served from the local cache.
jsDelivr's privacy policy: jsdelivr.com/terms/privacy-policy-jsdelivr-net
Your Python code, session data, and exported files are never transmitted to any server.
SciREPL provides a file-fetching feature that allows notebook code to download files from URLs you specify. When you use this feature (e.g., fetch_file in Prolog, or via the Prolog Settings panel), the request is made directly from your device to the specified URL. The remote server will receive your IP address and standard HTTP headers. SciREPL does not proxy, log, or monitor these requests.
All Python code you enter is executed locally on your device using Pyodide (Python compiled to WebAssembly). No code is sent to any remote server for execution.
When you export a notebook (.ipynb), the file is created locally on your device. If you choose to share it (via the system share sheet), the destination is determined by your choice. SciREPL does not control or monitor where you share exported files.
SciREPL does not include any analytics, crash reporting, advertising SDKs, or tracking mechanisms.
SciREPL does not knowingly collect any information from children. The app does not require account creation or collect personal information of any kind.
If additional language runtimes are added (e.g. Prolog, R), they may also be loaded from CDNs and cached locally, subject to the same metadata exposure described above. This policy will be updated to reflect any changes.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR PERFORMANCE THEREOF.
You use SciREPL entirely at your own risk. Code execution occurs locally on your device and the developers are not responsible for any consequences of code you choose to run.
This runtime requires a download. It will be cached by the browser for future use.
Downloading...