0.9 is out.
Quick context if this is your first time: Ideon is a self-hosted visual workspace, an infinite canvas where you drop blocks for your Git repos, notes, tasks, files, and now automation. Everything about a project in one place.
The last release post ended with “move from visibility to control.” This is the start of that.
Webhook block: drop one on the canvas, it becomes a live HTTP endpoint. CI pipeline finishes, monitoring alert fires, form submits, POST to the URL and Ideon reacts. Configure what happens: set a block’s visual state, change its color, create a Kanban task, prepend text to a note. Runs server-side, no open browser tab needed.
Cron block: same action set, triggered on a schedule instead of an event. Preset or custom cron expression.
LaTeX block: several people asked for it. Write $...$ or $$...$$, toggle preview, done. Turned out to look better on the canvas than I expected.
Proxy / Header Auth: probably the most relevant one for this crowd. Already running Ideon behind nginx mTLS, Traefik, or Authelia? You can now configure it to read user identity straight from the headers your proxy injects. No OAuth round-trip, no separate IdP. A few env vars, and all auth events still go to the audit log.
Still open source, still self-hosted only.


Looks very interesting! Two questions:
From a quick look around in the repo, I couldn’t find which CRDT lib you’re using. Which one are you using? I’ve used yjs in the past but getting the document out of yjs into a db was a pain.
Second: we’re also building a tool that connects a lot of information because research tools are very fragmented as well. What is your philosophy on how to connect the information while still keeping things structured and understandable? We’ve found that e.g. node networks are incredibly hard to understand when the data and logic behind them gets complex. We also found that when users are not restricted in their information entering (e.g. a markdown file), most will not enforce their own structure and it gets disorganised quickly. Did you try to solve that or is it more the users problem?
yjs too! the trick that worked for me was just not round-tripping yjs -> json -> db on every update, canvas state lives in leveldb as raw binary (y-leveldb), the relational db is only used to seed it when the doc is empty. after that leveldb takes over. y-indexeddb on the client for offline, works pretty well actually
on your second question yeah same struggle lol. connections are loose by default, to keep it manageable folders have a single-parent rule, no reverse refs, collapsing hides the whole subtree. frames are there too but purely visual. for kanban task relationships i just moved them out of the canvas entirely and stored them in the yjs content object, otherwise the graph gets unreadable fast
auto clustering and edge bundling are still missing tbh, when the graph grows it gets messy and right now the answer is just “use folders and frames”, not super satisfying
the freeform vs structure thing is something i keep going back and forth on, leaning toward soft constraints that nudge rather than block. curious what you’re doing on that front!
nice that yjs worked for you :)
We’re blocking where custom options don’t make sense - which are a few since context is often constrained in our domain - but will probably enable users to do their own stuff with plugins. That way, the platform hopefully stays usable but extendable…