I know I will probably get pushback over this, but CalDAV sucks. People say that it's great and that it's easy; yet if that were true there would be way more self-hosted CalDAV solutions out there and they would be far more ergonomic than what's available. I was not impressed with Radicale. Because there's really only one calendar file I wanted to serve to myself, I tried implementing my own CalDAV server just for that purpose and pretty much gave up because of how unintuitive and complicated it was merely to make a single file available. I can see why it would be needed if sharing a calendar with other people with calendar apps that support CalDAV, but I think it's kind of a waste of time if hosting a calendar for one's self.
Instead, initially went with the approach of hosting my dynamically updating iCal file in an S3 bucket and using ICSx5 on Android to sync with it. No CalDAV needed – just HTTPS.
However, FOSS calendars for Android still suck, and for some reason I couldn't get ICSx5 to work within GrapheneOS, so I now use almost the same approach but with Proton Calendar which happens to support calendars from direct links to iCal files. It's not perfect, but it suits my needs enough.
I think the author's approach for using iCalendar format is a good one, though what I've discovered is the amount of support for various iCalendar features varies drastically between calendar software. Rather than dealing with that headache, I somewhat gave up and decided to shove most metadata into the description field rather than use the respective properties.
EDIT: My use case is software I wrote to grab data from various sites (Eventbrite, Meetup, pub trivia companies, public event calendars, etc.), filter for only social events I would be interested in, and combine them into a single calendar I can view in my normal calendar software.
I worked on the CalDAV client that’s in every Apple product.
I agree, the protocol sucks. But we also had a ton of trouble handling Exchange and Google’s non-compliant CalDAV server, which all the users blamed us for.
Now that I work at Google I can see that gCal apps use an entirely different protocol.
Would be nice if you use your experience and financial stability of a Google job in order to build a better open-source protocol. Just like when ZX2C4 decided he's fed up with OpenVPN and went to create Wireguard this might be your moment to shine.
IMO the quality of software is only pushed forward by motivated individuals with the right skillset.
The JMAP for Calendars RFC [1] is soon to get published by IETF.
Disclaimer: I work for Fastmail and am the co-author of RFC 8984 [2] which defines the calendar event data model used in JMAP.
Yes, but I am not aware of an existing proxy implementation that would accept JMAP requests and forward these to a CalDAV server, or the other way round.
What I do know for sure is that it‘s feasible for a calendar server to service both JMAP for Calendars and CalDAV. All our work in that regard is open-source in the Cyrus server [1] and is used at Fastmail.
Apart from the exchange protocol one also needs to convert between iCalendar and the data structures used in JMAP. For this, I am currently working on an IETF RFC [2]. Anyone also interested in implementing conversion between iCalendar and JSCalendar, please contact me! We have a test suite for interoperation tests.
It was 14 years ago, I’ve forgotten everything by now.
To be honest if I were to do that today, I’d vibe-code it by writing a strong set of tests against the protocol rfc, then a client against the tests. The client would be low level and have higher level interfaces in various languages.
bflesch might be suggesting that you (or some other motivated + heroic person) write a new spec for calendar collaboration, like what jmap.io is trying to do for mail.
I know that calendars and datetime management suck, hard. I hazard a guess that several people have already started trying to replace caldav (because of the suckage of caldav) and have quietly given up (because of the suckage of datetimes and timezones).
Indeed they do. The hardest bugfix I ever had to do (which I go back to whenever interviews ask that question) was a timezone bug that was going to ruin the iOS 7 on-stage reveal. It only reproduced in customer builds and customer hardware, which we could not debug or get root on. Anyway we traced it to a confluence of rare conditions in a date-math C file that had not been modified since 1987, and was in a completely different style from everything else in the OS. The edge-iest of edge cases.
It was hard because of the debugging blindness, not so much date-math itself. We had to do hardware-level things.
I thought the solution to datetime was almost always to use TAI plus a library to convert for display in the UI. (Or UTC and accept that leap seconds might cause bugs.)
Calendar apps expose all of the weird edge cases in dates and times. For a specific instance of a specific event that never needs to move, TAI will work. However, suppose that you schedule a meeting for 28 March at 13:00. You then move that meeting forward a week, crossing a DST switch. If you simply add 604800 seconds to the TAI, that meeting will be at 14:00, which is surprising. OK, easy enough to solve; convert the TAI back to the local timezone, add 7 to the day field (carrying into month and year, as needed), and you're good to go. Now suppose that the meeting was set up in the US, and you realized that you needed to reschedule the meeting while you were travelling in Germany. You get back to the US, and suddenly the meeting is an hour early, because DST rules aren't universal.
Worse, imagine a recurring meeting, every week at noon. You've got the TAI for the original instance, but as you cross a DST boundary, some places will shift according to DST and others won't, and thus you have half the attendees showing up at the wrong time.
Finally, TAI introduces the leap second bug for calendars. When you schedule a meeting for noon next year, you want that to happen at noon, not now plus however many seconds. If a leap second is introduced, you don't want that meeting to happen at one second before or after noon.
TBH, if you find yourself in a situation where you need to deal with calendar events, I recommend updating your CV.
I'll preface this by stating that I fully realize that localized datetime is absolutely byzantine and fraught with difficulties. That's the rationale for leaving it to an external library as close to 100% of the time as possible.
I also realize that there might well be complexities involved in calendar software that I'm unaware of. Hence my comment - I'm genuinely interested to learn. That said, I think your examples are all fairly clear examples of errors in reasoning by the programmer. Specifically they stem from conceptual mistakes regarding the relation of different logic domains (by which I'm referring to storage, display, scheduling, etc).
You never move events around in TAI (the unambiguous storage format) just as you don't go manually flipping bits in an SQLite database. You always work in a localized time because that's what the user is reasoning in. And you use the datetime library to implement as much of those manipulations as possible.
> US vs Germany, conflicting DST rules.
Go back to the era before smartphones and PDAs and the internet. You're in Germany on a business trip. You call your secretary to reschedule next weeks meeting back home. You don't use German time when doing that, you use US time.
Events have a location which has a timezone. Scheduling happens in that timezone. Blindly using the current local timezone of the device is a reasoning error. Storage, scheduling, and presentation are distinct logic domains.
> you have half the attendees showing up at the wrong time.
There is a single unique TAI time for a given event (after all that's the entire point of using UTC or TAI or what have you). All attendees will see an equivalent local time barring a bug in the datetime library.
See my earlier point regarding which timezone to use for the computation.
> TAI introduces the leap second bug for calendars.
Only if you make the mistake of attempting to manually manipulate your data storage format. The point of TAI as opposed to UTC in this specific case is to offload the complexity of handling leap seconds onto the datetime library so that you don't need to worry about it.
> You never move events around in TAI (the unambiguous storage format) just as you don't go manually flipping bits in an SQLite database.
You actually do. From the point of view of future scheduled events, a event scheduled for 13h00 in a specific timezone is still "13h00 in a specific timezone" even when crazy people on that timezone suddenly declare a new Daylight savings time to start before the event happens. All future "timestamps" are prone to move due to such shenanigans. And you need to keep your timezone DB as updated as possible to update thing as soon as possible, if you don't want users with wrong times on their future events.
If you're not doing something like full rfc9557 https://datatracker.ietf.org/doc/html/rfc9557 "Internet Extended Date/Time Format (IXDTF)" [iso 8601 local time + as-of-now known timezone offset + IANA timezone] as "timestamps" you're probably truncating important information that will bite you back later if you're doing a calendar/scheduler.
It's a good point. I responded to the adjacent comment.
After glancing at that RFC I'm unclear about the purpose of the UTC offset. Is it simply an error check to catch the case of a datetime library with outdated timezone information? Otherwise it seems like the library will have all the historical information on hand so it shouldn't have any use for it.
The problem is TAI is not the source of truth in real life. In real life, Arizona can change its laws and suddenly that event is going to happen at a different TAI timestamp. That’s why the unambiguous storage format has to be a date time with time zone, and not just a timestamp.
Good point. Seems I also made a reasoning error by failing to consider that timezones, being arbitrary legal constructs, can be changed at the drop of a hat.
However it doesn't seem particularly difficult to fix. My error was suggesting using TAI for storage. I guess that works only for events in the past. So the timezone that the event belongs to is what should have been used for storage, you should forget leap seconds exist because this is a human centric calendar so who cares, and you should trust the datetime library to just do the right thing when converting timestamps.
Is there some other issue I'm missing? Because so long as all the timezone complexity is stuffed into the datetime library (and thus NotMyProblem™) it seems like the really difficult part is already solved for you.
IMHO, based on zero evidence, for scheduling, very few people are scheduling events beyond a minute of precision. TAI is a better timescale than UTC, but UTC is better supported and leap seconds might be going away, so pretending they don't exist is probably a better choice.
But timezones are super byzantine. Especially when the rules update. More especially when the rules update on short notice.
If you scheduled an event at 5 pm local time at some place on some day and the rules change, the event's UTC (and TAI) would change. But you may want to confirm with the user, because maybe they're calling into an event somewhere else and they entered their local time but the event is really scheduled in the other time.
You might also have fun when multiple clients are using the same event and the clients and the server don't all agree on timezone definitions. iCalendar suggests that the timezone definition be included in the files, but my experience is definitions are often missing and most things ignore the definitions if present; you've got to include a timezone name the software is going to process as you want or you won't have a good time (or use UTC and hope)
If the event was scheduled in the DST window, the time may no longer exist, or may be ambiguous. iCalendar has rules for that, but they might not actually meet your user's needs (otoh, who is scheduleding things at 2-3am on a Sunday ... probably not a lot of people)
> the clients and the server don't all agree on timezone definitions
Isn't that scenario unsalvageable regardless? It presumably means one or more of the devices are displaying the wrong time to the user. Or at least will be upon arrival in the timezone of the event.
For example (intentionally extreme) suppose the library used by my calendar thinks EST is -4, the OS on my device thinks EST is -6, and everyone else thinks EST is -5. What possible program logic could prevent disaster in this scenario?
It's a really interesting edge case to point out, I'm just not clear what a sensible algorithm for handling it would look like. I strongly suspect that assuming that can never happen is the right answer. Everyone agrees the event is scheduled for 9 am EST. If outdated client software translates that to PST incorrectly or displays the incorrect time on the clock then the affected user is going to have issues and I don't see what the programmer can realistically do about it.
> ... DST window, the time may no longer exist, or may be ambiguous.
Assuming the timestamp disambiguates the daylight timezone from the standard timezone this should be handled gracefully by the datetime library since the stale timestamp is merely "out of bounds" for that timezone now that the laws changed. I'm failing to think of a scenario where it becomes ambiguous (although reasoning through this is once again reinforcing my view that we should have ditched DST long ago).
However this did cause me to realize that there's an additional edge case for far future events where the timezone is modified multiple times. If the event timestamp was never updated in the interim you land in an ambiguous situation and have no way to detect it.
I'm not sure that particular edge case is worth worrying about, but it seems like tracking a second timestamp indicating the last time that the event was processed by the datetime library would resolve it. The library should hopefully have all the necessary historical information on hand to update a long since stale timestamp (I haven't tested this though). Anyway if it doesn't I don't see that there's anything you can do about it.
"Would be nice if you use your.. financial stability of a Google job to build an open-source protocol"
Well, sure, it'd be nice if we could all spend our time building things to give away for free, but it's just not always possible. Life happens and people shouldn't have to explain or apologize for it.
I think the core issue with CalDAV (and by extension, the protocol it's build on top of, WebDAV) is one somewhat endemic with most W3 approved standards: it's way too overengineered to do too many things at the same time rather than a lean format.
The result is a protocol that's essentially become a furball of different ideas mashed together, which inevitably leads to the situation where a lot of services just... don't try to be full spec compliant since it's out of scope for what they actually want to do.
I don't think I've ever seen a W3 data format spec that didn't end up this way, it just always seems to happen. (It doesn't seem to happen with their lower level protocol specifications.)
WebDAV is what it is because it's designed (largely by Julian Reschke who also took over the HTTP spec from TBL back then I believe) to be addable conflict-free and routable without complex payload inspection to existing HTTP services/practices. Its use of XML can be regarded over-engineered, but it follows what was available and considered adequate at a time that had much much more consideration for interoperability and multi-party buy-in than is even conceivable today. I wouldn't dismiss it so quickly, especially considering WebDAV is an IETF RFC not W3C spec to begin with.
The book Dreaming in Code [1] goes into great detail about how CalDAV (and WebDAV) came about through the work of the group who built the Chandler calendar program (or tried to). It’s been a while since I read it (at least 15 years), but I think it partially discusses some of the ways a protocol like this can get lost in committees during the design process. The fact that this project started around 2001 should also be informative about how long calendaring has been a problem. So, if you’d like to know about why it sucks, I’d recommend it.
It’s also a good story about the conflict between startups and open source, building products, and software development in general.
I also use Nextcloud as the backend and iOS Calendar app as frontend on mobile and Gnome Calendar as frontend on PC.
It mostly works great, except for 3rd party Office365 calendars imported into Nextcloud. It has issues with some events on some clients displaying correct time when event invitees are from different time zone.
Nextcloud calendar is a bit annoying in my case, as email reminders often come late, sometimes 10 minutes or more. I guess it's because they rely on the cron process.
To sync with Android I use DAVX5 which runs a background sync service (open source and non-root). I had a lot of issues getting it working, could be because of different CalDAV implementations. DAVX5 to ZOHO calendar sync takes forever.
Evolution on Ubuntu has pretty good CalDAV support, but it would refresh the entire calendar each time upon switchin between the mail view and calendar view. Refreshing that ZOHO calendar takes forever and ZOHO has pretty frugal rate limits, so it ends up soft-banning me.
Latest Thunderbird has a CaldDAV incompatibility where it expects a different HTTP success code. ZOHO gives a 200, but Thunderbird expects something else. (PS Thunderbird CalDAV code is written in JS). PS This only happens on the second calendar. Whenever you add a second one, it starts failing.
I also use zoho (for mail, calendar, contacts) for my family and I...and yeah the first time i set it up with DavX5, it was odd to say the least...though not sure if it was zoho's fault, or maybe both some possible glitch with zoho and DavX5, that didn't quite jive with my brain - at first. Now, i see no issues with Davx5 and zoho cal and contacts...at least it sync really well on my android phone. I have not tried Evolution for years (and certainly not with zoho yet), since i tend to default to thunderbird...But am about to set up my partner on one of the Gnome-based linux distros once their Windows 10 dies later this year...and considering how they like to use their computer and their workflow, gnome seems most appropriate for them, so have been considering suggesting for them to us Evolution as email client...so will be interesting to see how zoho works there. (Glad to hear it works for you!) As i noted, i like to use thunderbird, and as far as mail and calendar, actually i guess i have been lucky, since zoho seems to be working great for me - and for a couple of years now! However, contacts synching has never worked right - like, never at all. Sure i can export contacts from zoho and import them into thunderbird...so the issue is not the basics of contacts functionality within thunderbird per se...but the syncing between t'bird and zoho is certainly an issue, and have not had a chance to dive deeply enough to see if the issue is a t'bird issue or zoho...although like calendaring on my android phone, contact synching is not an issue with zoho from my phone (again via Davx5)...so, i'm confused. But, agreed with your points: i'm happ[y zoho customer, but they're not perfect...then again, at their low costs, i kinda can't complain too much. ;-)
> Instead, initially went with the approach of hosting my dynamically updating iCal file in an S3 bucket and using ICSx5 on Android to sync with it. No CalDAV needed – just HTTPS.
Well you also can't integrate this into most calendars. I don't even know what the hell an iCal file is. I haven't even heard "iCal" in what feels like decades.
> I know I will probably get pushback over this, but CalDAV sucks.
Another CalDav server I can recommend is Radicale.
It's written in python and designed in a pretty modular way,
enabling authentication and authorization (and more) plugins.
Data is saved in plain text files and I track/backup it using git.
Over the time I've accumulated some interesting modifications:
- Authentication runs with pam on the host system.
- To enable sharing of calendars I run a periodic script symlinking the calendars to all authorized users. Unfortunately this suffers from combinatiorial explosion.
- Using a rights plugin with custom CalDav Attributes and a modified web plugin I added
support for access Control Lists.
- To enable public calendars you give read permissions to the `public` user using ACL.
Then a nginx hack gives blanket acces for read operations:
Yup, also interested in that. I have a half broken home cooked software that is basically radicale x monica crm that I would like to phase out for something better.
I too have been on a very aggressive mission to decloudify myself lately(as in, since comrade musk and co took over everything and I have 0 reason to trust him or anyone around him). And to be fair, for all the hundreds of gigabytes of data I have, the migration took no longer than two weeks, on and off, and it works infinitely better than I was hoping. The only service I've outsourced is email since I hate dealing with MX records, IMAP/SMTP. For everything else, the one thing that did wonders was an Asus PN40 with a dual core celeron CPU. It's biggest strength is that it's both accessible and has a slot for an M.2 NVME and a SATA drive so you can have a safe backup in one spot. I too share the opinion that CalDAV is kind of sketchy. That said, Nextcloud covered most of my needs(although it can be slow for some things, even with redis backing it up). Calendars, dropbox/google drive, docs, photos, backups and automatic syncing - it covers everything really well. That, combined with several other open source solutions truly cover all my needs(music and video streaming, monitoring, alerting, vpn, readers, management, and various other utilities). And as under-powered this mini PC is, it handles everything insanely well with lots of room to spare, given that my ISP is a solid 10/10. In fact it would be perfectly capable of handling another 5-6 people like me with ease.
I have two calendars, one on my personal server running Mailcow (SoGO) and my work calendar with Fastmail.
They don't work together- I've never found a way to get mailcow's calendar to work with other tools well, and so I spend time syncing between them semi-manually.
I've wanted to de-couple the calendar for a while but the only alternative I knew about was Nextcloud, which I think is a bit heavy weight.
This Baïkal looks great and I can't wait to give it a try. Doing this will also allow me to explore changing out Mailcow for another self-hosted mail service.
Back in the early 2000's I used Mozilla Sunbird to host my calendar on my personal Win2k server via IIS's WebDAV module… I don't think CardDAV was a thing yet but I might be mistaken.
I ended up importing all that data from it into my Google Calendar which is kind of fun because I've got all my homework and whatnot for college courses on there if you go back far enough.
Sunbird was almost what I wanted, back in the '04 timeframe, but it seemed unstable. I lost some appointments when they never made it up to the server. I used CalDAV with Sunbird using a DAViCal server.
Sunbird was abandoned. I haven't looked recently to see if there's a reasonable replacement that might run on Windows.
Baikal looks interesting. I used DAViCal[0] in the past to share calendars between a couple of Apple iOS devices. When it worked it worked well, but as iOS versions changed it seemed to get unreliable and I eventually gave up.
When I do eventually revisit this I am going to look at DAViCal again, as well as Radicale[1], and now Baikal.
I've used Radicale for a long time. It works well. I recently moved to next cloud, only because my shared host is handling the deployment, and it comes with an integrated web UI, which is much less hassle to setup.
I've been using Baikal for a few years now and it's very solid, although it's just for myself and I don't have all of OP's requirements. For my desktop I just use Thunderbird's built in calendar to connect, and on my phone I use DAVx5 and Fossify Calendar from F-Droid. It's forked from Simple Mobile Tools's Calendar app, but unlike the name it's actually the most fully-featured calendar app I've seen. It's "simple" in the way that it just presents you with every option instead of forcing you do dig through half a dozen menus and dialogs to do what you want to do, which is very nice.
I have Outlook (at work) and Google Calendar (at home) and synchronising them through HTTP is completely unreliable. They seem to mess the time zone all the time, sometimes they publish in UTC, sometimes not, with the consequence of having meeting always at the wrong time.
I really don't understand how these 2 major providers cannot fix what seems to me such a basic feature.
If using my own system would solve it, I'd do it immediately, but I am afraid that it would be just the same: meeting created on Outlook and imported with 2 hours difference.
Nice!. I would like to do something like this but for Photos. I want to get off Dropbox and Google for a while. At the top of my list are:
1. Create a memories like feature from my photos to send on my cell phone, grouping by different features I like: anniversaries, similar activities, A `Me an X(X is Spouse, family, friends etc)`, Over the years(how x has evolved over the years).
2. Be able to save photos taken from my device to my servers.
I've set up three true-nas machines in different places with 2TB of space and want to slowly build this feature.
> same. super convenient to be able to go to photos.[domain].com for my photos. the immich android app is great too.
>
> cloudflare tunnels is a game changer, I can't believe it's free.
Could you explain cloudflare tunnels are secure. I understand not punching holes through one's firewall and dealing with a residential connection that's often targeted for exploits. However, if one targets the tunnel endpoint to exploit is it more secure even though it's still exposed to the public?
Check out pangolin. You can get all the awesome of cloudflare tunnela without having your traffic sold to dat aggregators. Jims garge on youtube just did a decent video on it.
I used Photoprism for over a year, even paid the "server license" and I'm now using Immich which is much more powerful, sleek, gets new features very quickly (sometimes it's even too fast paced) and in general has got much more traction with the community.
Oh and I forgot to mention the mobile app! When I did the switch the difference was like night and day. Actually Photoprism didn't even have an official mobile app, you could just sync photos in the background with SyncThing for example and keep using your phone's photo galley app, although there was a Photoprism app as well.
Immich is just a backend service like a mobile app, it's only current big defect is that it's useless if it cannot contact the server on start-up
"I’m trying to break off of big tech as much as I can"
I wish I could check this more ...
I've had similar needs/desires/gripes with my calendars and the terrible state of calendaring apps for a while.
So thank you for scratching your own itch and sharing it with us.
I'm curious when you say that "[CalDAV] is an area begging for disruption".
Can you enlighten us as to what your wishlist could be for (a) better protocol/systems/ecosystem might be?
(a rant about your pain points might work too).
Another route is to go serverless and use DecSync. Thunderbird (or Evolution) will sync with the Android app (F-Droid available) and your Cal, your Cards, and tasks, and even RSS will be replicated on the other peers.
This is the kind of thing I think about doing every so often, before realizing it would take me a lot more time, energy, and money than I'm willing to spend to save 10 minutes once a week manually copying my work events from GCal to Etar on my phone and vice versa, and both to the weekly dry erase calendar on my wall.
My recurring events are all blocked off on the calendars already ("private" for personal events on my work calendar), so it really is quite a quick update.
You have way more advanced needs than I have for a calendar, but I've also been thinking of using a self-hosted solution. The realization for this came when I started noticing all kinds of appointments by email came with a notification attached to add the event to your calendar. I'm talking Gmail here, and I suppose my smartphone was going to add it to my standard Android calendar or something (I didn't try). Then I realized I didn't even like the UI/UX of my standard Android calendar.
I only need to manually add some appointments per week (not even every day, I'm a lucky guy) and realized I do not even need a grid layout for my calendar.
Having worked with times and dates in my favorite programming language already, I feel confident I can make something simple based on the standard default classes.
Even running something as simple and important as a calendar through third-party apps has started feeling very strange the last years.
How does this actually help with owning your own data and repatriating it?
The integrations that are installed on the end devices (phone) sync all that private data into the cloud platform regardless of the backend server. State is shared.
Google Information Services, and Apple's backend's unpublicized equivalent both process and store that related data, regardless of the phone you choose to use or the options you choose on that phone. There is a reason gigabytes get sent up to the cloud every evening, and its all encrypted.
Until you remove the implants on your phone you won't be able to receive any benefit from repatriating the data. That requires jailbreaking, or installing a new OS (something like Graphene), which is model specific due to compatibility issues.
I've been self-hosting Nextcloud for calendar and file sharing for a few years now. I use DAVx5 on my Android device and my wife's iphone syncs out of the box. It's been a very solid solution for us and isn't that difficult to get up and running.
This is very interesting, but also a lot of work. I've been off Google and the likes for maybe 5y now, and what I must say is that it's a bit of a struggle to find the setup that works for you.
One thing for which I don't have a solution yet, and neither does that article seem to address, is how to send invites. My data is one next cloud now, so if I create an invite it sends it. But if I create a it from a client (eg phone) it doesn't. The best I've found is manually export as ics and send an email myself, which ain't great.
Baïkal tries to solve that by sending out the ics for you, it'll even accept responses in various formats (inviting to calendar events seem to be poorly standardized).
Last I played around with it it all worked, somewhat. It does require you to use baïkal as your caldav server though.
CalDav and the ecosystem of libraries and self-hosted solution around it is horrible. Don’t do it yourself. Just use https://calendar.online/ and call it a day.
If you are on NixOS for your home server, take a look at my project that does most of the work for you. Bundles router, DDNS, firewall, vpn, ad blocking, and all the apps into a single integrated service if your machine has two ethernet ports. Even if you don't use it directly, the services are broken out into modules which can be referenced for your own setup:
It's still a work in progress, but currently exposes baikal, radicale, and nextcloud as services. I'm looking to add a front end that integrates calendar, contacts, and docs without needing to know what "caldav" is. Look in the "services" folder of the source repo to see which services are already integrated.
I have the weirdest calendar problem: if someone sends an invite to my Fastmail account, it gets swallowed up by Gmail. It never shows up in Fastmail, and in the calendar invite it appears as if it was sent to my Gmail address even though it wasn’t. It’s the strangest thing and I don’t know how to stop it or even what’s causing it (Fastmail support also had no idea).
Is your Google email forwarded to the fastmail? If someone invites my personal email from Google calendar, my Gmail account gets put on the invite. I always attributed it to the forwarding. It's odd but also pretty convenient as I still use Google calendar.
Does this always happen or only sometimes? In Google calendar, if the event is modified through the API, there is an option to suppress change notifications, and this can prevent non-google calendars from getting invites.
Also did you create a Google account using your fastmail address? I haven't tested it, but it's possible this causes a hairpin route where Google supresses the outbound email since it thinks it can directly modify the calendar.
It's very reliable, but only on ONE of my fastmail addresses. My Google account predates the fastmail one by a long time.
I had a theory that maybe at some point I set up iCloud with both of these accounts (fastmail + gmail) and it's somehow intercepting these and rewriting them. It's not a super strong theory. Another thought is maybe it's a DNS setting somewhere?
> I’d imagine you can set this up and run it easily from a NAS at home if you want, but I opt to keep my data safely protected in Switzerland, so I subscribe to about $100 monthly of server time to run my websites and all my integrations
This part confused me a bit. Wouldn't running the NAS at home be more safe and secure? Or are they talking about backup safety?
The author of the article researches far right extremism and has been targeted by certain groups in the past IIRC, I read this part as a concern about physical safety, but this is just my speculation.
I can't say what the OP meant, but I have a similar setup and I use a VPS rather than a home NAS for better uptime and accessibility and to avoid opening my home network up to the world.
Everything they mention can also be accomplished on a home NAS or something with plenty of security. I don't think anything is really justified here besides simplicity? Which..this isn't that much simpler.
Which..$100/month is pretty expensive for what's basically an N100 with support.
I started using a paper diary again about a year ago. Turns out I wasn’t missing much and fitting in the rails of calendaring and task management as the vendor (apple) saw fit wasn’t really helping me. I have two jobs and a large family to coordinate.
Ultimate self hosting that. Also only costs $15/year approx.
One of those little 5 subject spiral notebooks you can pick up at the gas station work great. I've had one open on my desk next to my computer for the past 20 or so years. Never had an outtage, no subscription fees, privacy is pretty good too. Requires a pen though but that's about it.
I've been looking for a new calendar myself. I've been using Vueminder for years, but I think it's time to move on. I'm not keen on the renewing updates thing either.
I'm in the Proton ecosystem, but from what I understand their Calender kind of sucks right now.
I use the CalDAV protocol for my to-do list (tasks.org and nextcloud) and I've been wonder if someone could hookup CalDAV with MCP so I can talk to my to-do list to modify it without going to some proprietary solution.
Is this feasible? Has anyone seen a tool like this yet?
Citizenship application is asking for my travel for the past couple years. And I have no idea. Especially since in Europe a weekend getaway to another country is feasible.
Some sort of long term tracking would have been really useful
Makes sense. I’d want it to be as accurate as possible but it’s not going to be perfect. Figure I can extract most flight info out of gmail if I filter a data export by airlines which should get me 90% of the way
There is no need for CalDAV, you can actually use the subscription feature of ics calendars!
At Qbix, we build software for communities to collaboratively manage various things, and that includes events. For example, here are three sites we built, all different:
1) https://yang2020.app for Andrew Yang's 2020 campaign and Yang Gangs - to help people collectively organize and knock on doors, etc.
2) https://new.freetalklive.com for a libertarian show that pulls their episodes into the site, and let people watch and discuss them
3) https://gba.community for their annucal conferences in Washington DC - all the speakers, events, etc.
We've long ago implemented integrations with people's devices (phones, computers). You can add contacts to your address book using .vcf files, and they can even contain thumbnails. They don't need to include people's phone numbers, they can include their IDs on your site, and URLs to contact them.
Similarly, we have a button to subscribe to calendars, and it even works on MacOS. Imagine each user having a calendar appear on their phone. The subscription will pull new events into the calendar, update and remove old ones. About the only downside is that the OS usually suppresses any VALERT info that we place there, so you can't place alerts on these events. But you can have location, directions, etc. You can have a URL for group rides. We've built it all!
For both contacts and events, what you really want is access control - some people can see some things, others can see other things. If you paid for an event, you can see the location and time, for instance. You can maybe see the speakers, etc.
I honestly prefer a pen and paper planner and just manually migrating my contacts over. Meanwhile, my personal gmail is 99.9% contacts I have no intention to ever speaking to again.
I've been thinking about it: certainly most of the numbers in my contacts list are probably invalid by now. But there's definitely a delta of finality to going "oh there's like 10 people I will ever call and that number is only going to go down... "
Last time I tried I couldn't find a way to bulk delete contacts. I had to delete them all one by one. I couldn't stand how tedious it was and gave up. I don't feel any kind of sentimentality towards these contacts, given most of these people I haven't spoken to in nearly 15 years
I don't connect google to my phone anymore, so at least they don't pollute any data elsewhere
Last time I tried I couldn't find a way to bulk delete contacts. I had to delete them all one by one. I couldn't stand how tedious it was and gave up. I don't feel any kind of sentimentality towards these contacts, given most of these people I haven't spoken to in nearly 15 years
I don't connect google to my phone anymore, so at least they don't pollute any data elsewhere
I have a self hosted calendar solution. It was $15 at Staples, and it hangs in my kitchen. It wasn't a complete out of the box solution, though, I had to do a little work to customize it. I placed a pen cup with a few pens in it on the counter near the calendar to ensure it is always easy to modify.
>As someone who travels a lot, it’s also one of those things where statistically speaking, the chances of me being on a plane whenever some newsworthy event happens is higher than for the average person. I want my wife, friends, coworkers to know what flights I’m on and what cities I’m in. I’ve survived one terror attack, nearly dodged two others and a mass shooting. It’s one of those things where I want to make sure people who care about me can check in easily to see where I am.
It seems like the author has very different needs than you.
My wife uses this solution. When I am at work and someone wants to know if I can do a team dinner, I have to call her if she's at home, or tell them I'll get back to them. I never know if I'm free and finding out is inefficient at best.
Nearly the same thing here. We're scheduling for our daughter who, as she's getting older, has increasingly more scheduled events, too. If we're out of the house and my wife hasn't brought the paper calendar with her we simply can't commit to any plans. It's excruciating.
The cobbler's children go barefoot, so I haven't come up with a good solution for us... >sigh< It almost makes me want to hitch my wagon to a hosted product/service. Almost.
I used to do this with my wife, and it drove me crazy. Now we use a shared Google calendar, which works way better than prior solutions. Our unspoken rule: if there is an open time slot available, the first to enter it in the shared calendar wins. We're both responsible for entering all family-related appointments in the calendar as soon as they come up. There have been conflicts when either of us forgets to enter something into the calendar, but we just resolve the conflicts as usual. This was a game-changer from my point of view.
How does it handle notifications? How do you access it remotely? How do you share it for common events with others?
Comparing a paper calendar to a digital one is like comparing a Nokia 3310 to a modern smartphone. Yes, technically both are "a phone" but that's roughly where the similarities end.
> Share the webcam link or ring them up on the telephone if we are (jokingly) going traditional.
Why not make it more convenient for them and pipe the webcam stream through a script that OCRs it on change (or on timer) and makes it available as an .ical file that others can import via a link?
Also it's 2025, you can do it fast and robust by piping it through an LLM instead, with a prompt like "turn this calendar image into an .ical file pretty please".
/s, but only a little :). I've honestly thought of doing that for real, except with a feed of my laptop screen, to sync availability (busy/free) info from my work calendar to my family one, because it's way easier than trying to argue the point with corporate IT.
(I've changed jobs since then, and now I'm using a lazy hack on top of some random Fastmail-friendly cloud app.)
This is one of those deep dives whereby you are either pivoting into building a calendar startup, or you are massively procrastinating actual work by overfocusing on scratching some tech itch.
Other variants of this malady include:
- Building a todo list app.
- Building a web framework.
- Editing Wikipedia articles.
- Building your kernel.
I believe,
though I can't find an unambiguous reference,
that a tool or user is allowed to define and populate any XMP/Exif attribute it wants,
within the technical limits of attribute/value definition of the relevant metadata.
Whether or not anything else can read and make sense of that metadata is a different problem.
draw.io probably . It's pretty good for a free tool. If you lost the xml I think it even work to import directly an exported picture (I guess they append the data into it too).
A lot of comments describe trying to build something better and abandoning the problem. (Including my own) It is nice to hear the different issues, use cases, requirements and workarounds.
I know this is not what people want to hear, but your data will never be safer than it is in the cloud. No setup you can dream up at home with in a reasonable budget will ever come close to the resilience and redundancy you have in the cloud.
Ownership is not about storing everything at home (or well, it's part of it), but having control over your data, which you can easily have while at the same time using the convenience that the cloud offers.
In the cloud your major concern is not losing data, but losing access to data, and you can counter that with making backups.
If privacy is a concern, use something like Cryptomator[1] to source encrypt data before uploading it. Cryptomator in particular integrates well with mobile phone operating systems, and has clients for all major operating systems (yes, Linux included).
Source encrypt your backups as well, and nobody can read your data besides you.
> Ownership is not about storing everything at home (or well, it's part of it), but having control over your data, which you can easily have while at the same time using the convenience that the cloud offers.
Ownership is not just about r/w control of your data but also over what software gets access to it and what that software does. Not just about privacy, but knowing the process and being able to alter it to your desires. There is no way to control that unless you run your own servers.
If it does, I assume you also roll your own network equipment. If you're worried about surveillance, know that you're far more likely to be targeted at the network port than at your data.
As for the process, the cloud (for storing data) is nothing more than a remote fileshare that someone else keeps running. If you have an up to date copy of your data you can change the process any way you like.
Servers are not free, nor are they fire and forget. Once you setup a server and decide to open it to the internet, you become a target, and you will be found. There are bots scouring the entire ip range of every residential IP network looking for juicy targets, and when they find something they record it for later use. Then when some new 0-day is found for service X that you're running, they don't need to scan, they can just lookup in their database an exploit right away.
I'm not against self hosting, and god knows I've been doing it for decades, but it is very rarely worth the hassle compared to the gains. The power cost alone of running a server is more than the equivalent cost of storing it in the cloud (assuming we're not talking media servers, but regular user created data).
The worst argument I usually see is people self hosting mail for private, completely oblivious to the fact that there are usually 2+ people in a mail thread, and something 68% of the worlds population runs on Google/Microsoft/Apple/whatever, so while you may keep your emails private, if they're targeted for being scanned they have already been so.
I can't help but feel on-device storage is still safer than cloud storage. Sure, can use cryptomator or similar to encrypt on cloud, but that's same with local. Only with cloud you're opening up a much bigger attack vector space than having it on-device/"at home". Cloud definitely gives better resiliency and redundancy, but data replication is also something to be cautious with if privacy is a concern.
Assuming your data stays at home, without opening any firewall ports, then maybe your data is safer. You're still only one malware/burglary/house fire/flooding/accident away from losing it.
The moment you start opening ports you're no longer remotely safe. Cloud providers have dedicated staff monitoring services (or monitoring systems monitoring services) for anomalies, as well as people monitoring their networks. These same people will also know in advance when a new patch is coming for some 0-day exploit that might leave them vulnerable.
Compared to your setup at home, where you will patch it "eventually" (at the earliest when you get home from work), and you won't know if you're the target of an attack until your server gives up.
Not to mention the risk of losing other data. The LastPass leak a couple of years ago was made possible by attackers gaining access to an unpatched Plex server on a developers home network, from which they could gain access to his work laptop. LastPass had questionable security practices sure, but the validity of the attack still stands.
Yeah, it's really about picking your hosting partner.
I'm happy with Apple and iCloud holding our personal contacts and calendars. I'm happy with Fastmail holding our email. I still have local (and other online) backups, of course.
I know I will probably get pushback over this, but CalDAV sucks. People say that it's great and that it's easy; yet if that were true there would be way more self-hosted CalDAV solutions out there and they would be far more ergonomic than what's available. I was not impressed with Radicale. Because there's really only one calendar file I wanted to serve to myself, I tried implementing my own CalDAV server just for that purpose and pretty much gave up because of how unintuitive and complicated it was merely to make a single file available. I can see why it would be needed if sharing a calendar with other people with calendar apps that support CalDAV, but I think it's kind of a waste of time if hosting a calendar for one's self.
Instead, initially went with the approach of hosting my dynamically updating iCal file in an S3 bucket and using ICSx5 on Android to sync with it. No CalDAV needed – just HTTPS.
However, FOSS calendars for Android still suck, and for some reason I couldn't get ICSx5 to work within GrapheneOS, so I now use almost the same approach but with Proton Calendar which happens to support calendars from direct links to iCal files. It's not perfect, but it suits my needs enough.
I think the author's approach for using iCalendar format is a good one, though what I've discovered is the amount of support for various iCalendar features varies drastically between calendar software. Rather than dealing with that headache, I somewhat gave up and decided to shove most metadata into the description field rather than use the respective properties.
EDIT: My use case is software I wrote to grab data from various sites (Eventbrite, Meetup, pub trivia companies, public event calendars, etc.), filter for only social events I would be interested in, and combine them into a single calendar I can view in my normal calendar software.
I worked on the CalDAV client that’s in every Apple product.
I agree, the protocol sucks. But we also had a ton of trouble handling Exchange and Google’s non-compliant CalDAV server, which all the users blamed us for.
Now that I work at Google I can see that gCal apps use an entirely different protocol.
Would be nice if you use your experience and financial stability of a Google job in order to build a better open-source protocol. Just like when ZX2C4 decided he's fed up with OpenVPN and went to create Wireguard this might be your moment to shine.
IMO the quality of software is only pushed forward by motivated individuals with the right skillset.
The JMAP for Calendars RFC [1] is soon to get published by IETF. Disclaimer: I work for Fastmail and am the co-author of RFC 8984 [2] which defines the calendar event data model used in JMAP.
[1] https://www.ietf.org/archive/id/draft-ietf-jmap-calendars-22... [2] https://www.rfc-editor.org/rfc/rfc8984.html
Are the protocols compatible enough such that someone could proxy JMAP to CalDAV?
Yes, but I am not aware of an existing proxy implementation that would accept JMAP requests and forward these to a CalDAV server, or the other way round.
What I do know for sure is that it‘s feasible for a calendar server to service both JMAP for Calendars and CalDAV. All our work in that regard is open-source in the Cyrus server [1] and is used at Fastmail.
Apart from the exchange protocol one also needs to convert between iCalendar and the data structures used in JMAP. For this, I am currently working on an IETF RFC [2]. Anyone also interested in implementing conversion between iCalendar and JSCalendar, please contact me! We have a test suite for interoperation tests.
[1] https://github.com/cyrusimap/cyrus-imapd [2] https://datatracker.ietf.org/doc/draft-ietf-calext-jscalenda...
It was 14 years ago, I’ve forgotten everything by now.
To be honest if I were to do that today, I’d vibe-code it by writing a strong set of tests against the protocol rfc, then a client against the tests. The client would be low level and have higher level interfaces in various languages.
bflesch might be suggesting that you (or some other motivated + heroic person) write a new spec for calendar collaboration, like what jmap.io is trying to do for mail.
I know that calendars and datetime management suck, hard. I hazard a guess that several people have already started trying to replace caldav (because of the suckage of caldav) and have quietly given up (because of the suckage of datetimes and timezones).
Indeed they do. The hardest bugfix I ever had to do (which I go back to whenever interviews ask that question) was a timezone bug that was going to ruin the iOS 7 on-stage reveal. It only reproduced in customer builds and customer hardware, which we could not debug or get root on. Anyway we traced it to a confluence of rare conditions in a date-math C file that had not been modified since 1987, and was in a completely different style from everything else in the OS. The edge-iest of edge cases.
It was hard because of the debugging blindness, not so much date-math itself. We had to do hardware-level things.
I thought the solution to datetime was almost always to use TAI plus a library to convert for display in the UI. (Or UTC and accept that leap seconds might cause bugs.)
Calendar apps expose all of the weird edge cases in dates and times. For a specific instance of a specific event that never needs to move, TAI will work. However, suppose that you schedule a meeting for 28 March at 13:00. You then move that meeting forward a week, crossing a DST switch. If you simply add 604800 seconds to the TAI, that meeting will be at 14:00, which is surprising. OK, easy enough to solve; convert the TAI back to the local timezone, add 7 to the day field (carrying into month and year, as needed), and you're good to go. Now suppose that the meeting was set up in the US, and you realized that you needed to reschedule the meeting while you were travelling in Germany. You get back to the US, and suddenly the meeting is an hour early, because DST rules aren't universal.
Worse, imagine a recurring meeting, every week at noon. You've got the TAI for the original instance, but as you cross a DST boundary, some places will shift according to DST and others won't, and thus you have half the attendees showing up at the wrong time.
Finally, TAI introduces the leap second bug for calendars. When you schedule a meeting for noon next year, you want that to happen at noon, not now plus however many seconds. If a leap second is introduced, you don't want that meeting to happen at one second before or after noon.
TBH, if you find yourself in a situation where you need to deal with calendar events, I recommend updating your CV.
I'll preface this by stating that I fully realize that localized datetime is absolutely byzantine and fraught with difficulties. That's the rationale for leaving it to an external library as close to 100% of the time as possible.
I also realize that there might well be complexities involved in calendar software that I'm unaware of. Hence my comment - I'm genuinely interested to learn. That said, I think your examples are all fairly clear examples of errors in reasoning by the programmer. Specifically they stem from conceptual mistakes regarding the relation of different logic domains (by which I'm referring to storage, display, scheduling, etc).
You never move events around in TAI (the unambiguous storage format) just as you don't go manually flipping bits in an SQLite database. You always work in a localized time because that's what the user is reasoning in. And you use the datetime library to implement as much of those manipulations as possible.
> US vs Germany, conflicting DST rules.
Go back to the era before smartphones and PDAs and the internet. You're in Germany on a business trip. You call your secretary to reschedule next weeks meeting back home. You don't use German time when doing that, you use US time.
Events have a location which has a timezone. Scheduling happens in that timezone. Blindly using the current local timezone of the device is a reasoning error. Storage, scheduling, and presentation are distinct logic domains.
> you have half the attendees showing up at the wrong time.
There is a single unique TAI time for a given event (after all that's the entire point of using UTC or TAI or what have you). All attendees will see an equivalent local time barring a bug in the datetime library.
See my earlier point regarding which timezone to use for the computation.
> TAI introduces the leap second bug for calendars.
Only if you make the mistake of attempting to manually manipulate your data storage format. The point of TAI as opposed to UTC in this specific case is to offload the complexity of handling leap seconds onto the datetime library so that you don't need to worry about it.
> You never move events around in TAI (the unambiguous storage format) just as you don't go manually flipping bits in an SQLite database.
You actually do. From the point of view of future scheduled events, a event scheduled for 13h00 in a specific timezone is still "13h00 in a specific timezone" even when crazy people on that timezone suddenly declare a new Daylight savings time to start before the event happens. All future "timestamps" are prone to move due to such shenanigans. And you need to keep your timezone DB as updated as possible to update thing as soon as possible, if you don't want users with wrong times on their future events.
If you're not doing something like full rfc9557 https://datatracker.ietf.org/doc/html/rfc9557 "Internet Extended Date/Time Format (IXDTF)" [iso 8601 local time + as-of-now known timezone offset + IANA timezone] as "timestamps" you're probably truncating important information that will bite you back later if you're doing a calendar/scheduler.
It's a good point. I responded to the adjacent comment.
After glancing at that RFC I'm unclear about the purpose of the UTC offset. Is it simply an error check to catch the case of a datetime library with outdated timezone information? Otherwise it seems like the library will have all the historical information on hand so it shouldn't have any use for it.
The problem is TAI is not the source of truth in real life. In real life, Arizona can change its laws and suddenly that event is going to happen at a different TAI timestamp. That’s why the unambiguous storage format has to be a date time with time zone, and not just a timestamp.
Good point. Seems I also made a reasoning error by failing to consider that timezones, being arbitrary legal constructs, can be changed at the drop of a hat.
However it doesn't seem particularly difficult to fix. My error was suggesting using TAI for storage. I guess that works only for events in the past. So the timezone that the event belongs to is what should have been used for storage, you should forget leap seconds exist because this is a human centric calendar so who cares, and you should trust the datetime library to just do the right thing when converting timestamps.
Is there some other issue I'm missing? Because so long as all the timezone complexity is stuffed into the datetime library (and thus NotMyProblem™) it seems like the really difficult part is already solved for you.
In practice it is difficult enough, to do the right date arithmetic using the datetime library in the right timezone.
IMHO, based on zero evidence, for scheduling, very few people are scheduling events beyond a minute of precision. TAI is a better timescale than UTC, but UTC is better supported and leap seconds might be going away, so pretending they don't exist is probably a better choice.
But timezones are super byzantine. Especially when the rules update. More especially when the rules update on short notice.
If you scheduled an event at 5 pm local time at some place on some day and the rules change, the event's UTC (and TAI) would change. But you may want to confirm with the user, because maybe they're calling into an event somewhere else and they entered their local time but the event is really scheduled in the other time.
You might also have fun when multiple clients are using the same event and the clients and the server don't all agree on timezone definitions. iCalendar suggests that the timezone definition be included in the files, but my experience is definitions are often missing and most things ignore the definitions if present; you've got to include a timezone name the software is going to process as you want or you won't have a good time (or use UTC and hope)
If the event was scheduled in the DST window, the time may no longer exist, or may be ambiguous. iCalendar has rules for that, but they might not actually meet your user's needs (otoh, who is scheduleding things at 2-3am on a Sunday ... probably not a lot of people)
> the clients and the server don't all agree on timezone definitions
Isn't that scenario unsalvageable regardless? It presumably means one or more of the devices are displaying the wrong time to the user. Or at least will be upon arrival in the timezone of the event.
For example (intentionally extreme) suppose the library used by my calendar thinks EST is -4, the OS on my device thinks EST is -6, and everyone else thinks EST is -5. What possible program logic could prevent disaster in this scenario?
It's a really interesting edge case to point out, I'm just not clear what a sensible algorithm for handling it would look like. I strongly suspect that assuming that can never happen is the right answer. Everyone agrees the event is scheduled for 9 am EST. If outdated client software translates that to PST incorrectly or displays the incorrect time on the clock then the affected user is going to have issues and I don't see what the programmer can realistically do about it.
> ... DST window, the time may no longer exist, or may be ambiguous.
Assuming the timestamp disambiguates the daylight timezone from the standard timezone this should be handled gracefully by the datetime library since the stale timestamp is merely "out of bounds" for that timezone now that the laws changed. I'm failing to think of a scenario where it becomes ambiguous (although reasoning through this is once again reinforcing my view that we should have ditched DST long ago).
However this did cause me to realize that there's an additional edge case for far future events where the timezone is modified multiple times. If the event timestamp was never updated in the interim you land in an ambiguous situation and have no way to detect it.
I'm not sure that particular edge case is worth worrying about, but it seems like tracking a second timestamp indicating the last time that the event was processed by the datetime library would resolve it. The library should hopefully have all the necessary historical information on hand to update a long since stale timestamp (I haven't tested this though). Anyway if it doesn't I don't see that there's anything you can do about it.
"Would be nice if you use your.. financial stability of a Google job to build an open-source protocol"
Well, sure, it'd be nice if we could all spend our time building things to give away for free, but it's just not always possible. Life happens and people shouldn't have to explain or apologize for it.
https://xkcd.com/927/
I think the core issue with CalDAV (and by extension, the protocol it's build on top of, WebDAV) is one somewhat endemic with most W3 approved standards: it's way too overengineered to do too many things at the same time rather than a lean format.
The result is a protocol that's essentially become a furball of different ideas mashed together, which inevitably leads to the situation where a lot of services just... don't try to be full spec compliant since it's out of scope for what they actually want to do.
I don't think I've ever seen a W3 data format spec that didn't end up this way, it just always seems to happen. (It doesn't seem to happen with their lower level protocol specifications.)
WebDAV is what it is because it's designed (largely by Julian Reschke who also took over the HTTP spec from TBL back then I believe) to be addable conflict-free and routable without complex payload inspection to existing HTTP services/practices. Its use of XML can be regarded over-engineered, but it follows what was available and considered adequate at a time that had much much more consideration for interoperability and multi-party buy-in than is even conceivable today. I wouldn't dismiss it so quickly, especially considering WebDAV is an IETF RFC not W3C spec to begin with.
WebDAV is pretty darn simple.
It just builds on actual HTTP, i.e. you have to actually think about the transport layer in a way that’s out of fashion now.
And some people don’t like XML.
It’s certainly true that CalDAV specifically is complicated, but… multi user calendaring is intrinsically very complicated.
Other systems are not less complicated, they just tend to be more vendor specific.
The book Dreaming in Code [1] goes into great detail about how CalDAV (and WebDAV) came about through the work of the group who built the Chandler calendar program (or tried to). It’s been a while since I read it (at least 15 years), but I think it partially discusses some of the ways a protocol like this can get lost in committees during the design process. The fact that this project started around 2001 should also be informative about how long calendaring has been a problem. So, if you’d like to know about why it sucks, I’d recommend it.
It’s also a good story about the conflict between startups and open source, building products, and software development in general.
[1] http://www.dreamingincode.com/ ; https://en.m.wikipedia.org/wiki/Dreaming_in_Code
Very good book. I read it way back when as well.
I use Nextcloud's CalDAV and CardDAV with DAVx5 and it works pretty much perfectly
I also use Nextcloud as the backend and iOS Calendar app as frontend on mobile and Gnome Calendar as frontend on PC.
It mostly works great, except for 3rd party Office365 calendars imported into Nextcloud. It has issues with some events on some clients displaying correct time when event invitees are from different time zone.
I've been using Nextcloud as well for about 5 years now, and using Etar on my android. It's been great.
Nextcloud calendar is a bit annoying in my case, as email reminders often come late, sometimes 10 minutes or more. I guess it's because they rely on the cron process.
My CalDAV provider is ZOHO.
To sync with Android I use DAVX5 which runs a background sync service (open source and non-root). I had a lot of issues getting it working, could be because of different CalDAV implementations. DAVX5 to ZOHO calendar sync takes forever.
Evolution on Ubuntu has pretty good CalDAV support, but it would refresh the entire calendar each time upon switchin between the mail view and calendar view. Refreshing that ZOHO calendar takes forever and ZOHO has pretty frugal rate limits, so it ends up soft-banning me.
Latest Thunderbird has a CaldDAV incompatibility where it expects a different HTTP success code. ZOHO gives a 200, but Thunderbird expects something else. (PS Thunderbird CalDAV code is written in JS). PS This only happens on the second calendar. Whenever you add a second one, it starts failing.
So it is quite a pain, at least with ZOHO.
I also use zoho (for mail, calendar, contacts) for my family and I...and yeah the first time i set it up with DavX5, it was odd to say the least...though not sure if it was zoho's fault, or maybe both some possible glitch with zoho and DavX5, that didn't quite jive with my brain - at first. Now, i see no issues with Davx5 and zoho cal and contacts...at least it sync really well on my android phone. I have not tried Evolution for years (and certainly not with zoho yet), since i tend to default to thunderbird...But am about to set up my partner on one of the Gnome-based linux distros once their Windows 10 dies later this year...and considering how they like to use their computer and their workflow, gnome seems most appropriate for them, so have been considering suggesting for them to us Evolution as email client...so will be interesting to see how zoho works there. (Glad to hear it works for you!) As i noted, i like to use thunderbird, and as far as mail and calendar, actually i guess i have been lucky, since zoho seems to be working great for me - and for a couple of years now! However, contacts synching has never worked right - like, never at all. Sure i can export contacts from zoho and import them into thunderbird...so the issue is not the basics of contacts functionality within thunderbird per se...but the syncing between t'bird and zoho is certainly an issue, and have not had a chance to dive deeply enough to see if the issue is a t'bird issue or zoho...although like calendaring on my android phone, contact synching is not an issue with zoho from my phone (again via Davx5)...so, i'm confused. But, agreed with your points: i'm happ[y zoho customer, but they're not perfect...then again, at their low costs, i kinda can't complain too much. ;-)
> Instead, initially went with the approach of hosting my dynamically updating iCal file in an S3 bucket and using ICSx5 on Android to sync with it. No CalDAV needed – just HTTPS.
Well you also can't integrate this into most calendars. I don't even know what the hell an iCal file is. I haven't even heard "iCal" in what feels like decades.
> I know I will probably get pushback over this, but CalDAV sucks.
All the alternatives are worse.
Short for iCalendar. (.ics files)
https://en.wikipedia.org/wiki/ICalendar
[flagged]
> I'm not even sure you're qualified to comment then.
I'm qualified to point out that this is a hugely dickish way to communicate
Come on folks, be nice, we are all here to learn.
Another CalDav server I can recommend is Radicale. It's written in python and designed in a pretty modular way, enabling authentication and authorization (and more) plugins.
Data is saved in plain text files and I track/backup it using git.
Over the time I've accumulated some interesting modifications:
- Authentication runs with pam on the host system.
- To enable sharing of calendars I run a periodic script symlinking the calendars to all authorized users. Unfortunately this suffers from combinatiorial explosion.
- Using a rights plugin with custom CalDav Attributes and a modified web plugin I added support for access Control Lists.
- To enable public calendars you give read permissions to the `public` user using ACL. Then a nginx hack gives blanket acces for read operations:
These public calendars are can be viewed on a web calendar (https://gitlab.nomagic.uk/popi/js_calendar_from_ics)I should probably write a blog post about the setup.
Let us know when that blog post goes live… ;)
Yup, also interested in that. I have a half broken home cooked software that is basically radicale x monica crm that I would like to phase out for something better.
I too have been on a very aggressive mission to decloudify myself lately(as in, since comrade musk and co took over everything and I have 0 reason to trust him or anyone around him). And to be fair, for all the hundreds of gigabytes of data I have, the migration took no longer than two weeks, on and off, and it works infinitely better than I was hoping. The only service I've outsourced is email since I hate dealing with MX records, IMAP/SMTP. For everything else, the one thing that did wonders was an Asus PN40 with a dual core celeron CPU. It's biggest strength is that it's both accessible and has a slot for an M.2 NVME and a SATA drive so you can have a safe backup in one spot. I too share the opinion that CalDAV is kind of sketchy. That said, Nextcloud covered most of my needs(although it can be slow for some things, even with redis backing it up). Calendars, dropbox/google drive, docs, photos, backups and automatic syncing - it covers everything really well. That, combined with several other open source solutions truly cover all my needs(music and video streaming, monitoring, alerting, vpn, readers, management, and various other utilities). And as under-powered this mini PC is, it handles everything insanely well with lots of room to spare, given that my ISP is a solid 10/10. In fact it would be perfectly capable of handling another 5-6 people like me with ease.
> It's biggest strength is that it's both accessible and has a slot for an M.2 NVME and a SATA drive so you can have a safe backup in one spot.
If you want to increase the resiliency of your data, look up the 3-2-1 backup strategy (and maybe also RAID).
It is next in the pipeline but I need to clean up my home lab first cause it's become a bit of a mess.
This is exactly the post I've needed.
I have two calendars, one on my personal server running Mailcow (SoGO) and my work calendar with Fastmail.
They don't work together- I've never found a way to get mailcow's calendar to work with other tools well, and so I spend time syncing between them semi-manually.
I've wanted to de-couple the calendar for a while but the only alternative I knew about was Nextcloud, which I think is a bit heavy weight.
This Baïkal looks great and I can't wait to give it a try. Doing this will also allow me to explore changing out Mailcow for another self-hosted mail service.
Everything old is new again.
Back in the early 2000's I used Mozilla Sunbird to host my calendar on my personal Win2k server via IIS's WebDAV module… I don't think CardDAV was a thing yet but I might be mistaken.
I ended up importing all that data from it into my Google Calendar which is kind of fun because I've got all my homework and whatnot for college courses on there if you go back far enough.
Sunbird was almost what I wanted, back in the '04 timeframe, but it seemed unstable. I lost some appointments when they never made it up to the server. I used CalDAV with Sunbird using a DAViCal server.
Sunbird was abandoned. I haven't looked recently to see if there's a reasonable replacement that might run on Windows.
Baikal looks interesting. I used DAViCal[0] in the past to share calendars between a couple of Apple iOS devices. When it worked it worked well, but as iOS versions changed it seemed to get unreliable and I eventually gave up.
When I do eventually revisit this I am going to look at DAViCal again, as well as Radicale[1], and now Baikal.
[0] https://www.davical.org/
[1] https://radicale.org/v3.html
I've used Radicale for a long time. It works well. I recently moved to next cloud, only because my shared host is handling the deployment, and it comes with an integrated web UI, which is much less hassle to setup.
Nextcloud is great.
However, at least in my case selfhosted version is rather slow even with enough hardware and recommended tuning.
yep. nextcloud and davx5 for android
I've been using Baikal for a few years now and it's very solid, although it's just for myself and I don't have all of OP's requirements. For my desktop I just use Thunderbird's built in calendar to connect, and on my phone I use DAVx5 and Fossify Calendar from F-Droid. It's forked from Simple Mobile Tools's Calendar app, but unlike the name it's actually the most fully-featured calendar app I've seen. It's "simple" in the way that it just presents you with every option instead of forcing you do dig through half a dozen menus and dialogs to do what you want to do, which is very nice.
I have Outlook (at work) and Google Calendar (at home) and synchronising them through HTTP is completely unreliable. They seem to mess the time zone all the time, sometimes they publish in UTC, sometimes not, with the consequence of having meeting always at the wrong time.
I really don't understand how these 2 major providers cannot fix what seems to me such a basic feature.
If using my own system would solve it, I'd do it immediately, but I am afraid that it would be just the same: meeting created on Outlook and imported with 2 hours difference.
Timezones across google products have been hopelessly broken across apps for decades. I'm sure the AI devs will get to it tout de suite now tho.
They have little financial incentive to solve it because it helps with lock in.
Also, alot of companies actually prohibit syncing between personal and work due to data leakage issues.
Nice!. I would like to do something like this but for Photos. I want to get off Dropbox and Google for a while. At the top of my list are:
1. Create a memories like feature from my photos to send on my cell phone, grouping by different features I like: anniversaries, similar activities, A `Me an X(X is Spouse, family, friends etc)`, Over the years(how x has evolved over the years).
2. Be able to save photos taken from my device to my servers.
I've set up three true-nas machines in different places with 2TB of space and want to slowly build this feature.
I just did this with Immich. I have 2TB of photos in it and I backup my phone automatically. Using cloudflare tunnels to access remotely.
same. super convenient to be able to go to photos.[domain].com for my photos. the immich android app is great too.
cloudflare tunnels is a game changer, I can't believe it's free.
> same. super convenient to be able to go to photos.[domain].com for my photos. the immich android app is great too. > > cloudflare tunnels is a game changer, I can't believe it's free.
Could you explain cloudflare tunnels are secure. I understand not punching holes through one's firewall and dealing with a residential connection that's often targeted for exploits. However, if one targets the tunnel endpoint to exploit is it more secure even though it's still exposed to the public?
Secure how? You're exposing a port to the Internet, the tunnel doesn't make it more or less secure. If you don't trust the service, don't expose it.
Check out pangolin. You can get all the awesome of cloudflare tunnela without having your traffic sold to dat aggregators. Jims garge on youtube just did a decent video on it.
[dead]
If you use a synology NAS their OS (Diskstation Manager) supports this via their Photos[1] and Moments[2] apps
[1] https://www.synology.com/en-global/dsm/feature/photos [2] https://www.synology.com/en-global/dsm/feature/moments
I just did this a few months ago. I used PhotoPrism https://github.com/photoprism/photoprism
I used Photoprism for over a year, even paid the "server license" and I'm now using Immich which is much more powerful, sleek, gets new features very quickly (sometimes it's even too fast paced) and in general has got much more traction with the community.
Oh and I forgot to mention the mobile app! When I did the switch the difference was like night and day. Actually Photoprism didn't even have an official mobile app, you could just sync photos in the background with SyncThing for example and keep using your phone's photo galley app, although there was a Photoprism app as well. Immich is just a backend service like a mobile app, it's only current big defect is that it's useless if it cannot contact the server on start-up
Nextcloud memories if you use NC already, otherwise immich is pretty good like others have mentioned
same. some projects in that space from a comment I made a while back https://news.ycombinator.com/item?id=39155977
"My calendar is a true nightmare."
Check
"calendar systems suck. All of them."
Double check
"I’m trying to break off of big tech as much as I can"
I wish I could check this more ...
I've had similar needs/desires/gripes with my calendars and the terrible state of calendaring apps for a while. So thank you for scratching your own itch and sharing it with us.
I'm curious when you say that "[CalDAV] is an area begging for disruption". Can you enlighten us as to what your wishlist could be for (a) better protocol/systems/ecosystem might be? (a rant about your pain points might work too).
Thanks again!
Another route is to go serverless and use DecSync. Thunderbird (or Evolution) will sync with the Android app (F-Droid available) and your Cal, your Cards, and tasks, and even RSS will be replicated on the other peers.
https://github.com/39aldo39/DecSync
Interesting. I don't see any iOS support, and unfortunately it doesn't seem to be maintained.
This is the kind of thing I think about doing every so often, before realizing it would take me a lot more time, energy, and money than I'm willing to spend to save 10 minutes once a week manually copying my work events from GCal to Etar on my phone and vice versa, and both to the weekly dry erase calendar on my wall.
My recurring events are all blocked off on the calendars already ("private" for personal events on my work calendar), so it really is quite a quick update.
I've been using WritePads and Pilot G2s to keep track of things these days.
You have way more advanced needs than I have for a calendar, but I've also been thinking of using a self-hosted solution. The realization for this came when I started noticing all kinds of appointments by email came with a notification attached to add the event to your calendar. I'm talking Gmail here, and I suppose my smartphone was going to add it to my standard Android calendar or something (I didn't try). Then I realized I didn't even like the UI/UX of my standard Android calendar.
I only need to manually add some appointments per week (not even every day, I'm a lucky guy) and realized I do not even need a grid layout for my calendar.
Having worked with times and dates in my favorite programming language already, I feel confident I can make something simple based on the standard default classes.
Even running something as simple and important as a calendar through third-party apps has started feeling very strange the last years.
How does this actually help with owning your own data and repatriating it?
The integrations that are installed on the end devices (phone) sync all that private data into the cloud platform regardless of the backend server. State is shared.
Google Information Services, and Apple's backend's unpublicized equivalent both process and store that related data, regardless of the phone you choose to use or the options you choose on that phone. There is a reason gigabytes get sent up to the cloud every evening, and its all encrypted.
Until you remove the implants on your phone you won't be able to receive any benefit from repatriating the data. That requires jailbreaking, or installing a new OS (something like Graphene), which is model specific due to compatibility issues.
I've been self-hosting Nextcloud for calendar and file sharing for a few years now. I use DAVx5 on my Android device and my wife's iphone syncs out of the box. It's been a very solid solution for us and isn't that difficult to get up and running.
This is very interesting, but also a lot of work. I've been off Google and the likes for maybe 5y now, and what I must say is that it's a bit of a struggle to find the setup that works for you.
One thing for which I don't have a solution yet, and neither does that article seem to address, is how to send invites. My data is one next cloud now, so if I create an invite it sends it. But if I create a it from a client (eg phone) it doesn't. The best I've found is manually export as ics and send an email myself, which ain't great.
Anyone has a solution for that?
Baïkal tries to solve that by sending out the ics for you, it'll even accept responses in various formats (inviting to calendar events seem to be poorly standardized).
Last I played around with it it all worked, somewhat. It does require you to use baïkal as your caldav server though.
There is also NextCloud, Thunderbird for desktop and Davx5-app on Android.
This is my stack, works great.
yep, same. works great. using that over 10 years now
A nitpick. The two managed docker volumes created (at the very bottom) are not used by the container and only serve to cause confusion to the reader.
CalDav and the ecosystem of libraries and self-hosted solution around it is horrible. Don’t do it yourself. Just use https://calendar.online/ and call it a day.
If you are on NixOS for your home server, take a look at my project that does most of the work for you. Bundles router, DDNS, firewall, vpn, ad blocking, and all the apps into a single integrated service if your machine has two ethernet ports. Even if you don't use it directly, the services are broken out into modules which can be referenced for your own setup:
https://homefree.host
> most of the work for you
To be fair, I think the author's main work was spent on tailoring those calendar import/export scripts. :)
As for your setup, what do you use for calendar & contacts hosting? I couldn't find any details about that on your website.
It's still a work in progress, but currently exposes baikal, radicale, and nextcloud as services. I'm looking to add a front end that integrates calendar, contacts, and docs without needing to know what "caldav" is. Look in the "services" folder of the source repo to see which services are already integrated.
I love these kinds of deep dive on selfhosting and personal data management. Where can i find moar
I have the weirdest calendar problem: if someone sends an invite to my Fastmail account, it gets swallowed up by Gmail. It never shows up in Fastmail, and in the calendar invite it appears as if it was sent to my Gmail address even though it wasn’t. It’s the strangest thing and I don’t know how to stop it or even what’s causing it (Fastmail support also had no idea).
Is your Google email forwarded to the fastmail? If someone invites my personal email from Google calendar, my Gmail account gets put on the invite. I always attributed it to the forwarding. It's odd but also pretty convenient as I still use Google calendar.
Nope, there's no forwarding either direction.
Does this always happen or only sometimes? In Google calendar, if the event is modified through the API, there is an option to suppress change notifications, and this can prevent non-google calendars from getting invites.
Also did you create a Google account using your fastmail address? I haven't tested it, but it's possible this causes a hairpin route where Google supresses the outbound email since it thinks it can directly modify the calendar.
It's very reliable, but only on ONE of my fastmail addresses. My Google account predates the fastmail one by a long time.
I had a theory that maybe at some point I set up iCloud with both of these accounts (fastmail + gmail) and it's somehow intercepting these and rewriting them. It's not a super strong theory. Another thought is maybe it's a DNS setting somewhere?
Wow, that' sounds like something I'd love to figure out how to setup with my Fastmail...
I use Fastmail for my email, but due to... life, I still do all calendaring on Google, and so I often miss events that get sent to my Fastmail...
I’m glad folks are using existing CalDAV/Carddav protocols. Too many “custom” junk that works only on web or mobile.
> I’d imagine you can set this up and run it easily from a NAS at home if you want, but I opt to keep my data safely protected in Switzerland, so I subscribe to about $100 monthly of server time to run my websites and all my integrations
This part confused me a bit. Wouldn't running the NAS at home be more safe and secure? Or are they talking about backup safety?
The author of the article researches far right extremism and has been targeted by certain groups in the past IIRC, I read this part as a concern about physical safety, but this is just my speculation.
I can't say what the OP meant, but I have a similar setup and I use a VPS rather than a home NAS for better uptime and accessibility and to avoid opening my home network up to the world.
I'm not quite sure what their point is there.
Everything they mention can also be accomplished on a home NAS or something with plenty of security. I don't think anything is really justified here besides simplicity? Which..this isn't that much simpler.
Which..$100/month is pretty expensive for what's basically an N100 with support.
Yeah, I came here to comment on those $100/month. Is that server gold-plated? It shouldn't cost more than $5.
It depends on where "home" is and what ISP is available.
I started using a paper diary again about a year ago. Turns out I wasn’t missing much and fitting in the rails of calendaring and task management as the vendor (apple) saw fit wasn’t really helping me. I have two jobs and a large family to coordinate.
Ultimate self hosting that. Also only costs $15/year approx.
One of those little 5 subject spiral notebooks you can pick up at the gas station work great. I've had one open on my desk next to my computer for the past 20 or so years. Never had an outtage, no subscription fees, privacy is pretty good too. Requires a pen though but that's about it.
I've been looking for a new calendar myself. I've been using Vueminder for years, but I think it's time to move on. I'm not keen on the renewing updates thing either.
I'm in the Proton ecosystem, but from what I understand their Calender kind of sucks right now.
I use the CalDAV protocol for my to-do list (tasks.org and nextcloud) and I've been wonder if someone could hookup CalDAV with MCP so I can talk to my to-do list to modify it without going to some proprietary solution.
Is this feasible? Has anyone seen a tool like this yet?
Been thinking about this too.
Citizenship application is asking for my travel for the past couple years. And I have no idea. Especially since in Europe a weekend getaway to another country is feasible.
Some sort of long term tracking would have been really useful
Just write what you know: they won't be able to know where were you...
... but they will be able to know if you're lying to them because they are trained to read people.
Makes sense. I’d want it to be as accurate as possible but it’s not going to be perfect. Figure I can extract most flight info out of gmail if I filter a data export by airlines which should get me 90% of the way
There is no need for CalDAV, you can actually use the subscription feature of ics calendars!
At Qbix, we build software for communities to collaboratively manage various things, and that includes events. For example, here are three sites we built, all different:
1) https://yang2020.app for Andrew Yang's 2020 campaign and Yang Gangs - to help people collectively organize and knock on doors, etc.
2) https://new.freetalklive.com for a libertarian show that pulls their episodes into the site, and let people watch and discuss them
3) https://gba.community for their annucal conferences in Washington DC - all the speakers, events, etc.
We've long ago implemented integrations with people's devices (phones, computers). You can add contacts to your address book using .vcf files, and they can even contain thumbnails. They don't need to include people's phone numbers, they can include their IDs on your site, and URLs to contact them.
Similarly, we have a button to subscribe to calendars, and it even works on MacOS. Imagine each user having a calendar appear on their phone. The subscription will pull new events into the calendar, update and remove old ones. About the only downside is that the OS usually suppresses any VALERT info that we place there, so you can't place alerts on these events. But you can have location, directions, etc. You can have a URL for group rides. We've built it all!
For both contacts and events, what you really want is access control - some people can see some things, others can see other things. If you paid for an event, you can see the location and time, for instance. You can maybe see the speakers, etc.
I honestly prefer a pen and paper planner and just manually migrating my contacts over. Meanwhile, my personal gmail is 99.9% contacts I have no intention to ever speaking to again.
Begging the question why not delete the contacts?
I've been thinking about it: certainly most of the numbers in my contacts list are probably invalid by now. But there's definitely a delta of finality to going "oh there's like 10 people I will ever call and that number is only going to go down... "
Last time I tried I couldn't find a way to bulk delete contacts. I had to delete them all one by one. I couldn't stand how tedious it was and gave up. I don't feel any kind of sentimentality towards these contacts, given most of these people I haven't spoken to in nearly 15 years
I don't connect google to my phone anymore, so at least they don't pollute any data elsewhere
I suppose it's the same as those who keep 100's of deserted discord servers open.
FOMO? That odd chance you may need that contact.
replied to the parent, but --
Last time I tried I couldn't find a way to bulk delete contacts. I had to delete them all one by one. I couldn't stand how tedious it was and gave up. I don't feel any kind of sentimentality towards these contacts, given most of these people I haven't spoken to in nearly 15 years
I don't connect google to my phone anymore, so at least they don't pollute any data elsewhere
Syncing availability between multiple calendars is pretty useful
It was my main reason to purchase Motion but they eventually removed it.
I have a self hosted calendar solution. It was $15 at Staples, and it hangs in my kitchen. It wasn't a complete out of the box solution, though, I had to do a little work to customize it. I placed a pen cup with a few pens in it on the counter near the calendar to ensure it is always easy to modify.
>As someone who travels a lot, it’s also one of those things where statistically speaking, the chances of me being on a plane whenever some newsworthy event happens is higher than for the average person. I want my wife, friends, coworkers to know what flights I’m on and what cities I’m in. I’ve survived one terror attack, nearly dodged two others and a mass shooting. It’s one of those things where I want to make sure people who care about me can check in easily to see where I am.
It seems like the author has very different needs than you.
My wife uses this solution. When I am at work and someone wants to know if I can do a team dinner, I have to call her if she's at home, or tell them I'll get back to them. I never know if I'm free and finding out is inefficient at best.
Nearly the same thing here. We're scheduling for our daughter who, as she's getting older, has increasingly more scheduled events, too. If we're out of the house and my wife hasn't brought the paper calendar with her we simply can't commit to any plans. It's excruciating.
The cobbler's children go barefoot, so I haven't come up with a good solution for us... >sigh< It almost makes me want to hitch my wagon to a hosted product/service. Almost.
I used to do this with my wife, and it drove me crazy. Now we use a shared Google calendar, which works way better than prior solutions. Our unspoken rule: if there is an open time slot available, the first to enter it in the shared calendar wins. We're both responsible for entering all family-related appointments in the calendar as soon as they come up. There have been conflicts when either of us forgets to enter something into the calendar, but we just resolve the conflicts as usual. This was a game-changer from my point of view.
How does it handle notifications? How do you access it remotely? How do you share it for common events with others?
Comparing a paper calendar to a digital one is like comparing a Nokia 3310 to a modern smartphone. Yes, technically both are "a phone" but that's roughly where the similarities end.
How do you access it remotely?
Set up a webcam stream of the calendar
How do you share it for common events with others?
Share the webcam link or ring them up on the telephone if we are (jokingly) going traditional.
Giving edit access is as easy as giving whoever your front door key!
> Share the webcam link or ring them up on the telephone if we are (jokingly) going traditional.
Why not make it more convenient for them and pipe the webcam stream through a script that OCRs it on change (or on timer) and makes it available as an .ical file that others can import via a link?
Also it's 2025, you can do it fast and robust by piping it through an LLM instead, with a prompt like "turn this calendar image into an .ical file pretty please".
/s, but only a little :). I've honestly thought of doing that for real, except with a feed of my laptop screen, to sync availability (busy/free) info from my work calendar to my family one, because it's way easier than trying to argue the point with corporate IT.
(I've changed jobs since then, and now I'm using a lazy hack on top of some random Fastmail-friendly cloud app.)
This is one of those deep dives whereby you are either pivoting into building a calendar startup, or you are massively procrastinating actual work by overfocusing on scratching some tech itch.
Other variants of this malady include:
- Building a todo list app. - Building a web framework. - Editing Wikipedia articles. - Building your kernel.
Why not choose Anytype?
Ok unrelated, but I'm looking for a tool for making diagrams like that, anyone know what was used on this post? ty
That particular diagram seems to have been generated by https://plantuml.com according to the image's metadata
Yes! The EXIF data includes the full plantuml used to generate it, under the Plantuml tag.
https://www.plantuml.com/plantuml/uml/VPBFQXmn3CRlynGYzzdUXn...
Wow! That's pretty slick. I've only thought of EXIF data in the context of my digital camera.
I believe, though I can't find an unambiguous reference, that a tool or user is allowed to define and populate any XMP/Exif attribute it wants, within the technical limits of attribute/value definition of the relevant metadata. Whether or not anything else can read and make sense of that metadata is a different problem.
wow! didn't even think to look at that! ty!
Not the tool OP used but Excalidraw is excellent! https://excalidraw.com/
Mermaid
draw.io probably . It's pretty good for a free tool. If you lost the xml I think it even work to import directly an exported picture (I guess they append the data into it too).
[flagged]
I don't have the requirement of owning my data and I've solved this in a simpler way.
1. Create a shared family calendar 2. For things that need to block work calendar, invite my work email to the event.
Why would you expect anyone to be interested in this solution given the whole discussion is about self-hosting?
A lot of comments describe trying to build something better and abandoning the problem. (Including my own) It is nice to hear the different issues, use cases, requirements and workarounds.
To be fair, self-hosting is often over-rated and mentioning that is part of the discussion.
I know this is not what people want to hear, but your data will never be safer than it is in the cloud. No setup you can dream up at home with in a reasonable budget will ever come close to the resilience and redundancy you have in the cloud.
Ownership is not about storing everything at home (or well, it's part of it), but having control over your data, which you can easily have while at the same time using the convenience that the cloud offers.
In the cloud your major concern is not losing data, but losing access to data, and you can counter that with making backups.
If privacy is a concern, use something like Cryptomator[1] to source encrypt data before uploading it. Cryptomator in particular integrates well with mobile phone operating systems, and has clients for all major operating systems (yes, Linux included).
Source encrypt your backups as well, and nobody can read your data besides you.
[1]: https://cryptomator.org
> Ownership is not about storing everything at home (or well, it's part of it), but having control over your data, which you can easily have while at the same time using the convenience that the cloud offers.
Ownership is not just about r/w control of your data but also over what software gets access to it and what that software does. Not just about privacy, but knowing the process and being able to alter it to your desires. There is no way to control that unless you run your own servers.
Does it matter if data is encrypted ?
If it does, I assume you also roll your own network equipment. If you're worried about surveillance, know that you're far more likely to be targeted at the network port than at your data.
As for the process, the cloud (for storing data) is nothing more than a remote fileshare that someone else keeps running. If you have an up to date copy of your data you can change the process any way you like.
Servers are not free, nor are they fire and forget. Once you setup a server and decide to open it to the internet, you become a target, and you will be found. There are bots scouring the entire ip range of every residential IP network looking for juicy targets, and when they find something they record it for later use. Then when some new 0-day is found for service X that you're running, they don't need to scan, they can just lookup in their database an exploit right away.
I'm not against self hosting, and god knows I've been doing it for decades, but it is very rarely worth the hassle compared to the gains. The power cost alone of running a server is more than the equivalent cost of storing it in the cloud (assuming we're not talking media servers, but regular user created data).
The worst argument I usually see is people self hosting mail for private, completely oblivious to the fact that there are usually 2+ people in a mail thread, and something 68% of the worlds population runs on Google/Microsoft/Apple/whatever, so while you may keep your emails private, if they're targeted for being scanned they have already been so.
> your data will never be safer than it is in the cloud
Unless you use Google Timelines. Then you’re out of luck.
https://mjtsai.com/blog/2025/03/24/google-maps-timeline-data...
I can't help but feel on-device storage is still safer than cloud storage. Sure, can use cryptomator or similar to encrypt on cloud, but that's same with local. Only with cloud you're opening up a much bigger attack vector space than having it on-device/"at home". Cloud definitely gives better resiliency and redundancy, but data replication is also something to be cautious with if privacy is a concern.
Assuming your data stays at home, without opening any firewall ports, then maybe your data is safer. You're still only one malware/burglary/house fire/flooding/accident away from losing it.
The moment you start opening ports you're no longer remotely safe. Cloud providers have dedicated staff monitoring services (or monitoring systems monitoring services) for anomalies, as well as people monitoring their networks. These same people will also know in advance when a new patch is coming for some 0-day exploit that might leave them vulnerable.
Compared to your setup at home, where you will patch it "eventually" (at the earliest when you get home from work), and you won't know if you're the target of an attack until your server gives up.
Not to mention the risk of losing other data. The LastPass leak a couple of years ago was made possible by attackers gaining access to an unpatched Plex server on a developers home network, from which they could gain access to his work laptop. LastPass had questionable security practices sure, but the validity of the attack still stands.
Yeah, it's really about picking your hosting partner.
I'm happy with Apple and iCloud holding our personal contacts and calendars. I'm happy with Fastmail holding our email. I still have local (and other online) backups, of course.