# voxal init

> Scaffold a new voxal app and link it to a project

`voxal init` creates a new app directory, links or creates a project for it, and writes a
starter app plus its config. It is the quickest path from nothing to a deployable app.

```bash
voxal init [name]
```

The `name` argument is optional. If you omit it, the CLI prompts you for one.

## What it does

1. **Validates the name** and fails fast if a directory with that name already exists.
2. **Signs you in** if needed. On an interactive terminal it offers to log you in inline. See
   [Authentication](/cli/auth).
3. **Links or creates a project.** An interactive menu lets you connect to an existing project
   or create a new one, respecting your [plan limit](/cli/projects).
4. **Scaffolds the app** into `./<name>/`.

## What gets created

```text
my-app/
├── package.json        depends on @voxalsh/sdk
├── voxal.json          { "name": "my-app", "main": "app.js" }
├── app.js              a createApp() starter (core SDK, not React)
├── .gitignore          adds .voxal
└── .voxal/
    └── project.json    local link cache, { "name": "my-app" }
```

The generated `app.js` is a plain [core SDK](/sdk) app built with `createApp()`. For a richer
React starter, use `npm create voxal-app` instead.

<Callout title="init vs. create-voxal-app">
`voxal init` scaffolds a core-SDK `app.js`. `npm create voxal-app <name>` scaffolds a React
`app.jsx` or `app.tsx` (it asks TypeScript or JavaScript) and installs `voxalsh` as a local
dependency. Both produce a deployable app; pick the one that matches how you want to build
[UIs](/sdk/ui).
</Callout>

## Name rules

App and project names match `/^[a-z0-9][a-z0-9-]{0,62}$/`: lowercase letters, digits, and
hyphens, starting with a letter or digit, up to 63 characters. Names are normalized to
trimmed lowercase. Some names are reserved (see [Projects](/cli/projects)).

## Next steps

After scaffolding, `voxal init` prints the next commands to run:

```bash
cd my-app
npm install
voxal deploy
ssh my-app@voxal.sh
```

Run [`voxal dev`](/cli/dev) first if you want to preview the app locally before deploying.

---

Source: https://docs.voxal.sh/cli/init
