This automatically generates an up-to-date calendar you can subscribe to using your favorite calendar app,
to never miss an IFSC climbing event ever again. Currently supported formats are .ics (iCal) and json.
Copy and paste this calendar URL https://calendar.ifsc.stream into your calendar subscriptions, and it will
automatically sync with your device. This works on iPhone, Google Calendar, Proton Calendar, etc... This should keep
you updated on future seasons as well.
Take a look at the setup guides for help.
Additionally, the calendar data is exported as JSON and can be viewed on this automatically updated
website:
π https://ifsc.stream
If you're constantly missing IFSC events because of a lacking calendar, or timezone confusions, then you're at the right place.
This command line tool uses IFSC's APIs, plus some scraping (because the available APIs don't provide precise schedules) to generate an always up-to-date calendar with all necessary info.
- Updates automatically every hour
- Fetches schedules directly from IFSC's website (using some APIs and fancy scraping)
- Converts times to your local timezone
- Alerts an hour before events start
- Fetches stream URLs (and searches YouTube for missing ones)
- Works for future seasons once dates are published (may require some tweaks)
- Fetches start list for events
- Works on any calendar (not just Google)
- Fully open source
Using the pre-built Docker image
$ docker run -it --volume "$PWD:/calendar" \
ghcr.io/sportclimbing/ifsc-calendar:latest \
--season 2026 \
--output "/calendar/ifsc-calendar.ics"Build Docker image
$ docker build --tag ifsc-calendar .Generate .ics calendar file
$ docker run -it --volume "$PWD:/calendar" ifsc-calendar \
--season 2026 \
--output "/calendar/ifsc-calendar.ics"Generate .json calendar file
$ docker run -it --volume "$PWD:/calendar" ifsc-calendar \
--season 2026 \
--output "/calendar/ifsc-calendar.json" \
--format jsonExport multiple formats
$ docker run -it --volume "$PWD:/calendar" ifsc-calendar \
--season 2026 \
--output "/calendar/ifsc-calendar.json" \
--format json,icsBuild executable
$ makeGenerate .ics calendar file using the generated .phar
$ ./build/ifsc-calendar.phar \
--season 2026 \
--output "ifsc-calendar.ics"- Use Symfony serializer to build response object from IFSC API
- Calculate average event duration (based on past events)
- Add proper start lists to rounds
- Add tickets URL?
- Finish writing calendar setup guides
- Cleanup PHP code
- Add more tests
- Make scraping more robust and fail on errors or missing data
- Add more domain events to improve output log
- Add automated tests to PRs (unit tests, coverage, etc)
- Push Docker image to Docker Hub
- Add BuyMeACoffee link to
.icscalendar events - Show activity and warnings in console (domain events)
- Validate newly generated calendar before publishing site
- Search all YouTube API results (not only the first 50 results)
- Check if there's an API to fetch events from instead of relying on scraping
- Find a way to integrate events not posted on the official event page (e.g. Bern)
- Disable youtube-fetch by default
- Add links to specific events to calendar
- Add
latesttag to latest release - Always serve asset from latest release on calendar URL
- Fetch stream links from YouTube API if none can be scraped
- Automatically regenerate calendar and update release
-
Fix scraper for older seasons (formatting changes drastically)
- PHP 8.5
- ext-dom
- ext-libxml
This is in no way affiliated with or endorsed by the IFSC.


