# Lustre for React developers In some ways React and Lustre share the same DNA. But in a lot of other ways they can be quite different! This guide is for React developers who are new to Lustre and want to get up to speed quickly. ## How do I...? ### Setup a new project **In React** you are encouraged to use a meta framework like Next.js or Remix. To start a barebones project you need to run `npm install react react-dom`. You will typically use a bundler that can transpile JSX like `npm install --save-dev vite`. Many modern projects use TypeScript as well: `npm install --save-dev typescript`. A simple hello world might look like this: ```jsx // src/index.js import { createRoot } from "react-dom/client"; const root = createRoot(document.getElementById("app")); root.render(

Hello, world

); ``` To run the project you could use Vite's development server with `npx vite`. **In Lustre** you need to install the `lustre` package with `gleam add lustre`. Most Lustre projects will add the dev tools too with `gleam add --dev lustre_dev_tools`. A simple hello world might look like this: ```gleam // main.gleam import lustre import lustre/element/html pub fn main() { let app = lustre.element(html.h1([], [html.text("Hello, world")])) let assert Ok(_) = lustre.start(app, "#app", Nil) } ``` ### Render some HTML **In React** you can use JSX to render HTML elements. JSX is a syntax extension for JavaScript that looks like HTML that lets you interpolate JavaScript expressions into your markup. Here's an example: ```jsx ``` **In Lustre** HTML is rendered by calling functions (this is what JSX compiles to as well). ```gleam button([class("primary")], [text("Click me")]) ``` ### Render some text **In React** a string is a valid type of React node, so you can render text by just writing it in your JSX: ```jsx Hello; ``` To concatenate text with other variables or expressions, you can use curly braces: ```jsx Hello {name} ``` **In Lustre** because of Gleam's type system, all elements must be Lustre's `Element` type. To render text you need to use the `text` function: ```gleam text("Hello") text("Hello" <> name) ``` ### Manage state **In React**... **In Lustre**... ### Handle events **In React**... **In Lustre**... ### Write a component **In React**... **In Lustre**... ### Fetch data **In React**... **In Lustre**... ## Where to go next To walk through setting up a new Lustre project and building your first app, check out the [quickstart guide](https://hexdocs.pm/lustre/guide/01-quickstart.html). If you prefer to learn by example, we have a collection of examples that show off specific features and patterns in Lustre. You can find them in the [examples directory](https://hexdocs.pm/lustre/reference/examples.html) If you're having trouble with Lustre or not sure what the right way to do something is, the best place to get help is the [Gleam Discord server](https://discord.gg/Fm8Pwmy). You could also open an issue on the [Lustre GitHub repository](https://github.com/lustre-labs/lustre/issues).