.rcal is a simple, open file format for describing events that repeat —
weekly, monthly, annually, or on whatever schedule makes sense.
It was created by EventStrand and released free for anyone to use.
example .rcal file
What is .rcal?
Most calendar formats are built for scheduling meetings — things you personally need to show up to. .rcal is built for something different: describing recurring real-world events that anyone might want to know about.
Think of a jazz bar's weekly residency, a farmers market that runs every Sunday from May through October, or your sister's birthday. These are things that come back. .rcal gives them a permanent, readable home.
.rcal is just a text file written in JSON — a format any developer already knows, and any curious person can read. No special software required to open one.
A .rcal file describes one strand — a named collection of events from a single publisher (a venue, a person, an organizer). Inside that file are the events themselves, each with a schedule, a category, and whatever details the publisher wants to share.
Why does this exist?
The standard calendar format (.ics / iCalendar) was designed for personal scheduling — your dentist appointment, your team standup. It wasn't built to describe a venue's ongoing programming in a way other apps could read and subscribe to.
.rcal fills that gap. It's designed to be published — shared at a permanent URL so that apps, scripts, or other people can always find the latest version of a schedule.
📍
Built for venues
Describe everything that happens at a place — different nights, different vibes, one file.
🔁
Built for recurring
Weekly, monthly, annual, seasonal, irregular — all supported natively.
🔓
No license, no fee
Public domain (CC0). Read it, build with it, fork it. No permission needed.
👀
Human-readable
Open it in any text editor and you can read it. No decoding required.
How it works
Every .rcal file has three parts: a version number, an optional info block about the publisher, and a list of events.
The info block (meta)
title
The name of the place or person publishing the schedule.e.g. "The Rusty Nail"
type
What kind of publisher this is.venue · artist · community · personal · retail · event
timezone
The timezone all times in this file use.e.g. "America/Chicago"
live
If true, apps should check this file regularly for updates. Requires a source_url.
location
Address, city, state, and coordinates. Inherited by all events unless overridden.
Each event
id
A permanent identifier for this event. Never changes, even if the name does.e.g. "friday-jazz"
name
What the event is called.e.g. "Friday Jazz Residency"
category
The type of event. Used for filtering and discovery.
vibe_tags
Words that describe the feel of the event — not what it is, but what it's like.mellow · social · curious · cozy · outdoor · celebratory…
recurrence
The repeating schedule — weekly on Fridays, first Thursday of the month, every summer, etc.
dates
A hand-picked list of specific dates, for events with no predictable pattern.
date
A single date for one-off events. Can't be used alongside recurrence or dates.
exceptions
Dates to skip, cancel, or modify — for holidays, closures, or last-minute changes.
Every event in a .rcal file uses one of three scheduling approaches — or a combination.
🔄
Recurrence rules
You describe the pattern — "every Friday" or "the last Thursday of each month" — and apps calculate the actual dates. Best for regular, predictable schedules.
📋
Curated date list
You list the exact dates yourself, one by one. Good for events that happen somewhat regularly but on no fixed pattern.
📌
Single date
One specific date, one time. Use this for a special show, anniversary event, or anything that only happens once.
Recurrence rules and a curated date list can coexist on the same event — useful for a regular weekly night that also has some confirmed extra dates. A single date, however, can't be mixed with either.
Categories & vibe tags
Categories describe what kind of event it is. Vibe tags describe what it feels like to be there. The idea is that you might not always know what you want to do — but you often know how you want to feel.
A .rcal file is static by default — it's downloaded once and stays as-is. That's fine for personal use or one-off events.
But the more powerful option is a live file: one hosted at a permanent URL, with "live": true in the meta block. Apps that support live strands will check back every 24 hours and pick up any changes automatically. The publisher updates one file; every subscriber sees the latest version.
This is the approach EventStrand uses. When a venue changes their Tuesday night to Wednesday, subscribers don't have to do anything — the update comes to them.
See it in action
Drop any .rcal file into the reader and get a clean list and calendar view instantly. No account, no upload — runs entirely in your browser.