Introducing justdraw.fyi
How much ceremony should it take to draw a box and an arrow?
It’s a real question, and I don’t think the people building drawing tools have asked it lately. You can tell from the way they talk about their products. They talk about workspaces and teams and real-time multiplayer presence, and none of that is bad, but none of it is a box or an arrow.
Try it and count. I did. I opened a well-known design tool to draw one rectangle with one line coming out of it, the kind of thing you sketch on a napkin in four seconds, and I counted what stood between me and the canvas. A sign-in. A password manager prompt. A question about which team the file belonged to. A question about whether this was a design file or a whiteboard file. An invitation to invite my colleagues. A tour of a feature I hadn’t asked about. Then a loading spinner, and then, finally, a canvas.
Nine interactions and about forty seconds, to reach a surface where I could spend four seconds doing the thing I came to do. [1]
That ratio is the whole reason this exists. justdraw.fyi is a vector editor where
you press one button and you are on the canvas. There is no account. There is
nothing to install. You click New project, you get a URL like
app.justdraw.fyi/p/0192a4e1-…, and the drawing is at that URL. To show it to
someone, you send them the link. They open it and they can draw too.
The link isn’t a pointer to the drawing. The link is the drawing.
I want to be careful here, because the obvious objection to a tool with no login is that it must be a toy, and the obvious defense is to list features, and a list of features is not an argument. So let me make the argument instead.
The reason drawing tools accumulate ceremony is not that their makers are foolish. It’s that every step in the accumulation is locally correct. Someone needs to share a file with one colleague but not another, so you build permissions. Permissions are meaningless without knowing who somebody is, so you build identity, which is a login. Identity is useless without a place to put the things a person owns, so you build a workspace. A workspace is confusing on first sight, so you build an onboarding flow to explain it. And now the user who wanted a box and an arrow signs in, picks a team, and reads a tooltip.
Follow the chain backwards and notice what happened. The user with the most demanding requirement — granular permissions — set the floor for the user with the least demanding one. That is the default outcome in software, and it is almost never chosen deliberately. It just happens, one defensible decision at a time.
So I broke the first link. There is no login. Because there’s no login, there are no permissions. Because there are no permissions, there’s no workspace. Because there’s no workspace, there’s nothing to onboard you into, and the button on the landing page can go straight to a canvas.
The cost of that is exact, and I’d rather state it than have you discover it. Anyone holding the link can edit the drawing. The UUID is the password. It’s 128 bits of randomness, so nobody is going to guess it, and nobody who doesn’t have it can find your drawing. But if you paste the link into a public Slack channel, you have handed that channel an editable copy. [2]
For a box and an arrow, that’s the right trade, and I’ll take it every time. For your unannounced acquisition roadmap, it isn’t, and you should use something with a login, because a login is precisely what you need. I would rather be honestly narrow than dishonestly general.
Now the part I didn’t plan.
Once a drawing is a URL with nothing in front of it, you can give that URL to an
AI agent, and the agent can draw in it. Not generate a picture of a drawing —
draw. Put a rectangle at these coordinates. Group those three shapes. Align the
group against the wordmark. Fill it with #5b7cfa.
That works for a reason that has nothing to do with AI. Every edit in justdraw.fyi
is a JSON command, and every source of edits sends the same one. When you press
Ctrl+G, the keyboard sends group.create. When you click the group button, the
toolbar sends group.create. When you run jd group create in a shell, it sends
group.create. When a language model decides two shapes belong together, it
sends group.create. There is exactly one implementation of what grouping means,
and everything in the system is a customer of it.
So an agent’s edit goes into your undo history. It appears on your screen while it happens. It saves the way your own edits save. It isn’t a separate API bolted to the side of the product, drifting quietly out of sync with the product, which is what a separate API always does. It’s the same tool, driven from a different seat.
And the URL teaches. Fetch /p/<uuid>.md and you get a briefing generated from
the live project: what is currently on the canvas, every command that exists, and
example calls with this project’s id already filled in. An agent that has never
heard of any of this can be handed a link and get to work, which I know because
I’ve spent a fair amount of time handing links to agents and watching them fail
in ways I hadn’t anticipated. That turned out to be the most useful thing I did,
and it’s a post of its own.
There are more of those coming: what’s actually in the editor, why the browser is the engine and the server is only a relay, why the document is plain text you can read, and what six different AI agents got wrong before I fixed the documentation instead of blaming them.
For now, the button. It’s one click, and the clock starts on the canvas.
[1] Forty seconds is not a hardship. I’m not claiming injury. I’m claiming that the ratio of ceremony to work tells you what a tool is for, and forty-to-four tells you that tool is not for a box and an arrow. It’s for something else, and it’s probably very good at that something else.
[2] There’s a version of this product with accounts, private drawings, and a sharing model, and it would be a better business. It would also be a different product, and it would have to explain itself.