- Introduction
- Set it up
- Install
- Your first program
- The three lifecycles
- Talking to Tangle
- Build something real
- Working in the graph
- Connecting an account
- A public address
- Putting a person in the loop
- The language
- How a program runs
- Syntax
- Types
- Groups
- Loops
- Streams and buses
- Triggers and routes
- Files and reuse
- What the compiler refuses
- Writing nodes
- What a node is
- Your first node
- metadata.json
- The ctx
- Reading inputs, emitting outputs
- Custom types
- Showing something in the graph
- Storage
- Surviving a restart
- Writing a trigger
- Talking to a live caller
- Streams and buses in Rust
- Cancelling and steering runs
- Infrastructure nodes
- Testing a node
- Packaging
- Connections
- How connections work
- The apps file
- Using a connection in a node
- Declaring a service
- Events from a service
- Measuring what a call costs
- Running programs
- The CLI
- Starting and stopping things
- The journal
- Versions, seeds and frozen examples
- Files at run time
- The browser extension
- Programs with instances
- Deploying to your cloud
- How the runtime is built
- Why it is shaped this way
- Things people say to me
- Sequential Diffusion Programming
- The commandments of plumbing
- Design principles
- The three fronts
- How I think about AI safety
- Appendix
- Glossary
- Where this is going