> ## 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>

          Open the Sail shell:

          <div className="sail-prompt-shell">
            ```bash theme={null}
            sail shell
            ```
          </div>

          Create a Sailbox and connect to it as root:

          <div className="sail-prompt-sail">
            ```bash theme={null}
            create --app sailbox-quickstart --name quickstart
            connect
            ```
          </div>

          You are now inside the Sailbox. Run anything you like, then leave it:

          <div className="sail-prompt-root">
            ```bash theme={null}
            exit
            ```
          </div>

          Back in the Sail shell, watch live usage, then clean up:

          <div className="sail-prompt-sail">
            ```bash theme={null}
            top
            terminate
            exit
            ```
          </div>
        </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::{Client, CreateSailboxRequest, 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(),
                          ..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).
* Limit what a Sailbox can reach with [Network policy](/sailboxes-network-policy).
* Checkpoint, clone from checkpoints, pause, and sleep VMs in
  [Lifecycle](/sailboxes-lifecycle).
* Create and operate Sailboxes from any language over the
  [HTTP API](/sailboxes-http-api).
