A desktop contact management application written in Python using PyQt5 and SQLite.
Connections allows you to organize contacts into multiple independent tables (groups), search across them, combine multiple datasets, and import contacts directly from Google Contacts CSV exports.
- Multiple contact tables
- SQLite database backend
- Contact photos
- Local image support
- Automatic download and caching of remote image URLs
- Google Contacts CSV import
- Custom CSV field mapping
- Search contacts by
- Name
- Relationship
- Combine multiple tables into a single view
- Contact metadata
- Creation timestamp
- Last modified timestamp
- Responsive PyQt5 GUI
- Cross-platform database storage
Each contact can store:
- Name
- Phone number
- Signal
- Telegram
- Photo
- Relationship
- Notes
The application contains several windows:
- Create new tables
- View existing tables
- Delete tables
- Open tables
- Search across tables
- Combine tables
- View contacts
- Add contacts
- Edit contacts
- Delete contacts
- Import Google Contacts
Search across one or more tables by:
- Name
- Relationship
Merge multiple tables into a single read-only result list while preserving the original source table.
Connections can import CSV files exported from Google Contacts.
Features:
- Automatic field mapping suggestions
- Manual field mapping
- Skips empty contacts
- Downloads remote profile pictures automatically
- Stores photos locally
Supported fields include:
- Given Name
- Family Name
- Phone
- Notes
- Group Membership
- Photo URL
SQLite is used as the local database.
The application automatically creates:
- metadata table
- contact tables
- missing columns during upgrades
Each contact stores:
- created_at
- last_modified
project/
│
├── frontend.py
├── backend.py
├── global-network.ico
└── global-network.icns
The application stores its data inside the user's application data directory.
%LOCALAPPDATA%\connections-app\
~/.local/share/connections-app/
Stored data includes:
- SQLite database
- downloaded profile photos
- Python 3.10+
- PyQt5
Install dependencies:
pip install requirements.txtpython frontend.pyPyQt5 GUI
│
▼
backend.py
│
▼
SQLite Database
│
├── Tables metadata
├── Contact tables
└── Cached photos
The application supports searching across multiple selected tables.
Current search modes:
- Name
- Relationship
Table names are validated before use.
The backend prevents invalid SQL table names by:
- validating identifiers
- rejecting SQL keywords
- using parameterized queries wherever applicable
- Tags
- Birthday support
- vCard import/export
- Duplicate detection
- Full-text search
- Dark mode
- Automatic backups
- Encrypted database
- Google Contacts API synchronization