Open Evnt Event Components
Version: 0.2 DRAFT
Last Updated: 2026-10-20
This document outlines the Open Evnt defined components that can be used to describe an event. These components are used in the components field of an Open Evnt Event document.
1. Introduction
The key words MUST, MUST NOT, REQUIRED, SHALL, SHALL NOT, SHOULD, SHOULD NOT, RECOMMENDED, NOT RECOMMENDED, MAY, and OPTIONAL in this document are to be interpreted as described in BCP 14 (RFC 2119, RFC 8174) when, and only when, they appear in all capitals, as shown here.
How components are carried, how $type is chosen, and how consumers treat unknown components is defined in section 6 (Component Extension Model) of the Open Evnt specification. The Translations and PartialDate types used below are defined in its section 3 (Common Data Types).
A component describes the object whose components array holds it: the event, its venue, or an occurrence.
2. Components
$type | Section |
|---|---|
directory.evnt.text.markdown#0 | 2.1.1 |
directory.evnt.text.plain#0 | 2.1.2 |
directory.evnt.component.link#0 | 2.2 |
directory.evnt.component.source#0 | 2.3 |
directory.evnt.component.splashMedia#0 | 2.4 |
directory.evnt.component.languages#0 | 2.5 |
directory.evnt.component.placeId#0 | 2.6 |
directory.evnt.component.relation#0 | 2.7 |
directory.evnt.component.coordinates#0 | 2.8 |
2.1. Text Components
Text components carry a description of the object in one text format. Their content is a Translations value, so one component holds the description in every language it is given in.
An object MAY hold more than one text component. Consumers SHOULD display one language of one of them, chosen in two steps:
- Language. The consumer takes every language that appears in the
contentof a text component whose$typeit supports, and picks one as forTranslations(Translations, section 3). - Format. Among the supported components that have that language, it picks the format it can display best. Plain text is the last choice when a supported richer format is present.
Producers SHOULD use the plain text component for text they did not write themselves, such as an organizer's description copied from a website or a social media post, so that its line breaks and characters are kept as they are. Text written in several languages at once, such as a post in both Lithuanian and English, goes under mul.
Further formats are added as new text $types. A consumer that does not support one ignores it (section 6) and chooses among the rest.
2.1.1. Markdown Text Component
directory.evnt.text.markdown#0
$type: "directory.evnt.text.markdown#0" REQUIRED
content: Translations REQUIRED
flavor: string? OPTIONALThe content field is the Markdown text, in one or more languages.
The flavor field names the Markdown flavor of every value in content, such as "commonmark" or "gfm". When it is absent, content is CommonMark. Consumers that do not support the named flavor MAY render content as CommonMark.
Consumers MUST NOT render raw HTML in content as HTML. They SHOULD display it as text.
{
"$type": "directory.evnt.text.markdown#0",
"content": {
"en": "Two days of talks and **workshops**.",
"lt": "Dvi dienos pranešimų ir **dirbtuvių**."
},
"flavor": "commonmark"
}2.1.2. Plain Text Component
directory.evnt.text.plain#0
$type: "directory.evnt.text.plain#0" REQUIRED
content: Translations REQUIREDThe content field is the text, in one or more languages, with no markup. Consumers MUST display it as text and MUST keep its line breaks. Consumers MAY turn URLs in it into links.
{
"$type": "directory.evnt.text.plain#0",
"content": {
"mul": "Įėjimas nemokamas, registruotis nereikia.\nEntry is free and no registration is needed."
}
}2.2. Link Component
A link related to the event, such as its website, ticket sales or a social media page.
directory.evnt.component.link#0
$type: "directory.evnt.component.link#0" REQUIRED
url: string REQUIRED
name: Translations? OPTIONAL
disabled: boolean? OPTIONALThe url field is the URL of the link.
The name field is a label for the link. Consumers MAY show the URL when it is absent.
The disabled field, when true, means the link is unavailable for now. Consumers SHOULD NOT present a disabled link as usable.
{
"$type": "directory.evnt.component.link#0",
"url": "https://example.com/tickets",
"name": { "en": "Get Tickets" }
}2.3. Source Component
Where the event data came from, such as an announcement or a news article.
directory.evnt.component.source#0
$type: "directory.evnt.component.source#0" REQUIRED
url: string REQUIREDThe url field is the URL of the source.
Producers SHOULD add this component when the event data was taken from an external announcement or publication. It is not needed when the document itself is the primary source.
{
"$type": "directory.evnt.component.source#0",
"url": "https://news.example.com/tech-conference-announced"
}2.4. Splash Media Component
An image or video that represents the event visually.
directory.evnt.component.splashMedia#0
$type: "directory.evnt.component.splashMedia#0" REQUIRED
media: Media REQUIRED
roles: string[]? OPTIONALThe media field is the media itself. See section 2.4.1 (Media).
The roles field lists where the media is meant to be shown. Consumers MAY use media without roles in any role. The following values are defined:
| Value | Meaning |
|---|---|
background | Behind the event's content, may be cropped |
poster | The event's poster, shown whole |
banner | A wide strip across the top of the event page |
Producers MAY use other values. Consumers MUST ignore values they do not recognize.
{
"$type": "directory.evnt.component.splashMedia#0",
"media": {
"sources": [{ "url": "https://example.com/poster.jpg" }],
"alt": { "en": "Tech Conference 2026 poster" }
},
"roles": ["poster"]
}2.4.1. Media
An image or video, available from one or more sources.
Media
sources: MediaSource[] REQUIRED
alt: Translations? OPTIONAL
presentation: MediaPresentation? OPTIONAL
MediaSource
url: string REQUIRED
mimeType: string? OPTIONAL
dimensions: Dimensions? OPTIONAL
Dimensions
width: number REQUIRED
height: number REQUIRED
MediaPresentation
blurhash: string? OPTIONAL
dominantColor: string? OPTIONALThe sources field holds at least one MediaSource. All sources of one Media MUST show the same content; they differ only in format or resolution.
The url field is the URL of the media file.
The mimeType field is the MIME type of the file, such as image/jpeg or video/mp4.
The dimensions field is the width and height of the file in pixels.
The alt field is alternative text for the media. Producers SHOULD set it.
The presentation.blurhash field is a BlurHash string for a blurred placeholder.
The presentation.dominantColor field is the dominant color of the media as six-digit hexadecimal RGB with a leading #, such as #1a1a2e.
2.5. Languages Component
The languages the event is held in. This describes the event, not the document: an event held in Lithuanian can be described in English.
directory.evnt.component.languages#0
$type: "directory.evnt.component.languages#0" REQUIRED
languages: LanguageInfo[] REQUIRED
LanguageInfo
code: string REQUIREDThe code field is a BCP 47 language tag.
{
"$type": "directory.evnt.component.languages#0",
"languages": [{ "code": "lt" }, { "code": "en" }]
}2.6. Place ID Component
The venue's entry in a map or place service. Place ID components belong in the venue's components.
directory.evnt.component.placeId#0
$type: "directory.evnt.component.placeId#0" REQUIRED
type: string REQUIRED
id: string REQUIREDThe type field names the service and the kind of entry. The following values are defined:
| Value | Service | Entry |
|---|---|---|
org.openstreetmap.node | OpenStreetMap | Node (POI) |
org.openstreetmap.way | OpenStreetMap | Way (building) |
org.openstreetmap.relation | OpenStreetMap | Relation (area) |
com.google.places | Google Places | Place ID |
com.foursquare | Foursquare | Venue ID |
The id field is the identifier that the service gives the entry.
Producers MAY use other values in reverse domain name notation, built from the service's own domain. Consumers MUST ignore values they do not recognize.
A venue MAY have any number of place ID components, including several of the same type.
{
"$type": "directory.evnt.component.placeId#0",
"type": "org.openstreetmap.way",
"id": "123456789"
}2.7. Relation Component
A link from the event to another event. Relation components belong in the event's components.
directory.evnt.component.relation#0
$type: "directory.evnt.component.relation#0" REQUIRED
type: string REQUIRED
target: string REQUIREDThe target field is an absolute URI, usually the id of the other event.
The type field says how the other event relates to this one. The following values are defined:
| Value | Meaning |
|---|---|
parent | This event is part of the other, such as a meetup at a convention or an edition of a series |
child | The other event is part of this one |
alternate | The other document describes this same event, such as a listing on another site |
alternate is the same event, not an alternative to it.
Producers MAY use other values in reverse domain name notation, such as com.example.rivalOf. Consumers MUST ignore values they do not recognize.
An event MAY have any number of relation components, including several of the same type.
A relation is a claim by the publisher of the document that holds it. Either side of a relation can state it.
A consumer that wants more certainty can check whether the target links back: child for a parent, parent for a child, and alternate for an alternate.
parent and child match RELTYPE=PARENT and RELTYPE=CHILD on the iCalendar RELATED-TO property (RFC 5545 section 3.8.4.5), and the parent and child relations in JSCalendar's relatedTo (RFC 8984 section 4.1.3).
{
"$type": "directory.evnt.component.relation#0",
"type": "parent",
"target": "https://example.com/events/tech-conference"
}2.8. Coordinates Component
Where the venue is on a map. Coordinates components belong in the venue's components.
directory.evnt.component.coordinates#0
$type: "directory.evnt.component.coordinates#0" REQUIRED
latitude: number REQUIRED
longitude: number REQUIRED
uncertainty: number? OPTIONALThe latitude and longitude fields are WGS 84 coordinates in decimal degrees, the system GPS uses. latitude is from -90 to 90 and longitude from -180 to 180.
The point SHOULD be where attendees head for, such as the main entrance of a large venue.
The uncertainty field is how far the venue may be from the point, in metres, like the u parameter of a geo URI (RFC 5870). It MUST be greater than 0. When it is absent, the point is the venue itself. Producers SHOULD set it when the point is approximate, such as the centre of a city where the venue is not known yet. Consumers SHOULD NOT show an approximate point as an exact pin.
A venue MUST NOT have more than one coordinates component.
{
"$type": "directory.evnt.component.coordinates#0",
"latitude": 54.8985,
"longitude": 23.9036,
"uncertainty": 5000
}