"What words would you leave behind?"
Aeterna is a dead man's switch. You write messages. You check in regularly. If you stop checking in, your messages are delivered.
It's that simple. And that important.
Aeterna holds these words. It watches. It waits. And when the time comes, it delivers.
- Email Delivery: Automatic delivery of your messages and files to your loved ones if you fail to check in.
- Webhook Integration: Trigger external services (home automation, custom scripts, etc.) when your switch is activated.
- File Attachments: Securely attach sensitive documents, photos, or instructions to your switches.
- Auto-Cleanup: Attachments are automatically deleted from the server immediately after delivery for maximum privacy.
- One-Click Install: Comprehensive installation wizard.
- Heartbeat System: Simple check-in mechanism via web UI or a quick-link from your email.
- Privacy-Focused Architecture: Messages and attachments are encrypted at rest (AES-256-GCM) on your private server, ensuring they are only decrypted at the moment of delivery.
git clone https://github.com/alpyxn/aeterna.git
cd aeterna
./install.shIf you prefer not to use the installation script, you can install Aeterna manually using Docker Compose:
-
Clone the repository:
git clone https://github.com/alpyxn/aeterna.git cd aeterna -
Generate encryption key:
mkdir -p secrets openssl rand -base64 32 | tr -d '\n' > secrets/encryption_key chmod 600 secrets/encryption_key
-
Configure environment: Create a
.envfile based on your environment.cp .env.production.example .env # Edit .env and configure your DOMAIN, etc. nano .env -
Start the services: For production (requires existing Nginx setup or handles its own via
docker-compose.nginx.yml):docker compose -f docker-compose.nginx.yml up -d
For testing/development (no SSL):
docker compose -f docker-compose.simple.yml up -d
During installation, you will be prompted to choose a mode:
-
Production (Nginx + SSL) - Recommended
- Automatic HTTPS with Let's Encrypt
- Nginx reverse proxy
- Secure headers and configuration
-
Development (Simple) - Not Recommended for Production
- Runs directly on port 5000 (IP address only)
- No encryption/SSL - insecure for sensitive data
- Useful only for local testing or development
The install.sh script includes management commands:
| Command | Description |
|---|---|
./install.sh --update |
Update to the latest version |
./install.sh --backup |
Create a full backup of data and config |
./install.sh --status |
Check service health and status |
./install.sh --uninstall |
Remove containers and installation |
The installer guides you through basic configuration:
- Domain: Your domain name (required for SSL)
- Encryption: Automatically generates a unique AES-256 key
SMTP Settings (required for sending emails) are configured post-installation through the application's Settings menu. This allows for live testing and easier management.
Aeterna handles security automatically:
- Encryption: Messages and file attachments are encrypted at rest using AES-256-GCM.
- Key Management: The encryption key is generated securely and stored in
secrets/encryption_key. It is never exposed in environment variables or configuration files. - Data Pruning: File attachments are permanently deleted from the disk after successful delivery to the recipient.
- SSL: Automatic certificate management via Let's Encrypt (in Production mode).
backend/ Go API server
frontend/ React application
Both containerized. SQLite for storage (single file database). nginx for reverse proxy and SSL.
GPL-3.0
Named for the Latin word meaning "eternal" — because some messages are meant to outlast us.