A head-to-head comparison of ChronoGrid against the calendar/scheduler components actually used in Java/Vaadin and JavaScript projects. The goal isn’t to claim ChronoGrid is better at everything — it deliberately isn’t. The goal is to make the niche visible.
TL;DR. Most components on this page are excellent renderers. ChronoGrid is an excellent integrator — it owns the CalDAV wire and Vaadin Flow API end-to-end. If you’re already in Vaadin and need real calendar backends, this is the gap it fills.
1. Quick orientation — what is each thing?
| Component | Type | Platform |
|---|---|---|
| Vaadin DatePicker / DateTimePicker / TimePicker | Form input field with calendar overlay | Vaadin Flow |
| FullCalendar for Flow | Vaadin integration of FullCalendar — strong renderer | Vaadin Flow / JS under the hood |
| FullCalendar Scheduler for Flow | FullCalendar Flow + resource/timeline views | Vaadin Flow / JS under the hood |
| TOAST UI Calendar | Standalone JavaScript calendar component | JavaScript |
| DHTMLX Scheduler | Mature JavaScript scheduler component | JavaScript (commercial) |
| Kendo UI Scheduler | Enterprise scheduler in Outlook style | JavaScript (commercial) |
| Bryntum Calendar / Scheduler | Modern JS calendar + resource scheduler | JavaScript (commercial) |
| ChronoGrid | Vaadin Flow CalDAV calendar component | Vaadin Flow + Java + CalDAV |
The form-input pickers (DatePicker etc.) aren’t competitors — they’re building blocks inside ChronoGrid’s own event editor.
2. Calendar rendering
| Capability | ChronoGrid | FullCalendar Flow | Scheduler Flow | DHTMLX | Kendo | Bryntum |
|---|---|---|---|---|---|---|
| Month | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| Week | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| Day | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| N-day view | ✅ | via custom view | via custom view | partial | ✅ | ✅ |
| Agenda / list | ⚠️ planned | ✅ | ✅ | ✅ | ✅ | ✅ |
| Timeline | ❌ out of scope | only with Scheduler | ✅ | ext. ed. | ✅ | ✅ |
| Resource view | ❌ out of scope | ❌ | ✅ | ext. ed. | ✅ | ✅ |
Reading the matrix: ChronoGrid covers the universally-needed views (month / week / day / N-day) plus an upcoming agenda view. It deliberately does not ship resource views or timeline — that’s enterprise scheduler territory (Bryntum, Kendo, Scheduler) and competing there means losing on their turf.
3. Event interaction
| Capability | ChronoGrid | FullCalendar Flow | Scheduler Flow | TOAST UI | DHTMLX | Kendo |
|---|---|---|---|---|---|---|
| Show events | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| Click events | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| Timeslot select | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| Create events | ✅ built-in | technical API | technical API | ✅ | ✅ | ✅ |
| Edit events | ✅ built-in | host code | host code | ✅ | ✅ | ✅ |
| Delete events | ✅ built-in | host code | host code | ✅ | ✅ | ✅ |
| Drag & drop persistence | ✅ | events emitted | events emitted | ✅ | ✅ | ✅ |
| Resize persistence | ✅ | events emitted | events emitted | ✅ | ✅ | ✅ |
| Conflict handling | ✅ ETag-based | host code | host code | ❌ | generic | generic |
| Recurring events (RRULE) | ⚠️ planned | ✅ | ✅ | ✅ | ✅ | ✅ |
The line that matters is the difference between “events are emitted”
and “events are persisted.” ChronoGrid does the persistence — CalDAV PUT
with If-Match, ETag-based conflict detection, hand back a
ConcurrentModificationException when two clients race. With FullCalendar
Flow you get the event hook; the round-trip to a real backend is your
problem.
4. Backend & protocol integration ⭐ THE DIFFERENTIATOR
| Capability | ChronoGrid | FullCalendar Flow | Scheduler Flow | DHTMLX | Kendo | Bryntum |
|---|---|---|---|---|---|---|
| CalDAV client | ✅ built-in | ❌ | ❌ | ❌ | ❌ | ❌ |
| CalDAV discovery | ✅ PROPFIND chain | ❌ | ❌ | ❌ | ❌ | ❌ |
| VEVENT mapping | ✅ Biweekly-based | ❌ | ❌ | partial / external | partial | partial |
| VTODO mapping | ⚠️ scoped in | ❌ | ❌ | ❌ | not core | not core |
| Multi-server | ✅ | ❌ | ❌ | backend-dep. | backend-dep. | backend-dep. |
| Multi-subscription | ✅ | ❌ | ❌ | backend-dep. | backend-dep. | backend-dep. |
| Typed error boundary | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ |
| Headless CalDAV module | ✅ (chronogrid-core) | ❌ | ❌ | ❌ | ❌ | ❌ |
This is the reason ChronoGrid exists. Every other entry on this row is “❌” or “your problem.” That’s not a knock on those products — they’re agnostic renderers by design. But if your stack already has a CalDAV backend (Nextcloud, iCloud, Radicale, Baïkal …), ChronoGrid is the only component that talks to it natively.
5. Vaadin integration
| Capability | ChronoGrid | FullCalendar Flow | Scheduler Flow | JS components |
|---|---|---|---|---|
| Vaadin Flow API | ✅ | ✅ | ✅ | ❌ (wrapper) |
| Java-first usage | ✅ | ✅ | ✅ | ❌ |
| Route-free embedding | ✅ | ✅ | ✅ | wrapper only |
| Host app owns security | ✅ | not specific | not specific | wrapper needed |
| i18n seam | ✅ | partial | partial | JS-specific |
| StateStore seam | ✅ | ❌ | ❌ | ❌ |
| Lumo-themable | ✅ | partial | partial | CSS bridge only |
The seam pattern matters here. ChronoGrid exposes explicit extension
points — StateStore (where session data lives), i18n (how labels get
translated), the route layer (which the host app owns). This means the
component embeds into bigger Vaadin apps without dictating how those
apps are structured.
6. Per-component summary
Vaadin DatePicker / DateTimePicker / TimePicker
✅ Excellent form inputs. ❌ Not calendar components — show / edit a single date or time, no event model, no backend.
Verdict: Not competitors. Useful inside ChronoGrid’s event editor.
FullCalendar for Flow
✅ Strongest renderer in the Vaadin space. Rich interaction model. ❌ Pure UI — every backend concern (persistence, conflicts, multi-source) is the host application’s problem.
Verdict: Closest peer in the Vaadin ecosystem, but a different layer of the stack. ChronoGrid actually uses it under the hood for rendering and adds the backend layer.
FullCalendar Scheduler for Flow
✅ Adds resource views and timeline — strong for resource planning (rooms, people, vehicles, machines). ❌ Different licensing model from FullCalendar; adds complexity if you don’t need resources.
Verdict: Different target use case. ChronoGrid is not heading into resource planning.
TOAST UI Calendar
✅ Solid JavaScript calendar with monthly/weekly/daily views, themes, timezones. ❌ Not Vaadin-native. Integration via wrapper is non-trivial.
Verdict: Reasonable choice for a pure JS frontend. Not relevant for Vaadin Flow apps.
DHTMLX Scheduler
✅ Broad JavaScript scheduler with day/week/month/year views, recurrence, editor. ❌ JS-first. Resource planning only in higher editions. Backend sync is generic, not CalDAV-aware.
Verdict: Strong general-purpose JS scheduler. Wrong stack for Java-first Vaadin apps.
Kendo UI Scheduler
✅ Enterprise-grade: timeline, virtualisation, iCal import/export, PDF export, RTL, search. ❌ Telerik ecosystem, JavaScript, commercial. Not Vaadin-native.
Verdict: Functionally the broadest comparable. Different audience (Telerik shops with JS-first stacks). ChronoGrid does not aim to match its breadth.
Bryntum Calendar / Scheduler
✅ Modern, fast, enterprise scheduling with strong resource support. ❌ JS-first, commercial, no native Vaadin integration.
Verdict: Excellent if you need resource scheduling and have the budget. Not the same product as ChronoGrid.
7. Positioning summary
Where ChronoGrid wins:
- Vaadin-native — Java API, no JS wrapper work
- CalDAV-first — real wire protocol, real discovery, real multi-source
- On-Prem / EU-friendly — no SaaS dependency, EUPL-1.2 license
- Headless reusable core — same client serves CLIs and sync jobs, not just the UI
Where ChronoGrid is not competing:
- Resource planning → Bryntum, Kendo, FullCalendar Scheduler
- Enterprise breadth → Kendo, Bryntum
- Pure rendering quality → FullCalendar (which we use, not replace)
- JavaScript-first frontends → TOAST UI, DHTMLX
8. When to choose ChronoGrid
✅ You’re building a Vaadin Flow app. ✅ You need to integrate with a real CalDAV backend (iCloud, Nextcloud, Radicale, Baïkal). ✅ You don’t want to write the wire protocol, ETag handling and discovery logic yourself. ✅ Your operational story is On-Prem or EU-centric.
9. When not to choose ChronoGrid
❌ You need resource / capacity planning → look at Bryntum or FullCalendar Scheduler. ❌ You’re not in Vaadin → use the JS native option that fits your stack. ❌ You need Outlook-style breadth out of the box → Kendo. ❌ Your calendar source is a SaaS API only (Google Calendar API, Microsoft Graph) — ChronoGrid speaks CalDAV; Google/Microsoft no longer offer first-class CalDAV.
See also: Roadmap · Main project page
