# Developer overview (/docs/products/dash-dots/developers)

A dot is a mini app inside Dash, Monime's money app for Sierra Leone. Meter top-ups in Bo, Lungi ferry tickets, a Freetown cookshop menu: each can be a dot that people open from Dash, with nothing to install.

You build dots with Dot, Monime's framework, and the Monime CLI. Each dot belongs to a business's Space, its account on Monime, and you work on the dot as a member of that Space. If you're new to dots, start with the [quickstart](/docs/products/dash-dots/developers/quickstart), then build a ticket dot in the [tutorial](/docs/products/dash-dots/developers/tutorial).

## How a page works

A dot is a set of pages. Each page has a view (`view.dml`, markup a lot like HTML), a state (its data) and a controller (TypeScript that changes the state when someone taps or types).

```xml title="pages/index/view.dml"
<View>
  <Text variant="title">{{ count }} taps</Text>
  <Button onClick="increment">Tap me</Button>
</View>
```

```ts title="pages/index/controller.ts"
export default definePage({
  initialState: { count: 0 },
  mutations: {
    increment: (state) => ({ count: state.count + 1 }),
  },
});
```

`{{ count }}` shows the state's `count` and updates when it changes. The button runs `increment`, a mutation. [Pages and state](/docs/products/dash-dots/developers/pages-and-state) explains mutations, and the actions that do slower work like calling your server.

## What's in a project

| File or folder | What it holds                                          |
| -------------- | ------------------------------------------------------ |
| `dot.json`     | Name, version, permissions and the hosts the dot calls |
| `dot.ts`       | The list of pages and the theme                        |
| `pages/`       | A folder for each page                                 |
| `statics/`     | Images and your own icons                              |
| `.env`         | Public settings                                        |
| `.dot/`        | Types the CLI writes. Leave them alone                 |

[Project configuration](/docs/products/dash-dots/developers/project-configuration) goes through each one.

## What's stable in the beta

These won't change during the beta: Dash's calls and error codes (Dash API 1.0), payments, the `dot.json` fields and permissions, `definePage` and `defineDot`. They can gain new options in 1.x releases, but nothing is removed or changed. Components aren't frozen. They can gain props and change how they look, so check your pages after you update Dot. See [Versions](/docs/products/dash-dots/reference/dash-api/versions), and [What changed in Dot](/docs/products/dash-dots/reference/changelog) for each release.
