How to Build Open-Notebook From Source: A Complete Developer Guide
To build open-notebook from source, clone the repository, install Python dependencies using uv sync and Node dependencies with npm install, configure your .env files, then run make start-all to launch the full stack locally.
Open-notebook is a three-tier application comprising a Next.js frontend, a FastAPI backend, and a SurrealDB graph database. Building from source requires setting up both Python and Node environments, configuring API keys, and using the provided Makefile to orchestrate services. This guide references the actual source files in the lfnovo/open-notebook repository to ensure you follow the exact implementation used by the maintainers.
Prerequisites
Before you begin, ensure you have the following tools installed:
- UV: A fast Python package manager (used in
pyproject.tomlfor dependency resolution) - Node.js: Required for the Next.js frontend (see
frontend/package.jsonfor version requirements) - Docker: Needed to run SurrealDB and for containerized build modes
- Git: To clone the repository
Step-by-Step Build Process
Clone and Configure Environment
First, clone the repository and prepare the configuration files:
git clone https://github.com/lfnovo/open-notebook.git
cd open-notebook
cp .env.example .env
cp .env.example docker.env
The .env file supplies configuration to the API and worker processes, while docker.env is used by Docker Compose services. At minimum, you must configure the SurrealDB connection string and at least one AI provider API key (OpenAI, Anthropic, or Google) as documented in the environment variables section.
Install Dependencies
Open-notebook uses UV for Python dependency management. Run the following command in the repository root:
uv sync
This command reads the pyproject.toml file and installs exact locked versions into a virtual environment. Next, install the frontend dependencies:
cd frontend
npm install
cd ..
The frontend/ directory follows standard Next.js conventions, and npm install will fetch all React components and build tools specified in package.json.
Select Build Mode
The Makefile provides several distinct modes for building and running the application. Choose the mode that matches your use case:
- Local Development (
make start-all): Fastest iteration for daily development - Docker Compose (
make devormake full): Containerized setup for CI or production-like testing - Production Build (
make docker-build-local): Single-platform image for local testing
Build Modes Explained
Local Development Mode (Recommended)
For rapid iteration, use the make start-all command, which starts all services natively except for SurrealDB:
make start-all
This command executes the following sequence from the Makefile (lines 55-73):
docker compose -f docker-compose.dev.yml up -d surrealdb– Starts the SurrealDB graph database in the backgrounduv run run_api.py &– Launches the FastAPI backend on port5055using the Python virtual environmentuv run --env-file .env surreal-commands-worker --import-modules commands &– Starts the asynchronous background worker that processes LangGraph workflowscd frontend && npm run dev– Serves the Next.js frontend athttp://localhost:3000
This mode provides hot-reloading for both the frontend and backend while keeping the database persistent in Docker.
Docker Compose Mode
To verify the containerized setup or test production configurations, use the Docker Compose targets:
make dev # Development compose with volume mounts
make full # Full production-like stack
The make full command executes docker compose -f docker-compose.full.yml up --build, which builds images for all services and starts the complete stack mirroring a production deployment. This mode is ideal for CI pipelines or testing the exact container configuration before release.
Production Image Build
To build a production-ready image for your local platform only:
make docker-build-local
This command builds the image defined in Dockerfile.single (or Dockerfile) and tags it as lfnovo/open_notebook:local. For multi-platform releases (amd64 and arm64) that push to Docker Hub and GitHub Container Registry, maintainers use make docker-release, which handles the complex buildx configuration and tagging scheme.
Verification and Testing
Once the services are running, verify the installation:
- API Health: Visit
http://localhost:5055/healthorhttp://localhost:5055/docsfor the Swagger UI - Frontend: Open
http://localhost:3000to access the React UI - Service Status: Run
make statusto check the health of each containerized service
To run the automated test suite:
uv run pytest tests/
The test suite covers domain models, API endpoints, LangGraph workflows, and embedding functionality. For cleanup when finished:
make stop-all
Summary
- Open-notebook requires three components: a Next.js frontend, FastAPI backend, and SurrealDB database.
- Use
uv syncto install Python dependencies andnpm installin thefrontend/directory for Node packages. - Copy
.env.exampleto.envand configure at least one AI provider key and database credentials. make start-allis the fastest way to begin development, starting all services locally with hot-reloading.make fullprovides a production-like Docker environment for testing containerized deployments.- Key files to reference:
Makefile(orchestration),pyproject.toml(Python dependencies),docker-compose.dev.yml(services), andapi/main.py(FastAPI entry point).
Frequently Asked Questions
What is the fastest way to build open-notebook for local development?
The fastest approach is using make start-all after running uv sync and npm install. This command starts SurrealDB in Docker while running the FastAPI backend, background worker, and Next.js frontend natively on your machine, providing hot-reloading for code changes without rebuilding containers.
Do I need Docker to build open-notebook from source?
You need Docker only for the SurrealDB database and optional containerized builds. The make start-all command uses Docker solely to run SurrealDB, while the Python backend and Node frontend run directly on your host system. However, for a fully containerized build, Docker is required.
Where are the API endpoints defined in the source code?
The FastAPI application is initialized in api/main.py, which registers routers, configures CORS middleware, and sets up exception handlers. The individual API routes are organized in the api/ directory, with the main entry point handling application startup and shutdown events.
Can I build open-notebook without using the Makefile?
Yes, though the Makefile automates the process. You can manually start SurrealDB with docker compose -f docker-compose.dev.yml up surrealdb, then run uv run run_api.py for the backend, uv run surreal-commands-worker for the worker, and npm run dev in the frontend/ directory. The Makefile simply orchestrates these commands in the correct order with proper environment variables.
Have a question about this repo?
These articles cover the highlights, but your codebase questions are specific. Give your agent direct access to the source. Share this with your agent to get started:
curl -s "https://instagit.com/install.md" Maintain an open-source project? Get it listed too →