A calendar import is a one-way subscription to a calendar published somewhere else. Ceum fetches the feed, keeps a copy, works out the individual occurrences of anything that repeats, and draws them on your calendar alongside your tasks, events, and subscription renewals.
One way means exactly that: a change in the source calendar reaches Ceum on the next refresh, and nothing you do in Ceum is ever written back.
Imports are available on every plan. Calendar weather is the part of the calendar a plan gates — it needs Plus or Pro — and the two are unrelated: a Free account can subscribe to as many feeds as it likes.
Adding an import
Open Calendar imports and use Add calendar. Three fields:
- ICS URL — required. A direct
https://link to an.icsfile works, so does plainhttp://, and so dowebcal://andwebcals://subscription links, which most calendar apps offer as "subscribe" or "public address". A webcal link is fetched over HTTPS. The URL has to include its scheme and be at most 2048 characters, and the feed has to be reachable from the public internet — an address on a private network is refused. - Display name — optional. Left blank, it becomes the host name from the URL, so a feed you add without naming still reads as something rather than as nothing.
- Chip color — optional. It is the color this feed's events get on the grid.
Ceum fetches the feed once as you save, so a bad URL is caught immediately rather than on some later view. The response must parse as ICS and stay under 5 MB, and the fetch is given ten seconds.
If the fetch does not work, the URL field says the calendar could not be loaded and the import is still saved — it appears in the list carrying its error, where you can edit the URL and try again.
A URL can only be subscribed to once per account.
How often it refreshes
- Automatically. A feed whose last fetch is more than about 15 minutes old is refreshed in the background the next time the calendar asks for a date range. The refresh runs after the grid has already been drawn from the stored copy, so a feed that has just gone stale shows its previous contents once more and its new contents on the following view.
- On demand. Refresh now on the row fetches straight away.
The Synced column says how long ago each feed was last fetched, or Not synced yet for one that has never loaded.
What imported entries can do
Not much, by design — they belong to another calendar.
- They are read-only. An imported entry cannot be edited, cannot be deleted, and cannot be dragged to another day. The only way to change one is to change it where it comes from; the change arrives on the next refresh.
- Clicking one opens a detail view, not a form: title, start, end, which subscribed calendar it came from, and the description, with any URLs and addresses in it turned into working links.
- They are drawn in their import's color. A timed entry is prefixed with its start time and drawn as an outline; an all-day entry is drawn filled, the same way the rest of the grid distinguishes the two.
- Repeating entries are expanded by Ceum from the feed, so a weekly meeting appears on each of its days rather than only on the first.
- They are not part of a bulk selection. The modifier-click that picks chips out for a bulk delete works on tasks and your own events, because those are the two things a bulk delete can act on. An imported chip keeps its ordinary click and opens instead.
- They are not indexed by global search, and they do not appear in combined views, which nest records such as clients, projects, and invoices rather than calendar entries.
- They are never included in a calendar share link. A shared calendar shows your tasks, your events, and your subscription renewals; feed events stay out of it, as does weather.
Calendar settings has no global switch for imported events — the per-import Enabled toggle is the control, so you decide feed by feed.
Editing, disabling, and removing
Every import row carries three actions, and the right-click menu offers the same three.
- Edit changes the URL, the display name, or the chip color. Changing the URL refetches immediately, exactly as adding one does.
- Enabled is a toggle in its own column. Turning it off hides that feed's events from the grid and keeps everything else — the row, the URL, the stored copy — so turning it back on brings the events straight back.
- Remove deletes the subscription after a confirmation. Its events disappear from the grid; the calendar at the other end is not affected in any way.
When a feed stops loading
A row whose last fetch failed shows a warning icon next to its name, with the reason as its tooltip.
A failed refresh keeps the last copy that did load, so the grid carries on showing the events it already had rather than emptying out because a server was briefly down. Changing the URL to one that cannot be loaded is different: there is no longer a good copy of that address to fall back to, so those events go until a working URL is saved.
Network-level failures all report the same thing — that the calendar could not be loaded — whether the host never answered, the URL returned an error, or the address is not publicly reachable. That is deliberate: a field that reported the difference could be used to probe machines that are not yours. A feed that does load but is not valid ICS, or is larger than the 5 MB limit, says so specifically.
Limitations
- Public feed URLs only. There is no Google or Outlook account connection, no CalDAV, and no support for a feed that requires a sign-in.
- One direction. Ceum reads the feed and never writes to it.
On mobile
The mobile app manages imports from its calendar settings: add, edit, refresh, enable or disable, and delete, with the form and the delete confirmation as native sheets. Imported events open in a read-only detail sheet there too.