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

# repos.update()

> Update repository metadata, tags, default bookmark, or upstream remote.

Update mutable repository fields.

**Required scope: `write`**

```ts theme={null}
const repo = await mesa.repos.update({
  repo: 'app',
  default_bookmark: 'main',
  tags: { env: 'prod', stale: null },
});
```

## Options

<ParamField path="repo" type="string" required>
  Current repository name.
</ParamField>

<ParamField path="org" type="string | undefined">
  Organization override.
</ParamField>

<ParamField path="name" type="string | undefined">
  New repository name.
</ParamField>

<ParamField path="default_bookmark" type="string | undefined">
  New default bookmark name.
</ParamField>

<ParamField path="tags" type="Record<string, string | null> | undefined">
  Patch repository tags. String values set tags, `null` removes tags, and omitted keys are unchanged.
</ParamField>

<ParamField path="upstream" type="object | null | undefined">
  Set, replace, or remove the upstream remote. Omit to preserve the current upstream, pass `null` to remove it, or pass an object to attach/update it.
</ParamField>

## Upstream auth updates

On update, upstream credentials are tri-state: omit `upstream` to preserve the whole upstream, pass `upstream: null` to remove it, pass `upstream.auth: null` to clear credentials, or pass token / username-password auth to replace credentials.

## Response

<ResponseField name="id" type="string">
  Repository ID.
</ResponseField>

<ResponseField name="org" type="string">
  Organization slug.
</ResponseField>

<ResponseField name="name" type="string">
  Repository name.
</ResponseField>

<ResponseField name="default_bookmark" type="string">
  Default bookmark name.
</ResponseField>

<ResponseField name="head_change_id" type="string">
  Current change ID at the default bookmark tip.
</ResponseField>

<ResponseField name="upstream" type="UpstreamConfig | null">
  Configured upstream remote, or null when no upstream is configured.
</ResponseField>

<ResponseField name="created_at" type="string">
  Creation time.
</ResponseField>

<ResponseField name="tags" type="Record<string, string>">
  Repository tags.
</ResponseField>

### UpstreamConfig

<ResponseField name="url" type="string">
  Upstream Git remote URL.
</ResponseField>

<ResponseField name="auth_kind" type="'token' | 'username_password' | null">
  Stored upstream authentication kind, or null when the upstream is public.
</ResponseField>
