About this project
Fold is a self-hosted todo application that works with any spec-compliant CalDAV server. Built as personal software, it stores all tasks as ordinary VTODO properties that remain readable by other CalDAV clients, ensuring data portability and longevity.
Key features include a natural-language quick add parser—typing something like "Clean the gutters tomorrow at 3pm #chores p1" automatically extracts due date, time, list, and priority into a single enter press. Views such as Today, Tomorrow, Next 7 days, Summary, and Search aggregate across every list. The app recognizes special list names: Health tasks appear at the top of every view, while Groceries collapse into a single row since the question is whether shopping happened, not how many items were listed.
Offline operation is supported through local change queuing that replays when connectivity returns. The application is keyboard-first and installable as a PWA on phones. No notifications, streaks, or nagging are included.
There is no user database or session store. On sign-in, CalDAV credentials are verified against the server and encrypted with AES-256-GCM into an HttpOnly cookie stored in the browser. JavaScript cannot read the cookie. Each subsequent request unseals the credentials in server memory for the CalDAV round trip, then discards them immediately. Restarting the container loses nothing because nothing is persisted server-side.
Deployment uses Docker with a single required environment variable, SESSION_SECRET, which encrypts the credential cookie. A reverse proxy with TLS is recommended since the cookie carries sensitive credentials. An ALLOW_INSECURE_COOKIE option exists for trusted LANs without TLS. CALDAV_ALLOWED_HOSTS can restrict which CalDAV servers the login form accepts, protecting public-facing instances.
Fold deliberately does not support sub-tasks, recurring todos, background sync, or multiple accounts. Existing RRULE properties are preserved but never created or edited by the app. One CalDAV account is active at a time.
The project is MIT licensed. Development uses Bun, with type-checked testing layers including unit tests against Vitest, integration tests against a real Radicale server, and Playwright e2e tests. Full specifications and architecture decisions are documented in the repo's docs directory.
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.