Skip to content

jaganganesh/pineapple-cloud

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🍍 Pineapple Cloud

Stars Forks License: GPL v3 Last Commit Sponsor

The minimalist, ultra-lightweight, self-hosted privacy alternative to iCloud.

Pineapple Cloud

pineapple-cloud unifies your native macOS & iOS Apps (Contacts, Calendar, Reminders, and Notes) into a single, highly efficient Docker stack running completely on your local network.

Unlike heavy groupware solutions like Nextcloud, which demand over 1GB of RAM and put a heavy load on budget systems, pineapple-cloud runs under 100MB of idle RAM. It is optimized to keep mini-servers, Raspberry Pis, and budget NAS units (like the Synology J-series) running cool and responsive.

🚀 Why pineapple-cloud?

Apple's native device ecosystem splits accounts across two entirely distinct sync protocols:

  1. CalDAV & CardDAV: Controls native Calendar timelines, Reminders checklists, and Contact cards.
  2. IMAP (Mail Server Storage): Operates quietly behind the scenes to sync Apple Notes.

pineapple-cloud bridges this gap inside an isolated Docker network by pairing a local IMAP Mailserver Container with the streamlined Radicale DAV Engine. No bloated databases or heavy web UI dashboards—just clean, protocol-native syncing.

✨ Features & Ecosystem Benefits

  • 📝 Native Apple Notes Sync: Handled natively via local IMAP. No public mail routing or domain MX records required.
  • 🗓️ Native Apple Calendar & Reminders: Managed directly by Radicale's lightning-fast CalDAV engine.
  • 👤 Native Apple Contacts: Instant address book populating via CardDAV.
  • 🪶 Low-Resource Engineering: Under 100MB RAM usage. Minimizes hard drive swap-writes, making it highly safe during sudden power interruptions.
  • 📦 Fully Portable Volume Layout: Relative pathing structures (./data) let you migrate your entire setup between hosts instantly.

🛠️ Complete Installation Blueprint

1. Initialize Your Directory Structure

Open your terminal and create the configuration tree:

mkdir -p pineapple-cloud/data/mail-data pineapple-cloud/data/mail-config pineapple-cloud/data/radicale-data pineapple-cloud/data/radicale-config pineapple-cloud/data/radicale-certs
cd pineapple-cloud

2. Configure Your Docker Compose Environment

Create a file named docker-compose.yml and add the verified container service definition layer:

services:
  # IMAP Server - Apple Notes
  imap-server:
    image: mailserver/docker-mailserver:latest
    container_name: apple-imap
    ports:
      - "143:143"
    environment:
      OVERRIDE_HOSTNAME: pineapple.cloud
      ENABLE_POP3: "0"
      ENABLE_SMTP: "0"
      ENABLE_SPAMASSASSIN: "0"
      ENABLE_CLAMAV: "0"
      ENABLE_FAIL2BAN: "0"
      ONE_DIR: "1"
    cap_add:
      - NET_ADMIN
    volumes:
      - ./data/mail-data:/var/mail
      - ./data/mail-config:/tmp/docker-mailserver
    restart: unless-stopped

  # DAV Server - Apple Contacts, Calendar and Reminders
  radicale:
    image: tomsquest/docker-radicale:latest
    container_name: apple-dav
    ports:
      - "5232:5232"
    volumes:
      - ./data/radicale-data:/data
      - ./data/radicale-config:/config:ro
      - ./data/radicale-certs:/certs:ro
    restart: unless-stopped

3. Spin Up the Containers

Launch the core architecture in detached background mode:

docker compose up -d

4. Provisioning the Apple Notes IMAP Mailbox

To add your account, drop into the running container's bash shell and use the internal interactive account provisioning script:

Step A: Access the container shell:

docker exec -it apple-imap /bin/bash

Step B: Inside the container prompt, execute the setup script with your chosen identity details and password:

setup email add your_name@pineapple.cloud
your_secure_password

Type exit to return to your host terminal when completed.

🔐 SSL/TLS Certificate Setup Guide

By default, Apple devices prefer encrypted connections. You have two options to manage your setup:

Option A: Using Self-Signed Certificates (Secure & Recommended)

To prevent clear-text transfer warnings, generate local self-signed SSL certificates using OpenSSL:

openssl req -x509 -newkey rsa:4096 -keyout ./data/radicale-certs/server.key -out ./data/radicale-certs/server.cert -sha256 -days 3650 -nodes -subj "/CN=127.0.0.1"

Once generated, double-click the server.cert file on your Mac to open Keychain Access, locate the certificate, and change its properties to "Always Trust".

Option B: Using Unencrypted HTTP/Plain text

If you run pineapple-cloud strictly on 127.0.0.1 (localhost) or an isolated home router subnet without setting up SSL, macOS will flag the plain-text traffic. When connecting, you must confirm the warning exceptions manually.

🖥️ macOS Internet Accounts Configuration Guide

Open System Settings ➔ Internet Accounts on your Mac and bind each native service step-by-step using your screenshots as references:

1. Connecting Contacts (CardDAV Layer)

  • Navigate to Add Account... ➔ Add Other Account... ➔ CardDAV Account.
  • Change the Account Type selector from Automatic to Manual.
  • User Name: Your Radicale username.
  • Server Address: 127.0.0.1 (or your mini-server network IP).
  • Server Path: / | Port: 5232
  • Note: Uncheck Use SSL if accessing via HTTP. Check it if you generated local keys.

CardDAV - Apple Contacts

2. Connecting Calendars & Reminders (CalDAV Layer)

  • Navigate to Add Account... ➔ Add Other Account... ➔ CalDAV Account.
  • Change the Account Type selector to Manual.
  • Input your username and password database configurations as shown:

CalDAV - Apple Calendar and Reminders

3. Connecting Apple Notes (IMAP Layer)

  • Navigate to Add Account... ➔ Add Other Account... ➔ Mail Account.
  • Use your configured full email domain address (e.g., your_name@pineapple.cloud).
  • When the "Unable to verify" prompt displays, pass the local loopback server IPs:
    • Incoming Mail Server: 127.0.0.1
    • Outgoing Mail Server (SMTP): 127.0.0.1
  • Finalize the profile layer by unchecking Mail and exclusively checking Notes.

IMAP - Apple Notes

⚠️ Known Apple Ecosystem Limitations (IMAP Restrictions)

Because Apple strips rich canvas properties when a note is stored over open IMAP protocols rather than inside iCloud core servers, the following features will be modified:

  • 🚫 Detailed font-size selectors and custom heading typography templates are disabled.
  • 🚫 Native interactive checkbox bubbles, vector sketches, and inline database tables are restricted.
  • 💡 Pro-Tip: Utilize traditional typography elements like Bold (Cmd+B), Italics (Cmd+I), or standard hyphens/asterisks (* ) to create clean, readable lists that render perfectly into plain text HTML folders.

🤝 Contributing & Star Support

Have improvements or configuration profiles to share?

  1. Fork the codebase.
  2. Cut an active development branch (git checkout -b feature/AmazingFeature).
  3. Commit your adjustments (git commit -m 'feat: optimize connection handling').
  4. Push to your branch and open a Pull Request targeting our develop tracking branch.

If this project helped you reclaim ownership of your personal data, drop a ⭐ to help other Apple power-users discover us!

⚖️ License

pineapple-cloud is open-source software distributed under the terms of the GNU GPLv3 (or later) license.

About

Minimalist self-hosted iCloud alternative for Apple users. Sync macOS & iOS Calendars, Contacts, Reminders, and Notes with an ultra-lightweight Docker stack built for Raspberry Pi, NAS, and privacy-first setups.

Topics

Resources

License

Stars

Watchers

Forks

Contributors