Building automation / Open source canvas
Lemni
A ground-up rebuild of basdraw as a hub for everything about a facility, built on a stripped-down tldraw SDK.
- Status
- In development
- Year
- 2026
- Role
- Design + development
- Built with
- TypeScript · React · Next.js · tldraw SDK · shadcn/ui · MCP · BASidekick Stream
Starting over
I posted about basdraw a while back, a tldraw-based app where ordinary canvas objects could react to live Niagara points. Lemni is the same idea started again from zero. This time the tldraw SDK is stripped down further so the canvas fits the job instead of the other way round, and it has a new name.
The intent is an overall hub for a facility. Drawings, sequences, points lists, live graphics, markup and notes live on one endless canvas, connected to each other and to the building automation system. You can use as much or as little of it as you want, connect it on your canvases, build your own interfaces, or just use it as a whiteboard.
It is still very much an exploratory project, not a product at this point. But I'm very bullish on it as a solid base to build on going forward, and there is a lot of possibility left in it.
What's in it now
Documents on the board
PDF drawing sets and Word documents become compact cards you page through in place; spreadsheets and CSV points lists become tables. Files are kept inside the board, so the job's paperwork travels with it.
A real whiteboard
Pen, sticky notes, arrows and shapes work anywhere, including right on top of a drawing, so markup and questions stay with the sheet they are about.
Page categories
Pages sit in categories in the top bar, and a category's kind decides which tools apply: documents, UI pages for graphics, or the generated wire sheet. You can add your own, like Commissioning, that work like either.
Plugins all the way down
Past the core canvas, every feature is a plugin you can switch off: documents, pen and shapes, the libraries, charts and tables, behaviors, links, web views, the station connection and the AI connection. Niagara through BASidekick Stream is the first data connection; others are intended, and being able to write your own plugins is the plan.
Symbol and data libraries
Libraries come from plugins too. The symbol library is HVAC and BAS equipment with ports, flips and live states. The data library holds trend charts, stat tiles, gauges and tables, and dragging a point in from the station offers the right one.
Behaviors
Drop a station point on any shape to make it live: symbol state, color, level, labels, rotation, motion or flow. Present mode hides the editor and leaves a working graphic.
Links and the wire sheet
You can link pretty much anything to anything: a device or point in the station, one page of a drawing set, a document, a frame on a graphic, a whole page. Each link carries whatever context you want to give it, in your own words, with no structure required. The wire sheet is generated from those links and shows how everything connects, with each comment on its wire. Tags give an AI a little context about a point; this gives it, and the next person on the job, the rest of the story: which drawing a device comes from, which graphic shows it, and why. None of it needs a visual: a link can be nothing more than context for an AI. But I think a hybrid interface like this, where the same information is equally there for the person, will be the norm for a while.
Quality of life
I'm aiming for small things that add up and an interface that's intuitive throughout. Drag a point out of the station onto the board and a menu asks what it should become: a chart, tile, gauge or table; a symbol that already animates from it (a fan for a fan status, a damper for its position); or a control. Drop a whole equipment folder and you get a panel or a table of it. Drop a point on a shape and it's ready to drive it. Each plugin's options can be hidden from that menu if you don't use them.
Bring your own AI
There is no built-in assistant and no API key held by the app. Lemni runs an MCP server, so the AI app you already pay for (Claude Code, Claude Desktop, Codex) connects to the open board. Plugins contribute its tools, so it can read documents, build and lay out graphics, bind points and link things, and potentially help with controlling data: any write to the station waits for Allow once and an are-you-sure in the board, and is audited. It uses what you already have, works with any MCP app, and does nothing until you connect it.
What's next
More plugins
More widgets that are useful day to day, and making it easy for anyone to build their own.
More data connections
Niagara is the first. Other connections are intended, each as its own plugin.
Standalone graphics packages
Export selected graphics as a simple standalone web app. Grab the few pieces a facility user actually needs and hand them a quick, tailored set of graphics without the rest of the board.
A full AI audit log
An easy way to look back at everything an AI was involved in on a board: what it read, what it changed, and every write you approved.