β οΈ WORK IN PROGRESS - This project is in early development and is not ready for production use. Many features are incomplete or missing. Use at your own risk!
A modern calendar application built with libcosmic, featuring CalDAV support for seamless calendar synchronization.
Calendar is a native calendar application designed for the COSMIC desktop environment. Built using libcosmic's widget system, it provides a clean, intuitive interface inspired by other popular calendar applications while following COSMIC's design language and responsive layout patterns.
The application will support CalDAV protocol for synchronizing events with calendar servers like Nextcloud, Radicale, and other standard CalDAV-compatible services.
This project is in active development. The UI foundation is in place, but core calendar functionality is still being implemented.
- Mini calendar in sidebar for quick date navigation
- Day selection with visual feedback (outlined today, filled selection)
- Square day cells with 4px rounded corners (theme-independent)
- Instant responsive UI that adapts to window size
- Sidebar overlay mode for small screens (COSMIC Files-style)
- COSMIC-style menu bar (File, Edit, View)
- Navigation controls (Previous/Next/Today buttons)
- Month View: Full month calendar grid with week numbers (optional)
- Quick event creation by clicking on day cells
- Multi-day event selection via drag
- Event chips with color coding
- Week View: Week schedule with hourly time slots
- Side-by-side layout for overlapping events
- Current time indicator (red line spanning all days, dot on today)
- Auto-scroll to current time when entering view
- Time-slot drag selection for creating timed events
- All-day events section at the top
- Drag-and-drop event rescheduling
- Day View: Single day detailed schedule with hourly breakdown
- Year View: 12-month overview in 3Γ4 grid
- Quick event creation via click or keyboard
- Timed event creation with drag selection in week view
- Event editing dialog with full details
- Drag-and-drop event rescheduling (month and week views)
- Event deletion
- SQLite database persistence
- View switcher buttons (Day/Week/Month/Year) in toolbar
- Keyboard shortcuts for quick navigation:
Ctrl+1- Month ViewCtrl+2- Week ViewCtrl+3- Day ViewCtrl+4- Year ViewCtrl+N- New EventT- Jump to TodayLeft/Right- Navigate previous/next period
- System locale detection with fallback to English
- Localized month and day names
- First day of week respects locale (Monday/Sunday)
- Week number calculation (ISO 8601)
- 16 languages supported (cs, da, de, el, en, es, fi, fr, it, nl, no, pl, pt, ro, sv, uk)
- Multiple calendar support with color coding
- Calendar visibility toggle
- Custom color picker for calendars
- Create, edit, and delete calendars
- Default calendars: Personal (blue), Work (purple)
- CalDAV server configuration UI
- Active CalDAV synchronization
- Event notifications/alerts
- Recurring events
- Background sync
- Search functionality
- Event invitees
- Rust (latest stable version)
- libcosmic dependencies (automatically fetched from git)
cargo build --releasecargo run --releaseCalendar follows the Elm/MVU (Model-View-Update) architecture pattern, which is standard for libcosmic applications:
src/
βββ app.rs # Main application state and COSMIC framework integration
βββ main.rs # Entry point
βββ message.rs # Application message enum
βββ keyboard.rs # Centralized keyboard shortcuts
βββ layout.rs # Responsive layout management
βββ selection.rs # Drag selection and event drag state
β
βββ update/ # Message handling (split by domain)
β βββ mod.rs # Main message dispatcher
β βββ navigation.rs # View navigation handlers
β βββ calendar.rs # Calendar management handlers
β βββ event.rs # Event CRUD handlers
β βββ selection/ # Selection and drag handlers
β
βββ models/ # Domain models and state
β βββ calendar_state.rs # Month calendar state with caching
β βββ week_state.rs # Week view state
β βββ day_state.rs # Day view state
β βββ year_state.rs # Year view state
β
βββ views/ # View rendering functions (pure functions)
β βββ main_view.rs # Main content coordinator
β βββ month.rs # Month grid view
β βββ week.rs # Week schedule view with time indicator
β βββ day.rs # Day schedule view
β βββ year.rs # Year overview
β βββ sidebar.rs # Sidebar layout
β
βββ components/ # Reusable UI components
β βββ day_cell.rs # Individual day cell with events
β βββ mini_calendar.rs # Mini calendar widget
β βββ calendar_list.rs # Calendar list widget
β βββ color_picker.rs # Color selection widget
β βββ toolbar.rs # Navigation toolbar
β βββ time_grid.rs # Hour-based time grid for week/day views
β βββ event_chip.rs # Event display chips
β βββ header_menu.rs # Application menu bar
β
βββ dialogs/ # Dialog management
β βββ mod.rs # Dialog types and state
β βββ manager.rs # Dialog lifecycle management
β
βββ services/ # Business logic services
β βββ calendar_handler.rs # Calendar CRUD operations
β βββ event_handler.rs # Event CRUD operations
β βββ settings_handler.rs # Settings persistence
β
βββ database/ # Data persistence
β βββ schema.rs # SQLite schema and queries
β
βββ calendars/ # Calendar data sources
β βββ calendar_source.rs # Calendar trait definition
β βββ local_calendar.rs # Local calendar implementation
β βββ caldav_calendar.rs # CalDAV calendar implementation (WIP)
β
βββ locale.rs # Locale detection and formatting
βββ localized_names.rs # Localized month/day names
βββ cache.rs # Calendar state caching
βββ caldav.rs # CalDAV protocol types
βββ settings.rs # Persistent app settings
βββ ui_constants.rs # UI dimensions, spacing, and colors
βββ styles.rs # Custom styles for containers
- MVU Pattern: Clean separation of Model (state), View (rendering), and Update (state transitions)
- Pure View Functions: All views are pure functions that take state and return UI elements
- Centralized State: Single source of truth in
CosmicCalendarstruct - Message-Based Updates: All state changes happen through message passing
- Caching Layer:
CalendarCachepre-computes calendar states for performance - Calendar Abstraction:
CalendarSourcetrait enables pluggable calendar backends
- libcosmic: Modern UI framework for COSMIC desktop built on iced
- chrono: Date and time handling with timezone support
- chrono-tz: Timezone database
- i18n-embed: Internationalization framework
- fluent: Localization system (Mozilla Fluent)
- icalendar: iCalendar format parsing and generation
- reqwest: HTTP client for CalDAV operations
- serde: Serialization/deserialization
- dirs: Platform-specific directory handling
- ron: Rusty Object Notation for settings storage
The application will support full CalDAV protocol integration:
- Connect to any CalDAV-compatible server (Nextcloud, Radicale, etc.)
- Synchronize events bidirectionally
- Local event caching for offline access
- Support for multiple calendar accounts
Users will be able to configure:
- CalDAV server URL
- Username and password/app-specific password
- Which calendars to sync
- Sync interval
- Native COSMIC integration: Uses libcosmic for native look and feel
- Responsive design: Adapts to different window sizes with instant transitions
- Theme-independent styling: Critical UI elements maintain consistent appearance
- Offline-first: Local storage with server sync
- Privacy-focused: Events stored locally by default
- Current time indicator: Red line spanning all days with dot on today's column
- Auto-scroll: Week view automatically scrolls to current time on entry
- Timer updates: Time indicator updates every 30 seconds
- Overlapping events: Side-by-side layout for concurrent events
- Time-slot selection: Drag to select time range for new timed events
- Event drag-and-drop: Reschedule events by dragging to new dates
- Quick event creation: Click day cell or use keyboard shortcut
- Event dialog: Full-featured editor with title, location, times, calendar selection
- Database persistence: SQLite storage with automatic schema creation
- Event chips: Color-coded display in month and week views
- Modular update handlers: Split
update.rsinto domain-specific modules - Dialog management: Centralized dialog state in
dialogs/manager.rs - Service layer: Business logic separated into
services/directory - Selection state: Unified drag selection for dates and time slots
Contributions are welcome! However, please note that this project is in early development and the architecture may change significantly. Feel free to:
- Report bugs and issues
- Suggest features
- Submit pull requests
- Improve documentation
This project is licensed under the GNU General Public License v3.0 (GPLv3). See the LICENSE file for details.
This software is NOT ready for production use. Features are incomplete, bugs are expected, and data loss may occur. Do not rely on this application for important calendar events at this time.



