lfnovo/open-notebookPublic

An Open Source implementation of Notebook LM with more flexibility and features

AI summary: Privacy-focused, open-source alternative to Google's Notebook LM.

Stars
36.4K
+64 today
Forks
4.2K
Watchers
180
Open issues
99
Open PRs
23
Contributors
~72
Commits
929
Branches
68

TypeScriptMITCreated Oct 21, 2024Last push todayLatest release v1.14.0+253 stars this week+298 this month

Star history

since Oct 27, 2024
010K20K30KOct 2024May 2025Dec 2025Aug 2026
36.4K stars as of Aug 7, 2026, tracked back to Oct 27, 2024. Historical curve reconstructed from public GitHub event archives, calibrated to the current total.

Contribution activity

commits per day, last 52 weeks
AugSepOctNovDecJanFebMarAprMayJunJulAugMonWedFri2025-08-10: 0 commits2025-08-11: 0 commits2025-08-12: 0 commits2025-08-13: 0 commits2025-08-14: 0 commits2025-08-15: 0 commits2025-08-16: 0 commits2025-08-17: 0 commits2025-08-18: 0 commits2025-08-19: 0 commits2025-08-20: 0 commits2025-08-21: 0 commits2025-08-22: 0 commits2025-08-23: 0 commits2025-08-24: 0 commits2025-08-25: 0 commits2025-08-26: 0 commits2025-08-27: 0 commits2025-08-28: 0 commits2025-08-29: 0 commits2025-08-30: 0 commits2025-08-31: 0 commits2025-09-01: 0 commits2025-09-02: 0 commits2025-09-03: 0 commits2025-09-04: 0 commits2025-09-05: 0 commits2025-09-06: 0 commits2025-09-07: 0 commits2025-09-08: 0 commits2025-09-09: 0 commits2025-09-10: 0 commits2025-09-11: 0 commits2025-09-12: 0 commits2025-09-13: 0 commits2025-09-14: 2 commits2025-09-15: 0 commits2025-09-16: 0 commits2025-09-17: 0 commits2025-09-18: 0 commits2025-09-19: 0 commits2025-09-20: 0 commits2025-09-21: 0 commits2025-09-22: 0 commits2025-09-23: 0 commits2025-09-24: 0 commits2025-09-25: 0 commits2025-09-26: 0 commits2025-09-27: 0 commits2025-09-28: 0 commits2025-09-29: 0 commits2025-09-30: 0 commits2025-10-01: 0 commits2025-10-02: 0 commits2025-10-03: 0 commits2025-10-04: 0 commits2025-10-05: 0 commits2025-10-06: 0 commits2025-10-07: 0 commits2025-10-08: 0 commits2025-10-09: 0 commits2025-10-10: 0 commits2025-10-11: 0 commits2025-10-12: 0 commits2025-10-13: 0 commits2025-10-14: 0 commits2025-10-15: 0 commits2025-10-16: 0 commits2025-10-17: 0 commits2025-10-18: 20 commits2025-10-19: 22 commits2025-10-20: 5 commits2025-10-21: 2 commits2025-10-22: 0 commits2025-10-23: 1 commit2025-10-24: 2 commits2025-10-25: 3 commits2025-10-26: 0 commits2025-10-27: 0 commits2025-10-28: 0 commits2025-10-29: 0 commits2025-10-30: 0 commits2025-10-31: 0 commits2025-11-01: 4 commits2025-11-02: 0 commits2025-11-03: 0 commits2025-11-04: 1 commit2025-11-05: 0 commits2025-11-06: 0 commits2025-11-07: 0 commits2025-11-08: 0 commits2025-11-09: 0 commits2025-11-10: 0 commits2025-11-11: 0 commits2025-11-12: 0 commits2025-11-13: 0 commits2025-11-14: 0 commits2025-11-15: 0 commits2025-11-16: 0 commits2025-11-17: 0 commits2025-11-18: 0 commits2025-11-19: 0 commits2025-11-20: 0 commits2025-11-21: 0 commits2025-11-22: 0 commits2025-11-23: 0 commits2025-11-24: 0 commits2025-11-25: 1 commit2025-11-26: 0 commits2025-11-27: 4 commits2025-11-28: 0 commits2025-11-29: 0 commits2025-11-30: 0 commits2025-12-01: 3 commits2025-12-02: 2 commits2025-12-03: 2 commits2025-12-04: 0 commits2025-12-05: 0 commits2025-12-06: 0 commits2025-12-07: 0 commits2025-12-08: 3 commits2025-12-09: 0 commits2025-12-10: 0 commits2025-12-11: 0 commits2025-12-12: 1 commit2025-12-13: 0 commits2025-12-14: 9 commits2025-12-15: 1 commit2025-12-16: 0 commits2025-12-17: 0 commits2025-12-18: 2 commits2025-12-19: 8 commits2025-12-20: 2 commits2025-12-21: 0 commits2025-12-22: 1 commit2025-12-23: 0 commits2025-12-24: 0 commits2025-12-25: 0 commits2025-12-26: 0 commits2025-12-27: 0 commits2025-12-28: 0 commits2025-12-29: 0 commits2025-12-30: 0 commits2025-12-31: 0 commits2026-01-01: 0 commits2026-01-02: 0 commits2026-01-03: 3 commits2026-01-04: 4 commits2026-01-05: 3 commits2026-01-06: 2 commits2026-01-07: 0 commits2026-01-08: 2 commits2026-01-09: 9 commits2026-01-10: 1 commit2026-01-11: 0 commits2026-01-12: 0 commits2026-01-13: 8 commits2026-01-14: 9 commits2026-01-15: 5 commits2026-01-16: 2 commits2026-01-17: 0 commits2026-01-18: 2 commits2026-01-19: 1 commit2026-01-20: 0 commits2026-01-21: 2 commits2026-01-22: 1 commit2026-01-23: 1 commit2026-01-24: 2 commits2026-01-25: 3 commits2026-01-26: 1 commit2026-01-27: 0 commits2026-01-28: 0 commits2026-01-29: 6 commits2026-01-30: 2 commits2026-01-31: 5 commits2026-02-01: 2 commits2026-02-02: 2 commits2026-02-03: 0 commits2026-02-04: 0 commits2026-02-05: 0 commits2026-02-06: 2 commits2026-02-07: 0 commits2026-02-08: 2 commits2026-02-09: 0 commits2026-02-10: 6 commits2026-02-11: 0 commits2026-02-12: 1 commit2026-02-13: 0 commits2026-02-14: 9 commits2026-02-15: 1 commit2026-02-16: 10 commits2026-02-17: 2 commits2026-02-18: 4 commits2026-02-19: 0 commits2026-02-20: 0 commits2026-02-21: 2 commits2026-02-22: 0 commits2026-02-23: 0 commits2026-02-24: 1 commit2026-02-25: 2 commits2026-02-26: 0 commits2026-02-27: 1 commit2026-02-28: 0 commits2026-03-01: 0 commits2026-03-02: 1 commit2026-03-03: 1 commit2026-03-04: 0 commits2026-03-05: 0 commits2026-03-06: 0 commits2026-03-07: 0 commits2026-03-08: 0 commits2026-03-09: 0 commits2026-03-10: 9 commits2026-03-11: 7 commits2026-03-12: 0 commits2026-03-13: 0 commits2026-03-14: 1 commit2026-03-15: 0 commits2026-03-16: 0 commits2026-03-17: 1 commit2026-03-18: 0 commits2026-03-19: 0 commits2026-03-20: 0 commits2026-03-21: 1 commit2026-03-22: 0 commits2026-03-23: 0 commits2026-03-24: 0 commits2026-03-25: 0 commits2026-03-26: 2 commits2026-03-27: 0 commits2026-03-28: 1 commit2026-03-29: 1 commit2026-03-30: 1 commit2026-03-31: 1 commit2026-04-01: 1 commit2026-04-02: 0 commits2026-04-03: 0 commits2026-04-04: 0 commits2026-04-05: 0 commits2026-04-06: 15 commits2026-04-07: 2 commits2026-04-08: 3 commits2026-04-09: 5 commits2026-04-10: 0 commits2026-04-11: 1 commit2026-04-12: 3 commits2026-04-13: 0 commits2026-04-14: 5 commits2026-04-15: 2 commits2026-04-16: 2 commits2026-04-17: 2 commits2026-04-18: 0 commits2026-04-19: 4 commits2026-04-20: 1 commit2026-04-21: 0 commits2026-04-22: 0 commits2026-04-23: 0 commits2026-04-24: 0 commits2026-04-25: 0 commits2026-04-26: 0 commits2026-04-27: 0 commits2026-04-28: 0 commits2026-04-29: 0 commits2026-04-30: 0 commits2026-05-01: 0 commits2026-05-02: 0 commits2026-05-03: 0 commits2026-05-04: 0 commits2026-05-05: 0 commits2026-05-06: 0 commits2026-05-07: 0 commits2026-05-08: 0 commits2026-05-09: 0 commits2026-05-10: 0 commits2026-05-11: 0 commits2026-05-12: 0 commits2026-05-13: 0 commits2026-05-14: 0 commits2026-05-15: 0 commits2026-05-16: 0 commits2026-05-17: 0 commits2026-05-18: 0 commits2026-05-19: 0 commits2026-05-20: 0 commits2026-05-21: 12 commits2026-05-22: 2 commits2026-05-23: 0 commits2026-05-24: 0 commits2026-05-25: 0 commits2026-05-26: 0 commits2026-05-27: 0 commits2026-05-28: 0 commits2026-05-29: 7 commits2026-05-30: 0 commits2026-05-31: 1 commit2026-06-01: 0 commits2026-06-02: 14 commits2026-06-03: 0 commits2026-06-04: 0 commits2026-06-05: 0 commits2026-06-06: 0 commits2026-06-07: 0 commits2026-06-08: 0 commits2026-06-09: 0 commits2026-06-10: 0 commits2026-06-11: 0 commits2026-06-12: 0 commits2026-06-13: 9 commits2026-06-14: 0 commits2026-06-15: 0 commits2026-06-16: 7 commits2026-06-17: 17 commits2026-06-18: 3 commits2026-06-19: 0 commits2026-06-20: 0 commits2026-06-21: 14 commits2026-06-22: 1 commit2026-06-23: 0 commits2026-06-24: 0 commits2026-06-25: 7 commits2026-06-26: 0 commits2026-06-27: 0 commits2026-06-28: 0 commits2026-06-29: 0 commits2026-06-30: 0 commits2026-07-01: 0 commits2026-07-02: 0 commits2026-07-03: 7 commits2026-07-04: 0 commits2026-07-05: 0 commits2026-07-06: 0 commits2026-07-07: 0 commits2026-07-08: 0 commits2026-07-09: 0 commits2026-07-10: 28 commits2026-07-11: 29 commits2026-07-12: 23 commits2026-07-13: 3 commits2026-07-14: 8 commits2026-07-15: 0 commits2026-07-16: 0 commits2026-07-17: 1 commit2026-07-18: 1 commit2026-07-19: 17 commits2026-07-20: 5 commits2026-07-21: 6 commits2026-07-22: 1 commit2026-07-23: 0 commits2026-07-24: 2 commits2026-07-25: 0 commits2026-07-26: 0 commits2026-07-27: 0 commits2026-07-28: 0 commits2026-07-29: 0 commits2026-07-30: 0 commits2026-07-31: 0 commits2026-08-01: 1 commit2026-08-02: 0 commits2026-08-03: 0 commits2026-08-04: 0 commits2026-08-05: 0 commits2026-08-06: 0 commits2026-08-07: 0 commits2026-08-08: 0 commits
521 commits in the last yearLessMore

Signals and awards

derived from tracked data
  • Widely adopted

    36,446 stars

  • Very active

    521 commits in 52 weeks

  • Well documented

    High community health score

  • Permissive license

    MIT

  • Continuous integration

    Automated checks passing

  • Repeat trending

    6 trending appearances

What open-notebook does

Open-Notebook provides a powerful, privacy-first AI notebook experience inspired by Google's Notebook LM, but built entirely on open-source technologies. It allows users to upload documents, interact with them using advanced language models, and generate synthesized insights without relying on proprietary cloud services. The application ensures that user data remains private, offering the flexibility to integrate with various open-source or locally hosted models. It aims to empower individuals and organizations to build secure, intelligent workspaces for managing and analyzing their specific knowledge bases.

This tool is ideal for researchers, students, and professionals handling sensitive information who want the capabilities of Notebook LM without compromising privacy. It is specifically targeted at users who prefer open-source solutions and self-hosted AI models.

  • Privacy-first architecture: Ensures that sensitive documents and queries are processed securely without corporate tracking.
  • Open-source foundation: Built entirely on transparent, community-driven technologies rather than proprietary black boxes.
  • Document interaction: Allows users to upload various file formats and directly query their contents using AI.
  • Flexible model integration: Supports connecting to multiple open-source LLMs or local models for inference.
  • Synthesized insight generation: Automatically compiles summaries, notes, and connections from uploaded source materials.

Where teams use it

Secure enterprise research

Corporate strategy teams analyze sensitive internal documents and financial reports without exposing data to external APIs.

Academic knowledge synthesis

Researchers upload dozens of papers to quickly extract overarching themes and synthesize literature reviews locally.

Personal study assistant

Students upload their course materials to create an intelligent, interactive study guide that runs entirely on their own hardware.

Private legal document analysis

Lawyers query large volumes of case files for specific precedents while maintaining strict client confidentiality.

Getting started: curl -o docker-compose.yml https://raw.githubusercontent.com/lfnovo/open-notebook/main/docker-compose.yml

README

main branch

Forks Stargazers Issues MIT License


Logo

Open Notebook

An open source, privacy-focused alternative to Google's Notebook LM!
Join our Discord server for help, to share workflow ideas, and suggest features!
Checkout our website »
Follow @lfnovo on X for updates

📚 Get Started · 📖 User Guide · ✨ Features · 🚀 Deploy

lfnovo%2Fopen-notebook | Trendshift

A private, multi-model, 100% local, full-featured alternative to Notebook LM

New Notebook

In a world dominated by Artificial Intelligence, having the ability to think 🧠 and acquire new knowledge 💡, is a skill that should not be a privilege for a few, nor restricted to a single provider.

Open Notebook empowers you to:

  • 🔒 Control your data - Keep your research private and secure
  • 🤖 Choose your AI models - Support for 18+ providers including OpenAI, Anthropic, Ollama, LM Studio, and more
  • 📚 Organize multi-modal content - PDFs, videos, audio, web pages, and more
  • 🎙️ Generate professional podcasts - Advanced multi-speaker podcast generation
  • 🔍 Search intelligently - Full-text and vector search across all your content
  • 💬 Chat with context - AI conversations powered by your research
  • 🌐 Multi-language UI - English, Portuguese, Chinese (Simplified & Traditional), Japanese, Russian, and Bengali support

Learn more about our project at https://www.open-notebook.ai


🆚 Open Notebook vs Google Notebook LM

Feature Open Notebook Google Notebook LM Advantage
Privacy & Control Self-hosted, your data Google cloud only Complete data sovereignty
AI Provider Choice 18+ providers (OpenAI, Anthropic, Ollama, LM Studio, etc.) Google models only Flexibility and cost optimization
Podcast Speakers 1-4 speakers with custom profiles 2 speakers only Extreme flexibility
Content Transformations Custom and built-in Limited options Unlimited processing power
API Access Full REST API No API Complete automation
Deployment Docker, cloud, or local Google hosted only Deploy anywhere
Citations Basic references (will improve) Comprehensive with sources Research integrity
Customization Open source, fully customizable Closed system Unlimited extensibility
Cost Pay only for AI usage Free tier + Monthly subscription Transparent and controllable

Why Choose Open Notebook?

  • 🔒 Privacy First: Your sensitive research stays completely private
  • 💰 Cost Control: Choose cheaper AI providers or run locally with Ollama
  • 🎙️ Better Podcasts: Full script control and multi-speaker flexibility vs limited 2-speaker deep-dive format
  • 🔧 Unlimited Customization: Modify, extend, and integrate as needed
  • 🌐 No Vendor Lock-in: Switch providers, deploy anywhere, own your data

Built With

Python Next.js React SurrealDB LangChain

🚀 Quick Start (2 Minutes)

Prerequisites

  • Docker Desktop installed
  • That's it! (API keys configured later in the UI)

Step 1: Get docker-compose.yml

Option A: Download directly

curl -o docker-compose.yml https://raw.githubusercontent.com/lfnovo/open-notebook/main/docker-compose.yml

Option B: Create the file manually Copy this into a new file called docker-compose.yml:

services:
  surrealdb:
    image: surrealdb/surrealdb:v2
    # Credentials default to root:root for a zero-config local setup. Before
    # exposing this instance to a network, set SURREAL_USER / SURREAL_PASSWORD
    # in a .env file (see .env.example) — they are applied here and to the
    # open_notebook service below, so the two always stay in sync.
    # List (exec) form so each interpolated value stays a single argument —
    # a password containing spaces would otherwise be split into several.
    command: ["start", "--log", "info", "--user", "${SURREAL_USER:-root}", "--pass", "${SURREAL_PASSWORD:-root}", "rocksdb:/mydata/mydatabase.db"]
    user: root  # Required for bind mounts on Linux
    ports:
      # Bound to localhost only: the open_notebook service reaches this over
      # the internal compose network regardless, so the host port is purely
      # for local debugging (e.g. Surrealist, `surreal sql`). Exposing this
      # on 0.0.0.0 would let anyone who can reach the host connect with the
      # default root:root credentials.
      - "127.0.0.1:8000:8000"
    volumes:
      - ./surreal_data:/mydata
    environment:
      - SURREAL_EXPERIMENTAL_GRAPHQL=true
    restart: always
    pull_policy: always

  open_notebook:
    image: lfnovo/open_notebook:v1-latest
    ports:
      - "8502:8502"  # Web UI
      - "5055:5055"  # REST API
    environment:
      # REQUIRED: Change this to your own secret string
      # This encrypts your API keys in the database
      - OPEN_NOTEBOOK_ENCRYPTION_KEY=change-me-to-a-secret-string

      # Database connection. SURREAL_USER / SURREAL_PASSWORD default to root:root
      # for local use; override them in a .env file before exposing the instance
      # (the same values configure the surrealdb service above).
      - SURREAL_URL=ws://surrealdb:8000/rpc
      - SURREAL_USER=${SURREAL_USER:-root}
      - SURREAL_PASSWORD=${SURREAL_PASSWORD:-root}
      - SURREAL_NAMESPACE=open_notebook
      - SURREAL_DATABASE=open_notebook
    volumes:
      - ./notebook_data:/app/data
    depends_on:
      - surrealdb
    restart: always
    pull_policy: always

Step 2: Set Your Encryption Key

Edit docker-compose.yml and change this line:

- OPEN_NOTEBOOK_ENCRYPTION_KEY=change-me-to-a-secret-string

to any secret value (e.g., my-super-secret-key-123)

Step 3: Start Services

docker compose up -d

Wait 15-20 seconds, then open: http://localhost:8502

Step 4: Configure AI Provider

  1. Go to Models and choose your provider (OpenAI, Anthropic, Google, etc.)
  2. Click + Add Configuration
  3. Paste your API key and other info as needed and click Add Configuration
  4. Click Test to test connection
  5. Click Sync Models and check models to include
  6. Under Default Model Assignments, click Auto-Assign Defaults or manually specify which models to use for what

Done! You're ready to create your first notebook.

Need an API key? Get one from: OpenAI · Anthropic · Google · Groq (free tier)

Want free local AI? See examples/docker-compose-ollama.yml for Ollama setup


📚 More Installation Options


📖 Need Help?


Star History

Star History Chart

Provider Support Matrix

Thanks to the Esperanto library, we support this providers out of the box!

Provider LLM Support Embedding Support Speech-to-Text Text-to-Speech
OpenAI
Anthropic
Groq
Google (GenAI)
Vertex AI
Ollama
oMLX
Perplexity
ElevenLabs
Deepgram
Azure OpenAI
Mistral
DeepSeek
Cohere
Voyage
xAI
OpenRouter
DashScope (Qwen)
MiniMax
Novita
PayPerQ (PPQ)
OpenAI Compatible*

*Supports LM Studio and any OpenAI-compatible endpoint. Prefer the native oMLX provider for oMLX (Apple Silicon); see docs/5-CONFIGURATION/omlx.md.

✨ Key Features

Core Capabilities

  • 🔒 Privacy-First: Your data stays under your control - no cloud dependencies
  • 🎯 Multi-Notebook Organization: Manage multiple research projects seamlessly
  • 📚 Universal Content Support: PDFs, videos, audio, web pages, Office docs, and more
  • 🤖 Multi-Model AI Support: 18+ providers including OpenAI, Anthropic, Ollama, Google, LM Studio, and more
  • 🎙️ Professional Podcast Generation: Advanced multi-speaker podcasts with Episode Profiles
  • 🔍 Intelligent Search: Full-text and vector search across all your content
  • 💬 Context-Aware Chat: AI conversations powered by your research materials
  • 📝 AI-Assisted Notes: Generate insights or write notes manually

Advanced Features

  • ⚡ Reasoning Model Support: Full support for thinking models like DeepSeek-R1 and Qwen3
  • 🔧 Content Transformations: Powerful customizable actions to summarize and extract insights
  • 🌐 Comprehensive REST API: Full programmatic access for custom integrations API Docs
  • 🔐 Optional Password Protection: Secure public deployments with authentication
  • 📊 Fine-Grained Context Control: Choose exactly what to share with AI models
  • 📎 Citations: Get answers with proper source citations

Podcast Feature

Check out our podcast sample

📚 Documentation

Getting Started

User Guide

Advanced Topics

(back to top)

🗺️ Roadmap

Upcoming Features

  • Live Front-End Updates: Real-time UI updates for smoother experience
  • Async Processing: Faster UI through asynchronous content processing
  • Cross-Notebook Sources: Reuse research materials across projects
  • Bookmark Integration: Connect with your favorite bookmarking apps

Recently Completed ✅

  • Next.js Frontend: Modern React-based frontend with improved performance
  • Comprehensive REST API: Full programmatic access to all functionality
  • Multi-Model Support: 18+ AI providers including OpenAI, Anthropic, Ollama, LM Studio
  • Advanced Podcast Generator: Professional multi-speaker podcasts with Episode Profiles
  • Content Transformations: Powerful customizable actions for content processing
  • Enhanced Citations: Improved layout and finer control for source citations
  • Multiple Chat Sessions: Manage different conversations within notebooks

Explore GitHub Discussions for proposed features and product ideas, and open Issues for known bugs and approved work.

(back to top)

📖 Need Help?

🤝 Community & Contributing

Join the Community

  • 💬 Discord Server - Get help, share ideas, and connect with other users
  • 𝕏 Follow @lfnovo on X - Project updates and news from the maintainer
  • 💡 GitHub Discussions - Ask questions and shape features, product direction, design, and architecture
  • 🐛 GitHub Issues - Report reproducible bugs and find approved work
  • Star this repo - Show your support and help others discover Open Notebook

Contributing

We welcome contributions! We're especially looking for help with:

  • Frontend Development: Help improve our modern Next.js/React UI
  • Testing & Bug Fixes: Make Open Notebook more robust
  • Feature Development: Build the coolest research tool together
  • Documentation: Improve guides and tutorials

Current Tech Stack: Python, FastAPI, Next.js, React, SurrealDB Future Roadmap: Real-time updates, enhanced async processing

See our Contributing Guide for detailed information on how to get started, including our guidelines for AI-assisted contributions. To understand what we're building (and what we'll say no to), read VISION.md.

(back to top)

📄 License

Open Notebook is MIT licensed. See the LICENSE file for details.

Community Support:

(back to top)

View on GitHub

Recent activity

commits and pull requests

Releases and announcements

42 total
  1. **We recommend all users upgrade.** v1.14.0 is a providers-and-plumbing release: six new ways to connect models, a DNS-rebinding hardening pass on every outbound provider call, and fixes to two failure modes that could silently break a working install after a redeploy. Validated through the full release process — backend/frontend suites, a fresh-install and an upgrade test against real Docker images, and an end-to-end pass over the running app. ## 🔒 Security hardening - **Outbound provider requests are now pinned to a DNS-vetted IP.** Validating a URL and then handing it to the HTTP client left a rebinding window: the hostname was resolved again at connect time, so a name that passed validation could point at a cloud metadata endpoint on the actual connection. Resolution now happens once, dangerous addresses are rejected, and the request is pinned to the vetted address while `Host` and TLS SNI keep the original hostname — so certificate verification and routing are unaffected. Applied to credential saves, connection tests and model discovery (#1063) - **Private IPs, `localhost`, `host.docker.internal`, LAN hostnames and Tailscale addresses remain fully supported** — this is a se

  2. **We recommend all users upgrade.** v1.13.0 is our **biggest content-processing upgrade yet**: it rebuilds extraction on top of **Content Core 2.0** (a major architecture release), adds opt-in **Docling** (OCR + layout-aware parsing) and **Crawl4AI** (JavaScript rendering) engines, brings **EPUB and Reddit** support, moves PDF extraction to MIT-licensed pdfplumber, fixes audio extraction, and keeps the default image lean by making the heavy runtimes opt-in. Plus a batch of podcast correctness fixes. Validated with the release confidence process: full backend/frontend suites, the fresh-install + upgrade image gate, and manual verification of the opt-in runtimes, real podcast/TTS and PDF extraction on the pushed image. ## ✨ A major content-processing upgrade (Content Core 2.0) Extraction now runs on **content-core 2.x** — a ground-up refactor of the extraction stack. What it means for you: - **Docling document engine (opt-in)** — real **OCR for scanned PDFs and images** plus layout-aware parsing. Toggle OCR in Settings → Content Processing (on by default; turn it off to speed up text-native docs). (#1104) - **Crawl4AI URL engine (opt-in)** — renders **JavaScript-heavy pages** loca

  3. **We recommend all users upgrade.** v1.12.0 is a maintainability and correctness release: a full-repo cleanup (20+ focused PRs) that removed ~3,000 lines of dead code, fixed real user-facing bugs along the way, and turned on the quality gates that keep them fixed — validated end-to-end by the release test process (full suites, API+UI smoke, fresh-install and upgrade tests on the real images). ## ✨ New features - **Live Anthropic model discovery** — "Discover models" for Anthropic credentials now queries Anthropic's models API instead of a hardcoded 2024-era list, so new Claude models appear as soon as they ship (#1070) - **`GET /api/providers`** — new endpoint exposing provider metadata (modalities, docs, env-configured status) from a single backend registry (#1075) - **Math rendering in chat** — prompts now steer models to emit `$$...$$`/`$...$` so formulas render via KaTeX instead of raw LaTeX code blocks (#1051) ## 🐛 Notable fixes - **Errors now tell you what's wrong**: a missing/misconfigured model returns a clear 422 with guidance (and not-found resources a 404) instead of a generic "Internal Server Error" — across all API routes (#1078) - **Translations interpolate corre

  4. **We recommend all users upgrade.** This release includes a comprehensive security-hardening pass (16 fixes), several long-requested features, and meaningful performance improvements — validated by a new release-testing process covering everything from the unit suite to fresh-install and upgrade tests on the actual Docker images. ## 🔒 Security hardening A dedicated security review produced 16 fixes across the stack. Highlights: - **SurrealQL injection** closed in the repository layer and credential ordering (#1002, #1021) - **SSRF protection** on web-source ingestion, plus request-time re-validation of provider URLs (DNS-rebinding window closed) — private IPs and localhost remain fully supported for self-hosted Ollama/LM Studio (#1005, #1006) - **Constant-time comparison** for the API password (#1003) - User prompts are no longer compiled as **Jinja2 templates** (#1004) - **Request body cap** (default 100 MB, configurable via `OPEN_NOTEBOOK_MAX_UPLOAD_SIZE_MB`) (#1014) - Markdown note previews **sanitize raw HTML** (#1007) - API error responses no longer leak internal details (#1012, #1017) - **Pillow forced to 12.3.0**, resolving all 6 open Dependabot advisories (#1041) - `doc

  5. v1.10.0v1.10.0Jun 18, 2026

    Highlights: LaTeX rendering in chat, per-type bulk chat-context controls, Turkish UI, a security fix, and a batch of ingestion/search reliability fixes. > **Upgrade note:** this release adds database **migration 15** (a flexible `config` object on the `credential` table), applied automatically on API startup. ## 🔒 Security - Bumped **Starlette → 1.2.1** and **FastAPI → 0.136.3** to address **CVE-2026-48710** ("BadHost") (#859) ## ✨ Added - **LaTeX math rendering in chat** — inline `$...$` and display `$$...$$` via KaTeX (#606) - **Bulk chat-context actions** in the Sources and Notes column headers — sources: *insights only* / *full content* / *exclude all*; notes: *include / exclude all* — translated across all 14 locales (#223) - **Turkish (tr-TR)** localization (#871) - `NEXT_PUBLIC_API_TIMEOUT_MS` to configure the frontend API request timeout (#880) ## 🔧 Changed - Prominent **"Retry processing"** button on failed source cards (#726) - Docker base image → **Debian trixie + Node.js 22.x** (#914) ## 🐛 Fixed - Sources that fail to ingest are now marked **`failed`** (so the retry button actually appears) instead of being saved as `completed` with the extraction error as their

Code frequency

additions and deletions
+47.7K-47.7KWeek of 2025-08-10: +0 linesWeek of 2025-08-10: -0 linesWeek of 2025-08-17: +0 linesWeek of 2025-08-17: -0 linesWeek of 2025-08-24: +0 linesWeek of 2025-08-24: -0 linesWeek of 2025-08-31: +0 linesWeek of 2025-08-31: -0 linesWeek of 2025-09-07: +0 linesWeek of 2025-09-07: -0 linesWeek of 2025-09-14: +2,526 linesWeek of 2025-09-14: -1,534 linesWeek of 2025-09-21: +0 linesWeek of 2025-09-21: -0 linesWeek of 2025-09-28: +0 linesWeek of 2025-09-28: -0 linesWeek of 2025-10-05: +0 linesWeek of 2025-10-05: -0 linesWeek of 2025-10-12: +47,744 linesWeek of 2025-10-12: -20,380 linesWeek of 2025-10-19: +6,535 linesWeek of 2025-10-19: -1,439 linesWeek of 2025-10-26: +2,269 linesWeek of 2025-10-26: -460 linesWeek of 2025-11-02: +190 linesWeek of 2025-11-02: -180 linesWeek of 2025-11-09: +0 linesWeek of 2025-11-09: -0 linesWeek of 2025-11-16: +0 linesWeek of 2025-11-16: -0 linesWeek of 2025-11-23: +1,454 linesWeek of 2025-11-23: -859 linesWeek of 2025-11-30: +673 linesWeek of 2025-11-30: -211 linesWeek of 2025-12-07: +13 linesWeek of 2025-12-07: -13 linesWeek of 2025-12-14: +1,634 linesWeek of 2025-12-14: -747 linesWeek of 2025-12-21: +200 linesWeek of 2025-12-21: -0 linesWeek of 2025-12-28: +20,429 linesWeek of 2025-12-28: -20,610 linesWeek of 2026-01-04: +3,474 linesWeek of 2026-01-04: -2,971 linesWeek of 2026-01-11: +13,075 linesWeek of 2026-01-11: -4,098 linesWeek of 2026-01-18: +3,120 linesWeek of 2026-01-18: -692 linesWeek of 2026-01-25: +1,870 linesWeek of 2026-01-25: -433 linesWeek of 2026-02-01: +2,348 linesWeek of 2026-02-01: -18 linesWeek of 2026-02-08: +12,605 linesWeek of 2026-02-08: -4,366 linesWeek of 2026-02-15: +1,154 linesWeek of 2026-02-15: -311 linesWeek of 2026-02-22: +1,276 linesWeek of 2026-02-22: -745 linesWeek of 2026-03-01: +957 linesWeek of 2026-03-01: -10 linesWeek of 2026-03-08: +302 linesWeek of 2026-03-08: -203 linesWeek of 2026-03-15: +54 linesWeek of 2026-03-15: -50 linesWeek of 2026-03-22: +19 linesWeek of 2026-03-22: -18 linesWeek of 2026-03-29: +182 linesWeek of 2026-03-29: -336 linesWeek of 2026-04-05: +1,908 linesWeek of 2026-04-05: -944 linesWeek of 2026-04-12: +1,502 linesWeek of 2026-04-12: -1,503 linesWeek of 2026-04-19: +1,234 linesWeek of 2026-04-19: -95 linesWeek of 2026-04-26: +0 linesWeek of 2026-04-26: -0 linesWeek of 2026-05-03: +0 linesWeek of 2026-05-03: -0 linesWeek of 2026-05-10: +0 linesWeek of 2026-05-10: -0 linesWeek of 2026-05-17: +1,091 linesWeek of 2026-05-17: -124 linesWeek of 2026-05-24: +2,276 linesWeek of 2026-05-24: -33 linesWeek of 2026-05-31: +868 linesWeek of 2026-05-31: -547 linesWeek of 2026-06-07: +1,647 linesWeek of 2026-06-07: -95 linesWeek of 2026-06-14: +2,333 linesWeek of 2026-06-14: -436 linesWeek of 2026-06-21: +1,135 linesWeek of 2026-06-21: -258 linesWeek of 2026-06-28: +1,659 linesWeek of 2026-06-28: -283 linesWeek of 2026-07-05: +15,196 linesWeek of 2026-07-05: -15,037 linesWeek of 2026-07-12: +6,544 linesWeek of 2026-07-12: -1,713 linesWeek of 2026-07-19: +6,661 linesWeek of 2026-07-19: -1,193 linesWeek of 2026-07-26: +763 linesWeek of 2026-07-26: -88 linesWeek of 2026-08-02: +0 linesWeek of 2026-08-02: -0 linesAug 10, 2025Aug 2, 2026
+168.9K lines added, -83K removed over the last year.

Commits per week

last 52 weeks
570Week of 2025-08-10: 0 commitsWeek of 2025-08-17: 0 commitsWeek of 2025-08-24: 0 commitsWeek of 2025-08-31: 0 commitsWeek of 2025-09-07: 0 commitsWeek of 2025-09-14: 2 commitsWeek of 2025-09-21: 0 commitsWeek of 2025-09-28: 0 commitsWeek of 2025-10-05: 0 commitsWeek of 2025-10-12: 20 commitsWeek of 2025-10-19: 35 commitsWeek of 2025-10-26: 4 commitsWeek of 2025-11-02: 1 commitsWeek of 2025-11-09: 0 commitsWeek of 2025-11-16: 0 commitsWeek of 2025-11-23: 5 commitsWeek of 2025-11-30: 7 commitsWeek of 2025-12-07: 4 commitsWeek of 2025-12-14: 22 commitsWeek of 2025-12-21: 1 commitsWeek of 2025-12-28: 3 commitsWeek of 2026-01-04: 21 commitsWeek of 2026-01-11: 24 commitsWeek of 2026-01-18: 9 commitsWeek of 2026-01-25: 17 commitsWeek of 2026-02-01: 6 commitsWeek of 2026-02-08: 18 commitsWeek of 2026-02-15: 19 commitsWeek of 2026-02-22: 4 commitsWeek of 2026-03-01: 2 commitsWeek of 2026-03-08: 17 commitsWeek of 2026-03-15: 2 commitsWeek of 2026-03-22: 3 commitsWeek of 2026-03-29: 4 commitsWeek of 2026-04-05: 26 commitsWeek of 2026-04-12: 14 commitsWeek of 2026-04-19: 5 commitsWeek of 2026-04-26: 0 commitsWeek of 2026-05-03: 0 commitsWeek of 2026-05-10: 0 commitsWeek of 2026-05-17: 14 commitsWeek of 2026-05-24: 7 commitsWeek of 2026-05-31: 15 commitsWeek of 2026-06-07: 9 commitsWeek of 2026-06-14: 27 commitsWeek of 2026-06-21: 22 commitsWeek of 2026-06-28: 7 commitsWeek of 2026-07-05: 57 commitsWeek of 2026-07-12: 36 commitsWeek of 2026-07-19: 31 commitsWeek of 2026-07-26: 1 commitsWeek of 2026-08-02: 0 commitsAug 10, 2025Aug 2, 2026
521 commits in the last 52 weeks.

When work happens

weekday and hour
SunMonTueWedThuFriSat036912151821Sun 0:00 — 1 commitsSun 1:00 — 1 commitsSun 2:00 — 1 commitsSun 3:00 — 3 commitsSun 4:00 — 1 commitsSun 5:00 — 0 commitsSun 6:00 — 0 commitsSun 7:00 — 1 commitsSun 8:00 — 8 commitsSun 9:00 — 11 commitsSun 10:00 — 8 commitsSun 11:00 — 10 commitsSun 12:00 — 9 commitsSun 13:00 — 6 commitsSun 14:00 — 12 commitsSun 15:00 — 10 commitsSun 16:00 — 7 commitsSun 17:00 — 6 commitsSun 18:00 — 10 commitsSun 19:00 — 6 commitsSun 20:00 — 3 commitsSun 21:00 — 6 commitsSun 22:00 — 7 commitsSun 23:00 — 1 commitsMon 0:00 — 4 commitsMon 1:00 — 1 commitsMon 2:00 — 3 commitsMon 3:00 — 1 commitsMon 4:00 — 0 commitsMon 5:00 — 0 commitsMon 6:00 — 1 commitsMon 7:00 — 7 commitsMon 8:00 — 4 commitsMon 9:00 — 8 commitsMon 10:00 — 7 commitsMon 11:00 — 3 commitsMon 12:00 — 3 commitsMon 13:00 — 0 commitsMon 14:00 — 10 commitsMon 15:00 — 6 commitsMon 16:00 — 14 commitsMon 17:00 — 9 commitsMon 18:00 — 4 commitsMon 19:00 — 1 commitsMon 20:00 — 8 commitsMon 21:00 — 1 commitsMon 22:00 — 5 commitsMon 23:00 — 0 commitsTue 0:00 — 4 commitsTue 1:00 — 0 commitsTue 2:00 — 2 commitsTue 3:00 — 0 commitsTue 4:00 — 7 commitsTue 5:00 — 2 commitsTue 6:00 — 3 commitsTue 7:00 — 12 commitsTue 8:00 — 7 commitsTue 9:00 — 7 commitsTue 10:00 — 2 commitsTue 11:00 — 17 commitsTue 12:00 — 13 commitsTue 13:00 — 3 commitsTue 14:00 — 3 commitsTue 15:00 — 2 commitsTue 16:00 — 8 commitsTue 17:00 — 6 commitsTue 18:00 — 8 commitsTue 19:00 — 6 commitsTue 20:00 — 7 commitsTue 21:00 — 12 commitsTue 22:00 — 3 commitsTue 23:00 — 0 commitsWed 0:00 — 2 commitsWed 1:00 — 0 commitsWed 2:00 — 0 commitsWed 3:00 — 0 commitsWed 4:00 — 0 commitsWed 5:00 — 0 commitsWed 6:00 — 1 commitsWed 7:00 — 0 commitsWed 8:00 — 2 commitsWed 9:00 — 1 commitsWed 10:00 — 5 commitsWed 11:00 — 6 commitsWed 12:00 — 15 commitsWed 13:00 — 8 commitsWed 14:00 — 11 commitsWed 15:00 — 9 commitsWed 16:00 — 4 commitsWed 17:00 — 13 commitsWed 18:00 — 3 commitsWed 19:00 — 3 commitsWed 20:00 — 3 commitsWed 21:00 — 2 commitsWed 22:00 — 10 commitsWed 23:00 — 2 commitsThu 0:00 — 0 commitsThu 1:00 — 0 commitsThu 2:00 — 1 commitsThu 3:00 — 0 commitsThu 4:00 — 0 commitsThu 5:00 — 0 commitsThu 6:00 — 0 commitsThu 7:00 — 4 commitsThu 8:00 — 3 commitsThu 9:00 — 7 commitsThu 10:00 — 2 commitsThu 11:00 — 12 commitsThu 12:00 — 7 commitsThu 13:00 — 5 commitsThu 14:00 — 3 commitsThu 15:00 — 7 commitsThu 16:00 — 10 commitsThu 17:00 — 1 commitsThu 18:00 — 4 commitsThu 19:00 — 2 commitsThu 20:00 — 5 commitsThu 21:00 — 13 commitsThu 22:00 — 5 commitsThu 23:00 — 3 commitsFri 0:00 — 3 commitsFri 1:00 — 3 commitsFri 2:00 — 0 commitsFri 3:00 — 0 commitsFri 4:00 — 0 commitsFri 5:00 — 0 commitsFri 6:00 — 0 commitsFri 7:00 — 3 commitsFri 8:00 — 5 commitsFri 9:00 — 11 commitsFri 10:00 — 8 commitsFri 11:00 — 3 commitsFri 12:00 — 7 commitsFri 13:00 — 8 commitsFri 14:00 — 3 commitsFri 15:00 — 8 commitsFri 16:00 — 11 commitsFri 17:00 — 6 commitsFri 18:00 — 8 commitsFri 19:00 — 5 commitsFri 20:00 — 14 commitsFri 21:00 — 10 commitsFri 22:00 — 7 commitsFri 23:00 — 1 commitsSat 0:00 — 2 commitsSat 1:00 — 1 commitsSat 2:00 — 0 commitsSat 3:00 — 0 commitsSat 4:00 — 4 commitsSat 5:00 — 4 commitsSat 6:00 — 3 commitsSat 7:00 — 3 commitsSat 8:00 — 5 commitsSat 9:00 — 5 commitsSat 10:00 — 4 commitsSat 11:00 — 3 commitsSat 12:00 — 3 commitsSat 13:00 — 8 commitsSat 14:00 — 8 commitsSat 15:00 — 3 commitsSat 16:00 — 7 commitsSat 17:00 — 1 commitsSat 18:00 — 24 commitsSat 19:00 — 14 commitsSat 20:00 — 10 commitsSat 21:00 — 1 commitsSat 22:00 — 5 commitsSat 23:00 — 1 commits
Commit volume by weekday and hour (UTC). Larger dots mean more commits.

Who is committing

last 52 weeks
Maintainer commits424 (68%)
Community commits201 (32%)

625 commits in total over the last year.

DateListRankStars gained
Jul 9, 2026daily#22+3
Jun 14, 2026daily#24+32
Jun 8, 2026daily#13+41
Jun 7, 2026daily#23+67
Jun 6, 2026daily#17+62
Jun 5, 2026daily#10+35
  • freeCodeCamp/freeCodeCamp

    freeCodeCamp.org's open-source codebase and curriculum. Learn math, programming, and computer science for free.

    453.6K stars · TypeScript

  • openclaw/openclaw

    Your own personal AI assistant. Any OS. Any Platform. The lobster way. 🦞

    385.5K stars · TypeScript

  • openclaw/openclaw

    Your own personal AI assistant. Any OS. Any Platform. The lobster way. 🦞

    384.4K stars · TypeScript

  • openclaw/openclaw

    Your own personal AI assistant. Any OS. Any Platform. The lobster way. 🦞

    384.4K stars · TypeScript

  • openclaw/openclaw

    Your own personal AI assistant. Any OS. Any Platform. The lobster way. 🦞

    384.4K stars · TypeScript

  • anomalyco/opencode

    The open source coding agent.

    194.7K stars · TypeScript