Quick start
Installation
Prerequisites
Node.js v20 or higher and a package manager such as npm (included in Node.js) are required to install and use the Tairu framework.
Handler package
First, let's install the handler package to create Tiles server-side.
- npm
- pnpm
npm install @tairu/handler
pnpm add @tairu/handler
Your first Tile
Creating the handler
Let's create a file named handler.jsx
(or handler.tsx
if you want to use TypeScript), with the following contents:
import { handle } from '@tairu/handler'
function myFirstTileHandler() {
return {
type: "Tile",
version: "0.1",
props: {
title: "Demo tile",
children: [
{ type: "Text", props: { children: ["Hello Tairu!"] } }
]
}
}
}
export default handle(myFirstTileHandler)
Here, the myFirstTileHandler()
function at line 3 returns an object matching the Tile protocol and the default export of the module (line 16) wraps the handler function in the handle()
call to run the Tairu server logic.
Running the server
The simplest way to run a Tile server is to use the Tairu CLI:
- npm
- pnpm
npx tairu serve handler.jsx
pnpm dlx tairu serve handler.jsx
Displaying the Tile
The Tile can be displayed in any Web browser simply by accessing its URL, http://localhost:3210
by default when using the Tairu CLI, try it out!
The Tairu CLI can also be used to render simple (text) Tiles in a terminal, for example we can render our first Tile:
- npm
- pnpm
npx tairu open http://localhost:3210
pnpm dlx tairu open http://localhost:3210
Improving the Tile
Using JSX
Tairu uses React internally, so JSX can be used to define Tiles instead of JSON. Our handler.jsx
file can be rewritten as:
import { Text, Tile, handle } from '@tairu/handler'
function myFirstTileHandler() {
return (
<Tile title="Demo tile">
<Text>Hello Tairu!</Text>
</Tile>
)
}
export default handle(myFirstTileHandler)
Here, we import the Text
and Tile
components from the @tairu/handler
package and use them to rewrite our Tile using JSX.
Tairu is not a React framework, it only uses the JSX syntax for convenience. Only the components exported by the @tairu/handler
package can be used in Tile handlers.
Adding interactions
Let's add a text input to our Tile so that we can change the text with the input value:
import { SubmitAction, Text, TextInput, Tile, handle } from '@tairu/handler'
function myFirstTileHandler(request) {
return (
<Tile
input={<TextInput label="What is your name?" />}
actions={<SubmitAction label="Send" />}
title="Demo tile">
<Text>Hello {request.action?.value ?? 'stranger'}!</Text>
</Tile>
)
}
export default handle(myFirstTileHandler)
Here, we add a TextInput
element (line 6) to our Tile
and a SubmitAction
element (line 7) to submit the input value to the handler.
Using the request
argument provided to our handler (line 3), we can display the submitted action value or a fallback value (line 9).