Skip to content

Overview

AFL (Already Format Language) is the description format already.events understands. You write event descriptions in your Google Calendar — or wherever your data comes from — using any combination of the features below. AFL handles them automatically: it auto-detects whether you wrote HTML, Markdown, or plain text; pulls out comments, directives, image URLs, and platform links; and renders the rest as the visitor-facing event description.

You don't have to learn AFL all at once. Plain text and Markdown both work. The advanced features layer on as you need them.

Base formats

AFL auto-detects each description as one of three base formats:

Format Detection Rendering
HTML Contains <tag> patterns Sanitized to a safe subset of tags and attributes
Markdown Contains # headings, **bold**, [links](url), - lists, etc. Parsed with marked, then sanitized
Plain text Default HTML-escaped, newlines converted to <br>

Detection runs after comments, directives, and URL extraction (see Processing order below) so the literal #already: text doesn't accidentally trip Markdown's hash-heading detection.

Comments

Lines starting with // are stripped from descriptions before any other processing happens. Use them for internal notes, TODOs, or to temporarily disable a directive without deleting it.

See Comments for the full rules.

Directives

#already:<type>:<value> tokens let you control rendering — pin events, hide events, add tags, attach images, or surface platform action buttons (Eventbrite, Instagram, Zoom, …). Directives are extracted and removed from the rendered description, then rendered as the appropriate UI element.

The full reference lives in the Directives section of these docs:

URL extraction

URLs in your description are detected and pulled out automatically — you don't need a directive for the common cases:

Extracted URLs are removed from the rendered description text so the same content doesn't appear twice (once as the URL, once as the rendered card).

Processing order

When a description goes through AFL, extractions run in this fixed order:

  1. Comments// lines are removed entirely
  2. Directives#already: tokens are extracted
  3. Images — image URLs, Google Drive links, Dropbox links
  4. Links — platform URLs (Eventbrite, Instagram, …)
  5. Attachments — file URLs (.pdf, .doc, …)
  6. Format detection — what's left is auto-detected as HTML, Markdown, or plain text

A few invariants: