---
title: "DropletCategory, DroppyKit"
description: "The shelf of the Store a droplet sits on."
canonical: "https://getdroppy.app/docs/droppykit/api/droplet-category"
last-updated: "2026-09-09"
---

# DropletCategory

The shelf of the Store a droplet sits on.

`enum DropletCategory`

A closed set, and it is closed because it is not a label: it is the Store section the droplet appears under. `category` was a free `String` documented as "for example Productivity or Media", so a droplet could declare anything, pass validation, and then be filed under Productivity by a host that recognises three values — the author's choice disappearing without an error anywhere along the way.

**Adding a case means adding a Store section in Droppy.** A value the Store cannot show is a value that silently becomes Productivity again, which is the bug this type exists to close.

## Cases

### DropletCategory.productivity

`case productivity`

Getting work done: calendars, notes, timers, launchers, meetings.

### DropletCategory.media

`case media`

Music, video and playback.

### DropletCategory.ai

`case ai`

On-device models, transcription, generation, recognition.

### DropletCategory.capture

`case capture`

The screen and the camera: capture, recognition of what is on it. Since 1.12.0.

### DropletCategory.files

`case files`

Documents and transfers: converting, compressing, sharing files. Since 1.12.0.

### DropletCategory.system

`case system`

The Mac itself: windows, the menu bar, input, notifications, stats. Since 1.12.0.

## Initializers

### init(rawValue:)

`init?(rawValue: String)`

## Type properties

### allowedValues

`static var allowedValues: String { get }`

The values a manifest may carry, for an error message that tells the author what to write instead.

## Properties

### catalogCategory

`var catalogCategory: DropletCategory { get }`

The value the Store catalog's `category` field carries for this category. That field is what every Droppy before 15.3 reads, and it knows only the first three; the catalog's `section` carries the category itself. Since 1.12.0.

## Type methods

### resolve(_:)

`static func resolve(_ rawCategory: String) -> DropletCategory?`

The category a manifest's raw string means, or `nil` when it names none of them.

Case-insensitive, because a manifest writes it the way it reads in the Store ("Productivity") and the Store matches it lowercased.
