Draft 0.x The spec is not stable yet: fields can still change, be renamed or be dropped. Follow the discussion

Open specification · Draft 0.x

Publish your event once. Let it show up everywhere.

OpenTechEvents (OTE) is an open, free specification to describe tech community events — meetups, conferences, workshops, online or in person — in a single format that directories, calendars and tools can read automatically. It brings together the best of iCalendar, RSS and schema.org/Event, and stays compatible with all of them: write it once and we help you export it automatically to all three. Four formats for the price of one.

No platform to sign up for. No tool to install: a file you publish, plus a line in your site's <head> so others can find it. Already use Meetup, Luma, Eventbrite…? We'll help you import it without leaving it →

events.json
{
  "specVersion": "0.5.0",
  "id": "https://pyalmeria.example/2026-06-async",
  "url": "https://pyalmeria.example/2026-06-async",
  "name": "PyAlmería — Intro to async/await",
  "organizers": [{ "name": "PyAlmería" }],
  "startDate": "2026-06-11T18:30",
  "endDate": "2026-06-11T20:30",
  "timezone": "Europe/Madrid",
  "attendanceMode": "hybrid",
  "location": {
    "venue": "El Cable, Almería",
    "onlineUrl": "https://meet.example/pyalmeria",
    "geo": { "lat": 36.8381, "lon": -2.4597 }
  },
  "eligibility": { "type": "open" },
  "tags": ["python", "async"],
  "languages": ["es"],
  "status": "scheduled",
  "partOf": { "id": "https://pyalmeria.example/meetups" },
  "license": "CC-BY-4.0"
}

You already know the problem

You organise one event. Then you announce it over and over, by hand, across several networks whose algorithms decide who even sees it. In today's attention economy, your message competes against all the noise — and you still miss half the people who would have come.

📋

The same event, announced again and again

Your website, Meetup, LinkedIn, Instagram, X, several WhatsApp and Telegram groups… The same information on platforms where content can easily go unnoticed.

🕳️

Directories can't find you

Event directories want to list you. But they'd have to find your event, or wait for you to submit a form, open a pull request, send an email, and so on… So they almost never do.

🔁

Every change means doing it all over

Venue moved. Speaker cancelled. New date. Now go update every single platform — or live with the stale copies out there.

There is no shortage of information about your events. What's missing is interoperability.

One file. That's the whole idea.

You describe your events in a simple JSON file and publish it at a stable URL. Anything that speaks OTE — directories, calendars, bots, websites — can then read it without asking you for anything.

1

You publish

A feed with your events at a URL you control, e.g. tucomunidad.dev/events.json. And you can list yourself in our directory so people find you.

2

Tools read it

Aggregators, directories and converters can pick it up on their own — and turn it into RSS, iCalendar or schema.org.

3

Each person picks their tool and filters

Each person chooses the tool they prefer — calendar, email, RSS, a Telegram or WhatsApp bot — and the filters they care about.

4

The right people find you

It's not just that people find you: the right people do. With those filters you reach whoever is interested in the event, not a generic feed.

The minimum is genuinely minimal

A valid event needs little more than a name, a start date, a time zone and where it happens. Optional fields — price and tickets, call for proposals, images, series — cover the rest when you need them.

  • Plain JSON. No SDK, no account, no server required — a static file is enough.
  • Designed to map cleanly onto RSS, iCalendar and schema.org/Event.
  • Works the same for a recurring meetup, a multi-day conference or an online workshop.
  • Open licence, no usage restrictions — in the spirit of RSS and iCal.

Careful, because we'd rather be straight with you: that draft — the core fields and the optional modules alike — has not been agreed yet. It's there to show the shape of the thing and to open the debate, and it will change. What we're asking you to adopt today is the idea, and to come and break it before it sets.

Read the data model
Minimal valid event
{
  "specVersion": "0.5.0",
  "id": "https://pyalmeria.example/2026-06-async",
  "name": "PyAlmería — Intro to async/await",
  "startDate": "2026-06-11T18:30",
  "timezone": "Europe/Madrid",
  "license": "CC-BY-4.0"
}

What you get out of it

Adopting OTE is under an hour of work the first time. After that, a couple of minutes per event you publish. Here's what it buys you.

⏱️

Stop doing data entry

Write the event once. Let tooling push it to directories, calendars and feeds instead of you copy-pasting it into yet another form.

📣

Reach beyond your own bubble

Directories and aggregators will be able to pick up your events the moment you publish them, and reach each person in the channel they already use — not the one you happen to pick. Your meetup can show up where people are actually looking.

🔍

And you show up better in Google

Google and other search engines read schema.org/Event to show event rich results: date, venue and price right there in the search results. OTE wasn't designed for SEO, but it maps onto that vocabulary almost 1:1 — so if you can touch your site's HTML, the same tooling that builds your feed will be able to generate the JSON-LD for you to paste in. One file, four destinations.

🔓

Own your data

Your events live at your URL, in an open format. If a platform shuts down, changes its API or its pricing, your history and your feed are still yours.

🧩

An open, community-owned ecosystem

Because OTE is an open spec owned by the community itself, it has the potential for a whole ecosystem of free, open integrations. Every new tool built on it — an .ics export, a website widget, a Telegram bot — works for you without you lifting a finger.

Accurate everywhere

Change the date in one place and every consumer that re-reads your feed gets the correction. No more zombie listings with stale information.

🌱

Shape the standard

The spec is in draft. Early adopters decide what it looks like — if something doesn't fit your community, it can still be changed.

How to adopt it

Three steps. The first one is the only one that takes real work, and it's a text file.

  1. 1 Publish an OTE feed

    Create a JSON file with your events and host it anywhere you already publish — your site, GitHub Pages, a gist. The fastest path? The organizer kit: a ready-made repository to publish in minutes, with OTE, ICS and RSS feeds already wired up. And if your events live in a Google Calendar or Meetup, we'll help you import them to generate the feed.

    https://tucomunidad.dev/events.json
    {
      "specVersion": "0.5.0",
      "title": "PyAlmería events",
      "url": "https://tucomunidad.dev",
      "organizers": [{ "name": "PyAlmería" }],
      "license": "CC-BY-4.0",
      "updatedAt": "2026-05-29T08:00:00Z",
      "events": [
        {
          "id": "https://tucomunidad.dev/2026-06-async",
          "name": "Intro to async/await",
          "startDate": "2026-06-11T18:30",
          "timezone": "Europe/Madrid",
          "tags": ["python", "async"]
        }
      ]
    }

    Serve it so browsers can read it too

    A feed without cross-origin access is still valid, and server-side consumers read it fine — but a browser-based reader, an embeddable widget or a static directory can't fetch it at all. So a public OTE feed should answer with Access-Control-Allow-Origin: *. That's what lets any present or future OTE tool consume your feed without you having to know about it first.

    Response headers for /events.json
    Access-Control-Allow-Origin: *
    Access-Control-Allow-Methods: GET, HEAD, OPTIONS

    This is about the feed file, not your whole site: it's a recommendation for the public feed resource, not a reason to open up your website or your API. And because the feed is public, it must never depend on cookies or credentials — Access-Control-Allow-Credentials is neither needed nor wanted here (and is incompatible with * anyway).

  2. 2 Make it discoverable

    Add one line to the <head> of your website so tools can find the feed on their own — the same way RSS readers do.

    In your site's <head>
    <link rel="alternate"
          type="application/ote+json"
          href="https://tucomunidad.dev/events.json">
  3. 3 Tell us, and get listed

    Open an issue with your feed URL. We'll validate it and list your community on this page; and as aggregators come online, they'll start picking up your events.

    Optional: add the feed badge to your README or site footer — a visible, RSS-style signal that you publish OTE, next to the machine-readable one from step 2.

Who publishes in OTE

Communities and events already exposing their data in this format.

This list is data, not markup: it renders adopters.json, a machine-readable registry you can build on. See the developer docs.

Who consumes OTE data

Directories, aggregators and people reusing feeds published in this format. Every one of them is another place your events will be able to reach for free.

Ecosystem of tools

What exists today, and what's up for grabs. Claim one by opening an issue.

Ways to help that aren't publishing a feed

Publishing a feed is the biggest step, and it isn't the first one. A spec this early needs people who break it, people who talk about it, and people who say out loud that they'd use it — that last one is what makes a directory decide the format is worth reading. Pick whichever costs you least.

Pledge to adopt it «We'll publish OTE once there's a stable spec.» Two minutes, no code, no commitment that binds you — and right now it's the single most useful thing you can do. Leave a testimonial Why this problem matters in your community, in your own words. We publish it here, with your name on it, once you say it's fine. Break the model An event of yours that the spec can't describe. You don't need to bring a solution: the case is the contribution, and it's worth more than a field request. Talk about it A talk, a lightning talk, an article, a podcast, a thread. Ask us for slides, a demo or someone to co-present — you shouldn't have to build the material yourself. Introduce us You know whoever maintains a directory, a calendar, a platform or a conference site? One message from you beats fifty cold emails from us. Talk to us, 1-on-1 Pick a slot in the calendar: twenty minutes, no issue template, no GitHub vocabulary. If you organise events, your objections are the reason this thing exists — bring them. Read the feeds A directory, a newsletter, a bot or a calendar that consumes OTE. Every consumer makes adopting worth more for every organiser — this is the side of the loop that's missing. Build a tool The ideas above have no owner. Claim one, or bring your own — an exporter, a widget, an importer, a validator for your stack. Translate it The site and the field descriptions are in English and Spanish. A third language opens a whole region of communities that can't read either. Offer what you have Hosting for the aggregator, design, a legal or accessibility review, a pile of historical events to test against, a slot at your event. Not everything useful is code.

Prefer talking to writing? Book twenty minutes — and if no slot suits you, say so in a discussion and we'll find one.

Already backing it? Put a badge in your README — it's the cheapest way to tell the next community this exists.

Who's backing it

This list is data too: it renders supporters.json. Pledges, endorsements, ambassadors and offers of help — listed separately from who already publishes, because promising and shipping are not the same thing.

Frequently asked questions

A standard is worth exactly as much as the number of people who use it

Every community that publishes an OTE feed makes the format more useful for every other community — and for everyone trying to find your events.