Overview
The Event object is the central entity in Localist Events. It represents a complete event including all its metadata, configuration, and relationships. When displaying event lists or calendars, developers work with EventInstance objects—single occurrences of recurring events. This article documents the Event object and all related types: EventInstance, Speaker, Tag, TagList, Photo, PhotoAlbum, Review, Attendee, Activity, Invitation, Experience, and Plan.
The Event Object
The Event object is the largest and most important template variable. It includes eleven major sections of attributes.
Core
| Variable | Type | Description |
|---|---|---|
name |
String | Event title |
url |
String | Canonical URL for the event page |
status |
String | Event status (live, canceled, postponed, sold out) |
kind |
String | Event kind/category |
Liquid example:
{{ event.name }} - {{ event.status }}
Dates
| Variable | Type | Description |
|---|---|---|
starts_at |
DateTime | Full start date and time |
ends_at |
DateTime | Full end date and time |
start_time |
String | Start time formatted as string |
start_date |
Date | Start date only |
end_time |
String | End time formatted as string |
first_date |
Date | First date of series (recurring events) |
last_date |
Date | Last date of series (recurring events) |
next_instance |
Event | Next occurrence of recurring event |
last_instance |
Event | Last occurrence of recurring event |
future_instances |
Array | All future occurrences |
future_dates |
Array | All future dates |
initial_instances |
Array | Initial set of instances |
has_instances |
Boolean | Event has multiple instances |
has_instances_today |
Boolean | Event has instances today |
has_many_future_instances |
Boolean | Event has many future instances |
has_future_instances_on_date |
Boolean | Has future instances on specific date |
future_instances_on_date |
Array | Future instances on specific date |
other_instances_on_date |
Array | Other instances on specific date |
has_other_instances_on_date |
Boolean | Has other instances on specific date |
Liquid example:
Starts: {{ event.starts_at | date: "%B %d, %Y at %I:%M %p" }}
{% if event.has_instances %}
This event occurs {{ event.future_instances.size }} times
{% endif %}
Content
| Variable | Type | Description |
|---|---|---|
description |
String | Event description (raw format) |
description_text |
String | Event description as plain text |
description_html |
String | Event description as HTML |
photo |
Photo | Featured event photo |
photo_caption |
String | Caption for featured photo |
homepage |
String | Event homepage URL |
website |
String | Event website URL |
hashtag |
String | Event hashtag |
sponsored |
Boolean | Event is sponsored |
Liquid example:
<img src="{{ event.photo.featured }}" alt="{{ event.photo.caption }}" />
<p>{{ event.description_html }}</p>
Location
| Variable | Type | Description |
|---|---|---|
location |
String | Location name/address (combined) |
location_name |
String | Location display name |
visible_name |
String | Location visible name |
business |
Place | Associated place/venue object |
place |
Place | Associated place/venue object |
address |
String | Street address |
directions |
String | Directions to venue |
parking |
String | Parking information |
room_number |
String | Room number if applicable |
latitude |
Float | Venue latitude |
longitude |
Float | Venue longitude |
nearby_metro_stations |
Array | Nearby transit stations |
distance |
Float | Distance from user location |
has_location? |
Boolean | Event has location information |
Liquid example:
{% if event.has_location? %}
{{ event.location }}
<a href="https://maps.google.com/?q={{ event.latitude }},{{ event.longitude }}">View on Map</a>
{% endif %}
Types/Tags
| Variable | Type | Description |
|---|---|---|
event_type |
String | Primary event type |
event_types |
Array | All event types |
types |
TagList | Tags grouped by context |
tags |
Array | All tags as flat array |
keywords |
String | Keyword string for search |
leaf_types |
Array | Leaf (terminal) type values |
custom_fields |
CustomFields | Custom field values |
Liquid example:
{% for tag in event.types.event_types %}
<span class="tag">{{ tag.name }}</span>
{% endfor %}
Experience/Stream
| Variable | Type | Description |
|---|---|---|
experience |
Experience | In-person/virtual/hybrid mode |
experience_has_location? |
Boolean | Experience includes in-person component |
experience_has_stream? |
Boolean | Experience includes virtual stream |
has_stream? |
Boolean | Event has streaming capability |
has_stream_details? |
Boolean | Stream details are available |
stream_service |
String | Stream service provider (Zoom, etc.) |
stream_embed_code |
String | HTML embed code for stream |
stream_info |
String | Stream information text |
stream_url |
String | URL to stream |
Liquid example:
{% if event.has_stream? %}
<a href="{{ event.stream_url }}">Join Virtual Event</a>
{% endif %}
Ticketing
| Variable | Type | Description |
|---|---|---|
ticket_info |
String | Ticket information text |
ticket_price |
String | Ticket price or price range |
free |
Boolean | Event is free |
has_tickets |
Boolean | Event has ticketing enabled |
needs_registration |
Boolean | Registration required |
has_external_tickets |
Boolean | Tickets sold externally |
has_ticket_offers |
Boolean | Discounted tickets available |
tickets_require_login |
Boolean | Login required to purchase |
can_purchase_tickets |
Boolean | User can purchase tickets |
ticket_url |
String | Link to purchase tickets |
has_ticket_cost? |
Boolean | Tickets have cost |
Liquid example:
{% if event.free %}
<span class="badge">FREE</span>
{% elsif event.has_tickets %}
Starting at {{ event.ticket_price }}
{% endif %}
Status
| Variable | Type | Description |
|---|---|---|
is_over |
Boolean | Event has ended |
is_past |
Boolean | Event is in the past |
is_verified |
Boolean | Event is verified |
is_unverified |
Boolean | Event is unverified |
is_rejected |
Boolean | Event was rejected |
rejection_reason |
String | Reason for rejection |
recently_approved |
Boolean | Recently approved by admin |
can_edit |
Boolean | Current user can edit |
Liquid example:
{% if event.is_rejected %}
<p class="error">Rejected: {{ event.rejection_reason }}</p>
{% endif %}
Associations
| Variable | Type | Description |
|---|---|---|
user |
User | Event creator/organizer |
group |
Group/Department | Associated group |
groups |
Array | All associated groups |
department |
Group/Department | Associated department |
departments |
Array | All associated departments |
school |
String | Associated school |
campus |
String | Associated campus |
conference_event |
Event | Parent conference (if session) |
speakers |
Array of Speaker | Event speakers |
Liquid example:
Organized by: <a href="{{ event.user.url }}">{{ event.user.visible_name }}</a>
Attendance
| Variable | Type | Description |
|---|---|---|
allows_attendance |
Boolean | Event supports attendance marking |
show_attendees |
Boolean | Attendee list is public |
show_organizer_check_in |
Boolean | Organizer check-in visible |
Feedback
| Variable | Type | Description |
|---|---|---|
feedback_goals |
String | Feedback goal text |
feedback_highlights |
String | Feedback highlights text |
feedback_comment_label |
String | Custom label for feedback |
Conference
| Variable | Type | Description |
|---|---|---|
session? |
Boolean | Event is a conference session |
conference? |
Boolean | Event is a conference |
standalone? |
Boolean | Event is standalone |
URLs
| Variable | Type | Description |
|---|---|---|
ical_url |
String | iCal/ICS feed URL |
google_subscribe_url |
String | Google Calendar subscription URL |
speakers_url |
String | Speakers page URL |
edit_url |
String | Event edit URL |
full_attendees_url |
String | Full attendees list URL |
update_attendance_url |
String | Attendance update URL |
invite_friends_url |
String | Invite friends URL |
check_in_url |
String | Check-in URL |
Recent Activity
| Variable | Type | Description |
|---|---|---|
recent_activity |
Object | Recent activity data |
recent_activity_types |
Array | Available activity types |
recent_activity_postable_types |
Array | Activity types users can post |
has_recent_activity_types |
Boolean | Has activity types |
recent_activity_comments |
Array | Recent comments |
recent_activity_reviews |
Array | Recent reviews |
recent_activity_photos |
Array | Recent photos |
recent_activity_form_id |
String | Form ID for posting activity |
recent_activity_post_comment_url |
String | Post comment endpoint |
recent_activity_post_review_url |
String | Post review endpoint |
recent_activity_post_photo_url |
String | Post photo endpoint |
The EventInstance Object
An EventInstance represents a single occurrence (date/time) of an event. EventInstance shares most variables with the Event object. The key difference is that instance-specific times (starts_at, ends_at) come from the instance, while descriptive attributes (name, description, etc.) are delegated to the parent Event.
Common Attributes
| Variable | Type | Description |
|---|---|---|
name |
String | Event title (from parent Event) |
url |
String | Event page URL |
starts_at |
DateTime | Specific instance start time |
ends_at |
DateTime | Specific instance end time |
start_time |
String | Instance start time formatted |
start_date |
Date | Instance start date |
end_time |
String | Instance end time formatted |
status |
String | Instance status |
kind |
String | Event kind |
description |
String | Event description (from parent) |
photo |
Photo | Event photo |
location |
String | Event location |
place |
Place | Venue object |
event_type |
String | Primary event type |
event_types |
Array | All event types |
is_over |
Boolean | Instance has ended |
is_past |
Boolean | Instance is in the past |
free |
Boolean | Event is free |
has_tickets |
Boolean | Has tickets |
sponsored |
Boolean | Event is sponsored |
has_location? |
Boolean | Has location info |
has_stream? |
Boolean | Has stream |
Liquid example:
{% for instance in event.future_instances %}
<div class="event-instance">
{{ instance.name }}
{{ instance.starts_at | date: "%b %d" }} at {{ instance.start_time }}
</div>
{% endfor %}
The Speaker Object
Speakers are typically used in conference events and structured presentations.
Profile
| Variable | Type | Description |
|---|---|---|
name |
String | Speaker name |
title |
String | Speaker job title |
organization |
String | Speaker organization |
description |
String | Speaker biography |
website |
String | Speaker website |
Social Links
| Variable | Type | Description |
|---|---|---|
twitter_url |
String | Twitter profile URL |
linkedin_url |
String | LinkedIn profile URL |
facebook_url |
String | Facebook profile URL |
instagram_url |
String | Instagram profile URL |
has_social_links? |
Boolean | Speaker has social links |
Liquid example:
{% for speaker in event.speakers %}
<div class="speaker">
<h3>{{ speaker.name }}</h3>
<p>{{ speaker.title }} at {{ speaker.organization }}</p>
{% if speaker.has_social_links? %}
<a href="{{ speaker.twitter_url }}">Twitter</a>
{% endif %}
</div>
{% endfor %}
Tags and Tag Lists
Tag Object
A Tag represents a single type or classification label.
| Variable | Type | Description |
|---|---|---|
name |
String | Tag name |
id |
Integer | Tag unique identifier |
event_search_url |
String | Link to search events by tag |
place_search_url |
String | Link to search places by tag |
group_search_url |
String | Link to search groups by tag |
department_search_url |
String | Link to search departments by tag |
week_calendar_url |
String | Link to week calendar filtered by tag |
TagList Object
A TagList is a dynamic collection of Tags grouped by context. Use it to access tags organized by their classification categories.
| Variable | Type | Description |
|---|---|---|
context_names |
Array of String | Available context names |
[context_name] |
Array of Tag | Tags in specific context (dynamic method) |
Liquid example:
{% for context in event.types.context_names %}
<h4>{{ context }}</h4>
{% for tag in event.types[context] %}
<span class="tag">{{ tag.name }}</span>
{% endfor %}
{% endfor %}
The Photo and PhotoAlbum Objects
Photo Object
Photos can be associated with events, users, or albums. The Photo object provides multiple image URL variants for different use cases.
Image URLs
| Variable | Type | Description |
|---|---|---|
original |
String | Original size image URL |
full_size |
String | Full size image URL |
cover |
String | Cover size (large horizontal) |
huge |
String | Huge size image URL |
hero |
String | Hero size image URL |
spotlight |
String | Spotlight size image URL |
featured |
String | Featured size image URL |
card |
String | Card size image URL |
big_300 |
String | 300px large size |
square_300 |
String | 300x300px square |
big_square |
String | Large square size |
square_200 |
String | 200x200px square |
big |
String | Big size image URL |
medium |
String | Medium size image URL |
small |
String | Small size image URL |
icon_large |
String | Large icon size |
icon_tiny |
String | Tiny icon size |
tiny |
String | Tiny size image URL |
Metadata
| Variable | Type | Description |
|---|---|---|
caption |
String | Photo caption |
type |
String | Photo type/classification |
dom_id |
String | HTML DOM ID |
json_data |
String | JSON metadata |
created_at |
DateTime | When photo was uploaded |
Associations
| Variable | Type | Description |
|---|---|---|
user |
User | Uploader user object |
group |
Group/Department | Associated group |
event_instance |
Event | Associated event |
Liquid example:
<img src="{{ event.photo.featured }}"
srcset="{{ event.photo.big }} 800w, {{ event.photo.medium }} 400w"
alt="{{ event.photo.caption }}" />
PhotoAlbum Object
A PhotoAlbum groups related photos together.
| Variable | Type | Description |
|---|---|---|
title |
String | Album title/name |
Liquid example:
{% for album in all_albums %}
<h3>{{ album.title }}</h3>
{% endfor %}
The Review Object
Reviews are user feedback on events, typically including ratings and comments.
Properties
| Variable | Type | Description |
|---|---|---|
review |
String | Review text content |
user |
User | Reviewer user object |
rating |
Integer | Numeric rating (usually 1-5) |
approved |
Boolean | Review is approved |
when |
DateTime | When review was for (event date) |
submitted |
DateTime | When review was submitted |
target |
Object | Object being reviewed |
Display
| Variable | Type | Description |
|---|---|---|
type |
String | Review type classification |
dom_id |
String | HTML DOM ID |
delete_url |
String | Review deletion URL |
can_be_deleted |
Boolean | Current user can delete |
Liquid example:
{% for review in event.recent_activity_reviews %}
{% if review.approved %}
<div class="review">
<p>{{ review.user.visible_name }} gave {{ review.rating }} stars</p>
<p>{{ review.review }}</p>
</div>
{% endif %}
{% endfor %}
The Attendee Object
The Attendee object is a union type, meaning it can represent different kinds of attendees (UserEvent, PrivateAttendee, ExtraAttendee). Only common attributes are documented here.
Common Attributes
| Variable | Type | Description |
|---|---|---|
visible_name |
String | Attendee display name |
can_link? |
Boolean | Name can link to profile |
user |
User | User object (if registered) |
Registered Attendee Only
These attributes are only available for attendees with user accounts:
| Variable | Type | Description |
|---|---|---|
starts_at |
DateTime | Registered event instance start |
ends_at |
DateTime | Registered event instance end |
start_time |
String | Event start time |
end_time |
String | Event end time |
url |
String | Attendee profile or event URL |
status |
String | Event status |
attendance_status |
String | Attendance status (attended/declined) |
allows_attendance |
Boolean | Event allows marking attendance |
experience |
Experience | In-person/virtual/hybrid mode |
place |
Place | Event venue |
address |
String | Event address |
Liquid example:
{% for attendee in event.attendees %}
<li>
{% if attendee.can_link? %}
<a href="{{ attendee.user.url }}">{{ attendee.visible_name }}</a>
{% else %}
{{ attendee.visible_name }}
{% endif %}
</li>
{% endfor %}
The Activity Object
Activity is a union type representing user-generated content (Comment, Photo, Review). Only common attributes are documented.
Common Attributes
| Variable | Type | Description |
|---|---|---|
type |
String | Activity type (Comment/Photo/Review) |
user |
User | Activity creator |
dom_id |
String | HTML DOM ID |
delete_url |
String | Delete activity URL |
can_be_deleted |
Boolean | Current user can delete |
Comment Only
| Variable | Type | Description |
|---|---|---|
comment |
String | Comment text |
submitted |
DateTime | When comment was posted |
approved |
Boolean | Comment is approved |
Photo Only
| Variable | Type | Description |
|---|---|---|
caption |
String | Photo caption |
created_at |
DateTime | When photo was uploaded |
original |
String | Original photo URL |
full_size |
String | Full size photo URL |
Review Only
| Variable | Type | Description |
|---|---|---|
review |
String | Review text |
rating |
Integer | Rating value |
when |
DateTime | Event date being reviewed |
approved |
Boolean | Review is approved |
Liquid example:
{% for activity in event.recent_activity %}
{% if activity.type == "Review" %}
<div class="review">{{ activity.review }} ({{ activity.rating }} stars)</div>
{% elsif activity.type == "Comment" %}
<div class="comment">{{ activity.comment }}</div>
{% elsif activity.type == "Photo" %}
<img src="{{ activity.original }}" alt="{{ activity.caption }}" />
{% endif %}
{% endfor %}
The Invitation Object
Invitations represent event invitations sent to users.
Properties
| Variable | Type | Description |
|---|---|---|
user |
User | Invited user |
event |
Event | Event being promoted |
message |
String | Invitation message |
sender |
User | User who sent invitation |
sent_at |
DateTime | When invitation was sent |
token |
String | Unique invitation token |
Status
| Variable | Type | Description |
|---|---|---|
status |
String | Invitation status (pending/accepted/rejected) |
accepted |
Boolean | Invitation was accepted |
rejected |
Boolean | Invitation was rejected |
unread |
Boolean | Invitation is unread |
Actions
| Variable | Type | Description |
|---|---|---|
accept_url |
String | URL to accept invitation |
ignore_url |
String | URL to ignore invitation |
delete_url |
String | URL to delete invitation |
Liquid example:
{% if event.invitation %}
{% if event.invitation.accepted %}
<p>You have accepted this invitation</p>
{% else %}
<a href="{{ event.invitation.accept_url }}">Accept Invitation</a>
{% endif %}
{% endif %}
The Experience Object
Experience represents the mode(s) in which an event is offered (in-person, virtual, hybrid, etc.).
Details
| Variable | Type | Description |
|---|---|---|
name |
String | Experience mode name |
key |
String | Experience mode identifier |
experience_type |
String | Same as key (alias) |
has_stream? |
Boolean | Has virtual stream component |
has_location? |
Boolean | Has in-person location component |
Liquid example:
{% if event.experience.has_stream? and event.experience.has_location? %}
<span class="badge">Hybrid Event</span>
{% elsif event.experience.has_stream? %}
<span class="badge">Virtual Event</span>
{% endif %}
The Plan Object
Plan is a union type representing different kinds of user event plans (UserEvent, Plan, WatchedEvent, SpeakingEvent). Only common attributes are documented.
Common Attributes
| Variable | Type | Description |
|---|---|---|
name |
String | Event name |
starts_at |
DateTime | Event start date and time |
url |
String | Event URL |
Liquid example:
{% for plan in user.future_events %}
<li>
<a href="{{ plan.url }}">{{ plan.name }}</a>
{{ plan.starts_at | date: "%b %d" }}
</li>
{% endfor %}
Related Articles
This article is part of an 8-part series on Localist developer theming: