---
title: "MenuBarExtraDescriptor, DroppyKit"
description: "Static description of a menu bar extra a droplet contributes."
canonical: "https://getdroppy.app/docs/droppykit/api/menu-bar-extra-descriptor"
last-updated: "2026-09-09"
---

# MenuBarExtraDescriptor

Static description of a menu bar extra a droplet contributes.

`struct MenuBarExtraDescriptor`

Static description of a menu bar extra a droplet contributes. The host shows it as a tile in Droppy's Command Center, the panel under Droppy's one menu bar icon.

## Initializers

### init(title:systemImage:makeContent:)

`init(title: String, systemImage: String, makeContent: @escaping @MainActor @Sendable () -> AnyView)`

Creates a descriptor.

## Properties

### makeContent

`let makeContent: @MainActor @Sendable () -> AnyView`

Builds the content shown when the tile is pressed.

Called each time the content opens, on the descriptor read at that moment, so a value the closure captures is current for that opening. The host shows it as a detail over the Command Center's page, at the panel's width; give a list that can grow without bound a fixed height and let it scroll.

`@Sendable` is explicit rather than inferred. A host compiled with approachable concurrency (SE-0434) treats every global-actor-isolated function type as `@Sendable` already, while this module's interface is emitted without that feature. Leaving it implicit therefore made the two spellings of the SAME type disagree across the module boundary, and Droppy's own conformance to this protocol failed to compile with a "sendability of function types does not match" error that named no difference a reader could see. Written out, it means one thing everywhere.

### systemImage

`let systemImage: String`

SF Symbol shown on the tile.

### title

`let title: String`

The tile's title, also read by VoiceOver, sentence case.
