Skip to content

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 ​

$typeSection
directory.evnt.text.markdown#02.1.1
directory.evnt.text.plain#02.1.2
directory.evnt.component.link#02.2
directory.evnt.component.source#02.3
directory.evnt.component.splashMedia#02.4
directory.evnt.component.languages#02.5
directory.evnt.component.placeId#02.6
directory.evnt.component.relation#02.7
directory.evnt.component.coordinates#02.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:

  1. Language. The consumer takes every language that appears in the content of a text component whose $type it supports, and picks one as for Translations (Translations, section 3).
  2. 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?                           OPTIONAL

The 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.

json
{
	"$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                   REQUIRED

The 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.

json
{
	"$type": "directory.evnt.text.plain#0",
	"content": {
		"mul": "Įėjimas nemokamas, registruotis nereikia.\nEntry is free and no registration is needed."
	}
}

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?                           OPTIONAL

The 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.

json
{
	"$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                               REQUIRED

The 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.

json
{
	"$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[]?                                 OPTIONAL

The 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:

ValueMeaning
backgroundBehind the event's content, may be cropped
posterThe event's poster, shown whole
bannerA wide strip across the top of the event page

Producers MAY use other values. Consumers MUST ignore values they do not recognize.

json
{
	"$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?  OPTIONAL

The 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  REQUIRED

The code field is a BCP 47 language tag.

json
{
	"$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                                REQUIRED

The type field names the service and the kind of entry. The following values are defined:

ValueServiceEntry
org.openstreetmap.nodeOpenStreetMapNode (POI)
org.openstreetmap.wayOpenStreetMapWay (building)
org.openstreetmap.relationOpenStreetMapRelation (area)
com.google.placesGoogle PlacesPlace ID
com.foursquareFoursquareVenue 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.

json
{
	"$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                                 REQUIRED

The 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:

ValueMeaning
parentThis event is part of the other, such as a meetup at a convention or an edition of a series
childThe other event is part of this one
alternateThe 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).

json
{
	"$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?                                   OPTIONAL

The 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.

json
{
	"$type": "directory.evnt.component.coordinates#0",
	"latitude": 54.8985,
	"longitude": 23.9036,
	"uncertainty": 5000
}