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

# Concepten

## Hoe het werkt

Op hoofdlijnen werkt een template-build als volgt:

1. Los de templatebron op, zoals een standaard basisimage, een bestaande image, een Dockerfile of een andere template.
2. Pas template-instructies toe zoals `runCmd`, `copy`, `makeDir`, `setEnvs` en helpers voor pakketinstallatie.
3. Start, indien geconfigureerd, het startcommando van de template.
4. Wacht totdat de [ready-opdracht](/docs/nl/guides/sandbox-template-authoring#start--ready-commands) slaagt.
5. Sla de voorbereide omgeving op als een herbruikbare template.

De build produceert een `templateId` / `template_id` en een `buildId` / `build_id`. Gebruik de template-ID later met `Sandbox.create(...)`.

## Gebruiker en workdir

Templates kunnen de standaard Linux-gebruiker en werkdirectory instellen die worden gebruikt door latere buildstappen en door de uiteindelijke omgeving.

Gebruik `setUser(...)` / `set_user(...)` wanneer buildcommando's als een specifieke gebruiker moeten worden uitgevoerd. Gebruik `setWorkdir(...)` / `set_workdir(...)` wanneer latere commando's en gekopieerde bestanden relatief aan een specifieke directory moeten worden opgelost.

<CodeGroup>
  ```ts JavaScript & TypeScript icon="js" theme={"system"}
  import { Template } from "novita-sandbox"

  const template = Template()
    .fromUbuntuImage("24.04")
    .setUser("root")
    .setWorkdir("/app")
    .runCmd("apt-get update && apt-get install -y curl")
    .copy("package.json", "/app/package.json")
  ```

  ```python Python icon="python" theme={"system"}
  from novita_sandbox.core import Template

  template = (
      Template()
      .from_ubuntu_image("24.04")
      .set_user("root")
      .set_workdir("/app")
      .run_cmd("apt-get update && apt-get install -y curl")
      .copy("package.json", "/app/package.json")
  )
  ```
</CodeGroup>

Als je deze waarden niet instelt, gebruikt de sandbox de standaardwaarden van de geselecteerde basisimage.

## Caching

Template-builds cachen eerder voltooide lagen, zodat herhaalde builds niet elke instructie opnieuw hoeven uit te voeren.

Dit is meestal wat je wilt voor snelle iteratie. Wanneer je een volledig nieuwe build nodig hebt, schakel je cache uit voor de hele build met `skipCache: true` / `skip_cache=True`, of markeer je de templateketen met `skipCache()` / `skip_cache()`.

<CodeGroup>
  ```ts JavaScript & TypeScript icon="js" theme={"system"}
  import { Template } from "novita-sandbox"

  const template = Template()
    .fromPythonImage("3.12")
    .skipCache()
    .runCmd("pip install -U pip")

  const build = await Template.build(template, "my-template-no-cache", {
    skipCache: true,
  })
  ```

  ```python Python icon="python" theme={"system"}
  from novita_sandbox.core import Template

  template = (
      Template()
      .from_python_image("3.12")
      .skip_cache()
      .run_cmd("pip install -U pip")
  )

  build = Template.build(
      template,
      "my-template-no-cache",
      skip_cache=True,
  )
  ```
</CodeGroup>

Gebruik cache-busting bewust. Het vertraagt builds en moet normaal gesproken worden gereserveerd voor het vernieuwen van dependencies, debugging of wijzigingen in inputs die niet alleen uit de templatedefinitie zichtbaar zijn.
