# grove.secrets.application.set()

Store or replace an application Keychain value.

## Signature

```ts
grove.secrets.application.set(key: string, value: string): Promise<null>
```

## Availability

All packaged runtimes with storage.secure, including settings pages. The storage capability for persistent browser data is separate.

## Parameters

| Parameter | Required | Description |
| --- | --- | --- |
| `key` | Yes | Nonempty key after trimming surrounding whitespace, at most 200 characters, no control characters. |
| `value` | Yes | String, at most 16,384 characters. Empty string is allowed; objects and binary values must be explicitly encoded. |

## Return value

Resolves to `null` after the Keychain operation succeeds.

## Behavior and errors

The namespace is isolated by extension identifier and shared across every network instance of that extension. It also matches the default namespace when grove.info.networkID is empty. An existing value for the same normalized key is replaced. JSON serialization is your responsibility. Missing grants, invalid keys/values, and Keychain failures reject with Error. Handle failures without logging credentials. Uninstall removes the extension's secret namespaces; these methods do not access Mango's own network passwords.

## Example

```js
try {
  await grove.secrets.application.set('service-session', JSON.stringify({ enabled: true }))
} catch {
  console.error('Could not save the service session.')
}
```

See [Storage and settings](storage-and-settings.md).

