
SpaceCal puts a shared team calendar on any Confluence page. Leave, releases, on-call weeks and meetings sit in one place, in month, week or agenda view, and anyone who can see the space can read them.
Confluence's own team calendars come with Premium and Enterprise only. SpaceCal works on Standard sites too.
Insert the SpaceCal team calendar macro on a page. Its events belong to the space, so every SpaceCal macro in that space with the same calendar name shows the same events. Give a macro a different name (say "Releases") and it gets a calendar of its own.
You can label the six colours in the macro settings, for example green for leave and purple for releases. The labels show as a legend above the calendar and as categories in the .ics file.
Access follows the space, and every check runs as the person using the macro.
| Person | Can |
|---|---|
| Can view the space | See events and export them |
| Can add pages in the space | Also add, edit and delete any event in that space's calendars |
| Can't view the space | Nothing. The macro shows an error and no events |
Edits are safe when two people work at once. If someone saved an event after you opened it, your save is refused and you're asked to reload, so nobody overwrites a change they never saw.
All-day events are plain dates. A leave day on 5 November is 5 November for every reader, wherever they are.
Timed events are entered in your own time zone (the one in your Atlassian profile) and stored as exact moments. A reader in another zone sees them at their local time, and on their local day. A 22:00 London meeting shows at 07:00 the next morning for someone in Tokyo. If you pick a time that doesn't exist because the clocks jump forward, the app says so and asks for another time. When a time happens twice because the clocks go back, the earlier one is used.
Export .ics covers 90 days back to 365 days ahead, up to 1,000 events or 1 MB. The file is built when you click Export, with your own access, and it shows up as text in a box. Select it all, copy it, save it in a file ending in .ics, and import that file into your calendar app.
There's no download button. UI Kit has no way to save a file, and a download link would need a public web trigger, which Atlassian counts as data egress. So the app keeps the copy box only and stores nothing for the export.
When the window holds more than the limit, upcoming events win. The file takes everything from today on first, then past events from the most recent backwards, and the dialog says it was cut.
The export is a snapshot. It doesn't update itself, so export again after changes. All-day events go out as dates and timed events in UTC, so calendar apps show them at the right local time. People are listed by display name in the event description. Names that Confluence doesn't return (for example, hidden by profile settings) are counted instead.
| Limit | Value |
|---|---|
| Title | 200 characters |
| Notes | 2,000 characters |
| People per event | 20 |
| All-day event length | 366 days |
| Timed event length | 14 days |
| Calendar name | 40 characters |
| Events per calendar (space plus name) | 20,000 |
| Events loaded for one view | 500, with a notice when more fall in the range |
| Years | 2000 to 2099 |
| Export | 90 days back to 365 days ahead, 1,000 events, 1 MB, names for 500 people |
Recurring events aren't supported. A weekly meeting has to be added as separate events.
The app runs on Atlassian Forge with no outside servers, no web triggers and no external calls. Its only requests go to Confluence on your own site, as the person using the macro. Events are kept in Forge SQL, Atlassian's hosted database for the app. It asks for three scopes.
| Scope | Why |
|---|---|
read:space:confluence | Check that you can see the space and whether you can add pages there |
read:confluence-user | Look up display names for the .ics file |
report:personal-data | Tell Atlassian which account IDs the app stores, so closed accounts can be removed |
It can't change pages, comments or anything else in Confluence. See PRIVACY.md for what's stored and for how long.
You'll need Node.js 22.5 or later and the Forge CLI.
npm install
forge register # replaces REPLACE_ME in manifest.yml with your app id
forge deploy -e development
forge install --product confluence
npm test runs the unit tests against an in-memory SQLite copy of the schema. npm run validate checks the manifest offline, and npm run check-frontend checks the UI Kit source. The last two use your installed Forge CLI.
Use the support link on the app's Marketplace listing. Include the error text from the macro, and leave out event titles you'd rather not share.
Zovo builds and maintains this app. If it saves you time, you can support the work on GitHub Sponsors. Sponsorship is optional, and the tool works the same without it.
Zovo is made by theluckystrike on GitHub.
If this app saves you time, you can support the work on GitHub Sponsors. Monthly tiers start at $5, and one-time tiers start at $15. Sponsorship is optional, and the tool works the same without it.