# grove.memberActions.register()

Replace native member-menu actions and their selected state.

## Signature

```ts
grove.memberActions.register(actions: {
  id: string; label: string; selectedLabel?: string
  selectedMemberKeys?: string[]; selectedIcon?: string
}[]): void
```

## Availability

Native member menus expose contributions from server-scoped runtimes with ui.member-actions. A server Root or server tab can contribute; application/composer/settings contexts cannot.

## Parameters

| Parameter | Required | Description |
| --- | --- | --- |
| `actions` | Yes | Complete replacement list; [] clears it. |
| `id` | Yes | Trimmed/lowercased nonempty letters, numbers, hyphen, underscore, or dot. |
| `label` | Yes | Nonempty menu label, collapsed to one line and capped at 80 characters. |
| `selectedLabel` | No | Alternate label for selected members, same limit; absent/empty keeps label. |
| `selectedMemberKeys` | No | Exact canonical member keys from Mango events/snapshots. Default []; up to 4,096 unique nonempty keys of at most 128 UTF-8 bytes. |
| `selectedIcon` | No | SF Symbol for selected members, capped at 64 characters. |

## Return value

Returns `undefined`; no accepted-list result.

## Behavior and errors

Up to eight valid unique actions are retained; first duplicate ID wins. Mango inspects at most 32 action candidates and 16,384 selected-key candidates per action. Selected keys are compared as supplied, not inferred from nicknames. The same member key can appear in several channels. Registration does not invoke an action: an explicit native click emits memberAction with host-owned context.

## Example

```js
grove.on('memberAction', event => {
  if (event.action !== 'mark') return
  grove.memberActions.register([{
    id: 'mark', label: 'Mark member', selectedLabel: 'Unmark member',
    selectedMemberKeys: [event.memberKey], selectedIcon: 'star'
  }])
})
grove.memberActions.register([{ id: 'mark', label: 'Mark member' }])
```

See [Event reference](events.md#memberaction).

