Skip to main content

A command-line utility for displaying and managing birthdays from JSON- or vCard-based contacts.

Project description

birthdays

birthdays GIF demo

PyPI Version PyPI Python version PyPI downloads License Ruff

birthdays is a robust Python command-line tool designed to conveniently manage, track, and celebrate your contacts' birthdays.

Features

  • Customizable Sorting: List birthdays exactly how you want to see them (by upcoming, recent, age, name, or date)
  • CRUD Operations: Easily add, edit, and delete entries. The deletion and edit commands feature a convenient fuzzy search so you don't have to type out exact names
  • Smart Imports: Import contacts directly from .vcf vCard files or JSON databases
  • Interactive Merging: During imports, the CLI intelligently detects duplicates or data collisions and prompts you to safely merge them
  • Leapling Support: Configure how leap year birthdays (February 29th) are handled in non-leap years, choosing to celebrate either the day before or the day after
  • Festive UI: Every date is assigned a unique, deterministic emoji to keep the terminal vibe bright and colorful

Requirements

  • Python 3.11+

Installation

Install the package from PyPI using your favorite package management tool such as pip, pipx, or uv:

pip install birthdays-cli

Or install the latest version from source:

git clone https://github.com/l1asis/birthdays.git
cd birthdays
pip install .

Usage

birthdays uses simple subcommands to organize different operations. You can append --help to any command to see its available arguments.

Listing Birthdays

[!NOTE] By default, this sorts by upcoming birthdays in descending order so the most immediate celebrations are right at your cursor.

birthdays list

Options:

  • --sort: Choose from name, date, upcoming, recent, or age.
  • --order: Choose asc or desc.
  • -f, --file: Temporarily read and display birthdays directly from a .vcf or .json file without modifying your local database.

Adding an Entry

[!NOTE] The date can be formatted as YYYY-MM-DD, or simply MM-DD if the year is unknown.

birthdays add "John Doe" 1990-05-14 --note "Loves chocolate cake"

Editing an Entry

[!NOTE] You can use either the name or UUID. You only need to pass the flags for the specific data you want to change.

birthdays edit "John Doe" --date 1991-05-14

Deleting an Entry

[!TIP] The CLI uses fuzzy matching, so typing a partial name usually works! Append -y to skip the confirmation prompt.

birthdays delete "John Doe"

Importing Contacts

[!TIP] The interactive prompt will guide you through any data collisions. Append -y to automatically skip these prompts and blindly merge safe entries.

birthdays import ./contacts.vcf

Contributing

Contributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are greatly appreciated.

  1. Fork the Project
  2. Create your Feature Branch (git checkout -b feat/amazing-feature)
  3. Commit your Changes (git commit -m 'feat: ✨ add some amazing-feature')
  4. Push to the Branch (git push origin feat/amazing-feature)
  5. Open a Pull Request

License

Distributed under the MIT License. See LICENSE for more information.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

birthdays_cli-0.1.0.tar.gz (2.3 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

birthdays_cli-0.1.0-py3-none-any.whl (15.2 kB view details)

Uploaded Python 3

File details

Details for the file birthdays_cli-0.1.0.tar.gz.

File metadata

  • Download URL: birthdays_cli-0.1.0.tar.gz
  • Upload date:
  • Size: 2.3 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.6

File hashes

Hashes for birthdays_cli-0.1.0.tar.gz
Algorithm Hash digest
SHA256 26433c574c16dc50d4c70151f2bbd80adc5b16780c140bf84919b47049cb74f3
MD5 6b0e0e7d97717d9b08dc068a0cbb8ab8
BLAKE2b-256 ccb8a145759e99cd7aa8f29b9eb8e2f2e6d5a612fb3daae6b37172b6dcd2cd35

See more details on using hashes here.

File details

Details for the file birthdays_cli-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: birthdays_cli-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 15.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.6

File hashes

Hashes for birthdays_cli-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 9fcbac187f3561413e622705a741f0e68938b20226b03b633f087e06f96445b2
MD5 0488cc89104e66bae7fe74cd9e0e6ae5
BLAKE2b-256 091f2c65158dba96d2b1ec173973a569ce1408accdab117f5c3b90b1694db6bc

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page