JournivJourniv

Frequently Asked Questions

Answers to common questions about Journiv installation, features, security, and usage.

General Questions

What is Journiv?

Journiv is a self-hosted private journaling application that runs entirely on your own infrastructure. It features mood tracking, prompt-based journaling, media uploads, analytics, advanced search, and more—all while keeping your data completely private and under your control.

Is Journiv free?

Yes! Journiv is completely free and open source under the MIT license. There are no subscription fees, no premium tiers, and no vendor lock-in. You have complete freedom to use, modify, and distribute the software.

Is my data private?

Absolutely! All data is stored locally on your server. Journiv collects zero telemetry, no analytics, and has no external service dependencies. Your journal entries, moods, and media files never leave your infrastructure unless you explicitly export them.

Can I use Journiv offline?

Yes! Once installed, Journiv works completely offline. The Flutter web app (PWA) and mobile apps support full offline functionality with automatic synchronization when connectivity is restored.

What platforms does Journiv support?

Journiv runs on any platform that supports Docker:

  • Server: Linux, macOS, Windows (with WSL2)
  • Architecture: AMD64, ARM64, ARMv7 (including Raspberry Pi)
  • Cloud: AWS, Google Cloud, Azure, DigitalOcean, Hetzner, etc.
  • Home Lab: Raspberry Pi, Synology NAS, QNAP, TrueNAS, etc.

Installation

What are the system requirements?

Minimum Requirements:

  • Docker (recommended) or Python 3.9+
  • 512MB RAM (1GB+ recommended)
  • 1GB disk space (more for media files)
  • Network access for initial setup

Recommended for Production:

  • 2GB+ RAM
  • 10GB+ disk space
  • PostgreSQL for better performance with large datasets
  • Reverse proxy (nginx, Traefik, Caddy) for HTTPS

Can I use PostgreSQL instead of SQLite?

Yes! Journiv supports both SQLite (default, perfect for single users) and PostgreSQL (recommended for multiple users or large datasets). Set the DATABASE_URL environment variable to switch to PostgreSQL.

How do I update Journiv?

Docker Compose:

docker compose pull
docker compose up -d

Docker Run:

docker pull swalabtech/journiv-app:latest
docker stop journiv
docker rm journiv
# Run your docker run command again

Important: Always backup your data before updating. Database migrations run automatically on startup.

Can I run Journiv without Docker?

Yes! See the Manual Installation guide for running Journiv directly with Python. This is recommended for development or advanced users who need more control.

Features

Can I have multiple journals?

Yes! Create unlimited journals for different purposes—work, travel, personal growth, therapy, etc. Each journal can have custom colors, icons, and separate analytics.

Does Journiv support media uploads?

Yes! You can upload images (JPEG, PNG, GIF, WebP), videos (MP4, MOV, WebM), and audio files (MP3, WAV, M4A). Media files are stored locally and automatically generate thumbnails for quick browsing.

Can I search my entries?

Yes! Journiv has powerful full-text search across all entries, tags, and metadata. You can filter by date range, mood, journal, tags, and more. Search works offline in the mobile apps.

Does Journiv have mood tracking?

Yes! Log your mood with timestamps and optional notes. View beautiful visualizations of your mood patterns over time, track streaks, and identify emotional trends.

Can I export my data?

Yes! Journiv supports full data export including all journals, entries, media files, tags, and moods. Exports are provided as ZIP archives that can be imported into another Journiv instance or used for backups.

Does Journiv support OIDC/SSO?

Yes! Journiv supports OpenID Connect (OIDC) for Single Sign-On. You can integrate with identity providers like Keycloak, Authentik, Pocket ID, and others. See the Configuration guide for setup instructions.

Mobile Apps

Are there mobile apps?

Yes! Journiv has native Flutter apps for iOS and Android with full offline support, automatic sync, and all features available in the web app.

How do I connect the mobile app to my server?

During login or registration, enter your server URL (e.g., https://journiv.example.com or http://192.168.1.1:8000). The app will validate connectivity and save your server URL for future sessions.

Does the mobile app work offline?

Yes! The mobile apps support full offline functionality. Entries, moods, and media are cached locally and automatically synchronized when connectivity is restored.

Security

How secure is Journiv?

Journiv uses industry-standard security practices:

  • JWT Authentication: Secure token-based authentication with automatic refresh
  • Password Hashing: Argon2id for password storage
  • HTTPS Support: Works behind reverse proxies with SSL/TLS
  • OIDC/SSO: Optional integration with enterprise identity providers
  • Input Validation: Comprehensive sanitization and validation
  • Rate Limiting: Protection against brute force attacks

Can I disable signups?

Yes! Set DISABLE_SIGNUP=true in your environment variables to prevent new user registration. This is useful for private instances or when using OIDC exclusively.

How do I secure my instance?

Best Practices:

  1. Use HTTPS with a reverse proxy (nginx, Traefik, Caddy)
  2. Set a strong SECRET_KEY (generate with openssl rand -base64 32)
  3. Use PostgreSQL with strong passwords
  4. Enable DISABLE_SIGNUP if not needed
  5. Configure firewall rules to restrict access
  6. Keep Journiv updated to the latest version
  7. Regular backups of your data directory

Does Journiv support two-factor authentication (2FA)?

Currently, Journiv relies on OIDC/SSO providers for 2FA. If your identity provider supports 2FA (most do), you can enable it there. Native 2FA support is planned for future releases.

Troubleshooting

The container won't start

Check the logs:

docker logs journiv

Common issues:

  • Missing SECRET_KEY or DOMAIN_NAME environment variables
  • Port 8000 already in use (change the host port mapping)
  • Database connection issues (check DATABASE_URL)
  • Permission issues with the /data volume

I forgot my password

If you're using local authentication:

  1. Create a new account (if signups are enabled)
  2. Or reset via database access (see backend documentation)

If using OIDC, reset your password with your identity provider.

Media files aren't uploading

Check:

  • File size limits (MAX_FILE_SIZE_MB environment variable, default 50MB)
  • Media directory permissions (/data/media must be writable)
  • Available disk space
  • Supported file types (images: JPEG, PNG, GIF, WebP; videos: MP4, MOV, WebM; audio: MP3, WAV, M4A)

Search is slow

For large datasets:

  • Switch to PostgreSQL for better performance
  • Ensure database indexes are created (run migrations)
  • Consider archiving old entries

Can't connect mobile app to server

Verify:

  • Server URL is correct (include http:// or https://)
  • Server is accessible from your device's network
  • Firewall allows connections on port 8000 (or your configured port)
  • CORS is enabled if accessing from a different domain (ENABLE_CORS=true)

Backup & Restore

How do I backup my data?

Docker Compose:

docker compose exec journiv tar czf /data/backup-$(date +%Y%m%d).tar.gz /data
docker compose cp journiv:/data/backup-YYYYMMDD.tar.gz ./backup.tar.gz

Docker Run:

docker exec journiv tar czf /data/backup-$(date +%Y%m%d).tar.gz /data
docker cp journiv:/data/backup-YYYYMMDD.tar.gz ./backup.tar.gz

Or use the export feature in the web UI or API for a portable backup.

How do I restore from backup?

Extract the backup to the /data volume and restart the container. Ensure database migrations are up to date.

Support

Where can I get help?

How do I report a bug?

Open an issue on GitHub with:

  • Description of the issue
  • Steps to reproduce
  • Expected vs actual behavior
  • Logs (if applicable)
  • Your environment (Docker version, OS, etc.)

Can I contribute?

Absolutely! Contributions are welcome. See CONTRIBUTING.md for guidelines. We welcome:

  • Bug fixes
  • Feature additions
  • Documentation improvements
  • Translations
  • Testing and feedback