Skip to main content

PyPI version PyPI downloads Python

Overview

Parse one or more ICS calendar files, merge their events, sort by start time, and print the result in several formats.

Install

python -m venv .venv
source .venv/bin/activate
pip install -e ".[dev]"

Basic usage

--filepath is required and may be repeated. Paths are read in order; events from every file are combined and sorted by start time.

ics_render --filepath calendar-a.ics --filepath calendar-b.ics

Without an output flag, ics_render prints a text table to stdout.

Output modes

Output format flags are mutually exclusive. Pick one per run.

Default text table

Sorted columns: Start, Duration, Name.

ics_render --filepath tests/fixtures/early.ics --filepath tests/fixtures/late.ics
Start                      Duration    Name
-------------------------  ----------  ----------------
2024-06-01T09:00:00+00:00  0:30:00     Morning standup
2024-06-10                 1 day       All-day planning
2024-06-15T14:00:00+00:00  1:00:00     Release review

JSON Lines (--jsonl)

Each event is one JSON object on its own line. Keys are lower-case, underscore-separated names taken from the original VEVENT properties (summary, start, end, and so on). Timestamp values use ISO 8601.

ics_render --jsonl --filepath tests/fixtures/early.ics --filepath tests/fixtures/late.ics
{"summary": {"parameters": {}, "value": "Morning standup"}, "start": {"parameters": {}, "value": "2024-06-01T09:00:00+00:00"}, "end": {"parameters": {}, "value": "2024-06-01T09:30:00+00:00"}, "uid": {"parameters": {}, "value": "early-1@example"}, "description": {"parameters": {}, "value": "Daily team sync"}}
{"summary": {"parameters": {}, "value": "All-day planning"}, "start": {"parameters": {"value": "DATE"}, "value": "2024-06-10"}, "end": {"parameters": {"value": "DATE"}, "value": "2024-06-11"}, "uid": {"parameters": {}, "value": "late-2@example"}}
{"summary": {"parameters": {}, "value": "Release review"}, "start": {"parameters": {}, "value": "2024-06-15T14:00:00+00:00"}, "end": {"parameters": {}, "value": "2024-06-15T15:00:00+00:00"}, "uid": {"parameters": {}, "value": "late-1@example"}}

Redirect to a file:

ics_render --jsonl --filepath calendar.ics > events.jsonl

HTML month grid (--html)

A self-contained HTML page with a traditional calendar layout: weeks as rows, days as columns (Sunday first), events listed inside each day cell. Timed events show HH:MM before the name.

When events span more than one month, a Month drop-down at the top switches between month grids. The visible grid stays in sync with the selection after refresh.

Click an event to open a detail modal (start, stop, duration, description). Use Copy beside the description to copy it to the clipboard; a Copied toast confirms success.

ics_render --html --filepath tests/fixtures/early.ics --filepath tests/fixtures/late.ics > calendar.html

HTML month grid

HTML month grid with event modal

Open in a browser:

xdg-open calendar.html

HTML table (--html-table)

A self-contained HTML page: one table row per event with Start, Stop, Duration, and Name. Hover the name to see the description as a tooltip.

ics_render --html-table --filepath tests/fixtures/early.ics --filepath tests/fixtures/late.ics > calendar-table.html

HTML table output

HTML list (--html-list)

A self-contained HTML page: each event is a spaced block with name, start, stop, duration, and the full description at the bottom (newlines rendered as line breaks).

ics_render --html-list --filepath tests/fixtures/early.ics --filepath tests/fixtures/late.ics > calendar-list.html

HTML list output

Tests

python -m pytest -q

Regenerating README screenshots

Screenshots under asset/screenshots/ are produced from the test fixtures using Brave in headless mode:

./make_screenshots

Requires brave (or adjust the browser command in the script). Intermediate .html files in asset/screenshots/ are updated at the same time. Text table and JSONL examples in this README are sample output from the same fixtures.

Release files for ics-render 0.1.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for ics-render 0.1.1
File Size Uploaded
ics_render-0.1.1.tar.gz 117.1 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for ics-render 0.1.1
File Interpreter ABI Platform
ics_render-0.1.1-py3-none-any.whl Python 3 none any Details

Total release size: 130.9 kB

Release files / ics_render-0.1.1.tar.gz

Download URL ics_render-0.1.1.tar.gz
Size 117.1 kB
Tags Source
SHA-256 checksum
How to use checksums
161ca552a62dcac760ccfaf71f31d8ea8f5c86200026ea5831cf240c12aac59f
BLAKE2b-256 checksum
How to use checksums
d50cadb70856221320a37c8f583b51545f4861b9adfffff27ca653e289a76dde
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.14.4

Release files / ics_render-0.1.1-py3-none-any.whl

Download URL ics_render-0.1.1-py3-none-any.whl
Size 13.8 kB
Tags Python 3
SHA-256 checksum
How to use checksums
d5c75e03ac65c2e59d00d6ffac783aa21ce18570965c08b236497a5a4c24b4cd
BLAKE2b-256 checksum
How to use checksums
e1d4f12165a2c0e6c814aee0bc4fc4190bdbb846b81bf4b6f43a8bd9881a2729
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.14.4

Release history Release notifications | RSS feed

This release

0.1.1 This release

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page