Cosmoboard

A local-first place for canvases, notes, and files to live together.

Cosmoboard is a project I have been working on for the past 10 years. Initially I was just exploring and taking notes on what my ideal workspace and PKMS would be, after being disappointed in existing tools.

Currently I use a mix of Miro, Obsidian, a small notebook, loose pieces of paper, Notion, and VS Code for all my projects. It works but it ain't pretty. I hope to get this repository to a state where the static version becomes something you go back to and use on a daily basis.

Let me know if it is not there, how it could get there, and what you would like for it to be there.

Try the live prototype →

What it is

It is one big canvas where you can pan around, zoom in, drop images and PDFs onto it, jot markdown notes, and embed other boards inside it. Every board is a plain file on disk. The idea is that the work is mine and yours, not stuck inside someone else's database somewhere.

What it is not

It is not a cloud-only workspace. It is not me trying to clone Notion or Miro or Obsidian. It is not finished, and it probably will not be for a while. I am building it piece by piece, in public, inside my personal site, on the days I have the energy for it.

Scope and roadmap

Four rings. The middle is what has to work without thinking. Each ring outward is further from done.

Core Pan and zoom, markdown nodes, image and PDF drops, autosave to the browser. The thing has to do these without thinking.
Now Multiple boards per page, embedded board previews, shared entities, export as Git-friendly `.canvas` or as a portable bundle, GitHub recommendation flow.
Soon Markdown to canvas sync, generic file cards, inline image paste in markdown, bases and database views over notes, boards, and assets.
Later Website embed cards, app container embeds, realtime co-editing with presence, mobile-first board UX, plugin or local API layer.

Principles

These are the rules I keep coming back to when I have to make a call on something.

Local-first

Works offline. Saves locally first. Happy to live on a static site without a backend.

Portable

Markdown and JSON Canvas underneath. If I leave, my notes and boards leave with me.

File-first

Every board is just a file on disk. The filesystem stays the boss, not a hidden database.

Embeddable

Boards inside markdown. Markdown inside boards. Files inside both.

Safe by default

Sandboxed embeds. No silent file crawling. Permissions stay explicit, even when it is annoying.

Gradual collaboration

Solo for now. GitHub recommendations next. Realtime co-editing once the rest is solid.

Where your stuff stays

By default, your boards, notes, and dropped files autosave to your browser, so editing works fully offline. If you are also running the local dev-server, the same edits sync to plain .canvas and .md files in your project folder.

Nothing leaves your machine unless you click Recommend, which opens a GitHub issue with the canvas attached.

There is no telemetry. No analytics. No silent cloud sync either.

Encryption, portable encrypted shares, and self-hosted sync are part of the plan but not shipped yet. (PLANNED)

Bringing your stuff in (PLANNED)

The whole point of local-first is that your notes are already yours. If they live somewhere else right now, here is how I plan to walk them in without making you redo years of work. Most of these are not built yet — this is the plan.

Two-way: import once, then keep working in the original tool if you want. Cosmoboard stays in sync with the files it already understands. None of this is about migrating once and forgetting.

Where it lives

Right now Cosmoboard lives inside evrenucar.com, my personal site. It is the easiest place for me to keep working on it without spinning up a whole separate project around it. Once it grows up a bit, it will probably move to its own home. For now, the personal site is its host and its first real test surface.

Live preview

This is the actual Cosmoboard, sitting right inside this page in read-only mode. Pan with the hand tool, zoom with the wheel, have a look around. To actually edit anything, open it in its own page.

Read-only · pan and zoom only Open the full board →

What I'm working on right now

The focus right now is making markdown and .canvas files round-trip cleanly with Obsidian, so the same folder opens in both places without any drama. Drag-and-drop imports for images, PDFs, and text files just landed. Next up are a proper onboarding board, a real performance baseline so a couple hundred nodes still pan at 60fps on a 2020 laptop, and the first slice of opt-in encryption so you can share boards privately without needing an account.

It is being built piece by piece, in public, in a single repo.

How you can help

The most useful thing you can do is try it, push it until something breaks, and tell me what happened.

The board has buttons for that built in:

All three open prefilled GitHub issues. No sign-up beyond GitHub itself.

If you want to look under the hood, the repo is open. Issues, pull requests, and stars all work the way you would expect.

One thing I keep getting stuck on: people should be able to share boards with each other. I have not figured out the right way to do that yet, somewhere between capability links, encrypted shares, and a self-hosted node. If you have ideas about how sharing should feel, I want to hear them.

My inbox is open. If something here sparked an idea, write to me.

View the GitHub repo →
prototype local-first spatial markdown canvas slowly built
If you scrolled this far you have already seen more concentric circles than most product pages, lived through a roadmap that calls itself slow on purpose, and met a tool that mostly just wants to be a folder you can pan around. Somewhere in here a board is autosaving while you read this, a markdown file is quietly waiting to be dropped onto a canvas, a PDF is pretending to be a node, a feature labeled later is politely refusing to be soon, a shared entity is being reused without anyone making a fuss, and a small voice keeps reminding everyone that the filesystem is, in fact, allowed to stay the boss. |