Self-hosted contacts and household manager with Excel sync and PDF label generation
126
A lightweight, self-hosted contacts and household manager with Excel synchronization and configurable PDF label generation.
Contacts is built with Go, Htmx and SQLite. It is intended for small-scale or single-user contact management.
Contacts currently has no built-in authentication.
Do not expose port 8080 directly to the public internet. Run the application only on a trusted local network or place it behind a reverse proxy that provides authentication and HTTPS.
Create a directory for Contacts and add the following compose.yaml file:
services:
contacts:
image: paulpeeters/contacts:latest
container_name: contacts
restart: unless-stopped
ports:
- "8080:8080"
environment:
TZ: Europe/Brussels
volumes:
- ./data:/app/data
Start the container:
docker compose up -d
Open the application in your browser:
http://localhost:8080
To use another host port, change only the left-hand side of the port mapping. For example:
ports:
- "9090:8080"
The application will then be available at:
http://localhost:9090
The same container can be started without Docker Compose:
docker run -d \
--name contacts \
--restart unless-stopped \
-p 8080:8080 \
-e TZ=Europe/Brussels \
-v contacts-data:/app/data \
paulpeeters/contacts:latest
The container stores its persistent files in:
/app/data
This directory contains files such as:
contacts.db — SQLite databaseappsettings.json — application settingscontacts.log — application logAlways mount /app/data as a bind mount or named volume. Removing the container without persistent storage will otherwise remove the application data with it.
| Setting | Default | Description |
|---|---|---|
TZ | Europe/Brussels | Time zone used for logging and backup filenames |
CONTACTS_LISTEN_HOST | 0.0.0.0 | Address on which the application listens inside the container |
The default container port is 8080.
The currently published image is built for:
linux/amd64
Contacts is licensed under the GNU Affero General Public License v3.0 only (AGPL-3.0-only).
Copyright © 2026 Paul Peeters.
The complete source code is available on GitHub.
Third-party libraries and components included in the application remain subject to their respective licenses.
Content type
Image
Digest
sha256:60b88e0dd…
Size
7.1 MB
Last updated
3 months ago
docker pull paulpeeters/contacts