MITFree, open source, runs on your machine
Every calendar.Always in sync.
A meeting on your work calendar shows up on your personal one, and the other way round. Google, Microsoft 365 and any .ics feed. Nothing hosted, nothing to pay.
localhost:8484
Your calendars
MWorkMicrosoft 365 · copies say Busy
Syncing
icsTeam holidaysPublished .ics link
Read only
Preview
12to add
3to update
0to remove
09:00 Dentist→ Work · Busy
10:00 Standup→ Personal
12:30 Gym→ Work · Busy
Sync nowPause
Works withGoogle CalendarMicrosoft 365Outlook.comAny .ics feed
Why calsync
A meeting on one calendar is a double-booking on the other.
Without calsyncThursday
A colleague booked over the dentist. They couldn't see it.
With calsyncThursday
PersonalDentist10:00
Client call11:00 · copy
WorkBusy10:00 · copy
Client call11:00
Work saw Busy at 10:00 and picked 11:00 instead.
Two-way sync
One schedule. However many calendars.
Each writable calendar gets one tagged copy of every real event from the others. Move the meeting once and every copy follows. A published .ics link can join in too, one way.
GGoogle
MMicrosoft 365
OOutlook.com
ics.ics feed
Safety
It only touches what it made. Nothing else.
DentistPersonal · 09:00
BusyWork · 09:00
Busy only, per calendar
Copies can say just Busy, with no title or location. Private events always do.
Stopped before a big deleteThis run wanted to remove more than half of a calendar's copies. It's waiting for you.
Stops before a big delete
Nothing large disappears until you've looked. A calendar that won't load is left alone.
yoursyourscalsync copyyours
Only its own copies
calsync edits and deletes only events it created. Yours are never touched.
Team syncalready on both · skipped
No double invites
A meeting already there through a shared invite isn't copied again.
Delete the copies calsync made here
One-button undo
One button, or calsync purge, removes every copy it made.
How it works
Connect. Preview. Then it runs itself.
01Connect
Add each calendar on one page. Google and Microsoft each need a free sign-in app of your own, about 10 minutes each.
Personal · Googleconnected
Work · Microsoft 365connected
Holidays · .icsread only
02Preview
See what would be added, updated and removed on each calendar. Nothing changes until you start it.
to add12
to update3
to remove0
03Sync
Press Sync now. After that it runs in the background, every 5 minutes unless you pick another interval.
Running every5 minutes
Last runOK
Windownext 120 days
Private
Your calendars. On your own machine.
0accounts to make
0databases to run
1process or container
$0MIT licensed
- Your sign-ins
- Files on the machine that runs calsync
- Who can reach it
- This machine, until you change that
- Who it talks to
- Your calendars, and nothing else
- Before the internet
- Put it behind your own HTTPS proxy
Compare
Same sync. No subscription.
ToolPer yearTwo-wayBusy onlyYour sign-ins
calsync$0YesPer calendarStay on your machine
OneCal$60YesYesOn their servers
Reclaim.ai$96YesHides detailsOn their servers
CalendarBridgeabout $48YesYesOn their servers
Cheapest paid plan for one person, at list prices seen on 3 November 2026.
Before you start
What to know first.
- Google
- Needs a free sign-in app of your own.
- Microsoft
- Needs one too. Some school and work tenants block outside apps. A published .ics link still works, one way.
- Window
- The next 120 days. Repeating events are copied as single occurrences.
- Hosted version
- There isn't one. The machine running calsync needs to be on.
Install
Pick one. Both take a minute.
With Docker
git clone https://github.com/jakescalesAI/calsync
cd calsync
docker compose up -d
docker compose logs calsync
Open http://localhost:8484. The first visit asks for the setup code from those logs. Then you choose a password.
With Python 3.10 or newer
pipx install git+https://github.com/jakescalesAI/calsync
calsync web
The same page opens at http://localhost:8484.
Your calendars,
finally on speaking terms.