---
title: "DropletManifestError, DroppyKit"
description: "Why a droplet.json was refused."
canonical: "https://getdroppy.app/docs/droppykit/api/droplet-manifest-error"
last-updated: "2026-09-09"
---

# DropletManifestError

Why a droplet.json was refused.

`enum DropletManifestError`

## Cases

### DropletManifestError.invalidID(_:)

`case invalidID(String)`

The id does not satisfy [`isValid(_:)`](https://getdroppy.app/docs/droppykit/api/droplet-id#is-valid).

### DropletManifestError.idMustBeLowercase(_:)

`case idMustBeLowercase(String)`

A public submission used uppercase in its id.

### DropletManifestError.emptyField(_:)

`case emptyField(String)`

A required field was empty.

### DropletManifestError.summaryTooLong(count:limit:)

`case summaryTooLong(count: Int, limit: Int)`

`summary` is longer than the Store row can show.

### DropletManifestError.iconNotIconComposer(_:)

`case iconNotIconComposer(String)`

`icon` does not name an Icon Composer document.

### DropletManifestError.invalidCreatorAvatar(_:)

`case invalidCreatorAvatar(String)`

`creator.avatar` is missing or is not a PNG.

### DropletManifestError.communityDropletNeedsSource

`case communityDropletNeedsSource`

A community droplet did not declare a public repository.

### DropletManifestError.invalidSourceRepository(_:)

`case invalidSourceRepository(String)`

A community droplet named a repository outside the supported public GitHub/GitLab update path.

### DropletManifestError.communitySubmissionClaimedFirstParty

`case communitySubmissionClaimedFirstParty`

A submission claimed first-party authorship.

### DropletManifestError.unknownCapability(_:)

`case unknownCapability(String)`

A capability string is not one DroppyKit knows.

### DropletManifestError.unknownCategory(_:)

`case unknownCategory(String)`

`category` names no Store section. See [`DropletCategory`](https://getdroppy.app/docs/droppykit/api/droplet-category).

### DropletManifestError.invalidMinAppVersion(_:)

`case invalidMinAppVersion(String)`

`minAppVersion` is not a numeric dotted version.

### DropletManifestError.invalidMinMacOS(_:)

`case invalidMinMacOS(String)`

`minMacOS` is not a numeric dotted version.

### DropletManifestError.noSurfaces

`case noSurfaces`

`surfaces` was empty; a droplet that draws nothing cannot ship.

## Properties

### errorDescription

`var errorDescription: String? { get }`
