symphony

Press play on your code.

Symphony turns every function of a Go program into a graph you can follow, change and run. Underneath, it's still your Go code.

  • Any Go folder, no setup
  • Go and goer come in the box
  • Linux and Windows, free under MIT
  • Works with Claude, Codex and opencode
func Counter(s State, m Msg) State { switch m.(type) { case Tick: if s.Count < 100 { s.Count = s.Count + 1 } case Boom: panic("counter asked to crash") case Reset: s.Count = 0 } return s}
1 2 3 4 5 6 Counter switch m.(type) if s.Count < 100 panic("…") s.Count = 0 s.Count = s.Count + 1 return s

Counter, a small function from our made-up example, as code and as Symphony draws it. Each Tick message lights the steps it takes and adds one to the count. Point at a line or a node and its partner lights up: they're one and the same, and every change on the graph is written back to the file.

A made-up example you've probably lived: it's Friday afternoon, a counter is stuck at 100, and you're scrolling a switch statement to work out which branch ran. On the graph, you follow the lit wire.

New to Go? Five words this page leans on.

Function
One named piece of a program. Symphony draws each one as its own graph.
Package
A folder of code that belongs together. A program is a few of them.
Type
The kind of data something is: a number, text, or a shape you've named.
Test
A small function that checks another one does what it should.
Actor
A piece of a program that waits for messages and reacts to each one.

What you can do with it.

Source

The picture is the code

Open any folder of Go code: its functions are laid out as cards, and each is a graph drawn from the file itself, so it always matches. Move a wire and the .go file changes. The only extra thing saved is where you dragged the boxes.

Symphony with the explorer on the left and the Counter function drawn as nodes and wires on the canvas.
Run

Watch it run

Press Run and the path your program takes lights up as it goes, with each value shown on its pin. A crash marks the node that went wrong. A breakpoint can wait for a condition you pick from lists.

Counter running: the path a Tick message took is lit across the graph, and the run dock below lists the message and the actor's count.
Edit

Drag, pick, done

Pull a wire from a pin and pick what comes next from a list that already knows your types. Types are picked too, and a list or a map of one is a couple more picks. Nothing needs Go written at the keyboard; the / bar is there if you'd rather.

The Types canvas: struct nodes wired to the types their fields are made of, with small badges saying list, pointer and map by string.
Tests

Tests are graphs too

A test opens like any function. Run it and the result lands on its graph, with the node that complained and what it said. Coverage puts smoke over what the tests never reached. Test this function writes a test for you, with cases you fill in as a form.

A test's graph after a run with coverage: the entry marked passed, and smoke drawn over the nodes the test never reached.
Explore

Get your bearings in a big codebase

The call graph shows which functions use which, Paths lists every route from main, and the world map turns packages into islands that light up as you visit them. Find searches every function in the project at once.

The world map: a module's packages as raised hex islands joined by bridges, some still under fog.
Actors

See the whole system

Symphony also works with goer, our small language that adds actors to Go and builds right alongside it. Think of actors as people passing notes. The system view shows who's passing what to whom, and a run shows what each one is holding.

More about goer at goer.p6m.onl
Toolchain

Nothing else to install

The download comes with its own copy of Go and goer. Unpack it, open a folder, and you're away.

Build it with an AI you can watch.

An AI assistant such as Claude, Codex or opencode can work on the graph while you watch, through MCP, a common way for assistants to use other apps. One click in Settings sets it up on your computer.

Watch

See every move

The assistant gets its own pointer on the canvas. You see it glide to a pin, open the list and pick, at a pace you can follow or, if you'd rather, at once. Ctrl+Z undoes anything it did.

The assistant's strip over the canvas with its chat open, asking a question with buttons for each answer.
Talk

Chat while it works

The corner of the window always says what the assistant is up to. Click it for a chat: it tells you what it's doing, asks when a choice is yours, and Stop pauses it until you answer.

No code

It builds the way you do

The assistant never types Go, because we'd rather you never have to either. When the lists lack something, it says so and asks how to go on. Symphony keeps that list, and it's how we decide what to add next.

Run

It asks before it acts

It can start a project, add modules, run and debug your program, and commit with git. Before it commits, changes modules or runs anything, Symphony asks you first.

Learn it by playing.

Open Learn in Symphony's toolbar and pick one.

Lessons

Eight short lessons

From one Go file to two actors talking to each other, with a test that goes red, then green, on the way. Stuck on a step? Show me does the move.

A function whose test passed after it changed: a cycle mark on the test and a tidy star on the function's entry.
Quests

A map of quests

The same lessons laid out as quests on a map, with a badge for each one you finish.

The quest map with the first badges earned.
Puzzles

Six broken functions

Each comes with tests that fail. Fix the function, then have another go with fewer nodes and fewer crossed wires to earn more stars.

A failing test's graph: the entry marked failed and the node that complained outlined, with its message.

What it won't do.

Symphony is one of the q3k.app apps we make at Earnest Ventures. We'd rather you hear these from us than find out after the download.

Platforms

Two builds we've actually run

We make Symphony on Linux and have worked in the Windows build too, both on an Intel or AMD chip. The builds for ARM chips come out of the same pipeline, but we haven't run them ourselves yet. If you're on a Mac, sorry, there isn't a download for you.

Go

You'll still be reading Go

You never have to write Go to build in Symphony, but it works on Go code, so you'll see Go on the nodes. If you're new to it, the graphs help you follow along, and a Go tutorial alongside covers the language itself.

AI

Assistants still get stuck

Some things can't be built from the lists yet. When an assistant hits one, it stops and asks you rather than working round it, which is slower but keeps your project something you can follow.

Early

It's young

We're still sanding off rough edges. What's on disk is plain Go, so you can always carry on in the editor you already use. Report a problem opens an issue on our GitLab under your own account, and Symphony is free to use under the MIT licence.

Open a folder. Press play.

Get Symphony