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 event-specific related types: EventInstance, Speaker, Review, Attendee, Activity, Invitation, and Experience.
Tags, Photos, and Custom Fields are also commonly used on events, but they apply across Places, Groups, Departments, and Users as well. They are documented separately in Article 5 (Shared Object Types).
The Event Object
The Event object is the largest and most important template variable, organized into the sections below.
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 | One of standalone, conference, or session. Not a category (categories are tags/filters). |
Liquid example:
{{ event.name }} - {{ event.status }}
Dates
The *_on_date properties below use today’s date as the “specific date”; there is no way to pass a different date from Liquid. In Emphasis, only future_instances_on_date is used in practice.
| 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 |
EventInstance | The next future instance, or the most recent past instance if no future instances remain. This is the instance shown on the event page. |
last_instance |
EventInstance | 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 today |
future_instances_on_date |
Array | Future instances today |
other_instances_on_date |
Array | Other instances today |
has_other_instances_on_date |
Boolean | Has other instances today |
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 (see Article 5 for the Photo object) |
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
Only one of location (free-text address entered by the submitter) or place/business (a linked Place object) will be set on a given event. For display, prefer location_name, which resolves to whichever is present.
| Variable | Type | Description |
|---|---|---|
location |
String | Free-text location entered by the event submitter. Set only when no Place is linked. |
location_name |
String | Display-ready location name. Prefer this when you just need to show the location. |
visible_name |
String | Location visible name |
business |
Place | Alias for place. |
place |
Place | Linked Place object. Set only when the submitter chose a Place rather than typing free-text. |
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 |
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
Tags, filters, and keywords on events share the broader Tag/TagList system documented in Article 5 (Shared Object Types). The fields below are the event-specific entry points.
| Variable | Type | Description |
|---|---|---|
event_type |
String | Primary event type |
event_types |
Array | All event types |
types |
TagList | Tags grouped by context (see Article 5) |
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 (see Article 5) |
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 URL for events using external tickets. |
ticket_price |
String | Ticket price or price range |
free |
Boolean | Event is free |
has_tickets |
Boolean | True if the event has external tickets or uses the Register ticketing system. |
needs_registration |
Boolean | Registration required |
has_external_tickets |
Boolean | Tickets sold externally |
has_ticket_offers |
Boolean | True when tickets are defined in Register (Localist’s built-in ticketing). |
tickets_require_login |
Boolean | Login required to purchase |
can_purchase_tickets |
Boolean | User can purchase tickets |
ticket_url |
String | Resolved ticket purchase URL. Delegates to ticket_info (external) or the platform’s register URL depending on the event’s configuration. |
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 |
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 |
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 and is largely interchangeable with the Event object. The only meaningful difference is that date/time properties like start_date and starts_at reflect this specific instance, whereas on an Event they reflect the “next instance” (next future occurrence, or the most recent past instance if no future ones remain).
Context guidance:
-
On an event page,
eventrepresents the Event as a whole. -
In listings (e.g.
event_item), the event object is typically a specific EventInstance.
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 %}
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 %}
Related Articles
This article is part of a 9-part series on Localist developer theming:
-
Introduction to Localist Developer Theming
-
Site Configuration and Global Objects
-
Events, Instances, and Related Objects
-
Places, Groups, Departments, and Channels
-
Shared Object Types
-
Custom Liquid Tags Reference
-
Custom Liquid Filters Reference
-
Template Variable Reference
-
Forms and User Management