wede wede-landing v0.5.0
Get wede
3 people in this workspace · live

Putting the WE
in WEb IDE.

wede serves a full collaborative IDE straight off your own machine — multiplayer editing, shared terminals, VS Code-grade git and per-workspace chat, from a single Go binary. No cloud. No Docker. No database. No sign-ups.

one ~19 MB binary5 Go dependencies 0 databasesMIT or Apache-2.0
tasks.go README.md
Y A S
package tasks import "context" func (s *Store) Claim(ctx context.Context) { t, ok := s.byID[id] if !ok { return nil, ErrNotFound } t.Owner = whoami(ctx) t.ClaimedAt = time.Now() return t, s.flush(ctx) }
$go test ./internal/tasks ok · 0.412s
⎇ main 2↑ shared terminal · 3 watching Ln 12, Col 27GoUTF-8
AAva Chennow

pushed the fix — pull and the flake should be gone 🎉

Status: deprioritized. wede is complete and self-hostable, but it is not under active development — it is effectively community-maintained. Nothing has been removed or deprecated; expect no new roadmap work from the maintainer. Read the full status note →

~19 MB
one binary, frontend embedded
27
languages · 4 LSP servers wired
0
databases, containers, sign-ups
5
targets · linux, macOS, Windows
srcfeatures.go 9 capabilitiesGo

Everything in one process.

Not a shell around VS Code, and not a hosted service with a self-host tier bolted on. Pick a capability — it opens on the right, the way a file would.

collaboration
the actual work
shipping
live_editingread-only

Real-time, actually

Multiplayer cursors, live presence, and conflict-free concurrent edits — CRDT-backed by pure-Go reearth/ygo, wire-compatible with Yjs. The presence roster shows who is in the workspace and which file they have open.

Edits land on your real disk: a 600 ms debounce, then an atomic temp-and-rename. There is no separate document store to reconcile later.

CRDTYjs wire formatpresence rosteratomic writes
// backend/internal/collabdoc/persistence.go func (p *DiskPersistence) flush(rel string) error { // debounced 600ms, temp file + rename }
srccollaborate.md 3 connectedMarkdown

Send a link.
That's the whole flow.

No org, no seats, no invitation pending an email confirmation. You own the host, you mint a link, you revoke it when you're done.

  1. 1
    Open a folder as a workspacePoint wede at a directory. Open as many as you like — they sit side by side on one host.
  2. 2
    Mint a share linkEditor gets writes, git and terminals. Viewer is read-only but can still talk in chat. Set a TTL if you want one.
  3. 3
    Work in the same roomCursors, selections, terminals and chat, all live. Files land on your disk, debounced and written atomically.
  4. 4
    RevokeOne click. The token's hash is dropped and the session dies with it.
Share “demo-workspace”
⎇ main3 connectedtokens hashed at rest
tourscreens.png 7 screens1440 × 900

Real screens, no mockups.

Every shot is the running app. Flip the theme in the top bar and the screenshots follow — wede ships Midnight and Daylight, and so does this page.

wede editor with file tree, tabs and terminal panel
Editor. CodeMirror 6 with 27 languages, minimap, multi-root file tree, git-coloured status, and a dockable terminal underneath. ↹ click a tab
no-deps.diff +3−7

The stack, as a diff.

Most collaborative IDEs arrive with an infrastructure bill attached. This is everything wede removes from that list, and the three things it puts back.

@@ your infrastructure @@ before → after wede
postgres + a migration storystate is files on your disk
docker compose upone process, no runtime
a node sidecar to serve the frontendgo:embed
an identity provider and a seats tablea password and share links
a control plane provisioning workspacesit's a folder
a monthly invoice per developerMIT or Apache-2.0
telemetry you can't turn offthere is none
+./wede~19 MB, five targets
+a machine you already ownVPS, NAS, or a Pi
+git, if you want the git featuresthe one you already have
10 changed lines · +3 −7 · the removals are the feature
install.sh Go 1.25+ · Node 18+bash

Clone, build, open.

You need a Go and Node toolchain to build it, and nothing at all to run it. The binary that comes out is the whole product.

bash — build from source
$ git clone https://github.com/vul-os/wede.git
$ cd wede && npm install
$ npm run build:all # vite → go:embed → ./wede
building frontend… ✓
embedding assets… ✓
./wede 19 MB
 
$ ./wede /path/to/your/project
wede listening on http://127.0.0.1:9090
workspace: project · owner login required
go 1.25+node 18+ loopback by default

Set a password first

Copy wede.config.example.json to wede.config.json and replace the CHANGE_ME_BEFORE_USE placeholder. Three bad attempts locks the login, and the lockout survives a restart.

There's an installer, with caveats

install.sh fetches a release binary and generates a config with a random password. It does no checksum verification, so download and read it rather than piping it into a shell.

Reaching it from elsewhere

wede binds to 127.0.0.1 and speaks plain HTTP on purpose. Put Caddy or nginx in front for TLS, or use the built-in tunnel — both are written up in Public access.

Know what an editor link is

An editor link hands over a real login shell as the user running wede. Treat those links like SSH keys, and read Hardening before you expose anything.

srcsecurity.md Markdown

Honest about the sharp edges.

Self-hosting moves the trust boundary onto you. Here is exactly where it sits — including the part that isn't flattering.

Secrets are hashed at rest

Session and share tokens are 32 random bytes; only their SHA-256 hashes touch disk, in 0600 files. Comparisons are constant-time.

Roles are enforced server-side

Viewers cannot write, spawn terminals or mutate git — the middleware gates the routes, not just the UI. Redeeming a link is rate-limited to 10 tries per IP per minute.

Workspaces are untrusted by default

A cloned repo's task and formatter config does nothing until you explicitly trust that workspace. Paths are checked against symlink escape on every access.

Editor links are shell access

An editor gets an unsandboxed login shell as the OS user running wede — full environment, full filesystem, your SSH keys. There is no sandbox. Share accordingly.

vulos.json JSON

Part of Vulos

Vulos is an open, self-hostable web OS and its apps — rooted in vula, the Zulu and Xhosa word for open. wede runs perfectly alone, and drops into the Vulos shell as a first-class app when you want it there.

Explore Vulos →

Your editor, your machine,
your people in it.

Free, dual-licensed MIT or Apache-2.0, and yours to keep running long after anyone stops shipping updates.

main 2↑ 0↓ 3 online hero.tsx Ln 1, Col 1 UTF-8 wede 0.5.0