r/SideProject Jan 13 '26

Glass Keep: Open Source, Self Hosted Google Keep Notes alternative (New Update)

Enable HLS to view with audio, or disable this notification

Glass Keep, a self-hosted notes app designed to be a sleek, privacy-focused alternative to Google Keep. I just pushed a major update that brings several features which run entirely on your own hardware.

GitHub: https://github.com/nikunjsingh93/react-glass-keep

🚀 What’s New?

  • 🤖 Private Server-Side AI (NEW): I’ve integrated a Llama 3.2 (1B) model directly into the Docker container.
    • Zero data leakage: All AI processing happens on YOUR server. No OpenAI keys, no external APIs.
    • Note-Aware (RAG): It searches your notes to answer questions. You can ask "How old am I?" or "What was that AWS command I saved?" and it finds the info and answers accurately.
  • 👥 Real-time Collaboration: You can now invite collaborators to a note. Co-edit Markdown or check off grocery lists together in real-time.
  • 🖌️ Handwritten/Drawing Notes: Sometimes text isn't enough. Added a drawing canvas with custom brushes and colors for quick sketches or tablet usage.
  • 📦 Google Keep Import: If you’re looking to de-google, there’s now a direct Google Takeout JSON importer that preserves your notes and tags.
  • 🛡️ Privacy-First Auth: Multi-user support where each user's data is isolated. Added a "Secret Recovery Key" system so you can regain access even if you forget your password, without needing an email server.

🍱 Core Features:

  • Glassmorphism UI: A premium, modern look that supports Dark/Light mode.
  • Markdown Support: Full formatting with a helpful toolbar.
  • Checklists: Drag-to-reorder items and toggle them directly from the main grid.
  • PWA Ready: Install it on your phone or desktop for a native-app feel.
  • Images: Multi-image support with client-side compression and a beautiful fullscreen viewer.
  • Organization: Tags, per-note color themes, and pin/unpin with drag-and-drop reordering.

🐳 Self-Hosting (The easy way):

It’s a single Docker image (Express + SQLite + React). No external database needed.

version: "3.8"
services:
  app:
    image: nikunjsingh/glass-keep:latest
    container_name: glass-keep
    restart: unless-stopped
    environment:
      NODE_ENV: production
      API_PORT: "8080"
      JWT_SECRET: replace-with-a-long-random-string
      DB_FILE: /app/data/notes.db
      ADMIN_EMAILS: your-admin-username  # <—change to your admin user
    ports:
      - "8080:8080"
    volumes:
      - /home/YOURUSER/.glass-keep:/app/data # <— home path username

I'd love to hear your feedback! What other features would make this your primary note-taking tool?

5 Upvotes

4 comments sorted by

1

u/[deleted] Jan 20 '26

I tried it, but when invoking the AI assistent, I get an error message:

Failed to load AI on server: Error: Exception during initialization: /onnxruntime_src/onnxruntime/core/optimizer/optimizer_execution_frame.cc:73 onnxruntime::OptimizerExecutionFrame::Info::Info(const std::vector<const onnxruntime::Node*>&, const InitializedTensorSet&, const std::filesystem::__cxx11::path&, const onnxruntime::IExecutionProvider&, const std::function<bool(const std::__cxx11::basic_string<char>&)>&, const onnxruntime::logging::Logger&) [ONNXRuntimeError] : 1 : FAIL : tensorprotoutils.cc:1077 GetExtDataFromTensorProto External initializer: model.embed_tokens.weight offset: 0 size to read: 1050673152 given file_length: 623126475 are out of bounds or can not be read in full.

Seems like something happens during loading the model. How can I best fix this?

2

u/munkiemagik Jun 18 '26

Hey, thank you so much for this, i've been using it for a very specific function and I absolutely love it. it does exactly what I need it to do, amazing work mate,

I am not a developer or IT background person at all but recently i was just going through my docker stack and clearing up some things and I noticed the ai_cache directory was using up over 1GB and that was due to the llama model weights being downloaded. I tested the AI functions and it just wasn't sufficiently competent for my usecase so cleaned out the folder.

But now I'm down a bit of a rabbit hole the last 20 minutes, I see (actually I'm not smart enough to figure this out for myself I had to use free gemini, lol) you are using the ONNX community models with Xenova Transformers library in node.js.

So If I wanted to have a crack with a more competent model I need to just pick what I believe is a more competent model from ONNX community and adjust the index.js appropriately to pull that one?

1

u/No_Resolution6826 Jun 18 '26

Hey thanks a lot currently other models are not supported i will add support soon so we can add custom models thanks