Skip to content
@canvas-ai

Canvas AI

Contextualize your unstructured Universe!

Canvas is a cross-platform desktop overlay to help organize your work, workflows and data into separate "contexts".

Contexts are represented by a virtual file-system tree powered by bitmaps[0]. Every tree node("directory") represents a layer linked to a roaring bitmap[1], filtering down all unstructured information fighting for your attention while working in a standard(tm) desktop environment(emails, notifications/chat and system messages, growing number of random browser tabs, unmanageable stack of windows and ad-hoc download-extract-test-forget endeavors to name a few).

A Contex Tree may look as follows:

universe://
├── home
│   ├── music
│   │   └── concerts
│   │       └── tiny-desk
│   │           └── 2025
│   └── travel
│       ├── 2024
│       │   └── belgium
│       │       └── brussels
│       └── 2025
│           └── spain
│               └── barcelona
└── work
    ├── customer-a
    │   ├── devops
    │   │   ├── jira-1001
    │   │   ├── jira-1002
    │   │   └── jira-1003
    │   ├── inc
    │   │   ├── snow1001
    │   │   ├── snow1002
    │   │   └── snow1003
    │   ├── rca
    │   ├── reports
    │   │   ├── 2024
    │   │   └── 2025
    │   └── team
    └── customer-b
        ├── billing
        ├── kb
        ├── projects
        │   ├── bar
        │   ├── baz
        │   └── foo
        └── sec-compliance
            └── reports
                └── 2025
                    ├── 01
                    ├── 02
                    └── 03

Universe is your default(home) workspace. Your Universe can be further split into self-contained, movable/shareable Workspaces, each running its own in-process database with a context tree abstraction on top(you may want to have a dedicated worksapce per customer or project; a handover to a BAU engineer would then be just a matter of export - import of your project workspace).

You can not (yet) mount remote workspaces but this is something we are plannning to implement in the following weeks.

Layers are unique - a reports layer in /work/customer-a/reports and /work/customer-b/reports is stored under the same uuid linking to the same bitmap - renaming/removing/updating one will update all occurences in the context tree.
Context layers filter different data based on where they are placed. Iow, moving reports to / would show you all data linked to the reports layer within your Universe, moving it under /work/customer-a would do a logical AND on the work, customer-a and reports layer bitmaps and result in a filtered view of data that are linked to all of the layers in your path).

The backend component for Canvas is called canvas-server, a small nodejs-based runtime that can be run directly on your machine or dockerized almost anywhere you want(lets say your home NAS or your favorite trusted cloud provider).

You can index almost any data type regardless where it is stored, retrieval can use client context data like network location, OS, device ID etc to make a roaming experience as smooth as your network latencies allow; reads from remote locations are cached wusing cacache[2].

A common use-case of a shared "Home" workspace: Lets say you are planning your upcoming vacation and looking for accommodation "the-old-fashioned-way"(tm) by searching the interweb yourself.
You set your context to home://travel/2025/europe/spain(via command-line of course: $ context set home://travel/...), this will update all your linked applications - in our example browser tabs - and you start opening your listings. Your significant other can connect to the same shared context and start adding new tabs, closing the already reviewed ones, even adding notes or contacts. All context tree events are propagated to all connected clients(whenever someone opens a browser tab, a new tab is auto-created or auto-closed on all linked browsers(if configured to do so)).

Another common use-case is work on multiple customers/projects/tasks - all with their own set of contacts and long-running email threads, notes, files, browser tabs etc. Switching between them should be like teleporting between perfectly maintained offices - all of them with a tidy clean desk with only the tools you need to accomplish your task.

Canvas is split into the following components:

  • canvas-server: Main server runtime accessible via REST and websockets, current codebase
  • canvas-synapsd: Database backend, built on top of LMDB and roaring bitmap indexes
  • canvas-shell: Curl-based bash CLI client using canvas-server REST API
  • canvas-cli: Node-based CLI client using REST and websockets for REPL mode
  • canvas-electron: UI/Frontend
  • canvas-web: UI/Frontend
  • canvas-browser-extensions: UI/Frontend

Couple of core principles to start with

  • You own your data
    You can run every part of the application stack wherever you want, with whatever data or compute backend you want
  • Offline first
    Iow - if a solar CME kicks this civilization back to the stone age(again?) and you happen to have a working power source, you can still browse all your metadata || cached data to check on your appointments, emails, tax returns and all the other stuff you no longer have to worry about (or browse cached content related to things you need to worry about)

Show me the code

Get Involved

Pinned Loading

  1. canvas-shell canvas-shell Public

    Canvas UI (shell)

    Shell

  2. canvas-server canvas-server Public

    Canvas Server runtime

    JavaScript 2

  3. canvas-synapsd canvas-synapsd Public

    JavaScript 1

Repositories

Showing 10 of 12 repositories
  • canvas-server Public

    Canvas Server runtime

    canvas-ai/canvas-server’s past year of commit activity
    JavaScript 2 AGPL-3.0 0 9 (1 issue needs help) 0 Updated May 4, 2025
  • canvas-web Public
    canvas-ai/canvas-web’s past year of commit activity
    TypeScript 0 AGPL-3.0 0 0 0 Updated May 2, 2025
  • .github Public
    canvas-ai/.github’s past year of commit activity
    0 0 0 0 Updated Apr 29, 2025
  • canvas-shell Public

    Canvas UI (shell)

    canvas-ai/canvas-shell’s past year of commit activity
    Shell 0 AGPL-3.0 0 1 0 Updated Apr 26, 2025
  • canvas-ai/canvas-synapsd’s past year of commit activity
    JavaScript 1 0 0 0 Updated Apr 25, 2025
  • canvas-electron Public

    Context layer on top of your unstructured universe

    canvas-ai/canvas-electron’s past year of commit activity
    JavaScript 5 AGPL-3.0 1 2 (1 issue needs help) 0 Updated Mar 19, 2025
  • canvas-cli Public

    Simple REPL client for Canvas

    canvas-ai/canvas-cli’s past year of commit activity
    JavaScript 0 AGPL-3.0 0 0 0 Updated Mar 19, 2025
  • canvas-browser-extensions Public

    Canvas UI Firefox browser extension

    canvas-ai/canvas-browser-extensions’s past year of commit activity
    TypeScript 4 AGPL-3.0 0 6 (5 issues need help) 0 Updated Mar 1, 2025
  • canvas-stored Public

    Canvas StoreD component

    canvas-ai/canvas-stored’s past year of commit activity
    JavaScript 0 AGPL-3.0 0 0 0 Updated Feb 24, 2025
  • canvas-neurald Public

    Canvas NeuralD component

    canvas-ai/canvas-neurald’s past year of commit activity
    JavaScript 0 AGPL-3.0 0 0 0 Updated Feb 24, 2025

Top languages

Loading…

Most used topics

Loading…