---
title: "DropletCreator, DroppyKit"
description: "Who made a droplet."
canonical: "https://getdroppy.app/docs/droppykit/api/droplet-creator"
last-updated: "2026-09-09"
---

# DropletCreator

Who made a droplet.

`struct DropletCreator`

Every droplet carries one, and every surface that lists droplets shows it: the Store's rows, the droplet's detail page, and the cards on getdroppy.app/droplets. A user should never have to guess whether something came from Droppy or from the community.

## Cases

### DropletCreator.Kind.droppy

`case droppy`

Published by Droppy itself.

### DropletCreator.Kind.community

`case community`

Published by a third-party developer.

## Initializers

### init(from:)

`init(from decoder: any Decoder) throws`

### init(name:kind:url:avatar:)

`init(name: String, kind: Kind, url: URL? = nil, avatar: String)`

### init(name:kind:url:avatar:gitlab:)

`init(name: String, kind: Kind, url: URL? = nil, avatar: String, gitlab: String?)`

Creates a creator with a GitLab username. (DroppyKit 1.11.0)

### init(rawValue:)

`init?(rawValue: String)`

## Properties

### avatar

`let avatar: String`

Filename of the creator's avatar, relative to the droplet's `Assets/` directory. **Required.**

A square PNG, at least 256×256, with no built-in rounding: every surface clips it to a circle itself, so a pre-rounded image ends up rounded twice and the corners go muddy. Transparency is allowed.

This is the small round mark beside the droplet's name in the Store, so it has to read at 20 points. A wordmark will not; a monogram, a face, or a symbol will.

### gitlab

`let gitlab: String?`

The maker's GitLab username, without the `@`. (DroppyKit 1.11.0)

Required by the Droplet Store repository (gitlab.com/droppyformac1/droplets): it generates `CODEOWNERS` from this field, which is what gets the maker asked before someone else's change to their droplet merges. Optional in the manifest itself, so a droplet built elsewhere still decodes.

### kind

`let kind: Kind`

Whether this is a first-party or community droplet. Community submissions are always published as `.community`; the review tool refuses a submission that claims `.droppy`.

### name

`let name: String`

Display name of the person or company, as it should appear in the Store. Sentence case, no marketing suffixes.

### url

`let url: URL?`

A page the user can visit to learn who you are. Optional, but shown as a link on the detail page when present.

## Methods

### encode(to:)

`func encode(to encoder: any Encoder) throws`
