Taking inspiration from Umbraco compare web site.
This ASP.NET Core application provides version comparison functionality for:
- Apache Kafka - Compares release notes between different Kafka versions using the Apache Kafka releases page
- Confluent Platform - Compares release notes between different Confluent Platform versions using a deterministic HTML parser that produces a structured component-by-component comparison table
- Apache Kafka Comparison: Parses Kafka release pages to show differences between versions including bugs, improvements, new features, and tasks
- Confluent Platform Comparison: Deterministic HTML parser extracts structured component-level changes from each CP release page and generates a Markdown comparison table directly — no AI or AWS required
- Streaming Output: Results are streamed to the browser in real time via Server-Sent Events
- Smart Caching:
- Memory cache for fast in-session access
- File-based cache for persistence across application restarts
- Release page caching to avoid repeated web crawling
- Deprecation Warnings: Automatically highlights deprecation notices in a dedicated summary section below the comparison table
The CP comparison uses a deterministic parser — no AI is involved:
- The application crawls each CP release notes page from the Confluent docs site
CpReleaseParserwalks the HTML and extracts aComponentlist — one entry perh2/h3section (e.g. "Kafka brokers / Confluent Server")- For each component, change items are extracted from
<p>and<ul><li>elements and rendered as Markdown, preserving links and bold text DeterministicDiffServicetakes the component lists for all selected versions and builds a Markdown comparison table, with one row per component and one column per version- Deprecation notices are collected into a separate summary section at the end of the table
- .NET 9.0 SDK
- Docker (optional, for containerized deployment)
- Copy and populate the
.envfile in theKafkaVersionCompare/directory:
cp KafkaVersionCompare/.env.example KafkaVersionCompare/.envEdit .env and fill in the required values:
| Variable | Description |
|---|---|
Admin__Password |
Password for the /Admin page |
AWS_ACCESS_KEY_ID |
AWS access key (optional — only needed if AWS features are used) |
AWS_SECRET_ACCESS_KEY |
AWS secret key |
AWS_SESSION_TOKEN |
AWS session token (if using temporary credentials) |
AWS__Region |
AWS region (default: eu-west-1) |
OpenTelemetry__OtlpExporter |
Set to false if no OTLP collector is running |
- Build and start:
cd KafkaVersionCompare
docker compose up --buildOr to run without compose:
docker build -t kafka-version-compare . && \
docker run --env-file .env -e ASPNETCORE_ENVIRONMENT=Development -p 80:80 kafka-version-compareOpen a browser at: http://localhost
cd KafkaVersionCompare
dotnet runOpen a browser at: https://localhost:7252 or http://localhost:5252
The application uses a multi-layer caching strategy:
| Cache Type | Location | Expiration | Purpose |
|---|---|---|---|
| Memory Cache | In-process | Session-based | Fast access during runtime |
| File Cache (Comparisons) | /tmp/KafkaVersionCompare/cache/ |
90 days | Persist comparison results |
| File Cache (Releases) | /tmp/KafkaVersionCompare/release-pages/ |
1 day | Persist crawled release data |
To clear all caches:
rm -rf /tmp/KafkaVersionCompareSee LICENSE file for details.


