{"id":44542098,"url":"https://github.com/semos-labs/aion","last_synced_at":"2026-02-17T16:02:53.168Z","repository":{"id":336754997,"uuid":"1150933868","full_name":"semos-labs/aion","owner":"semos-labs","description":"A keyboard-first terminal UI for Google Calendar.","archived":false,"fork":false,"pushed_at":"2026-02-13T19:40:33.000Z","size":1327,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-02-13T19:41:03.274Z","etag":null,"topics":["calendar","cli","google","google-calendar","keyboard-driven","react","react-tui","terminal","tui"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/semos-labs.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-02-05T21:29:41.000Z","updated_at":"2026-02-13T19:40:48.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/semos-labs/aion","commit_stats":null,"previous_names":["nick-skriabin/aion","semos-labs/aion"],"tags_count":11,"template":false,"template_full_name":null,"purl":"pkg:github/semos-labs/aion","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/semos-labs%2Faion","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/semos-labs%2Faion/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/semos-labs%2Faion/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/semos-labs%2Faion/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/semos-labs","download_url":"https://codeload.github.com/semos-labs/aion/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/semos-labs%2Faion/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29549224,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-17T14:33:00.708Z","status":"ssl_error","status_checked_at":"2026-02-17T14:32:58.657Z","response_time":100,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["calendar","cli","google","google-calendar","keyboard-driven","react","react-tui","terminal","tui"],"created_at":"2026-02-13T19:01:01.128Z","updated_at":"2026-02-17T16:02:53.162Z","avatar_url":"https://github.com/semos-labs.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003cimg src=\"images/logo.png\" alt=\"Aion\" width=\"200\"\u003e\n\u003c/p\u003e\n\n\u003ch1 align=\"center\"\u003eAion\u003c/h1\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003cstrong\u003eTerminal calendar client with vim-style keybindings\u003c/strong\u003e\u003cbr\u003e\n  \u003cem\u003eGoogle Calendar \u0026amp; CalDAV. Beautiful. Fast. Keyboard-driven.\u003c/em\u003e\n\u003c/p\u003e\n\n![Aion App](./images/app.jpg)\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"#quick-start\"\u003eQuick Start\u003c/a\u003e •\n  \u003ca href=\"#keybindings\"\u003eKeybindings\u003c/a\u003e •\n  \u003ca href=\"#commands\"\u003eCommands\u003c/a\u003e •\n  \u003ca href=\"#configuration\"\u003eConfiguration\u003c/a\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://github.com/semos-labs/aion/releases/latest\"\u003e\u003cimg src=\"https://img.shields.io/github/v/release/semos-labs/aion?label=Release\u0026color=green\" alt=\"Latest Release\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://github.com/semos-labs/aion/releases/latest\"\u003e\u003cimg src=\"https://img.shields.io/github/downloads/semos-labs/aion/total?label=Downloads\u0026color=blue\" alt=\"Downloads\"\u003e\u003c/a\u003e\n  \u003cimg src=\"https://img.shields.io/badge/Bun-1.0+-f9f1e1?logo=bun\u0026logoColor=black\" alt=\"Bun\"\u003e\n  \u003cimg src=\"https://img.shields.io/badge/License-MIT-blue\" alt=\"MIT License\"\u003e\n\u003c/p\u003e\n\n---\n\n## Table of Contents\n\n- [Why Aion?](#why-aion)\n- [Quick Start](#quick-start)\n- [Keybindings](#keybindings)\n  - [Navigation](#navigation)\n  - [Events](#events)\n  - [General](#general)\n- [Commands](#commands)\n- [Configuration](#configuration)\n  - [Google Calendar](#google-calendar)\n  - [CalDAV](#caldav)\n  - [Theme](#theme)\n- [Data Storage](#data-storage)\n- [Tech Stack](#tech-stack)\n- [Roadmap](#roadmap)\n\n---\n\n## Why Aion?\n\nMost calendar apps are mouse-driven, slow, and cluttered. Aion takes a different approach:\n\n**Vim-style navigation. Terminal-native. Zero distractions.**\n\n### Comparison\n\n| Feature | Aion | [calcurse](https://calcurse.org/) | [khal](https://github.com/pimutils/khal) | [gcalcli](https://github.com/insanum/gcalcli) | [calcure](https://github.com/anufrievroman/calcure) |\n|---------|:----:|:--------:|:----:|:-------:|:-------:|\n| **TUI (visual interface)** | ✅ | ✅ | ❌ | ❌ | ✅ |\n| **Google Calendar sync** | ✅ Native | ❌ | 🔧 vdirsyncer | ✅ Native | ❌ |\n| **CalDAV support** | ✅ Native | ❌ | 🔧 vdirsyncer | ❌ | ❌ |\n| **Multi-account** | ✅ | ❌ | 🔧 | ✅ | ❌ |\n| **Vim keybindings** | ✅ | Partial | ❌ | ❌ | Partial |\n| **Multi-day view** | ✅ 1/3/5 cols | ❌ | ❌ | ❌ | ❌ |\n| **Free/busy scheduling** | ✅ | ❌ | ❌ | ✅ | ❌ |\n| **Google Meet generation** | ✅ | ❌ | ❌ | ❌ | ❌ |\n| **Natural language input** | ✅ | ❌ | ❌ | ❌ | ❌ |\n| **Event search** | ✅ | ✅ | ✅ | ✅ | ❌ |\n| **Recurring events** | ✅ | ✅ | ✅ | ✅ | ✅ |\n| **Timezone support** | ✅ | ✅ | ✅ | ✅ | ❌ |\n| **Theming** | ✅ TOML | ✅ | ✅ | ❌ | ✅ |\n| **Offline mode** | ✅ SQLite | ✅ | ✅ | ❌ | ✅ |\n| **Dependencies** | None | ncurses | Python | Python | Python |\n\n\u003e 🔧 = Requires additional setup/tools\n\n**TL;DR**: Aion is the only terminal calendar with native Google Calendar sync, CalDAV support, multi-account support, Meet link generation, free/busy scheduling, and a proper visual TUI — all in one package.\n\n### Features\n\n| Feature | Description |\n|---------|-------------|\n| **⌨️ Vim Keybindings** | Navigate with `j`/`k`, `gg`/`G`, `h`/`l` — feels like home |\n| **📅 Visual Timeline** | Day view with 15-minute precision and overlap handling |\n| **🔗 Google Calendar Sync** | Multi-account OAuth with PKCE, background sync every 30s |\n| **🗓️ CalDAV Support** | iCloud, Fastmail, Nextcloud, Radicale, and any CalDAV server |\n| **👥 Meet With** | Find free slots across multiple people's calendars |\n| **📹 Google Meet** | Auto-generate Meet links when creating events |\n| **📁 Multi-Calendar** | Toggle calendars on/off, each with its own color |\n| **🌍 Timezone Support** | Events display in local time, toggle to see original timezone |\n| **🎨 Themeable** | Customize every color via TOML configuration |\n| **💾 Local-First** | SQLite database, your data stays yours |\n| **🔔 Notifications** | Track pending invites at a glance |\n| **📝 Command Palette** | Quick access to all actions with fuzzy search |\n| **🔍 Event Search** | Find events by title or description with `/` |\n| **🗓️ Natural Language Dates** | Type \"tomorrow 3pm\" or \"next friday for 2 hours\" |\n| **🔁 Recurring Events** | Create and edit events with daily/weekly/monthly/yearly recurrence |\n| **❓ Context Help** | Press `?` anywhere to see available keybindings |\n| **🚀 Fast** | Built with Bun and React — instant startup |\n\n---\n\n## Quick Start\n\n### Option 1: Homebrew (macOS/Linux)\n\n```bash\nbrew tap semos-labs/tap\nbrew install aion\n```\n\n### Option 2: Download Binary\n\nDownload the latest release for your platform from the [Releases](https://github.com/semos-labs/aion/releases) page:\n\n| Platform | Binary |\n|----------|--------|\n| macOS (Apple Silicon) | `aion-darwin-arm64` |\n| macOS (Intel) | `aion-darwin-x64` |\n| Linux (x64) | `aion-linux-x64` |\n| Linux (ARM64) | `aion-linux-arm64` |\n\n```bash\n# Make executable (macOS/Linux)\nchmod +x aion-darwin-arm64\n\n# Move to PATH\nsudo mv aion-darwin-arm64 /usr/local/bin/aion\n\n# Run\naion\n```\n\n### Option 3: Build from Source\n\n```bash\ngit clone https://github.com/semos-labs/aion.git\ncd aion\nbun install\n\n# Run in development\nbun dev\n\n# Build binary for current platform\nbun run build\n\n# Binary will be at ./dist/aion\n```\n\n### 2. Connect a Calendar\n\nAion supports **Google Calendar** and **CalDAV** (iCloud, Fastmail, Nextcloud, Radicale, etc.). You can use both at the same time with multiple accounts.\n\n#### Option A: Google Calendar\n\n\u003cdetails\u003e\n\u003csummary\u003eSet up Google Cloud credentials\u003c/summary\u003e\n\nAion requires your own Google Cloud credentials to access Google Calendar:\n\n1. Go to [Google Cloud Console](https://console.cloud.google.com)\n2. Create a new project (or select an existing one)\n3. Enable the **Google Calendar API**:\n   - Go to \"APIs \u0026 Services\" → \"Library\"\n   - Search for \"Google Calendar API\"\n   - Click \"Enable\"\n4. Go to \"APIs \u0026 Services\" → \"Credentials\"\n5. Click \"Create Credentials\" → \"OAuth client ID\"\n6. If prompted, configure the OAuth consent screen:\n   - User Type: **External** (or Internal for Workspace)\n   - Add your email as a test user\n   - Add the following scopes:\n     - `https://www.googleapis.com/auth/calendar.events` (read/write events)\n     - `https://www.googleapis.com/auth/calendar.readonly` (read calendars list)\n     - `https://www.googleapis.com/auth/userinfo.email` (get user email)\n     - `https://www.googleapis.com/auth/userinfo.profile` (get user name/picture)\n7. Create OAuth client ID:\n   - Application type: **Desktop app**\n   - Name: \"Aion\" (or anything you like)\n8. Copy the **Client ID** and **Client Secret**\n\nAdd your credentials to `~/.config/aion/config.toml`:\n\n```toml\n[google]\nclientId = \"your-client-id.apps.googleusercontent.com\"\nclientSecret = \"your-client-secret\"\n```\n\nOr use environment variables:\n\n```bash\nexport AION_GOOGLE_CLIENT_ID=\"your-client-id.apps.googleusercontent.com\"\nexport AION_GOOGLE_CLIENT_SECRET=\"your-client-secret\"\n```\n\n\u003c/details\u003e\n\nThen connect your account:\n\n```\n:login\n```\n\nFollow the OAuth flow in your browser. Aion supports multiple Google accounts.\n\n#### Option B: CalDAV\n\nAdd your CalDAV account to `~/.config/aion/config.toml`:\n\n```toml\n[[caldav]]\nname = \"iCloud\"\nemail = \"me@icloud.com\"\nserverUrl = \"https://caldav.icloud.com\"\nusername = \"me@icloud.com\"\npassword_command = \"security find-generic-password -a me@icloud.com -s aion-caldav -w\"\n```\n\nOr use the interactive dialog:\n\n```\n:caldav\n```\n\nSee [CalDAV configuration](#caldav) for more details and provider-specific URLs.\n\n### 3. Run\n\n```bash\nbun dev\n```\n\n### 4. Navigate\n\nUse `j`/`k` to move through events, `h`/`l` to switch panes, `Enter` to view details.\n\n---\n\n## Keybindings\n\n### Navigation\n\n| Key | Action |\n|-----|--------|\n| `j` / `↓` | Move down / Next item |\n| `k` / `↑` | Move up / Previous item |\n| `h` / `←` | Previous day / column |\n| `l` / `→` | Next day / column |\n| `Tab` | Cycle focus between panes |\n| `` ` `` | Cycle focus (Calendars → Days → Timeline) |\n| `gg` | Jump to first item |\n| `G` | Jump to last item |\n| `n` | Jump to now (timeline only) |\n| `Ctrl+G` | Go to date (natural language) |\n\n### Events\n\n| Key | Action |\n|-----|--------|\n| `Enter` / `Space` | Open event details |\n| `e` | Edit event |\n| `D` | Delete event |\n| `Ctrl+N` | Create new event |\n| `Ctrl+M` | Meet with... (find free slots) |\n\n### Event Details\n\n| Key | Action |\n|-----|--------|\n| `y` | Accept invitation |\n| `n` | Decline invitation |\n| `m` | Maybe / Tentative |\n| `o` | Open meeting link (Meet, Zoom, Teams, etc.) |\n| `e` | Edit event |\n| `D` | Delete event |\n| `t` | Toggle timezone (local ↔ original) |\n\n### Calendars \u0026 Accounts\n\n| Key | Action |\n|-----|--------|\n| `Shift+C` | Toggle calendars sidebar |\n| `A` | Toggle all-day events section |\n\n### View\n\n| Key | Action |\n|-----|--------|\n| `3` | Toggle between 1 and 3 column view |\n| `` ` `` | Cycle focus (Calendars → Days → Timeline) |\n\n### General\n\n| Key | Action |\n|-----|--------|\n| `/` | Search events |\n| `:` | Open command palette |\n| `?` | Show help (context-aware) |\n| `N` | Open notifications |\n| `Esc` | Close overlay / Go back |\n| `q` | Quit |\n\n---\n\n## Commands\n\nOpen the command palette with `:` and type a command:\n\n### Event Management\n\n| Command | Action |\n|---------|--------|\n| `new` | Create new event |\n| `new \u003ctitle\u003e` | Create event with title |\n| `edit` | Edit selected event |\n| `delete` | Delete selected event |\n\n### Navigation\n\n| Command | Action |\n|---------|--------|\n| `goto \u003cdate\u003e` | Jump to date (e.g., `goto tomorrow`, `goto march 15`) |\n| `now` | Jump to current time |\n| `today` | Jump to today |\n\n### Accounts \u0026 Sync\n\n| Command | Action |\n|---------|--------|\n| `login` | Add Google account (OAuth) |\n| `caldav` | Add CalDAV account |\n| `logout` | Remove all accounts |\n| `sync` | Force sync all calendars |\n| `accounts` | Manage connected accounts |\n| `calendars` | Toggle calendars sidebar |\n\n### Scheduling\n\n| Command | Action |\n|---------|--------|\n| `meet` | Find free slots with other people |\n\n### Search\n\n| Command | Action |\n|---------|--------|\n| `search` | Search events by title/description |\n\n### View\n\n| Command | Action |\n|---------|--------|\n| `columns \u003cn\u003e` | Set column count (1, 3, or 5) |\n\n### General\n\n| Command | Action |\n|---------|--------|\n| `help` | Show keybindings |\n| `notifications` | Open notifications panel |\n| `quit` | Exit application |\n\nNavigate with `↑`/`↓` or `Ctrl+P`/`Ctrl+N`, auto-fill with `Ctrl+Y`, select with `Enter`.\n\n---\n\n## Natural Language Dates\n\nWhen creating or editing events, you can use natural language for dates and times:\n\n| Input | Result |\n|-------|--------|\n| `tomorrow 3pm` | Tomorrow at 3:00 PM |\n| `next friday at 10am` | Next Friday at 10:00 AM |\n| `in 2 hours` | 2 hours from now |\n| `today at 5pm for 30 minutes` | Today 5:00-5:30 PM |\n| `from march 5 for 2 weeks` | All-day event, March 5-19 |\n| `between march 6 and 12` | All-day event, March 6-12 |\n\n---\n\n## Configuration\n\nCreate `~/.config/aion/config.toml` to customize Aion.\n\n### Google Calendar\n\n```toml\n[google]\nclientId = \"your-client-id.apps.googleusercontent.com\"\nclientSecret = \"your-client-secret\"\n```\n\n### CalDAV\n\nAdd one or more CalDAV accounts using `[[caldav]]` array syntax. Each account must have either `password` or `passwordCommand` (command takes precedence).\n\n```toml\n# iCloud\n[[caldav]]\nname = \"iCloud\"\nemail = \"me@icloud.com\"\nserverUrl = \"https://caldav.icloud.com\"\nusername = \"me@icloud.com\"\npasswordCommand = \"security find-generic-password -a me@icloud.com -s aion-caldav -w\"\n\n# Fastmail\n[[caldav]]\nname = \"Work\"\nemail = \"me@fastmail.com\"\nserverUrl = \"https://caldav.fastmail.com/dav/calendars\"\nusername = \"me@fastmail.com\"\npasswordCommand = \"pass show calendar/fastmail\"\n\n# Nextcloud (with plain password)\n[[caldav]]\nname = \"Nextcloud\"\nemail = \"me@example.com\"\nserverUrl = \"https://cloud.example.com/remote.php/dav\"\nusername = \"me\"\npassword = \"app-password-here\"\n```\n\n#### Provider URLs\n\n| Provider | Server URL |\n|----------|-----------|\n| **iCloud** | `https://caldav.icloud.com` |\n| **Fastmail** | `https://caldav.fastmail.com/dav/calendars` |\n| **Nextcloud** | `https://your-server.com/remote.php/dav` |\n| **Radicale** | `https://your-server.com/radicale` |\n| **Google** (via CalDAV) | `https://apidata.googleusercontent.com/caldav/v2` |\n\n\u003e **Tip:** For iCloud, use an [app-specific password](https://support.apple.com/en-us/102654) — not your Apple ID password.\n\n#### Password commands\n\n`passwordCommand` runs via `sh -c` and uses the trimmed stdout as the password. Examples:\n\n```toml\n# macOS Keychain\npasswordCommand = \"security find-generic-password -a me@icloud.com -s aion-caldav -w\"\n\n# pass (GPG)\npasswordCommand = \"pass show calendar/icloud\"\n\n# 1Password CLI\npasswordCommand = \"op read op://Personal/iCloud/password\"\n\n# Bitwarden CLI\npasswordCommand = \"bw get password icloud-caldav\"\n\n# Environment variable\npasswordCommand = \"echo $CALDAV_PASSWORD\"\n```\n\n### Theme\n\n```toml\n[theme]\n# Accent colors\n[theme.accent]\nprimary = \"cyan\"\nsecondary = \"blue\"\nsuccess = \"green\"\nwarning = \"yellow\"\nerror = \"red\"\n\n# Text colors\n[theme.text]\nprimary = \"white\"\nsecondary = \"gray\"\ndim = \"darkGray\"\n\n# Selection highlight\n[theme.selection]\nbackground = \"blue\"\ntext = \"white\"\nindicator = \"cyan\"\n\n# Event type colors\n[theme.eventType]\ndefault = \"cyan\"\nfocusTime = \"blue\"\noutOfOffice = \"magenta\"\nbirthday = \"yellow\"\n\n# Attendance status colors\n[theme.status]\naccepted = \"green\"\ndeclined = \"red\"\ntentative = \"yellow\"\n\n# UI elements\n[theme.modal]\nbackground = \"black\"\n\n[theme.input]\nbackground = \"black\"\n\n[theme.statusBar]\nbackground = \"black\"\n```\n\n---\n\n## Data Storage\n\nAion supports two directory layouts:\n\n### Legacy Layout (`~/.aion/`)\n\nIf `~/.aion/` exists, Aion uses it for backward compatibility. All files are stored in this single directory.\n\n### XDG Layout (new installations)\n\nNew installations follow the [XDG Base Directory Specification](https://specifications.freedesktop.org/basedir-spec/basedir-spec-latest.html):\n\n**Configuration** (`~/.config/aion/`):\n| File | Description |\n|------|-------------|\n| `config.toml` | User configuration (Google credentials, CalDAV accounts, theme) |\n| `contacts.json` | Optional manual contacts for name lookup |\n\n**Data** (`~/.local/share/aion/`):\n| File | Description |\n|------|-------------|\n| `aion.db` | SQLite database with all events |\n| `accounts.json` | OAuth tokens and account info |\n| `calendar-settings.json` | Calendar visibility preferences |\n| `account-settings.json` | Custom account names |\n| `sync-tokens.json` | Incremental sync tokens |\n| `logs/` | Application logs (daily rotation) |\n\nYou can override XDG paths with environment variables:\n- `XDG_CONFIG_HOME` (default: `~/.config`)\n- `XDG_DATA_HOME` (default: `~/.local/share`)\n\n---\n\n## Tech Stack\n\n| Component | Technology |\n|-----------|------------|\n| **Runtime** | [Bun](https://bun.sh) |\n| **UI Framework** | [Glyph](https://github.com/semos-labs/glyph) (React for terminals) |\n| **State Management** | [Jotai](https://jotai.org) |\n| **Database** | SQLite via [Drizzle ORM](https://orm.drizzle.team) |\n| **Date/Time** | [Luxon](https://moment.github.io/luxon) |\n| **NLP Dates** | [chrono-node](https://github.com/wanasit/chrono) |\n| **CalDAV** | [tsdav](https://github.com/natelindev/tsdav) + [ical.js](https://github.com/kewisch/ical.js) |\n| **Validation** | [Zod](https://zod.dev) |\n\n---\n\n## Roadmap\n\n### ✅ Completed\n\n- [x] Google Calendar sync (OAuth with PKCE)\n- [x] Multi-account support\n- [x] Multiple calendars per account\n- [x] Calendar toggle sidebar\n- [x] Meet With (free/busy scheduling)\n- [x] Google Meet link generation\n- [x] Natural language date input\n- [x] Timezone handling\n- [x] Background sync (30s interval)\n- [x] Accounts management dialog\n- [x] Recurring event creation/editing\n- [x] Search events by title/description\n- [x] Multi-column day view (1, 3, or 5 columns)\n- [x] Column navigation with h/l arrows\n- [x] Persistent view settings\n- [x] Command auto-fill (Ctrl+Y)\n- [x] Built-in credentials for distributed binaries\n- [x] Homebrew distribution\n- [x] XDG Base Directory support\n- [x] CalDAV support (iCloud, Fastmail, Nextcloud, Radicale, etc.)\n- [x] `password_command` for secure credential storage\n\n### 🚧 In Progress\n\n- [ ] Month view\n\n### 📋 Planned\n\n- [ ] Import/export (ICS)\n- [ ] Offline mode improvements\n- [ ] Custom notifications/reminders\n- [ ] Agenda view (list of upcoming events)\n- [ ] Event templates\n\n---\n\n## License\n\nMIT © 2025\n\n---\n\n\u003cp align=\"center\"\u003e\n  \u003csub\u003eBuilt with ⌨️ for terminal lovers\u003c/sub\u003e\n\u003c/p\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsemos-labs%2Faion","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsemos-labs%2Faion","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsemos-labs%2Faion/lists"}