---
title: Shared Library
category: concept
slug: shared-library
summary: "Brand assets with stable CDN URLs (logos, photos, icons, fonts)."
---
# Shared Library

Brand assets with stable CDN URLs (logos, photos, icons, fonts).

The shared library hosts brand assets — logos, photos, icons, fonts — that any [Droplet](/docs/droplets) or [Skill](/docs/skills) can reference. Assets get stable CDN URLs that keep working even when the asset is renamed or archived.

The library lives at S3 paths under `_library/{collection}/` and is fronted by CloudFront. The default collection is `brand`; you can upload into others (e.g. `product`, `marketing`) by passing `--collection`.

## Using an asset in a Droplet

Every collection publishes a JSON catalog with every asset's CDN URL, content type, and metadata:

```
https://drop-apps.himarley.xyz/_library/brand/catalog.json
```

Embed an asset directly by URL — no auth required, no signed URL needed:

```html
<img src="https://drop-apps.himarley.xyz/_library/brand/assets/{id}/logo.svg" alt="Hi Marley">
```

## Permissions

Any authenticated user can browse the library. Uploading, editing, and archiving require the **Library Admin** role (the `@drop-library-admins` [system role group](/docs/user-groups)). Site admins manage the role membership in **Settings → User Permissions**.

## Lifecycle

Assets have three states:

- **Active** — live in the catalog, embedable from any Droplet.
- **Archived** — hidden from the catalog but the CDN URL still resolves. Use for assets that need to keep working in already-published Droplets but shouldn't be new-use.
- **Deleted** — gone. An asset must be archived first; `delete` is permanent.

## Brand rules

Color hierarchy, typography, logo usage, and voice guidelines live alongside the assets at `/_library/brand/brand-rules.md`. Skills like `pres` and `droplet` read this file to stay on-brand without prompt-stuffing.


## Operations

### Upload an asset

Category is auto-detected from the filename, but pass `--category` to override. Use `--collection` to upload into something other than `brand`. Requires Library Admin.

**CLI**

```bash
# Single asset (category auto-detected)
drop library upload logo_brand_navy.svg

# Bulk upload fonts
drop library upload *.ttf --category font

# Upload into a non-brand collection with tags + AI guidance
drop library upload hero.jpg \
  --collection marketing \
  --tags "hero,homepage" \
  --guidance "Use as the hero image on launch droplets"
```

**MCP**

```json
{
  "tool": "drop_assets_upload",
  "arguments": {
    "filename": "logo_brand_navy.svg",
    "collection": "brand",
    "category": "logo",
    "content": "<base64-encoded bytes>"
  }
}
```

### List library assets

Print the current catalog grouped by category. The same data is available as JSON at `/_library/{collection}/catalog.json` for in-Droplet consumption.

**CLI**

```bash
drop library list
drop library list --collection marketing
```

**HTTP**

```bash
curl https://drop-apps.himarley.xyz/_library/brand/catalog.json
```

### Archive, restore, delete

`archive` removes the asset from the catalog but keeps the CDN URL working. `restore` puts it back. `delete` is permanent and requires the asset to be archived first. All three require Library Admin.

**CLI**

```bash
drop library archive <id>    # remove from catalog
drop library restore <id>    # put back
drop library delete <id>     # permanent (must archive first)
```

