Open Evnt

Open Evnt LogoOpen Evnt

A modern data format for social events

Localizable, extensible and flexible data format for events, designed to be used in a wide range of applications and contexts.

Most event data today is currently treated as an afterthought; it is often stored in simple, rigid, legacy formats that fail to capture the complexity and richness of real-world events.

Open Evnt aims to fix this issue by providing a modern, extensible, and easy-to-use JSON-based data format for events.

Open Evnt is designed to be a common data format for calendar applications, event management systems, event listing sites and others to use for representing events. This allows for better interoperability between different applications and services.

The main design goals of Open Evnt are:

  • No data-stuffing: Details of an event deserve their own fields, not to be crammed into a description field.
  • No assumptions: How an event is organized or structured should not be dictated by the data format.
  • Support impercision: Some event details are often not known.
  • Accessibility: Event details should be localizable.
  • Extensibility: Allow more metadata to be added without breaking existing implementations.

Please note that Open Evnt is only a data format and not a protocol. It's meant to be protocol-agnostic so that it can be used with various protocols and systems.

Relevant XKCD 927: Standards

Internationalization

Every piece of text that is meant to be shown to end users in Open Evnt is multilingual. This means that instead of just having a name string field, we have a name object that can contain multiple translations of the title. This allows applications to easily support multiple languages and also allows for better accessibility.

{
  "name": {
    "en": "My Event",
    "lt": "Mano Renginys",
    "fr": "Mon Γ‰vΓ©nement"
  }
}
πŸ“† My Event

Internationalization is not just limited to the title of the event, but can be used for any text field such as descriptions, location names, etc.

Partial Dates

Scheduling is complex, and a lot of events have some level of uncertainty around their date and time.

For example, an event might be scheduled for a specific month but the exact date is not yet known, or it might be scheduled for a specific date but the time is not yet known.

Unlike other formats, Open Evnt offers first-class support for representing these kinds of events.

πŸ“… 2026

πŸ“… October 30th 2026, 15:00

πŸ“… May 2026

πŸ“… October 2026

πŸ“… May 15th 2026

πŸ“… April 26th 2026, 13:45

πŸ“… 2027

πŸ“… June 2026

πŸ“… April 1st 2026, 09:00

πŸ“… 2026

πŸ“… October 30th 2026, 15:00

πŸ“… May 2026

πŸ“… October 2026

πŸ“… May 15th 2026

πŸ“… April 26th 2026, 13:45

πŸ“… 2027

πŸ“… June 2026

πŸ“… April 1st 2026, 09:00

πŸ“… 2026

πŸ“… October 30th 2026, 15:00

πŸ“… May 2026

πŸ“… October 2026

πŸ“… May 15th 2026

πŸ“… April 26th 2026, 13:45

πŸ“… 2027

πŸ“… June 2026

πŸ“… April 1st 2026, 09:00

πŸ“… 2026

πŸ“… October 30th 2026, 15:00

πŸ“… May 2026

πŸ“… October 2026

πŸ“… May 15th 2026

πŸ“… April 26th 2026, 13:45

πŸ“… 2027

πŸ“… June 2026

πŸ“… April 1st 2026, 09:00

Partial dates are also timezone-aware which means that no one has to worry about local vs event time and all the issues that come with it.

Multiple Dates

Social events are too complicated to be represented by a single start and end date. Multi-day events can start and end on different hours, which are irrepresentable in other formats.

Open Evnt defines events as having a list of time ranges instead of just a single start and end date, which allows for representing these kinds of events.

{
  "instances": [
    {
      "start": "2026-10-30T12:00[Europe/Brussels]",
      "end": "2026-10-30T18:00[Europe/Brussels]"
    },
    {
      "start": "2026-10-31T12:00[Europe/Brussels]",
      "end": "2026-10-31T15:00[Europe/Brussels]"
    }
  ]
}

πŸ“†

Big Conference

October 30th 2026
12:00 - 18:00
October 31st 2026
12:00 - 15:00

Extensible

Open Evnt is designed to be extensible, which means that applications can define their own components and use them to store any kind of metadata that doesn't fit into the predefined fields.

Components are defined using namespace identifiers which prevent naming collisions and allow for better interoperability between different applications and services.

Open Source

Open Evnt is completely open source, and we welcome contributions from anyone.

We use GitHub issues for tracking features and discussions, so if you have any ideas or suggestions, please feel free to check out the issue tracker. You can also join our Discord or Matrix communities to chat with us and other people interested in Open Evnt.

Let us know if you're building an application using Open Evnt!
ApplicationDescriptionSource
Vantage β†—

Proof-of-concept calendar application that uses Open Evnt

Link β†—
eventsl.ink β†—

Create event sharing links without being tied to any app

Link β†—

You can find the specification document for Open Evnt in docs/README.md file in the GitHub repository.

The specification is also published as a JSON Schema, which can be found in event-data.schema.json. You can also use the raw link to the JSON Schema as a $schema reference in your own JSON Schema documents:

https://raw.githubusercontent.com/openevnt/evnt/refs/heads/main/event-data.schema.json

We also publish various npm packages for working with Open Evnt, such as @evnt/schema which provides Zod schema definitions or @evnt/partial-date which contains utilities for working with partial dates.

pnpm add @evnt/schema

Open Evnt can be used with the AT Protocol!

We publish lexicons for Open Evnt under the directory.evnt namespace, and they can be found on PDSls and GitHub.

The widely used community.lexicon.calendar.event lexicon and Open Evnt are incompatible.

community.lexicon.calendar.rsvp records can be used for RSVPs in AT Protocol.

Here is a couple of code examples of evnt events:

{
  "v": "0.1",
  "name": {
    "en": "No venues"
  },
  "instances": [
    {
      "venueIds": [],
      "start": "2027-03-08T09:00[UTC]",
      "end": "2027-03-08T18:00[UTC]"
    }
  ]
}

Use the section below to validate JSON in the format

Preview

Rendered using Vantage