# Tutorials Learn Lux by building real projects. ## Standard Programs These tutorials cover common programming tasks: | Tutorial | What You'll Build | Concepts | |----------|-------------------|----------| | [Calculator](calculator.md) | REPL calculator | Parsing, evaluation, REPL loop | | [Todo App](todo.md) | CLI task manager | File I/O, data structures | | [HTTP Client](http-client.md) | API consumer | HTTP effects, JSON parsing | | [Word Counter](word-counter.md) | Text analyzer | File reading, string ops | ## Effect Showcases These tutorials demonstrate Lux's unique effect system: | Tutorial | What You'll Learn | Key Concept | |----------|-------------------|-------------| | [Dependency Injection](dependency-injection.md) | Testing with mock handlers | Handler swapping | | [State Machines](state-machines.md) | Modeling state transitions | Custom effects | | [Effects Cookbook](effects-cookbook.md) | Common effect patterns | Handler patterns | ## Quick Start: Your First Project ### 1. Create Project Directory ```bash mkdir my-first-lux cd my-first-lux ``` ### 2. Create Main File ```lux // main.lux fn main(): Unit with {Console} = { Console.print("Welcome to my Lux project!") Console.print("Enter your name:") let name = Console.readLine() Console.print("Hello, " + name + "!") } let output = run main() with {} ``` ### 3. Run It ```bash lux main.lux ``` ### 4. Add a Module ```lux // lib/greetings.lux pub fn hello(name: String): String = "Hello, " + name + "!" pub fn goodbye(name: String): String = "Goodbye, " + name + "!" ``` ```lux // main.lux import lib/greetings as greet fn main(): Unit with {Console} = { Console.print("Enter your name:") let name = Console.readLine() Console.print(greet.hello(name)) Console.print(greet.goodbye(name)) } let output = run main() with {} ``` ## Project Ideas by Difficulty ### Beginner - **Temperature converter** - Convert between Celsius, Fahrenheit, Kelvin - **Number guessing game** - Random number with hints - **Simple quiz** - Multiple choice questions with scoring - **Unit converter** - Length, weight, volume conversions ### Intermediate - **Markdown previewer** - Parse basic Markdown to HTML - **Contact book** - CRUD with file persistence - **Simple grep** - Search files for patterns - **CSV processor** - Read, filter, transform CSV files ### Advanced - **Test framework** - Use effects for test isolation - **Config loader** - Effect-based configuration with validation - **Mini interpreter** - Build a small language - **Chat client** - HTTP-based chat application ### Effect Showcases - **Transaction system** - Rollback on failure - **Capability security** - Effects as capabilities - **Async simulation** - Model async with effects - **Dependency graph** - Track and inject dependencies ## How to Use These Tutorials 1. **Read through first** - Understand the goal 2. **Type the code** - Don't copy-paste 3. **Experiment** - Modify and see what happens 4. **Build your own** - Apply concepts to your ideas ## Getting Help - Check the [Language Reference](../reference/syntax.md) - See [examples/](../../examples/) for working code - Use the REPL to experiment Happy building!