Interactive C++ Notebook Platform β Jupyter-level usability for C++ developers, educators, and researchers.
C++ developers lack the interactive development experience that Python enjoys with Jupyter. Cpplify solves this with:
- π Instant Setup β Single Docker command gets you started
- π Multi-cell C++ β State persists across cells, just like Jupyter notebooks
- π Cloud-backed β Auth via GitHub, notebooks saved to Azure Blob Storage
- β‘ Real-time Execution β Powered by Cling C++ interpreter
- Docker 20.10+ & Docker Compose v2+
- Node.js 18+ (for frontend dev)
# 1. Clone and configure
cp backend/.env.example backend/.env # Fill in Supabase & Azure credentials
cp frontend/.env.example frontend/.env
# 2. Start backend (Docker with hot-reload)
docker compose -f docker-compose.dev.yml up --watch
# 3. Start frontend (separate terminal)
cd frontend && bun install && bun run dev- Backend: http://localhost:8080/health
- Frontend: http://localhost:5173
docker compose -f docker-compose.yml up --build| Feature | Status |
|---|---|
| Code cells with C++ execution | β Complete |
| Markdown/text cells | β Complete |
| GitHub OAuth (Supabase) | β Complete |
| Cloud notebook storage (Azure Blob) | β Complete |
| Auto-save notebooks | β Complete |
| Kernel state persistence across cells | β Complete |
Library magic commands (%use boost) |
π Planned |
| CUDA cell support | π Planned |
| Real-time collaboration | π Planned |
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β React Frontend (Vite + TypeScript) β
β Monaco Editor β’ Supabase Auth β’ Auto-save β
βββββββββββββββββββββββ¬βββββββββββββββββββββββββββββββββββββ
β REST API + Bearer JWT (ES256)
βββββββββββββββββββββββ΄βββββββββββββββββββββββββββββββββββββ
β Go Backend (chi router + IoC) β
β Auth Middleware β’ Kernel Manager β’ Notebook CRUD β
βββββββββββ¬ββββββββββββ¬βββββββββββββββ¬ββββββββββββββββββββββ€
β Kernel β Supabase β Supabase β Azure Blob β
β (Cling) β Auth/JWKS β PostgreSQL β Storage β
βββββββββββ΄ββββββββββββ΄βββββββββββββββ΄ββββββββββββββββββββββ
β
βββββββββββββββββββββββ΄βββββββββββββββββββββββββββββββββββββ
β Docker Container (Miniconda + Cling) β
β Go + Air (hot-reload) β’ Python 3 β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
cpplify/
βββ backend/ # Go backend server
β βββ cmd/server/main.go # Composition root (IoC wiring)
β βββ internal/
β β βββ api/ # Handlers, router, auth middleware
β β βββ auth/ # Supabase JWKS JWT validation
β β βββ config/ # Environment variable loading
β β βββ domain/ # Interfaces & models
β β βββ kernel/ # Cling process lifecycle manager
β β βββ storage/ # Supabase metadata + Azure Blob
β βββ .env # Backend configuration
β βββ supabase_schema.sql # Database schema
βββ frontend/ # React notebook UI
β βββ src/
β β βββ api/kernelApi.ts # API client with JWT injection
β β βββ contexts/ # Auth context (Supabase)
β β βββ pages/ # Dashboard, Notebook, Auth
β β βββ components/notebook/ # Cell components
β βββ .env # Frontend configuration
βββ kernel/
β βββ kernel_wrapper.py # Python bridge: Go β Cling REPL
βββ docs/ # Documentation
βββ Dockerfile.dev # Development container
βββ docker-compose.dev.yml # Dev compose (hot-reload + watch)
βββ docker-compose.yml # Production compose
All /api routes require Authorization: Bearer <supabase-jwt>.
| Endpoint | Method | Description |
|---|---|---|
/health |
GET | Health check |
/api/session |
POST | Create kernel session |
/api/session/{id} |
DELETE | Terminate session |
/api/session/{id}/reset |
POST | Reset kernel state |
/api/execute |
POST | Execute C++ code |
/api/notebooks |
GET | List user notebooks |
/api/notebooks |
POST | Create notebook |
/api/notebooks/{id} |
GET | Get notebook content |
/api/notebooks/{id} |
PUT | Update (auto-save) |
/api/notebooks/{id} |
DELETE | Delete notebook |
| Service | Purpose |
|---|---|
| Supabase | GitHub OAuth + metadata storage (PostgreSQL) |
| Azure Blob | Notebook file storage (.cly JSON format) |
| Azure Container Instances | Backend deployment (planned) |
# Start with hot-reload
docker compose -f docker-compose.dev.yml up --watch
# View logs
docker compose -f docker-compose.dev.yml logs -f
# Enter container shell
docker exec -it cpplify-dev bash
# Restart after config changes
docker compose -f docker-compose.dev.yml restart- Run
docker compose -f docker-compose.dev.yml up --watch - Edit Go code locally β
airauto-rebuilds inside the container - Edit frontend locally β Vite HMR applies changes instantly
- Access frontend at http://localhost:5173, backend at http://localhost:8080
Backend (backend/.env):
PORT=8080
SUPABASE_URL=https://<project>.supabase.co
SUPABASE_ANON_KEY=<anon-key>
SUPABASE_SERVICE_KEY=<service-role-key>
AZURE_STORAGE_CONNECTION_STRING=<connection-string>
AZURE_STORAGE_CONTAINER=cpplify-notebooksFrontend (frontend/.env):
VITE_SUPABASE_URL=https://<project>.supabase.co
VITE_SUPABASE_ANON_KEY=<anon-key>
VITE_API_URL=http://localhost:8080Only use this if you need IDE debugging for the Go backend and have Cling installed locally.
cd backend
KERNEL_PATH="cling" go run cmd/server/main.go| Phase | Scope | Status |
|---|---|---|
| Phase 1 | Frontend + Backend + Kernel + Auth + Storage | β Complete |
| Phase 2 | Library integration, export, polish | π§ Next |
| Phase 3 | CUDA/GPU support, profiling | π Planned |
| Phase 4 | Multi-user, real-time collaboration | π Planned |
We welcome contributions! Please see docs/CONTRIBUTING.md.
MIT License β see docs/LICENSE for details.
Cpplify β Interactive C++ for everyone π