Skip to main content

A cross-platform to-do list manager with encrypted peer-to-peer synchronization

Project description

pytodo-qt

CI Python 3.11+ License: GPL v3 Ruff Code style: black

A cross-platform to-do list manager with encrypted peer-to-peer synchronization.

Features

  • Multiple lists - Organize tasks into separate lists
  • Priority levels - High, normal, and low priority with color coding
  • Encrypted sync - AES-256-GCM encryption with Ed25519 key exchange
  • Auto-discovery - Find other instances on your network via mDNS/Zeroconf
  • Dark/light themes - System-following or manual theme selection
  • Cross-platform - Linux, macOS, and Windows support

Requirements

  • Python 3.11 or later
  • PyQt6

Installation

Pre-built Binaries

Download the latest release for your platform from the Releases page.

macOS

  1. Download pytodo-qt-VERSION-macos-arm64.zip (Apple Silicon) or pytodo-qt-VERSION-macos-x86_64.zip (Intel)
  2. Extract the zip file
  3. Move pytodo-qt.app to /Applications or ~/Applications
  4. First run only: Right-click the app and select "Open" to bypass Gatekeeper
    • Alternatively, run: xattr -rd com.apple.quarantine /Applications/pytodo-qt.app
  5. After the first run, you can open normally by double-clicking

Note: The app is ad-hoc signed (not notarized with an Apple Developer ID), so macOS will show an "unidentified developer" warning on first launch. This is normal for open-source software distributed outside the App Store.

Linux

  1. Download pytodo-qt-VERSION-linux-x86_64.tar.gz or pytodo-qt-VERSION-linux-arm64.tar.gz
  2. Extract: tar -xzf pytodo-qt-VERSION-linux-*.tar.gz
  3. Run the install script: cd pytodo-qt-*/ && ./install.sh
  4. Or run directly: ./pytodo-qt

The install script places the binary in ~/.local/bin/ and creates a desktop entry.

To uninstall: ~/.local/lib/pytodo-qt/uninstall.sh (or run ./uninstall.sh from the extracted archive)

Windows

  1. Download pytodo-qt-VERSION-windows-x86_64.zip
  2. Extract the zip file
  3. Run pytodo-qt.exe

From PyPI

pipx install pytodo-qt    # recommended
pip install pytodo-qt     # alternative

From source

git clone https://github.com/berrym/pytodo-qt.git
cd pytodo-qt
pip install .

Development install

pip install -e ".[dev]"

Usage

pytodo-qt

Command-line options

Server Options:
  -s, --server {yes,no}    enable/disable network server
  --pull {yes,no}          allow remote pull requests
  --push {yes,no}          allow remote push requests
  -i, --ip IP              server bind address
  -p, --port PORT          server port

Discovery Options:
  -d, --discovery {yes,no} enable/disable mDNS discovery

Appearance Options:
  -t, --theme {light,dark,system}

Configuration

Configuration is stored in XDG-compliant locations:

Platform Config Data
Linux ~/.config/pytodo-qt/ ~/.local/share/pytodo-qt/
macOS ~/Library/Application Support/pytodo-qt/ same
Windows %APPDATA%\pytodo-qt\ same

config.toml

[database]
active_list = ""
sort_key = "priority"
reverse_sort = false

[server]
enabled = true
address = "0.0.0.0"
port = 5364
allow_pull = true
allow_push = true

[discovery]
enabled = true
service_name = ""  # defaults to pytodo-{hostname}

[appearance]
theme = "system"  # light, dark, system

Synchronization

pytodo-qt uses a secure peer-to-peer protocol for syncing between instances:

  1. Discovery - Instances advertise themselves via mDNS (_pytodo._tcp.local.)
  2. Key exchange - Ed25519 identity keys with X25519 ephemeral session keys
  3. Encryption - All data encrypted with AES-256-GCM
  4. Merge - Last-write-wins conflict resolution with UUID-based items

Identity keys are stored in your system keyring (GNOME Keyring, macOS Keychain, Windows Credential Locker).

Development

# Install dev dependencies
pip install -e ".[dev]"

# Run tests
pytest

# Lint and format
ruff check src/ tests/
ruff format src/ tests/

# Type check
basedpyright src/

License

GPLv3 or later. See COPYING for details.

Copyright 2024 Michael Berry trismegustis@gmail.com

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

pytodo_qt-0.3.7.tar.gz (939.5 kB view details)

Uploaded Source

Built Distribution

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

pytodo_qt-0.3.7-py3-none-any.whl (943.3 kB view details)

Uploaded Python 3

File details

Details for the file pytodo_qt-0.3.7.tar.gz.

File metadata

  • Download URL: pytodo_qt-0.3.7.tar.gz
  • Upload date:
  • Size: 939.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for pytodo_qt-0.3.7.tar.gz
Algorithm Hash digest
SHA256 98f9ab30a84d4f1aed44e54d3bcba43a4626c1315aaa57393ed2c28e4bdbac09
MD5 02962ebf4a67f521c4facf64ff27a2fa
BLAKE2b-256 f5e7ba4334d4379ed3abe265a64ced81475b9fe6f2c475179cd8d9f8355fb6ba

See more details on using hashes here.

Provenance

The following attestation bundles were made for pytodo_qt-0.3.7.tar.gz:

Publisher: publish.yml on berrym/pytodo-qt

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pytodo_qt-0.3.7-py3-none-any.whl.

File metadata

  • Download URL: pytodo_qt-0.3.7-py3-none-any.whl
  • Upload date:
  • Size: 943.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for pytodo_qt-0.3.7-py3-none-any.whl
Algorithm Hash digest
SHA256 a69bdaa83a0efab69deaf19a0d8dbbc1f692a43b3a6f5778ccf6a09f6a3a60e6
MD5 c3c3b4a25f5b1a567ae4191424702c56
BLAKE2b-256 a4ea06ae4af8f7e10e18fd420c2c8b7e58a6dc58b5e04d9b53dacea7cf5293f4

See more details on using hashes here.

Provenance

The following attestation bundles were made for pytodo_qt-0.3.7-py3-none-any.whl:

Publisher: publish.yml on berrym/pytodo-qt

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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