{"id":49254724,"url":"https://github.com/canvascoding/canvas-notebook","last_synced_at":"2026-06-01T02:00:55.258Z","repository":{"id":345243964,"uuid":"1133034040","full_name":"canvascoding/canvas-notebook","owner":"canvascoding","description":"Canvas Notebook — Your AI workspace with file management, agent support, and bring-your-own-model flexibility.","archived":false,"fork":false,"pushed_at":"2026-05-27T08:42:08.000Z","size":30256,"stargazers_count":8,"open_issues_count":0,"forks_count":1,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-27T10:17:27.536Z","etag":null,"topics":["ai-assisstant","ai-workspace","file-browser","marketing-tools","mcp-tools","media-generation","multi-agent","notebook","notes","pi-ai","productivity","self-hosted","skills"],"latest_commit_sha":null,"homepage":"https://notebook.canvas.holdings","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/canvascoding.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2026-01-12T19:41:25.000Z","updated_at":"2026-05-27T08:42:11.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/canvascoding/canvas-notebook","commit_stats":null,"previous_names":["canvascoding/canvas-notebook"],"tags_count":51,"template":false,"template_full_name":null,"purl":"pkg:github/canvascoding/canvas-notebook","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/canvascoding%2Fcanvas-notebook","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/canvascoding%2Fcanvas-notebook/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/canvascoding%2Fcanvas-notebook/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/canvascoding%2Fcanvas-notebook/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/canvascoding","download_url":"https://codeload.github.com/canvascoding/canvas-notebook/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/canvascoding%2Fcanvas-notebook/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33756578,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-01T02:00:06.963Z","response_time":115,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ai-assisstant","ai-workspace","file-browser","marketing-tools","mcp-tools","media-generation","multi-agent","notebook","notes","pi-ai","productivity","self-hosted","skills"],"created_at":"2026-04-25T02:15:28.255Z","updated_at":"2026-06-01T02:00:55.239Z","avatar_url":"https://github.com/canvascoding.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 📓 Canvas Notebook — Self-Hosted AI Workspace\n\n\u003cp align=\"center\"\u003e\n  \u003cstrong\u003eA self-hosted, container-first workspace with an AI agent at its core.\u003c/strong\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://github.com/canvascoding/canvas-notebook/releases\"\u003e\u003cimg src=\"https://img.shields.io/github/v/release/canvascoding/canvas-notebook?include_prereleases\u0026style=for-the-badge\" alt=\"GitHub release\"\u003e\u003c/a\u003e\n  \u003ca href=\"LICENSE\"\u003e\u003cimg src=\"https://img.shields.io/badge/License-Sustainable_Use_1.0-orange?style=for-the-badge\" alt=\"Sustainable Use License 1.0\"\u003e\u003c/a\u003e\n  \u003cimg src=\"https://img.shields.io/badge/Next.js-black?style=for-the-badge\u0026logo=next.js\u0026logoColor=white\" alt=\"Next.js\"\u003e\n  \u003ca href=\"https://ghcr.io/canvascoding/canvas-notebook\"\u003e\u003cimg src=\"https://img.shields.io/badge/Docker-ready-2496ED?style=for-the-badge\u0026logo=docker\u0026logoColor=white\" alt=\"Docker\"\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n---\n\n## What is Canvas Notebook?\n\nCanvas Notebook is a personal workspace that lives in a container. Think of it as a notebook that can read, write, search, and create files — with an AI you can actually talk to. You bring your files, the agent does the work.\n\n---\n\n## Features\n\n### File Browser \u0026 Editor\n- Browse, create, rename, move, and delete files and folders\n- Upload and download files between your machine and the workspace\n- **Markdown editor** with live preview\n- **Code editor** with syntax highlighting for all common languages\n- Auto-save\n\n### Viewers\n- PDF documents, images, audio and video files — all viewable directly in the browser\n\n### AI Agent\n- Chat with an AI that has direct access to your workspace\n- The agent can read and write files, run shell commands, search your notes, and execute tasks autonomously\n- Conversations are persisted — pick up where you left off\n- **Skills** — drop a folder with a `SKILL.md` file into `/data/skills/` and the agent gains new capabilities. Skills can do things like generate images, process documents, run custom workflows, or anything else you define\n- **Workflow automation** — tell the agent to run something on a schedule (once, daily, weekly, or at a custom interval) and it will\n\n### Supported AI Providers\nConnect with any of the following — API keys are configured at runtime inside the app, not required at startup:\n- **OpenRouter** (access many models through one API)\n- **Anthropic** (Claude)\n- **Google Gemini**\n- **Ollama** (run models locally, inside or alongside the container)\n- Groq, Mistral, OpenAI\n\n### Terminal\nFull shell access in the browser — run commands, manage files, execute scripts.\n\n### Spreadsheet Viewer\nView Excel and CSV files directly, no downloads needed.\n\n### Language Support\nThe interface is fully translated — switch languages from the header or the onboarding wizard. Currently supported:\n- **English**\n- **German** (Deutsch)\n\n### Authentication\n- Login-protected by default\n- No public signup or in-app user management\n- The bootstrap admin is created or synchronized from env vars on every start\n\n---\n\n## Install\n\n### Linux / VPS (recommended)\n\nOne command on a fresh Ubuntu or Debian server:\n\n```bash\nbash \u003c(curl -fsSL https://raw.githubusercontent.com/canvascoding/canvas-notebook/main/install.sh)\n```\n\nThe installer will:\n1. Install **Docker** (and optionally **Caddy** for automatic HTTPS)\n2. Pull the latest pre-built image from `ghcr.io` — no build step, no Node.js needed\n3. Auto-generate secrets\n4. Ask you to set your email, password, and public URL\n5. Start the container\n6. Install the host-side `canvas-notebook` management command\n7. Configure Caddy with a Let's Encrypt TLS certificate automatically\n\n**Firewall:** open ports **80** and **443** at your provider. Port 3456 stays internal behind Caddy.\n\n**DNS:** point an A record for your domain to your server IP before the first request — Caddy handles the certificate automatically.\n\nAfter installation, manage the VM from any directory with:\n\n```bash\ncanvas-notebook help\ncanvas-notebook update\ncanvas-notebook logs\ncanvas-notebook status\ncanvas-notebook restart\n```\n\nThe CLI runs on the VM host and remembers the install directory and Compose file for you. You do not need to `cd` into the project folder or run Docker Compose commands manually.\n\n#### Non-interactive / launch script\n\nAll prompts can be bypassed with environment variables — useful when provisioning a new instance automatically:\n\n```bash\nINSTALL_MODE=1 \\\nSETUP_CADDY=true \\\nBASE_URL=https://canvas.example.com \\\nADMIN_EMAIL=me@example.com \\\nADMIN_PASSWORD=yourpassword \\\nbash \u003c(curl -fsSL https://raw.githubusercontent.com/canvascoding/canvas-notebook/main/install.sh)\n```\n\n---\n\n### Mac / Windows (local)\n\nRequires [Docker Desktop](https://www.docker.com/products/docker-desktop/) and Node.js (v18+).\n\n```bash\nnpm run setup\n```\n\nThe script checks Docker, creates a config file from the template, builds the image, and opens the app at `http://localhost:3456`.\n\n---\n\n### Hosting platforms (EasyPanel, Coolify, Portainer, etc.)\n\nUse `ghcr.io/canvascoding/canvas-notebook:latest` as the image. Mount `/data` as a persistent volume. Set the environment variables listed in the [Configuration](#configuration) section below.\n\n---\n\n## Your Data\n\nAll data is stored in a `./data` directory on the host, mounted into the container at `/data`. It is never lost when the container is updated, restarted, or rebuilt.\n\n| Path | What lives here |\n|------|----------------|\n| `/data/workspace` | Your files |\n| `/data/sqlite.db` | Database (sessions, users, chat history) |\n| `/data/skills/` | Custom agent skills |\n| `/data/secrets/` | Integration tokens and secrets |\n\n---\n\n## Update\n\nOn Linux / VPS installs, update from anywhere on the VM:\n\n```bash\ncanvas-notebook update\n```\n\nThis pulls the latest image, recreates the container, streams startup logs, and waits until the app is healthy. Your data is untouched because it lives in the host `./data` directory.\n\nFor local / from-source installs:\n\n```bash\ngit pull\nnpm run setup\n```\n\n---\n\n## Configuration\n\n| Variable | Required | Description |\n|----------|----------|-------------|\n| `BETTER_AUTH_SECRET` | **Yes** | Random 32-byte base64 secret — auto-generated by the installer |\n| `CANVAS_INTERNAL_API_KEY` | **Yes** | Internal API secret — auto-generated by the installer |\n| `BETTER_AUTH_BASE_URL` | **Yes** | Public URL of the app, e.g. `https://canvas.example.com` |\n| `BOOTSTRAP_ADMIN_EMAIL` | **Yes** | Login email — created or updated on every start |\n| `BOOTSTRAP_ADMIN_PASSWORD` | **Yes** | Login password |\n| `BOOTSTRAP_ADMIN_NAME` | No | Display name for the admin (default: `Administrator`) |\n| `ONBOARDING` | No | Provider setup wizard is enabled by default; set to `false` to skip it |\n| `LOG_LEVEL` | No | `off` \\| `error` \\| `warn` \\| `info` \\| `debug` (default: `info`) |\n\nAI provider API keys (Claude, OpenRouter, Gemini, etc.) are configured inside the running app — you don't need them here.\n\n---\n\n## VM Management CLI\n\nThe Linux installer creates a host-side `/usr/local/bin/canvas-notebook` command. It can be run from any directory:\n\n```bash\ncanvas-notebook help\ncanvas-notebook install\ncanvas-notebook update\ncanvas-notebook logs\ncanvas-notebook status\ncanvas-notebook restart\ncanvas-notebook stop\ncanvas-notebook start\ncanvas-notebook health\n```\n\nRun these commands on the VM/server, not inside the app container. The CLI stores the install directory and Compose file path during setup, so it can manage the container without you being in the right folder.\n\n---\n\n## Skills\n\nSkills extend what the AI agent can do. A skill is a folder with a `SKILL.md` file:\n\n```\n/data/skills/\n  my-skill/\n    SKILL.md          # name, description, and instructions for the agent\n    bin/my-skill      # optional: executable makes this skill a callable tool\n```\n\n```yaml\n---\nname: my-skill\ndescription: \"What this skill does and when to use it\"\n---\n\nInstructions for the agent...\n```\n\nSkills without an executable are loaded as context into the agent's system prompt. Skills with a `bin/` executable become callable tools the agent can invoke directly.\n\n---\n\n## Development\n\nTo build and run from source:\n\n```bash\ngit clone https://github.com/canvascoding/canvas-notebook.git\ncd canvas-notebook\nnpm run setup          # builds image and starts container\n\nnpm run dev            # local dev server (no Docker)\nnpm run lint\nnpm run test:all\n```\n\nPre-built images are published automatically to `ghcr.io/canvascoding/canvas-notebook` when a new release tag is pushed.\n\n---\n\n## License\n\nSustainable Use License © [Frank Alexander Weber](https://github.com/canvascoding)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcanvascoding%2Fcanvas-notebook","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcanvascoding%2Fcanvas-notebook","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcanvascoding%2Fcanvas-notebook/lists"}