# The Itinera book in Rust > How to build with Itinera in Rust, a workflow framework that keeps business rules separate from flow control. Every example is a complete program that compiles and runs, and what it prints is shown under it. What Itinera does is defined only by the specification: https://github.com/itinera-dev/spec - [Contents](https://itinera-dev.org/book/rust/index.md): every part and chapter, in reading order. ## Welcome - [Welcome to Itinera](https://itinera-dev.org/book/rust/welcome-to-itinera.md) - [How to read this book](https://itinera-dev.org/book/rust/how-to-read-this-book.md) ## Part 1: Why Itinera - [1. But why Itinera?](https://itinera-dev.org/book/rust/01-but-why-itinera.md) - [2. The big picture](https://itinera-dev.org/book/rust/02-the-big-picture.md) ## Part 2: Getting started - [3. Installing Itinera](https://itinera-dev.org/book/rust/03-installing-itinera.md) - [4. A first step](https://itinera-dev.org/book/rust/04-a-first-step.md) - [5. A first journey](https://itinera-dev.org/book/rust/05-a-first-journey.md) - [6. Passing data on](https://itinera-dev.org/book/rust/06-passing-data-on.md) - [7. Giving a step the tools it needs](https://itinera-dev.org/book/rust/07-giving-a-step-the-tools-it-needs.md) - [8. Seeing what happened](https://itinera-dev.org/book/rust/08-seeing-what-happened.md) - [9. Saying what only a step knows](https://itinera-dev.org/book/rust/09-saying-what-only-a-step-knows.md) - [10. More than one reporter](https://itinera-dev.org/book/rust/10-more-than-one-reporter.md) - [11. Naming a journey](https://itinera-dev.org/book/rust/11-naming-a-journey.md) - [12. Trying again](https://itinera-dev.org/book/rust/12-trying-again.md) - [13. A carrier for each attempt](https://itinera-dev.org/book/rust/13-a-carrier-for-each-attempt.md) - [14. Repairing, then trying once more](https://itinera-dev.org/book/rust/14-repairing-then-trying-once-more.md) - [15. Reacting to what a step did](https://itinera-dev.org/book/rust/15-reacting-to-what-a-step-did.md) - [16. Skipping a step](https://itinera-dev.org/book/rust/16-skipping-a-step.md) - [17. Giving up a step early](https://itinera-dev.org/book/rust/17-giving-up-a-step-early.md) - [18. Doing something when the journey ends](https://itinera-dev.org/book/rust/18-doing-something-when-the-journey-ends.md) - [19. Letting policies act on the outside world](https://itinera-dev.org/book/rust/19-letting-policies-act-on-the-outside-world.md) - [20. An optional input](https://itinera-dev.org/book/rust/20-an-optional-input.md) - [21. Deciding where a step's data comes from](https://itinera-dev.org/book/rust/21-deciding-where-a-steps-data-comes-from.md) ## Part 3: Controlling the flow - [22. Finishing a journey early](https://itinera-dev.org/book/rust/22-finishing-a-journey-early.md) - [23. Undoing a charge when the shipping fails](https://itinera-dev.org/book/rust/23-undoing-a-charge-when-the-shipping-fails.md) ## Part 4: Running it for real - [24. Running many journeys](https://itinera-dev.org/book/rust/24-running-many-journeys.md) - [25. Reading the result](https://itinera-dev.org/book/rust/25-reading-the-result.md) - [26. Running async journeys while others wait](https://itinera-dev.org/book/rust/26-running-async-journeys-while-others-wait.md) - [27. Testing a step alone](https://itinera-dev.org/book/rust/27-testing-a-step-alone.md) - [28. Testing a hook or an adapter alone](https://itinera-dev.org/book/rust/28-testing-a-hook-or-an-adapter-alone.md) - [29. Testing the flow with scripted steps](https://itinera-dev.org/book/rust/29-testing-the-flow-with-scripted-steps.md) - [30. Testing a whole journey](https://itinera-dev.org/book/rust/30-testing-a-whole-journey.md) - [31. Stopping a journey when its log fails](https://itinera-dev.org/book/rust/31-stopping-a-journey-when-its-log-fails.md) - [32. Seeing every event of a journey](https://itinera-dev.org/book/rust/32-seeing-every-event-of-a-journey.md) - [33. Giving every reporter what it needs](https://itinera-dev.org/book/rust/33-giving-every-reporter-what-it-needs.md) - [34. Saying which attempt took the money](https://itinera-dev.org/book/rust/34-saying-which-attempt-took-the-money.md) - [35. Giving the rescue step a service of its own](https://itinera-dev.org/book/rust/35-giving-the-rescue-step-a-service-of-its-own.md) - [36. Orders refused before they start](https://itinera-dev.org/book/rust/36-orders-refused-before-they-start.md) - [37. Mistakes caught before a journey](https://itinera-dev.org/book/rust/37-mistakes-caught-before-a-journey.md) - [38. Declaring by hand](https://itinera-dev.org/book/rust/38-declaring-by-hand.md) ## Part 5: Designing with Itinera - [39. Deciding where a decision belongs](https://itinera-dev.org/book/rust/39-deciding-where-a-decision-belongs.md) - [40. Recognising a decision in the wrong place](https://itinera-dev.org/book/rust/40-recognising-a-decision-in-the-wrong-place.md) - [41. Bringing Itinera into existing code](https://itinera-dev.org/book/rust/41-bringing-itinera-into-existing-code.md) - [42. Using a step in another workflow](https://itinera-dev.org/book/rust/42-using-a-step-in-another-workflow.md) - [43. Working with agents](https://itinera-dev.org/book/rust/43-working-with-agents.md) ## Appendices - [Appendix 1: Cheat sheet](https://itinera-dev.org/book/rust/appendix-1-cheat-sheet.md) - [Appendix 2: Glossary](https://itinera-dev.org/book/rust/appendix-2-glossary.md) - [Appendix 3: What this version supports](https://itinera-dev.org/book/rust/appendix-3-what-this-version-supports.md) ## Optional - [Itinera](https://itinera-dev.org/llms.txt): the project, its specification and its languages.