Open Evnt

Open Evnt

A modern data format for events.

Rendered using Vantage

Rendered using Vantage

Learn more

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 addresses the structural oversights of existing formats almost everyone ignores: things such as internationalization, multiple locations or occurrences, partially known times, etc.

Open Evnt is designed to be a common 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.

This does mean that we are reinventing the wheel.

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" 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"
  }
}

Most of the time, when applications don't support internationalization for something like a description, users tend to put all of them one after another in the same description field.

Partially Defined Dates

A lot of events only have partial date information. For example, you might only know the month and year of an event, but not the exact day and time.

Open Evnt uses a consistent way to represent this by allowing partial date strings.

Partial DateDescription
2024-05[Europe/Vilnius]May 2024 (in Vilnius)
2024-05-15[Europe/Vilnius]May 15, 2024 (in Vilnius)
2024-05-15T12:00[Europe/Vilnius]May 15, 2024 at 12:00 (in Vilnius)

Open Evnt uses timezone-aware partial dates, which means that every date includes an explicit timezone identifier. Trust me, this is very important.

Multiple Instances and Venues

Many events can span multiple days, or even have multiple occurrences in different locations.

Open Evnt natively supports representing this information by allowing events to have multiple date instances and multiple venues.

Extensibility

Events can have an arbitrary number of components, which are just objects with a $type defining what they are.

Any application can define its own components and use them to store any kind of metadata that doesn't fit into the predefined fields.

The core specification defines a couple components such as a link component and a splash media component. We are also planning to add more in the future such as ticketing, organizers, categories/tags etc.

Open Source

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

If you are interested in any of these features and would like to help out, or if you have any other ideas or suggestions, please feel free to check out the GitHub issue tracker.

Evnt is still a relatively new project, so there aren't many applications using it yet.

Applications using evnt
ApplicationDescriptionSource
Vantage LogoVantage

Reference web app for viewing and embedding Evnt data

/

Link

These applications all support the eventsl.ink link format which allows you to share links to your events that can be opened in any of these applications.

If you're building an application using Evnt, please let us know!

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

We have a npm package for the schema that uses Zod and provides TypeScript types as well as runtime validation. You can find it on npm as @evnt/schema.

pnpm add @evnt/schema

We also auto-generate a couple things using the @evnt/schema code:

  • A JSON Schema for the event data, which can be used for validation and type generation. You can find it in event-data.schema.json. Here's a raw link you can use as $schema:

  • https://raw.githubusercontent.com/openevnt/evnt/refs/heads/main/event-data.schema.json
  • A markdown document that documents all the type information.

The Evnt format is compatible with ATProto.

Applications should use the directory.evnt.event collection for events.

You can find the lexicons below! Keep in mind that Translations type is not supported in lexicons so they are marked as unknown in the lexicon.

Currently the standard collection for events is the community.lexicon.calendar.event lexicon. Open Evnt and the community lexicons are not fully compatible.

Applications wishing to support both lexicons can use the same TID and do conversion between the formats.

The community.lexicon.calendar.rsvp lexicons can be used for RSVPs since subject field is a com.atproto.repo.strongRef and allows referencing the event in the directory.evnt.event collection.

Here is a comparison table showing how Evnt compares to some other event formats:

FeatureEvntiCALLexicon Community
Multiple Venues✅️❌️✅️
Multiple Instances✅️❌️❌️
Event Status✅️❌️✅️
Multiple Links✅️❌️✅️
Custom Metadata✅️❓️❓️
Recurrence Rules❌️✅️❌️
RSVP❌️✅️✅️
Attendee/Organizer❌️✅️✅️
Other (Task, Journal)❌️✅️❌️
Free/Busy❌️✅️❌️
i18n✅️❌️❌️
Splash Media✅️❌️❌️

We don't want to overrate our own format so feel free to point out things to add here.

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