One calendar. Configured for your page.
Set sources, filters, language, and appearance directly on each widget. No visitor uploads or central source catalogue. These live examples use fictional data.
Full configuration reference · Several events on one day · Display options · Vocabulary checks
1. Copy the embed, then customize its attributes
ACE is configured for https://ace.tools.rpdm.rwth-aachen.de. Replace the source URLs with your feeds. The data-* attributes control this calendar. The objects inside data-sources define each source. Remove optional attributes to use their defaults.
This example uses German, Berlin time, a purple calendar grid, compact cards with 25% larger event text, and a day popup. Keywords are hidden. The blue and green event markers identify the two sources.
<!-- Load these assets once per page, even if you embed several calendars. -->
<link rel="stylesheet" href="https://ace.tools.rpdm.rwth-aachen.de/dist/ace.css">
<!-- Calendar appearance, card content, and controls are configured below. -->
<div class="ace-calendar"
data-lang="de"
data-timezone="Europe/Berlin"
data-theme="auto"
data-theme-fallback="light"
data-accent="#7455a3"
data-view="month"
data-views="month,week,day,list"
data-week-numbers="true"
data-density="compact"
data-event-font-size="125%"
data-fields="time,source"
data-hide="keywords"
data-max-events-per-day="3"
data-overflow="popup"
data-filters="source,type,attendance,venue,dates"
data-controls="all"
data-refresh="900"
data-sources='[
{
"id": "research",
"name": "Research Data Network",
"url": "https://example.org/calendar.ics",
"color": "#00549f"
},
{
"id": "campus",
"name": "Campus Events",
"url": "/events.json",
"color": "#247867"
}
]'>
</div>
<script src="https://ace.tools.rpdm.rwth-aachen.de/dist/ace.js" defer></script>
What to change
| Customize | Attribute | Effect / alternatives |
|---|---|---|
| Calendar colour | data-accent="#7455a3" | Tints the grid lines, weekday header, buttons, and current-date marker. Each source keeps its own colour. |
| Language | data-lang="de" | Use en for English. Embedded calendars hide language-switch buttons by default. |
| Follow page theme | data-theme="auto" | Follow the surrounding page; use light when it supplies no theme. Change the fallback to dark if needed. |
| Fixed theme | data-theme="light" | Use light or dark to keep the calendar in that theme. |
| Starting view | data-view="month" | Choose month, week, day, or list. Add data-date="2026-09-17" for a specific date. |
| Available views | data-views="month,week,day,list" | Remove views you do not want visitors to select, e.g. month,list. |
| Week numbers | data-week-numbers="true" | Set false to hide ISO week numbers. |
| Event text size | data-event-font-size="125%" | Enlarges titles and supporting text by 25% in every view and in popups. Use 150% for 50% larger text, or 100% for the original size. Supports 75%–200%. |
| Card size | data-density="compact" | Choose title, compact, or detailed. Remove data-fields to use the fields supplied by that density. |
| Card content | data-fields="time,source" | Title always appears. Add type,venue,keywords,description,attendance as needed. Use time alone to hide source names while keeping their colours. |
| Hide keywords | data-hide="keywords" | Hides keywords in cards and detail popups. Downloads still include them. Use commas to hide multiple fields. |
| Detail popup content | data-detail-fields="time,source,venue,description" | Optional: choose fields for the event popup separately. Omit this attribute to show full details; data-hide still applies. |
| Busy days | data-max-events-per-day="3" | Show three cards before the overflow button. Set 5 for five, or 0 for every event. |
| Overflow button | data-overflow="popup" | Open all events for that day in a popup. Use list to switch to the day’s list. |
| Filter sidebar | data-filters="source,type,attendance,venue,dates" | Choose visible filters. Add keyword for a keyword filter, or use none to hide the sidebar. |
| Page controls | data-controls="all" | Choose header,language,theme,share,search,views,navigation,refresh,updated. For a minimal embed, use navigation,views. |
| Automatic refresh | data-refresh="900" | Seconds between refreshes while visible. Use 0 to disable automatic refresh. |
Keep event types and keywords consistent
ACE merges case and spacing variants automatically. Add data-vocabulary to configure preferred labels, synonyms, and approved misspellings for this page. Enable data-vocabulary-report="true" to review original terms, sources, and possible spelling matches. Unknown terms stay visible until you approve an alias. See the complete vocabulary example and configuration ↗.
Organizations providing feeds should reuse applicable Schema.org event classes and maintain preferred terms and aliases using the SKOS approach. Share the guidance for data providers with them; it includes publishing examples and explains how their vocabulary connects to this page’s configuration.
What belongs inside each source
id is a unique, stable identifier. name is the displayed source label. url points to its feed. color colours its event markers. For example, changing data-accent changes the calendar grid; changing a source's color changes only that source's events.
Each event should supply page_url for its entry on the feed provider's website. ACE uses that page for “Published by”. Supply the linked event or organizer website separately in url or event_url; it appears as an “Event page” button when available. For custom JSON, map pageUrl to the source-entry field. See publishing examples for JSON, iCalendar, and jCal.
data-fields changes cards only. data-hide also hides fields in event popups. To hide the keyword filter, omit keyword from data-filters. Configured filters and complete calendar downloads still use the event data.
data-controls="all" includes the available controls. Embedded calendars hide language and theme switches unless you also set data-language-switch="true" or data-theme-switch="true". Language/theme/share controls require header; sharing also requires data-url-sync="true". Use data-plain="true" to hide the entire header, controls, and sidebar.
Try the layouts, text-size slider, and accent-colour picker ↗. The live calendar below uses the same display settings with bundled fictional feeds.
Try following the host page
This calendar uses data-theme="auto". Switch the surrounding panel's theme below: the calendar follows it, while the second calendar keeps its fixed dark theme. Both calendars use German without language-switch buttons.
ACE checks the nearest ancestor's data-theme, data-bs-theme, data-color-mode, or light/dark class, then the parent's CSS color-scheme, then data-theme-fallback. Changes to those markers update the calendar automatically. For a site with another theme convention, set a supported marker when its theme changes.
<section data-theme="dark">
<div class="ace-calendar" data-lang="de"
data-theme="auto" data-theme-fallback="light"
data-src="https://example.org/calendar.ics"></div>
</section>
2. A different page, a different configuration
German, dark theme, a custom accent, a list view, and a nested JSON response. Field mappings belong to this source’s configuration. The timestamps in this example are local Berlin time.
<div class="ace-calendar"
data-lang="de" data-theme="dark" data-accent="#7455a3" data-view="list"
data-from="2026-09-01" data-to="2026-09-30"
data-sources='[{
"id":"local", "name":"Forschungsdaten", "url":"/events.json",
"itemsPath":"results", "timezone":"Europe/Berlin",
"mapping":{
"uid":"identifier", "title":"heading",
"start":"schedule.begins", "end":"schedule.finishes",
"location":"place", "type":"kind", "keywords":"topics"
}
}]'></div>
3. An iframe or shareable URL
Use repeated src parameters for simple sources, or a JSON-encoded sources parameter for names, colours, and mappings. Combine with type, source, keyword, attendance, venue, q, from, and to.
<iframe title="Upcoming events" loading="lazy"
src="https://ace.tools.rpdm.rwth-aachen.de/?src=https%3A%2F%2Fexample.org%2Fevents.ics&lang=en&theme=light&view=list"
style="border:0;width:100%;height:800px"></iframe>
Iframe embeds also hide language and theme switches by default. Define lang=de or lang=en and theme=light or theme=dark in the URL. Automatic theme detection reads the calendar's own document; use the direct embed for live theme updates from your page. A cross-origin iframe cannot inspect its parent page's theme.
The individual event popup includes an .ics download. Source feeds must allow CORS, be hosted on the same origin, or use the optional allowlisted proxy.