Version: 1.0.0 Last Updated: October 2025
This guide helps existing Open Notebook users migrate from the legacy Streamlit frontend to the new React/Next.js frontend.
Open Notebook v1.0 introduces breaking changes that require manual migration. Please read this section carefully before upgrading.
The "latest" tag is now frozen at the last Streamlit version. Starting with v1.0, we use versioned tags to prevent unexpected breaking changes:
latestandlatest-single→ FROZEN at Streamlit version (will not update)v1-latestandv1-latest-single→ NEW tags for v1.x releases (recommended)X.Y.ZandX.Y.Z-single→ Specific version tags (unchanged)
Why this change? The v1.0 release brings significant architectural changes (Streamlit → React/Next.js frontend). Freezing the "latest" tag prevents existing deployments from breaking unexpectedly, while the new "v1-latest" tag allows users to explicitly opt into the v1 architecture.
If you're currently using latest or latest-single, you need to:
-
Update your docker-compose.yml or docker run command:
# Before: image: lfnovo/open_notebook:latest-single # After (recommended): image: lfnovo/open_notebook:v1-latest-single
-
Expose port 5055 for the API (required in v1):
ports: - "8502:8502" # Frontend - "5055:5055" # API (NEW - required)
-
Verify API connectivity after upgrade:
curl http://localhost:5055/api/config
Important: v1.0 requires port 5055 to be exposed to your host machine so the frontend can communicate with the API.
Auto-Detection: The Next.js frontend automatically detects the API URL:
- If you access the frontend at
http://localhost:8502, it useshttp://localhost:5055 - If you access the frontend at
http://192.168.1.100:8502, it useshttp://192.168.1.100:5055 - If you access the frontend at
http://my-server:8502, it useshttp://my-server:5055
Manual Override: If auto-detection doesn't work (e.g., reverse proxy, complex networking), set the API_URL environment variable:
# Docker run example
docker run -d \
--name open-notebook \
-p 8502:8502 -p 5055:5055 \
-e API_URL=http://my-custom-api:5055 \
-v ./notebook_data:/app/data \
-v ./surreal_data:/mydata \
lfnovo/open_notebook:v1-latest-single# docker-compose.yml example
services:
open_notebook:
image: lfnovo/open_notebook:v1-latest-single
ports:
- "8502:8502"
- "5055:5055"
environment:
- API_URL=http://my-custom-api:5055
volumes:
- ./notebook_data:/app/data
- ./surreal_data:/mydataVerify your API is accessible with:
# Local deployment
curl http://localhost:5055/api/config
# Remote deployment
curl http://your-server-ip:5055/api/configExpected response:
{
"version": "1.0.0",
"latestVersion": "1.0.0",
"hasUpdate": false,
"dbStatus": "online"
}Note: The API URL is now auto-detected by the frontend from the hostname you're accessing, so /api/config no longer returns apiUrl.
Problem: Frontend shows "Cannot connect to API" error
- Check: Is port 5055 exposed? Run
docker psand verify port mapping - Check: Can you reach the API? Run
curl http://localhost:5055/api/config - Solution: If using custom networking, set
API_URLenvironment variable
Problem: Auto-detection uses wrong hostname
- Example: Frontend at
http://internal-hostname:8502but API should usehttp://public-hostname:5055 - Solution: Set
API_URL=http://public-hostname:5055environment variable
Problem: Still running the old Streamlit version after docker pull
- Check: Are you using the "latest" tag? It's frozen at Streamlit version
- Solution: Update to
v1-latestorv1-latest-singletag
Open Notebook has migrated from a Streamlit-based frontend to a modern React/Next.js application. This brings significant improvements in performance, user experience, and maintainability.
| Aspect | Before (Streamlit) | After (React/Next.js) |
|---|---|---|
| Frontend Framework | Streamlit | Next.js 15 + React 18 |
| UI Components | Streamlit widgets | shadcn/ui + Radix UI |
| Frontend Port | 8502 | 8502 (unchanged) |
| API Port | 5055 | 5055 (unchanged) |
| Navigation | Sidebar with emoji icons | Clean sidebar navigation |
| Performance | Server-side rendering | Client-side React with API calls |
| Customization | Limited | Highly customizable |
- Core functionality: All features remain available
- API backend: FastAPI backend unchanged
- Database: SurrealDB unchanged
- Data format: No data migration needed
- Configuration: Same environment variables
- Docker deployment: Same ports and setup
If you're running Open Notebook via Docker, migration is automatic:
-
Stop the current version:
docker-compose down
-
Update to the latest image:
# Update docker-compose.yml to use v1-latest # Change from: image: lfnovo/open_notebook:latest-single # To: image: lfnovo/open_notebook:v1-latest-single
-
Start the new version:
docker-compose pull docker-compose up -d
-
Access the new frontend:
- Frontend: http://localhost:8502 (new React UI)
- API Docs: http://localhost:5055/docs
Your data is automatically preserved! All notebooks, sources, and notes carry over seamlessly.
If you're running from source code:
-
Pull the latest code:
git pull origin main
-
Install frontend dependencies:
cd frontend npm install cd ..
-
Update Python dependencies:
uv sync
-
Start services (3 terminals):
# Terminal 1: Database make database # Terminal 2: API uv run python api/main.py # Terminal 3: Frontend (NEW) cd frontend && npm run dev
-
Access the application:
- Frontend: http://localhost:8502
- API: http://localhost:5055
The following Streamlit-specific features are no longer available:
- Streamlit cache: Replaced with React Query caching
- Streamlit session state: Replaced with React state management
- Direct file access via Streamlit: Use API endpoints instead
Navigation paths have been simplified:
| Old Path | New Path |
|---|---|
| Settings → Models | Models |
| Settings → Advanced | Advanced |
| Other paths | (Same but cleaner navigation) |
No breaking API changes! The REST API remains fully backward compatible.
The React frontend brings several improvements:
- Faster page loads: Client-side rendering with React
- Better caching: React Query for intelligent data caching
- Optimized builds: Next.js automatic code splitting
- Modern UI: Clean, professional interface with shadcn/ui
- Responsive design: Better mobile and tablet support
- Keyboard shortcuts: Improved keyboard navigation
- Real-time updates: Better WebSocket support
- TypeScript: Full type safety
- Component library: Reusable UI components
- Hot reload: Instant updates during development
- Testing: Better test infrastructure
Solution:
# Check if services are running
docker-compose ps
# Check logs
docker-compose logs open_notebook
# Restart services
docker-compose restartSolution: The new frontend requires the API to be running. Ensure:
# API should be accessible at
curl http://localhost:5055/health
# If not, check API logs
docker-compose logs open_notebook | grep apiSolution: Data is preserved automatically. If you don't see your data:
-
Check database volume is mounted correctly:
docker-compose down # Verify volumes in docker-compose.yml: # - ./surreal_data:/mydata (for multi-container) # - ./surreal_single_data:/mydata (for single-container) docker-compose up -d
-
Check SurrealDB is running:
docker-compose logs surrealdb
Solution: If ports 8502 or 5055 are already in use:
# Find what's using the port
lsof -i :8502
lsof -i :5055
# Stop conflicting service or change Open Notebook ports
# Edit docker-compose.yml:
ports:
- "8503:8502" # Change external port
- "5056:5055" # Change external portIf you need to roll back to the Streamlit version:
# Stop current version
docker-compose down
# Edit docker-compose.yml to use old image
# Change to: lfnovo/open_notebook:streamlit-latest
# Start old version
docker-compose up -d# Checkout the last Streamlit version tag
git checkout tags/streamlit-final
# Install dependencies
uv sync
# Start Streamlit
uv run streamlit run app_home.pyIf you encounter issues during migration:
- Discord: Join our Discord community for real-time help
- GitHub Issues: Report bugs at github.com/lfnovo/open-notebook/issues
- Documentation: Check full documentation
No! All data is preserved. The database and API backend are unchanged.
No! The REST API remains fully backward compatible.
Technically yes, but not recommended. Choose one for consistency.
Custom Streamlit pages won't work with the React frontend. Consider:
- Using the REST API to build custom integrations
- Contributing React components to the project
- Requesting features in GitHub issues
The Streamlit version is no longer actively developed. We recommend migrating to the React version for the best experience and latest features.
- Legacy (Pre-v1.0): Streamlit frontend
- Current (v1.0+): React/Next.js frontend
- Future: Continued React development with new features
Ready to migrate? Follow the migration path for your deployment method above. The process is straightforward and your data is safe!