How images are stored and served in Eventky.
Images use Pubky's two-record pattern:
- Blob — Raw binary data stored at
/pub/pubky.app/blobs/:id - File — JSON metadata referencing the blob at
/pub/pubky.app/files/:id
Use uploadImageFile() to upload images:
import { uploadImageFile } from "@/lib/pubky/files";
const fileUri = await uploadImageFile(session, userId, file);
// Returns: pubky://userId/pub/pubky.app/files/fileIdThis function:
- Reads file as
Uint8Array - Creates blob record via
PubkySpecsBuilder.createBlob() - Uploads raw bytes to homeserver
- Creates file metadata via
PubkySpecsBuilder.createFile() - Uploads file JSON to homeserver
import { deleteImageFile } from "@/lib/pubky/files";
await deleteImageFile(session, fileUri);Deletes both blob and file records.
Images are served through Nexus, which:
- Indexes uploaded files
- Generates size variants
- Caches for performance
import { getPubkyImageUrl, getPubkyAvatarUrl } from "@/lib/pubky/utils";
// Event/calendar images
getPubkyImageUrl(fileUri, "main"); // Full size
getPubkyImageUrl(fileUri, "feed"); // Thumbnail
// User avatars
getPubkyAvatarUrl(userUri);| Variant | Use Case | Size |
|---|---|---|
main |
Full display, modals | Original/large |
feed |
Lists, thumbnails | Smaller |
https://nexus.eventky.app/file/{userId}/{fileId}/{variant}
https://nexus.eventky.app/avatar/{userId}
Images are referenced by their file URI:
// Event with image
const event = {
// ...
image_uri: "pubky://userId/pub/pubky.app/files/abc123"
};
// Calendar with image
const calendar = {
// ...
image_uri: "pubky://userId/pub/pubky.app/files/xyz789"
};lib/pubky/files.ts— Upload/delete functionslib/pubky/utils.ts— URL helperstypes/image.ts— Variant types