A macOS application that generates Anki flashcards from the birthdays in your Apple Contacts. The app creates a tab-separated values (TSV) file that can be imported directly into Anki to help you remember your friends' and family's birthdays.
- Extracts birthday information from Apple Contacts
- Generates Anki-compatible flashcards in the format "When is [Name]'s birthday?" → "[Date]"
- Native macOS GUI with progress tracking
Download a .dmg from https://github.com/GabrielDougherty/bday-anki/releases and run it.
- Launch the application
- Click "Generate Cards" to create flashcards from your contacts
- The app will request permission to access your Contacts if needed
- Choose a location to save the output file (optional - defaults to Downloads)
- Import the generated TSV file into Anki:
- In Anki: File → Import
- Select the generated file
- Set field separator to "Tab"
- Import the cards
- macOS 11.0 or later
- Permission to access your Contacts (the app will prompt for this)
- Anki (for importing the generated cards)
- Install Zig 0.14.1 from ziglang.org
- Clone this repository
- Build the application:
zig build
- Run the application:
./zig-out/bin/bdays
- Install Nix with flakes support
- Clone this repository
- Enter the development environment:
The
nix develop --impure
--impure
flag is required to access macOS system frameworks. - Build the application:
zig build
- Run the application:
./zig-out/bin/bdays
Alternatively, you can build directly without entering the shell:
nix develop --impure -c zig build
To see detailed output during card generation, run with the --debug
flag:
./zig-out/bin/bdays --debug
To create a distributable DMG installer:
-
Ensure you have
create-dmg
installed:brew install create-dmg
-
Run the release script:
./release.sh
-
When prompted, enter the version number (e.g.,
1.2
,2.0
, etc.)
The script will:
- Update the app bundle's version information
- Build the latest code
- Copy the binary to the app bundle
- Create a DMG installer named
AnkiBirthdays-[VERSION].dmg
The application is built in Zig and uses:
- Objective-C runtime for macOS GUI integration
- Cocoa frameworks (Foundation, AppKit) for native UI
- AppleScript for accessing Contacts data
- Multi-threaded architecture with progress reporting
The codebase is modularized into:
main.zig
- Application entry point and shared statesrc/objc_helpers.zig
- Objective-C runtime utilitiessrc/ui_components.zig
- GUI component creationsrc/app_delegate.zig
- Application event handlingsrc/threading.zig
- Thread management and UI updatessrc/file_operations.zig
- File system operationssrc/anki_generator.zig
- Core card generation logic
See LICENSE.md for details.