DigitableCourses
Portal settings
Show me around

Local and account-free. No account, no sign-up: whatever you type into the tools stays in this browser's localStorage and never reaches a server.

Our own counter records page opens and finishes: the address leaves, plus one tenth-of-the-text figure. No cookies, no outside trackers, your IP is not stored, Do Not Track is honoured. How to check that

The portal's own repository is not published, so we do not call it open source. What is open:

The portal lives on donations, paid consultations and requested write-ups, and on Workbench sales.

There are no plans to make the courses paid.

Digitable tools

Architect

Panel on the left, canvas in the middle, the model in the language on the right. What you draw turns into category-theory declarations and is checked right away by the same compiler that backs flang check. What you write is laid back out as shapes.

Canvas and model

Whole tasks

Arrows and objects

Sets

There is no difference among them, and that is not an omission: a difference is a crescent, and the geometry reader knows only a circle inside a circle and a labelled lens. A button would drop a shape the page cannot read back. A set on the canvas is hatched while an object frame is not, and this is not decoration: a set has an inside, an object does not. That is why the three cases read before their labels do — where circles overlap the hatching doubles and the lens is darker than either; a nested circle is doubled all over; circles apart leave no dark spot anywhere. Circles are deliberately not dashed: on this canvas a dash already means a derived arrow — a composition — and besides, a dash changes only the boundary, while embedding and common part live in the area.

A sticker is a rectangle with a label, a column is an editor frame: both are native here, so stickers drag, recolour and undo like everything else. The board lives in the address of the link, not on a server and not in this browser. Whoever gets the whole link gets the board; a tab closed without a built link saves nothing. While the mode is on, the model in the language is not read from the canvas: thirty stickers would make thirty declarations and as many complaints.

Layout

Three links, three different promises. Read what actually travels: the wrong link says nothing about being the wrong one — that is discovered at the other end, once the time is already spent.

A link to the board

THE BOARD ITSELF travels: it lives in the address fragment, after the «#», and exists on no server at all. The limit is 2000 characters, roughly 120 stickers; beyond that no link is produced and you are told by how much it overran. This is a snapshot, not shared work: edits made at the other end never come back here.

A shared session

A ROOM KEY on the workbench travels, not the canvas. You draw together in real time, but the room lives on the workbench and the link takes you there: the session cookie is SameSite=Lax, so a socket opened from the portal would arrive without it. We will not weaken the cookie for convenience — it is an access check, not a setting.

A conversation

THE CONVERSATION ROOM travels, and nothing else: words, not the canvas. The chat lives on chat.digitable.life — a separate service, and it cannot see the canvas at all. Inviting someone to the canvas and inviting them to the conversation are two different invitations, and never one link.

Whatever is selected is what travels. Nothing selected — the whole canvas goes; a part selected — only that part, together with the labels inside the shapes. .digitable is our own format and the scene itself: the very file that used to travel as .excalidraw, plus a note carrying the model in the language. Rename it to .excalidraw and it opens in Excalidraw (excalidraw.com, the Obsidian plugin); dragged onto the canvas it is taken without renaming. The .excalidraw files exported earlier still open here. .fp is the model in the language, exactly the one in the column on the right: the specification of the drawing, read by a person and by the compiler. The extensions .flang, .fp, .фп and .фланг are equal to it; Cyrillic file names break for some people, hence .fp by default; a directory walk (flang test) sees only .flang. SVG is for foreign boards: Boardmix, Miro, draw.io and Figma do not accept the .excalidraw format, but they do take SVG; ours also carries the scene inside itself, so it comes back into Excalidraw losslessly. PNG is just a picture at twice the screen size: everyone takes it, FigJam included, but it opens back nowhere. The sticker board has its own file in the «Board» drawer — that one comes back only here.

The editor opens by itself and costs about 430 KB over the wire.