> ## Documentation Index
> Fetch the complete documentation index at: https://docs.sailresearch.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Quickstart

> Start your first Sailbox and run code inside it

Start a Sailbox, run code inside it, inspect the filesystem, and clean it up.

<Tabs>
  <Tab title="CLI">
    <div className="sail-quickstart-steps">
      <div className="sail-quickstart-step">
        <div className="sail-quickstart-step-index">1</div>

        <div className="sail-quickstart-step-body">
          <p className="sail-quickstart-step-title">Create a Sail account</p>

          Sign up at the [Sail dashboard](https://app.sailresearch.com).
        </div>
      </div>

      <div className="sail-quickstart-step">
        <div className="sail-quickstart-step-index">2</div>

        <div className="sail-quickstart-step-body">
          <p className="sail-quickstart-step-title">Install the Sail CLI</p>

          ```bash theme={null}
          # macOS and Linux
          curl -fsSL https://cli.sailresearch.com/install.sh | sh

          # Windows PowerShell
          irm https://cli.sailresearch.com/install.ps1 | iex
          ```
        </div>
      </div>

      <div className="sail-quickstart-step">
        <div className="sail-quickstart-step-index">3</div>

        <div className="sail-quickstart-step-body">
          <p className="sail-quickstart-step-title">Create and connect to your first Sailbox</p>

          ```bash theme={null}
          $ sail shell # open the Sailbox TUI
          sail ▶ create --app sailbox-quickstart --name quickstart # create a Sailbox
          sail ▶ connect # connect to the Sailbox as root
          root@quickstart:~# ...
          root@quickstart:~# exit # return to sail shell
          sail ▶ top # view live Sailbox usage
          sail ▶ terminate # terminate the Sailbox
          sail ▶ exit # close sail shell
          ```
        </div>
      </div>
    </div>
  </Tab>

  <Tab title="Python">
    <div className="sail-quickstart-steps">
      <div className="sail-quickstart-step">
        <div className="sail-quickstart-step-index">1</div>

        <div className="sail-quickstart-step-body">
          <p className="sail-quickstart-step-title">Create a Sail account</p>

          Sign up at the [Sail dashboard](https://app.sailresearch.com).
        </div>
      </div>

      <div className="sail-quickstart-step">
        <div className="sail-quickstart-step-index">2</div>

        <div className="sail-quickstart-step-body">
          <p className="sail-quickstart-step-title">Install the Python SDK</p>

          ```bash theme={null}
          pip install sail
          # or
          uv add sail
          ```
        </div>
      </div>

      <div className="sail-quickstart-step">
        <div className="sail-quickstart-step-index">3</div>

        <div className="sail-quickstart-step-body">
          <p className="sail-quickstart-step-title">Authenticate</p>

          ```bash theme={null}
          sail auth login
          ```
        </div>
      </div>

      <div className="sail-quickstart-step">
        <div className="sail-quickstart-step-index">4</div>

        <div className="sail-quickstart-step-body">
          <p className="sail-quickstart-step-title">Create and run a Sailbox</p>

          Create `quickstart.py`:

          ```python theme={null}
          import sail


          app = sail.App.find(name="sailbox-quickstart", mint_if_missing=True)

          sb = sail.Sailbox.create(app=app, name="quickstart")

          result = sb.run("python3 -c 'print(\"hello world\")'")
          print(result.stdout)

          sb.fs.write("/tmp/note.txt", "from my machine")
          print(sb.fs.read("/tmp/note.txt").decode())

          sb.terminate()
          ```
        </div>
      </div>

      <div className="sail-quickstart-step">
        <div className="sail-quickstart-step-index">5</div>

        <div className="sail-quickstart-step-body">
          <p className="sail-quickstart-step-title">Run it</p>

          ```bash theme={null}
          python quickstart.py
          ```
        </div>
      </div>
    </div>
  </Tab>

  <Tab title="TypeScript">
    <div className="sail-quickstart-steps">
      <div className="sail-quickstart-step">
        <div className="sail-quickstart-step-index">1</div>

        <div className="sail-quickstart-step-body">
          <p className="sail-quickstart-step-title">Create a Sail account</p>

          Sign up at the [Sail dashboard](https://app.sailresearch.com).
        </div>
      </div>

      <div className="sail-quickstart-step">
        <div className="sail-quickstart-step-index">2</div>

        <div className="sail-quickstart-step-body">
          <p className="sail-quickstart-step-title">Install the TypeScript SDK</p>

          ```bash theme={null}
          npm install @sailresearch/sdk
          npm install --save-dev tsx
          ```
        </div>
      </div>

      <div className="sail-quickstart-step">
        <div className="sail-quickstart-step-index">3</div>

        <div className="sail-quickstart-step-body">
          <p className="sail-quickstart-step-title">Install the Sail CLI</p>

          ```bash theme={null}
          # macOS and Linux
          curl -fsSL https://cli.sailresearch.com/install.sh | sh

          # Windows PowerShell
          irm https://cli.sailresearch.com/install.ps1 | iex
          ```
        </div>
      </div>

      <div className="sail-quickstart-step">
        <div className="sail-quickstart-step-index">4</div>

        <div className="sail-quickstart-step-body">
          <p className="sail-quickstart-step-title">Authenticate</p>

          ```bash theme={null}
          sail auth login
          ```
        </div>
      </div>

      <div className="sail-quickstart-step">
        <div className="sail-quickstart-step-index">5</div>

        <div className="sail-quickstart-step-body">
          <p className="sail-quickstart-step-title">Create and run a Sailbox</p>

          Create `quickstart.ts`:

          ```typescript theme={null}
          import { App, Sailbox } from "@sailresearch/sdk";

          async function main() {
            const app = await App.find("sailbox-quickstart", { mintIfMissing: true });

            const sb = await Sailbox.create({ app, name: "quickstart" });

            try {
              const hello = await sb.run(["python3", "-c", "print('hello world')"]);
              console.log(hello.stdout);

              await sb.fs.write("/tmp/note.txt", "from my machine");
              console.log((await sb.fs.read("/tmp/note.txt")).toString());
            } finally {
              await sb.terminate();
            }
          }

          main().catch((error) => {
            console.error(error);
            process.exitCode = 1;
          });
          ```
        </div>
      </div>

      <div className="sail-quickstart-step">
        <div className="sail-quickstart-step-index">6</div>

        <div className="sail-quickstart-step-body">
          <p className="sail-quickstart-step-title">Run it</p>

          ```bash theme={null}
          npx tsx quickstart.ts
          ```
        </div>
      </div>
    </div>
  </Tab>

  <Tab title="Rust">
    <div className="sail-quickstart-steps">
      <div className="sail-quickstart-step">
        <div className="sail-quickstart-step-index">1</div>

        <div className="sail-quickstart-step-body">
          <p className="sail-quickstart-step-title">Create a Sail account</p>

          Sign up at the [Sail dashboard](https://app.sailresearch.com).
        </div>
      </div>

      <div className="sail-quickstart-step">
        <div className="sail-quickstart-step-index">2</div>

        <div className="sail-quickstart-step-body">
          <p className="sail-quickstart-step-title">Install the Rust SDK</p>

          ```bash theme={null}
          cargo new hello-sail && cd hello-sail
          cargo add sail-rs
          cargo add tokio --features macros,rt-multi-thread
          ```
        </div>
      </div>

      <div className="sail-quickstart-step">
        <div className="sail-quickstart-step-index">3</div>

        <div className="sail-quickstart-step-body">
          <p className="sail-quickstart-step-title">Install the Sail CLI</p>

          ```bash theme={null}
          # macOS and Linux
          curl -fsSL https://cli.sailresearch.com/install.sh | sh

          # Windows PowerShell
          irm https://cli.sailresearch.com/install.ps1 | iex
          ```
        </div>
      </div>

      <div className="sail-quickstart-step">
        <div className="sail-quickstart-step-index">4</div>

        <div className="sail-quickstart-step-body">
          <p className="sail-quickstart-step-title">Authenticate</p>

          ```bash theme={null}
          sail auth login
          ```
        </div>
      </div>

      <div className="sail-quickstart-step">
        <div className="sail-quickstart-step-index">5</div>

        <div className="sail-quickstart-step-body">
          <p className="sail-quickstart-step-title">Create and run a Sailbox</p>

          Replace `src/main.rs` with:

          ```rust theme={null}
          use sail::{
              BaseImage, Client, CreateSailboxRequest, ImageArchitecture, ImageSpec, RunOptions, SailError,
              WriteOptions,
          };

          #[tokio::main]
          async fn main() -> Result<(), SailError> {
              let client = Client::from_env()?;

              let app = client
                  .find_app("sailbox-quickstart", /* mint_if_missing */ true)
                  .await?;

              let sb = client
                  .create_sailbox(
                      &CreateSailboxRequest {
                          app_id: app.id,
                          name: "quickstart".into(),
                          image: ImageSpec {
                              base: Some(BaseImage::Debian),
                              architecture: ImageArchitecture::Arm64,
                              ..Default::default()
                          },
                          ..Default::default()
                      },
                      /* timeout */ None,
                  )
                  .await?;

              let result = async {
                  let hello = sb
                      .run(
                          ["python3", "-c", "print('hello world')"],
                          RunOptions::default(),
                      )
                      .await?;
                  print!("{}", hello.stdout);

                  sb.fs()
                      .write("/tmp/note.txt", b"from my machine", WriteOptions::default())
                      .await?;
                  let note = sb.fs().read("/tmp/note.txt").await?;
                  println!("{}", String::from_utf8_lossy(&note));

                  Ok::<(), SailError>(())
              }
              .await;

              let terminate_result = sb.terminate().await;
              result?;
              terminate_result?;
              Ok(())
          }
          ```
        </div>
      </div>

      <div className="sail-quickstart-step">
        <div className="sail-quickstart-step-index">6</div>

        <div className="sail-quickstart-step-body">
          <p className="sail-quickstart-step-title">Run it</p>

          ```bash theme={null}
          cargo run
          ```
        </div>
      </div>
    </div>
  </Tab>
</Tabs>

## Next steps

* Build custom dependencies into the root filesystem with [Images](/sailboxes-images).
* Learn runtime file transfer in [Filesystem](/sailboxes-filesystem).
* Expose HTTP, raw TCP, and SSH with [Networking](/sailboxes-networking).
* Checkpoint, clone from checkpoints, pause, and sleep VMs in
  [Lifecycle](/sailboxes-lifecycle).
