Killendar Coming soon
Technical

What the file is, where it lives, and what the encryption actually covers.

The file

One .kcal file is one Killendar. It is an ordinary SQLite database, opened and written in place, so you can read it with any SQLite tool without going through the app. There is no proprietary container and no index to rebuild.

filewhat it is for
.kcalA Killendar. The live database, written in place.
.icsInterchange only. Import and export.

Killendars live in %APPDATA%\Killendar, per user, always. A machine-wide install makes the app available to everyone on the box; each Windows account still gets its own Killendar. Nothing is written outside your profile.

What is inside it

  • events - one row per appointment.
  • categories - the color definitions. They live in the Killendar rather than in settings, so they travel with the file when you move or share it.
  • meta - schema version and the app version that created the file, for forensics on a file that turns up years later.

Time

Timed appointments are stored in UTC and converted at the edges, so a calendar carried to another timezone still says the right thing.

All-day entries are the exception, and deliberately so: they are floating calendar dates, stored unconverted with no Z. Converting them to UTC would slide an all-day appointment to the previous day for everyone east of UTC.

what you enteredwhat is on disk
14:00 local, in PDT2026-08-03T21:00:00.0000000Z
All-day, Sep 72026-09-07T00:00:00.0000000 - no Z, unconverted

Encryption

Encryption is opt-in. With no password the file is plain SQLite. Set one from the lock button in the title bar and the whole file is encrypted at rest with SQLCipher.

propertyvalue
CipherAES-256 in CBC mode
IntegrityPer-page HMAC-SHA512
Key derivationSQLCipher's own PBKDF2, not a hand-rolled one
Unit of lockingOne password per Killendar - the file

The same button changes the password, or removes it and writes the file back out as plain SQLite. An encrypted Killendar asks for its password on launch; a wrong one just asks again.

There is no password recovery

The app says so before you commit to one. If a password is lost the locked Killendar is renamed aside and kept on disk rather than destroyed, and a new empty one opens in its place - so a forgotten password costs you access, not the file.

What the encryption does not protect

Worth stating plainly rather than implying otherwise:

  • Nothing is protected while the app is open and unlocked.
  • It is no defense against a keylogger, a memory dump, or someone who has your password.
  • settings.json stays plaintext. It holds the theme, locale, window position and which Killendar is active.
  • An .ics export is plain text by definition. Exporting from an encrypted Killendar writes an unencrypted copy, and the app warns you at the moment of export rather than after.

iCalendar

Import and export are written against RFC 5545 directly, with no external dependencies. Import skips appointments already in the calendar and reports how many were added and how many were skipped.

Categories travel through both, using the standard CATEGORIES property, so they survive a trip through another calendar app. A category you import but have never defined shows in neutral gray rather than being dropped or silently created - deleting a category is meant to stick, and an import should not quietly undo that.

Keyboard

Almost everything is a single key, no modifier. That is only safe because of one rule: a bare-letter shortcut never fires while you are typing. The moment focus is in a text field every single-key binding stands down, so a w in a title is a w and not a jump to week view. The modified combinations are checked first and work regardless, because they cannot collide with typing.

Hold Ctrl to preview that layer - hover a lit key for its action
 

VIEWS

M or 1Month view
W or 2Week view
D or 3Day view
A or 4Agenda view

NAVIGATION

← / →Previous / next month, week or day - whichever view is open
, / .Same as the arrows, without leaving the home row
TJump to today

APPOINTMENTS

N / Ctrl+NNew appointment on the day you are looking at
BOpen the appointment panel composing a new one, or close it

FILE

Ctrl+IImport an .ics file
Ctrl+EExport to .ics

HELP

F1The shortcuts overlay, with this same map and list in the app
F12About card - version, signature, exe hash, update check
EscClose whichever card or panel is open. Works even mid-typing, because bailing out of a half-filled form is exactly when you reach for it.

Running it

requirementdetail
PlatformWindows 10 / 11, x64
Runtime.NET Framework 4.8, already present on a current Windows
InstallPortable, per-user, or all-users. A silent path exists for winget, Chocolatey and RMM deployment.
UninstallLeaves your appointments in place and removes the file association it added.

Only one instance runs at a time. A second launch hands its file to the window already open and exits, rather than leaving two copies of the app writing to one database - which is the quickest way to corrupt SQLite.

Double-clicking a .kcal copies it into your data folder and opens the copy, leaving the original where it is. A Killendar is written to constantly, and SQLite over a network share is a well known way to lose a database.

Signing

Releases are Authenticode signed. The About card shows the publisher, the certificate thumbprint and the SHA-256 of the running exe, and it validates the signature with WinVerifyTrust rather than merely reading the embedded certificate - so a tampered build cannot display a signer it does not own. The chain check is cache-only, so opening About never stalls waiting on the network.

Glossary

termwhat it means here
KillendarBoth the app and one calendar file. "Open another Killendar" means switch to a different .kcal.
.kcalKillendar's file. A SQLite database holding your appointments and your category definitions, encrypted or not.
.icsiCalendar, the interchange format every other calendar reads. Import and export only - Killendar never runs from one.
CategoryA named color you define. An appointment can carry several; the first one paints it. Definitions live in the file, so they travel with it.
Orphan categoryA category on an appointment that this Killendar has no definition for, usually from an import. It shows in neutral gray rather than disappearing.
All-dayAn appointment with no time, held as a floating date. It never shifts with a timezone.
Floating dateA date with no timezone attached. September 7th is September 7th wherever you open it.
SQLCipherThe extension to SQLite that encrypts the whole database file at rest, page by page.
At restEncrypted on disk. It says nothing about the app while it is open and unlocked, which is why that limit is spelled out above.
PortableRunning the exe from wherever it sits, with no install. The footer says PORTABLE and offers to install it.
Per-user installInto your own profile. No administrator needed, and only your account gets it.
All-users installInto Program Files. Needs an administrator, and every account on the machine gets the app - though each still gets its own separate Killendar.
AuthenticodeMicrosoft's code signing. It proves the exe came from the signer and has not been altered since.
AccentThe highlight color of a theme. Dark, Light and Black each offer six; Blood, Greed and Cyanotic carry their own.