canvas-ui/canvas

Monorepo for the canvas desktop overlay and related UI integrations

0

stars

1,269

commits

TypeScript

primary language

Sep 10, 2026

updated

getcanvas.org/

README

Canvas

Canvas

Monorepo for the Canvas UI(OS) client apps and the shared packages they are built on. The server (canvas-server) lives in its own repository and consumes the shared packages

Project screenshots

Demo instance

Layout

apps/
  cli                    Canvas CLI (bun-compiled binaries)
  desktop                Tauri desktop app (frontend builds in CI; Rust bundle needs the Tauri toolchain)
  browser-extension      Chromium + Firefox extension (esbuild)
  shell                  bash client — not an npm package, pnpm skips it
  web                    web UI (vite/react; prebuilt artifact consumed by canvas-server)
packages/
  protocol               wire contract: envelope, error codes, routes, events
  schemas                document schema ids, versions, builders
  api-client             ergonomic REST client over protocol
integrations/
  kde                    desktop share bridge: Dolphin "Send to Canvas" + selected-text capture

Development

pnpm install
pnpm test          # package test suites (node --test)
pnpm run lint      # root eslint over packages/ + per-app lint
pnpm run build     # per-package dev builds (apps/cli → bun compile)

pnpm is deliberate: its strict node_modules makes an undeclared dependency an install-time error, which is the property that keeps packages/* independently installable. Do not add dependencies that only work because something else hoisted them.

Desktop integration

Canvas is backend-first: pipe your data sources in, mount context-aware apps (or a context as a filesystem), and let a context switch update everything bound to it. Until the Tauri desktop app covers this natively, small bridges in integrations/ hook the OS into the same REST pipeline the web UI uses:

  • integrations/kde/ — "Send to Canvas" in Dolphin's context menu (KIO service menu), plus canvas-share --selection for filing any highlighted text (a note, or a link when it's a bare URL) via a global shortcut or Klipper action. Stdlib-python + a .desktop file; ./install.sh, then set the API token in ~/.config/canvas/share.conf. See its README for why the KDE Share submenu (Purpose) needs a compiled plugin — that, a Nautilus/GNOME equivalent, and PWA share_target (already live for Android/ChromeOS installs of the web UI) are the surrounding pieces.

Licensing

Everything in this repository is available under the AGPL-3.0-or-later — see LICENSE and NOTICE — but the two halves differ beyond that:

  • apps/* are AGPL-only, for everyone, permanently. No commercial licence is offered for the client applications, to anyone, and none is planned: the Canvas clients stay free software in all cases. Contributions need only a DCO sign-off (git commit -s).
  • packages/* are part of the dual-licensed Canvas engine (AGPL-3.0-or-later or a commercial licence), alongside canvas-server, canvas-synapsd, canvas-stored, canvas-inferd and canvas-agentd. Contributions are asked for under the one-time Canvas CLA.

See CONTRIBUTING.md here and the server's COMMERCIAL.md for the commercial side.

Package naming & distribution

Packages use the @augmentd-labs/canvas-* scope — the product brands as Canvas OS; the GitHub org login is unrelated plumbing and npm scopes are independent of it. The augmentd-labs npm org is claimed; nothing here publishes yet.

Distribution plan: workspace links inside the monorepo (forever), file: links to sibling checkouts during the transition, GitHub Release tarballs (pnpm pack per package, attached to a tag) once canvas-server's CI/Docker needs fetchable artifacts, and public npmjs when third-party adoption starts. GitHub Packages is deliberately not used: it requires an auth token even for public installs and chains the scope to the org name.

Contributors

idncsk

1,140 commits

tarborlevan

63 commits

cursoragent

48 commits

claude

15 commits

canvas-ui/canvas

Monorepo for the canvas desktop overlay and related UI integrations

0

stars

1,269

commits

TypeScript

primary language

Sep 10, 2026

updated

getcanvas.org/

README

Canvas

Canvas

Monorepo for the Canvas UI(OS) client apps and the shared packages they are built on. The server (canvas-server) lives in its own repository and consumes the shared packages

Project screenshots

Demo instance

Layout

apps/
  cli                    Canvas CLI (bun-compiled binaries)
  desktop                Tauri desktop app (frontend builds in CI; Rust bundle needs the Tauri toolchain)
  browser-extension      Chromium + Firefox extension (esbuild)
  shell                  bash client — not an npm package, pnpm skips it
  web                    web UI (vite/react; prebuilt artifact consumed by canvas-server)
packages/
  protocol               wire contract: envelope, error codes, routes, events
  schemas                document schema ids, versions, builders
  api-client             ergonomic REST client over protocol
integrations/
  kde                    desktop share bridge: Dolphin "Send to Canvas" + selected-text capture

Development

pnpm install
pnpm test          # package test suites (node --test)
pnpm run lint      # root eslint over packages/ + per-app lint
pnpm run build     # per-package dev builds (apps/cli → bun compile)

pnpm is deliberate: its strict node_modules makes an undeclared dependency an install-time error, which is the property that keeps packages/* independently installable. Do not add dependencies that only work because something else hoisted them.

Desktop integration

Canvas is backend-first: pipe your data sources in, mount context-aware apps (or a context as a filesystem), and let a context switch update everything bound to it. Until the Tauri desktop app covers this natively, small bridges in integrations/ hook the OS into the same REST pipeline the web UI uses:

  • integrations/kde/ — "Send to Canvas" in Dolphin's context menu (KIO service menu), plus canvas-share --selection for filing any highlighted text (a note, or a link when it's a bare URL) via a global shortcut or Klipper action. Stdlib-python + a .desktop file; ./install.sh, then set the API token in ~/.config/canvas/share.conf. See its README for why the KDE Share submenu (Purpose) needs a compiled plugin — that, a Nautilus/GNOME equivalent, and PWA share_target (already live for Android/ChromeOS installs of the web UI) are the surrounding pieces.

Licensing

Everything in this repository is available under the AGPL-3.0-or-later — see LICENSE and NOTICE — but the two halves differ beyond that:

  • apps/* are AGPL-only, for everyone, permanently. No commercial licence is offered for the client applications, to anyone, and none is planned: the Canvas clients stay free software in all cases. Contributions need only a DCO sign-off (git commit -s).
  • packages/* are part of the dual-licensed Canvas engine (AGPL-3.0-or-later or a commercial licence), alongside canvas-server, canvas-synapsd, canvas-stored, canvas-inferd and canvas-agentd. Contributions are asked for under the one-time Canvas CLA.

See CONTRIBUTING.md here and the server's COMMERCIAL.md for the commercial side.

Package naming & distribution

Packages use the @augmentd-labs/canvas-* scope — the product brands as Canvas OS; the GitHub org login is unrelated plumbing and npm scopes are independent of it. The augmentd-labs npm org is claimed; nothing here publishes yet.

Distribution plan: workspace links inside the monorepo (forever), file: links to sibling checkouts during the transition, GitHub Release tarballs (pnpm pack per package, attached to a tag) once canvas-server's CI/Docker needs fetchable artifacts, and public npmjs when third-party adoption starts. GitHub Packages is deliberately not used: it requires an auth token even for public installs and chains the scope to the org name.

Contributors

idncsk

1,140 commits

tarborlevan

63 commits

cursoragent

48 commits

claude

15 commits

Languages

TypeScript

63.6%

JavaScript

24.7%

CSS

6.2%

Shell

2.2%

Python

1.6%

HTML

1.2%