Introducing the .rcal open format

Your world,
when you need it

Build up strands of everything you could be doing — local venues, artists, recurring events, life milestones — and open your portal whenever a free moment appears.

Possibility types
Open
Format standard
1 scan
To load a venue's world
Thursday Evening
6 possibilities
All
Mellow
Social
Restless
Spontaneous
Tonight 9pm
Friday Jazz Residency
The Rusty Nail • 0.4 mi
Mellow Music Free
Now open
Open Swim Hours
Logan Square YMCA • 1.1 mi
Restless Solo
Last Thursday
Open Mic Night
Hideout Chicago • 0.8 mi
Curious Social
The Idea

Not what you're doing.
What you could be doing.

Every other calendar answers "what am I doing?" Eventstrand answers the question you ask when your night opens up.

🧵

Build your strands

Load in your local gym's hours, the weekly jazz night at your favorite bar, your friend's birthday, the library's monthly workshop. Each becomes a living thread in your personal world.

🌀

Your portal appears

Open the app when you're bored, restless, or your evening suddenly cleared. Your portal surfaces everything relevant to right now — filtered by mood, time, and distance.

📡

Scan the world

Venues publish .rcal strand files. Scan a QR code on a bar door. Tap a link on a venue website. One action loads their entire schedule into your portal forever.

One platform, three roles

Whether you're a person looking for something to do, a venue trying to reach your audience, or a developer building on the format.

1

Download the app

Available on iOS and Android. On desktop, use the web portal at eventstrand.com/app.

2

Add your first strands

Manually add recurring things you know about — a gym schedule, a weekly show, a monthly dinner tradition. Or scan a QR code on any venue that publishes an Eventstrand file.

3

Load pre-built strands

Install holiday strands, cultural calendars, sports season strands, or any community-published strand from the library.

4

Open your portal

Whenever you have a free moment, open Eventstrand. Select your current vibe. See everything that could be happening right now or tonight.

5

Act or save

Tap to go — get directions, buy tickets, or add to your real calendar. Pass with one swipe. The strand template stays alive forever.

eventstrand.com/app
Tonight
This Week
This Month
Mellow
Social
Restless
Friday Jazz Night
The Rusty Nail • Starts 9pm • Free
Get Directions
Outdoor Film Screening
Wicker Park • Starts 8:30pm • Free
Save
1

Visit the strand builder

Go to publish.eventstrand.com. No app required. Takes under 10 minutes to set up a full venue strand.

2

Add your recurring events

Every weekly night, monthly special event, recurring happy hour, seasonal schedule. Use the plain-language recurrence builder — no technical knowledge needed.

3

Download your .rcal file and QR code

Get your strand file, a print-ready QR code, a hosted URL, and an embed widget for your website. All in one click.

4

Place the QR code in the world

On your front door, table cards, flyers, menus, window. Anyone who scans it instantly loads your events into their portal.

5

Update anytime

With a free account, your strand stays live. Edit it and all subscribers get the update automatically. No reprinting, no emailing.

publish.eventstrand.com
Your strand is ready
🍺
The Rusty Nail
3 events • Live strand
⬇ Download .rcal
⬛ QR Code
📋 Copy Link
✓ Strand hosted at eventstrand.com/s/rusty-nail
1

Read the open spec

The .rcal format is fully documented and free to implement. No license, no fees. Read the spec at eventstrand.com/spec.

2

Parse .rcal files in any language

JSON-based format with a clear schema. Reference parsers available in JavaScript, Python, and Swift. Contribute your own to the GitHub repo.

3

Export .rcal from your platform

If you run event management software, a venue booking system, or any platform with recurring events — add .rcal export to let users publish their schedule.

4

Use the API for live strands

Pull strand data programmatically, validate .rcal files, or integrate strand discovery into your own app via the Eventstrand API.

venue.rcal v0.1
// Minimal valid .rcal file
{
  "rcal": "0.1",
  "meta": {
    "title": "The Rusty Nail",
    "type": "venue",
    "timezone": "America/Chicago",
    "live": true
  },
  "strands": [
    {
      "id": "friday-jazz",
      "name": "Friday Jazz Night",
      "location": "inherits meta.location",
      // Override per-strand if event is at a different address
      "vibe_tags": [
        "mellow", "social"
      ],
      "recurrence": [
        {
          "pattern": "weekly",
          "every": 1,
          "days": ["friday"],
          "time_start": "21:00"
        }
      ]
    }
  ]
}
The .rcal Format

An open standard for
recurring real-world life

The .rcal file format is free to use, implement, and build on. Anyone can create, publish, or read .rcal files.

📅

Every recurrence pattern

Daily, weekly, bi-weekly, monthly by date or weekday, annual, seasonal windows, custom intervals. Layer multiple rules per event — because real life isn't one clean pattern.

🔁

Static or live strands

A static .rcal file downloads once and lives locally. A live strand points to a hosted URL — when the venue updates it, all subscribers get the refresh automatically.

🎭

Vibe tagging built in

Every event carries emotional context — mellow, social, restless, spontaneous, celebratory, curious. The app uses these to filter the portal by how you're feeling right now.

Exceptions and modifications

Skip dates, modify specific instances, cancel date ranges. The file handles the real-world messiness of how venues actually operate.

🌍

Works at any scale

A single bar with three recurring nights. A city-wide event calendar. A global cultural strand for Ramadan or Pride Month. Same format, same file structure.

Read Full Spec →
example.rcal Open Format
// Multi-rule recurrence example
{
  "rcal": "0.1",
  "meta": {
    "title": "The Rusty Nail",
    "type": "venue",
    "location": {
      "address": "1234 N Milwaukee Ave",
      "city": "Chicago",
      "state": "IL",
      "country": "US",
      "lat": 41.9214,
      "lng": -87.7078
    },
    "timezone": "America/Chicago",
    "live": true,
    "color": "#C0392B"
  },
  "strands": [
    {
      "id": "happy-hour",
      "name": "Happy Hour",
      "vibe_tags": [
        "spontaneous", "social"
      ],
      "price": "free_entry",
      "lead_time_days": 0,
      "recurrence": [
        {
          // Weekday happy hour
          "pattern": "weekly",
          "days": ["weekday"],
          "time_start": "16:00",
          "time_end": "19:00"
        },
        {
          // Weekend extended hours
          "pattern": "weekly",
          "days": ["saturday"],
          "time_start": "14:00",
          "time_end": "18:00"
        }
      ],
      "exceptions": [
        {
          "type": "skip",
          "date": "2026-12-25",
          "note": "Closed Christmas"
        }
      ]
    },
    {
      "id": "open-mic",
      "name": "Open Mic Night",
      "vibe_tags": [
        "curious", "social"
      ],
      "recurrence": [
        {
          // Second Thursday + Last Saturday
          "pattern": "monthly",
          "month_week": "second",
          "days": ["thursday"],
          "time_start": "20:00"
        },
        {
          "pattern": "monthly",
          "month_week": "last",
          "days": ["saturday"],
          "time_start": "21:00"
        }
      ]
    }
  ]
}

Create your .rcal file

No code required. Fill in plain-language fields and get a ready-to-use .rcal file, QR code, and shareable link.

① Who
② Details
③ Events
④ When
⑤ Vibes
⑥ Exceptions
⑦ Get Files
🏢
A Venue
🎵
An Artist
🏘
A Community
📋
Personal
🛍
A Business
🎉
An Event
Format: address, city, state, country — used for proximity filtering in the portal
Used as accent in the app
🎵
Music
🍺
Food & Drink
🏋
Fitness
🎨
Arts
📚
Education
🤝
Community
🔧
Maintenance
🎂
Personal

Add one or more time rules. Rules layer together to generate the full schedule.

Rule 1
Happens
On
At until
Only between and
Preview — next occurrences
Fri Mar 14 21:00 – 23:30 rule 1
Fri Mar 21 21:00 – 23:30 rule 1
Fri Mar 28 21:00 – 23:30 rule 1
Tap a slice · Spin to let fate decide

Add exceptions — specific skips, modified instances, or closed periods. Optional — most people skip this on first build.

Your strand is ready

Download your .rcal file, grab your QR code, or get a shareable link.

Want to update this strand later?
Create a free account to host your strand at a permanent URL. Edit anytime — subscribers auto-update.
Step 1 of 7
Live Preview
Your Strand
VENUE
Your Event Name
Every Friday • 9:00 PM
mellow social
Add more events...
Tap + Add Event
+ Add to Eventstrand
Strand Library

Ready-made strands
to install in seconds

Community-published strands covering holidays, cultural events, sports seasons, and local life rhythms.

🎄
US Holidays 2026
All federal holidays plus popular cultural dates. Includes lead-time suggestions for gift shopping and travel planning.
🌈
Pride Month 2026
June events, parades, and celebrations. Connect your location to see local events auto-added to your portal.
🏈
NFL Season 2026
All game days, playoff schedule, Super Bowl window. Watch party possibilities auto-surfaced on game days.
🌱
Farmers Market Season
Weekly Saturday markets, seasonal produce windows, and local vendor schedules. Covers spring through fall.
🌙
Ramadan 2026
Iftar times, Eid celebrations, and community events. Includes local mosque schedules if you connect your location.
🏠
Home Maintenance
Seasonal tasks, filter changes, service intervals. A ready-made household upkeep strand you can customize to your home.
Browse All Strands →

The .rcal format belongs to everyone

Eventstrand publishes the reference spec and maintains the reference app — but the format is open. Anyone can build tools, parsers, exporters, or importers. No license required.

Developer Docs

Build on the .rcal standard

Open specification, reference parsers, and an API for live strand integration. The format is yours to use.

📄 .rcal Specification

The complete specification for the .rcal file format. Covers all fields, recurrence patterns, exception types, and versioning rules.

🔧 Reference Parsers

Parse and validate .rcal files in your platform. Reference implementations available — contribute your language to the repo.

🌐 REST API

Fetch strand data, validate .rcal files, search the public strand library, and manage live strand subscriptions programmatically.

📐 Schema Reference

The core fields in every .rcal file. All fields are optional unless marked required.

Field Description Type
rcalSpec version (required)"0.1"
meta.titlePublisher namestring
meta.typevenue / artist / personal…string
meta.liveAuto-update from URLboolean
meta.timezoneIANA timezone stringstring
meta.locationVenue/publisher location objectobject
meta.location.addressStreet addressstring
meta.location.cityCitystring
meta.location.stateState / province codestring
meta.location.countryISO 3166-1 alpha-2string
meta.location.latLatitude decimal degreesnumber
meta.location.lngLongitude decimal degreesnumber
strands[].idUnique identifierstring
strands[].locationPer-strand location overrideobject
strands[].recurrenceArray of rule objectsarray
recurrence[].patterndaily/weekly/monthly…string
recurrence[].daysDay array or shorthandarray
recurrence[].month_weekfirst/second/last…string
parse-example.js JavaScript
// Fetch and parse a live .rcal strand
import { parseRcal, getUpcoming } from '@eventstrand/rcal-js';

const res = await fetch('https://eventstrand.com/s/rusty-nail');
const strand = await parseRcal(await res.text());

// Get all events in the next 7 days
const upcoming = getUpcoming(strand, {
  from: new Date(),
  days: 7,
  vibeFilter: ['mellow', 'social']
});

upcoming.forEach(event => {
  console.log(
    `${event.name}${event.date} at ${event.time_start}`
  );
});

// Output:
// Friday Jazz Night — 2026-03-14 at 21:00
// Happy Hour — 2026-03-16 at 16:00
// Open Mic Night — 2026-03-19 at 20:00

Your portal.
Always open.

Build your world once. Open it whenever a free moment appears — and see everything you could be doing, filtered by how you feel right now.

🧵

Build your strands

Add venues, artists, life milestones, and recurring events manually or by scanning QR codes in the wild.

🎭

Filter by vibe

Open the app feeling mellow, restless, or spontaneous. The portal surfaces only what matches your current mood.

📸

Snap a flyer

Point the camera at any event flyer or sign. The app reads it and creates a recurring strand template automatically.

🔗

One scan loads a world

Scan a QR code on a bar door. Tap a link on a venue website. Their entire schedule loads into your portal instantly.

📅

Life strands

Birthdays, anniversaries, holidays, home maintenance — all encoded as strands that surface at the right moment.

🤝

Share your world

Export your local knowledge as a strand bundle and share it with a friend who just moved to your neighborhood.

Scan to download Eventstrand

Point your phone camera at this code to go straight to the app. Or search "Eventstrand" in the App Store or Google Play.

Download for iOS Download for Android

Your portal,
any device

A free account syncs your strands, preferences, and portal across phone, tablet, and desktop.

Done!