Notebook de Java 100% client-side que corre en el navegador. Java 17 completo corre en WebAssembly via CheerpJ + JShell — no necesita servidor, backend, ni instalación. Permite escribir y ejecutar código Java directamente en el navegador, con celdas de código y markdown al estilo Jupyter.
Probalo online: https://federico-g.github.io/java-notebook/
- Escribís código Java en las celdas del notebook
- Al ejecutar una celda, el código se evalúa con JShell (Java 17 REPL)
- CheerpJ corre una JVM completa en WebAssembly dentro del navegador
- Cada pestaña tiene su propia sesión JShell — variables, clases y métodos persisten entre celdas
- La salida (stdout/stderr) se captura y muestra debajo de la celda
Desde el ícono de engranaje en la barra superior:
- Tema: Auto (sigue al sistema), Claro, u Oscuro
- Identación: 2 o 4 espacios
- Modo: Edición (todos los controles visibles) o Lectura (oculta controles de edición)
- Atajos generales: On/Off (default Off) — habilita Ctrl+X/C/V/Z/Delete para cortar, copiar, pegar, deshacer y eliminar celdas cuando el foco está fuera del editor
La configuración se guarda en localStorage. Presionar ? para ver los atajos de teclado disponibles.
Al correr en el navegador, hay algunas diferencias con un JDK de escritorio:
Scanner/System.in— no hay stdin en el browserjava.io.File— no hay filesystem- Algunas excepciones de CheerpJ se comportan distinto (ej:
1/0puede no lanzarArithmeticException) - La primera ejecución es lenta (~5-10s) mientras CheerpJ inicializa la JVM
Los notebooks de ejemplo están en public/examples/. Para agregar o modificar un ejemplo:
- Crear o editar el archivo
.ipynbenpublic/examples/- Se puede exportar un notebook desde la app con el botón Exportar
- Agregar la entrada en
public/examples/index.json:{ "name": "Nombre visible en el menú", "filename": "mi-ejemplo.ipynb" }
Para eliminar un ejemplo, borrar el .ipynb y su entrada en index.json. No requiere ninguna herramienta — son archivos estáticos.
- Node.js 24 o superior (viene con npm incluido)
Se recomienda instalar Node.js a través de nvm (Node Version Manager), que permite manejar múltiples versiones fácilmente:
| Plataforma | nvm | Instalación |
|---|---|---|
| Linux / macOS | nvm-sh/nvm | curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.3/install.sh | bash |
| Windows | nvm-windows | Descargar el instalador desde Releases |
Después de instalar nvm:
nvm install 24
nvm use 24git clone git@github.com:Federico-G/java-notebook.git
cd java-notebookLinux / macOS:
bash start.shWindows:
start.bat
Los scripts verifican que Node.js esté instalado, instalan dependencias automáticamente si hace falta, e inician el servidor de desarrollo.
Equivalente manual:
npm install
npm run devEl servidor de desarrollo corre en http://localhost:5173/ con hot reload — los cambios en código se reflejan automáticamente en el navegador.
npm run buildGenera la carpeta dist/ con todos los archivos listos para servir como sitio estático.
Para previsualizar el build localmente:
npm run preview# Ver qué dependencias tienen versiones nuevas
npm outdated
# Actualizar dentro de los rangos de package.json
npm update
# Reconstruir después de actualizar
npm run buildPara actualizar una dependencia a una versión major nueva (por ejemplo, marked de 15.x a 16.x):
npm install marked@latest
npm run buildLos artefactos de JShell están en public/jshell/. Para reconstruirlos desde cero (descarga Temurin JDK 17, extrae módulos, aplica parches para CheerpJ, y compila JShellBridge):
npm run update-jshellRequiere Java 17+ instalado (para jmod, jar, javac).
El deploy a GitHub Pages es automático. Cada push a main dispara un GitHub Action que:
- Instala dependencias (
npm ci) - Genera el build (
npm run build) - Despliega
dist/a GitHub Pages
Para que funcione, en el repo de GitHub ir a Settings > Pages y en Source seleccionar GitHub Actions.
index.html Punto de entrada (Vite entry point)
css/notebook.css Estilos responsive mobile-first con dark/light mode
js/ Lógica de la aplicación (ES modules)
app.js Navbar, settings, shortcuts, read mode, autosave, ejemplos
tab-manager.js Múltiples notebooks en pestañas, barra tabs + menú acciones
cell-manager.js Ciclo de vida de celdas, selección, ejecución, mutaciones DOM
cell-renderer.js Creación del DOM para celdas code/markdown (Bootstrap cards)
editor-setup.js Factory de CodeMirror 6 (Java + Markdown syntax, keymaps, temas)
notebook-model.js Modelo de datos .ipynb (parse/serialize)
jshell-proxy.js Proxy a CheerpJ + JShellBridge (init, eval, reset, close)
ipynb-io.js Import/export .ipynb, drag-drop, autosave
src/ Código fuente Java
JShellBridge.java Bridge multi-sesion entre JS y JShell (CheerpJ library mode)
build.sh Compila JShellBridge.java y copia .class a public/jshell/
public/ Archivos estáticos (Vite los copia tal cual a dist/)
jshell/ JARs de JShell + clases compiladas (~5.6 MB)
examples/ Notebooks de ejemplo (.ipynb)
package.json Dependencias y scripts npm
vite.config.js Configuración de Vite
update-jshell.mjs Script para reconstruir artefactos JShell desde Temurin JDK 17
start.sh Script de inicio para Linux/macOS
start.bat Script de inicio para Windows
- Vite — build tool + dev server
- Bootstrap 5 — framework CSS + componentes JS (navbar, tabs, cards, modals)
- Bootstrap Icons — íconos consistentes en toda la UI
- CodeMirror 6 — editor de código con syntax highlighting Java y Markdown
- marked — renderizado de markdown
- CheerpJ — JVM completa en WebAssembly (Java 17)
- JShell — REPL de Java 17 para evaluar código interactivamente