{"id":50342876,"url":"https://github.com/jaganganesh/pineapple-cloud","last_synced_at":"2026-05-29T18:01:33.718Z","repository":{"id":361101910,"uuid":"1245731875","full_name":"jaganganesh/pineapple-cloud","owner":"jaganganesh","description":"Self-hosted iCloud alternative for macOS \u0026 iOS with Apple Notes, Calendars, Contacts and Reminders sync via Docker, CalDAV/CardDAV \u0026 IMAP.","archived":false,"fork":false,"pushed_at":"2026-05-29T06:39:02.000Z","size":3230,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-29T08:27:40.165Z","etag":null,"topics":["apple-notes","caldav","carddav","docker-compose","homelab","icloud-alternative","privacy-first","raspberry-pi","self-hosted","synology"],"latest_commit_sha":null,"homepage":"","language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jaganganesh.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-05-21T13:57:01.000Z","updated_at":"2026-05-29T06:41:37.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/jaganganesh/pineapple-cloud","commit_stats":null,"previous_names":["jaganganesh/pineapple-cloud"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/jaganganesh/pineapple-cloud","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jaganganesh%2Fpineapple-cloud","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jaganganesh%2Fpineapple-cloud/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jaganganesh%2Fpineapple-cloud/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jaganganesh%2Fpineapple-cloud/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jaganganesh","download_url":"https://codeload.github.com/jaganganesh/pineapple-cloud/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jaganganesh%2Fpineapple-cloud/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33664259,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-05-29T02:00:06.066Z","response_time":107,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["apple-notes","caldav","carddav","docker-compose","homelab","icloud-alternative","privacy-first","raspberry-pi","self-hosted","synology"],"created_at":"2026-05-29T18:01:32.916Z","updated_at":"2026-05-29T18:01:33.710Z","avatar_url":"https://github.com/jaganganesh.png","language":null,"funding_links":["https://github.com/sponsors/jaganganesh"],"categories":[],"sub_categories":[],"readme":"# 🍍 Pineapple Cloud\n\n![Stars](https://img.shields.io/github/stars/jaganganesh/pineapple-cloud?style=flat)\n![Forks](https://img.shields.io/github/forks/jaganganesh/pineapple-cloud?style=flat)\n![License: GPL v3](https://img.shields.io/github/license/jaganganesh/pineapple-cloud)\n![Last Commit](https://img.shields.io/github/last-commit/jaganganesh/pineapple-cloud)\n[![Sponsor](https://img.shields.io/badge/Sponsor-GitHub%20Sponsors-ea4aaa?logo=githubsponsors\u0026logoColor=white)](https://github.com/sponsors/jaganganesh)\n\n\u003e Keep your Apple ecosystem. Keep your data yours.\n\nA lightweight, privacy-first, self-hosted iCloud alternative for Apple users.\n\nPineapple Cloud lets you sync natively:\n\n- 📝 Apple Notes\n- 🗓️ Calendar\n- ✅ Reminders\n- 👤 Contacts\n\nacross macOS and iOS using a minimal Docker stack powered by:\n\n- CalDAV\n- CardDAV\n- Local IMAP\n\nDesigned for:\n\n- Raspberry Pi\n- Synology NAS\n- Mini PCs\n- Homelabs\n- Privacy-conscious Apple users\n\nAll while using **under 100MB of idle RAM**.\n\n\u003cimg src=\"./assets/images/pineapple-cloud.png\" alt=\"Pineapple Cloud\" width=\"400\"\u003e\n\n# ✨ Why Pineapple Cloud?\n\nMost self-hosted collaboration platforms are massive.\n\n| Platform             | Typical RAM Usage |\n| :------------------- | :---------------- |\n| Nextcloud            | 1GB+              |\n| Full mail suites     | Heavy             |\n| Enterprise groupware | Complex           |\n| **Pineapple Cloud**  | **\u003c100MB**        |\n\nPineapple Cloud was built for people who want:\n\n- native Apple app compatibility\n- self-hosted privacy\n- ultra-lightweight infrastructure\n- simple Docker deployment\n- zero vendor lock-in\n\nNo Electron apps.\nNo bloated dashboards.\nNo subscriptions.\nNo telemetry.\n\nJust native Apple apps syncing directly with infrastructure you control.\n\n# 🔒 Privacy First\n\nPineapple Cloud keeps your data:\n\n- on your hardware\n- inside your network\n- under your control\n\nNo third-party cloud sync providers.\nNo analytics.\nNo forced accounts.\nNo external dependency chains.\n\nYour Notes, Calendars, Contacts, and Reminders stay yours.\n\n# 🚀 Features\n\n- 🍎 Native Apple Notes sync using local IMAP\n- 🗓️ Native Apple Calendar \u0026 Reminders sync via CalDAV\n- 👤 Native Apple Contacts sync via CardDAV\n- 🪶 Ultra-lightweight architecture (\u003c100MB idle RAM)\n- 🐳 Simple Docker Compose deployment\n- 🏠 Optimized for Raspberry Pi and NAS systems\n- 📦 Portable volume-based storage\n- 🔒 Local-first privacy-focused design\n- ⚡ Fast startup and low CPU overhead\n\n# 🧠 How It Works\n\nApple uses multiple sync systems internally:\n\n| Apple Service | Protocol |\n| ------------- | -------- |\n| Calendar      | CalDAV   |\n| Reminders     | CalDAV   |\n| Contacts      | CardDAV  |\n| Apple Notes   | IMAP     |\n\nPineapple Cloud combines:\n\n- **Radicale** → CalDAV + CardDAV\n- **Local IMAP Mail Server** → Apple Notes syncing\n\ninside a lightweight isolated Docker stack.\n\n# 🏗️ Architecture\n\n```text\n             macOS / iPhone / iPad\n                       │\n        ┌──────────────┴──────────────┐\n        │                             │\n   Radicale Container           IMAP Container\n (Calendar / Contacts)          (Apple Notes)\n        │                             │\n        └────── Docker Network ───────┘\n```\n\n# ⚡ Quick Start\n\n## 1. Clone the Repository\n\n```bash\ngit clone https://github.com/jaganganesh/pineapple-cloud.git\ncd pineapple-cloud\n```\n\n## 2. Create the Required Directories\n\n```bash\nmkdir -p \\\ndata/mail-data \\\ndata/mail-config \\\ndata/radicale-data \\\ndata/radicale-config \\\ndata/radicale-certs\n```\n\n## 3. Create `docker-compose.yml`\n\n```yaml\nservices:\n  # Apple Notes (IMAP)\n  imap-server:\n    image: mailserver/docker-mailserver:latest\n    container_name: apple-imap\n    ports:\n      - \"143:143\"\n    environment:\n      OVERRIDE_HOSTNAME: pineapple.cloud\n      ENABLE_POP3: \"0\"\n      ENABLE_SMTP: \"0\"\n      ENABLE_SPAMASSASSIN: \"0\"\n      ENABLE_CLAMAV: \"0\"\n      ENABLE_FAIL2BAN: \"0\"\n      ONE_DIR: \"1\"\n    cap_add:\n      - NET_ADMIN\n    volumes:\n      - ./data/mail-data:/var/mail\n      - ./data/mail-config:/tmp/docker-mailserver\n    restart: unless-stopped\n  # Contacts / Calendars / Reminders (CardDAV, CalDav)\n  radicale:\n    image: tomsquest/docker-radicale:latest\n    container_name: apple-dav\n    ports:\n      - \"5232:5232\"\n    volumes:\n      - ./data/radicale-data:/data\n      - ./data/radicale-config:/config:ro\n      - ./data/radicale-certs:/certs:ro\n    restart: unless-stopped\n```\n\n## 4. Start the Stack\n\n```bash\ndocker compose up -d\n```\n\n# 📬 Create Your Apple Notes Account\n\nApple Notes sync requires a local IMAP mailbox.\n\n## Enter the container\n\n```bash\ndocker exec -it apple-imap /bin/bash\n```\n\n## Create a user\n\n```bash\nsetup email add your_name@pineapple.cloud\n```\n\nThen enter your password when prompted.\n\nExit the container afterward:\n\n```bash\nexit\n```\n\n# 🔐 SSL / TLS Setup\n\nApple devices strongly prefer encrypted connections.\n\n## Option A — Self-Signed Certificates (Recommended)\n\nGenerate certificates locally:\n\n```bash\nopenssl req -x509 \\\n-newkey rsa:4096 \\\n-keyout ./data/radicale-certs/server.key \\\n-out ./data/radicale-certs/server.cert \\\n-sha256 \\\n-days 3650 \\\n-nodes \\\n-subj \"/CN=127.0.0.1\"\n```\n\nOn macOS:\n\n1. Open `server.cert`\n2. Launch **Keychain Access**\n3. Set certificate trust to:\n   - **Always Trust**\n\n## Option B — Local HTTP Only\n\nIf running exclusively on:\n\n- localhost\n- isolated LAN\n- private homelab subnet\n\nyou may choose to skip TLS.\n\nmacOS and iOS will display warning prompts during setup.\n\n# 🍎 macOS Setup Guide\n\nOpen:\n\n```text\nSystem Settings → Internet Accounts\n```\n\n## 👤 Contacts (CardDAV)\n\nNavigate to:\n\n```text\nAdd Account → Add Other Account → CardDAV Account\n```\n\nUse:\n\n| Field          | Value                  |\n| -------------- | ---------------------- |\n| Account Type   | Manual                 |\n| Username       | Your Radicale username |\n| Password       | Your password          |\n| Server Address | 127.0.0.1              |\n| Port           | 5232                   |\n| Server Path    | /                      |\n\nIf using HTTP:\n\n- Disable SSL\n\nIf using certificates:\n\n- Enable SSL\n\n\u003cimg src=\"./assets/images/cardDAV.png\" alt=\"CardDAV - Apple Contacts\" width=\"400\"\u003e\n\n## 🗓️ Calendars \u0026 Reminders (CalDAV)\n\nNavigate to:\n\n```text\nAdd Account → Add Other Account → CalDAV Account\n```\n\nUse the same credentials configured in Radicale.\n\n\u003cimg src=\"./assets/images/calDAV.png\" alt=\"CalDAV - Apple Calendar and Reminders\" width=\"400\"\u003e\n\n## 📝 Apple Notes (IMAP)\n\nNavigate to:\n\n```text\nAdd Account → Add Other Account → Mail Account\n```\n\nUse:\n\n| Field                | Value                                                         |\n| -------------------- | ------------------------------------------------------------- |\n| Email                | [your_name@pineapple.cloud](mailto:your_name@pineapple.cloud) |\n| Incoming Mail Server | 127.0.0.1                                                     |\n| Outgoing Mail Server | 127.0.0.1                                                     |\n\nWhen setup completes:\n\n- ❌ Disable Mail\n- ✅ Enable Notes\n\n\u003cimg src=\"./assets/images/noteIMAP.png\" alt=\"IMAP - Apple Notes\" width=\"400\"\u003e\n\n# ⚠️ Apple Notes Limitations\n\nApple Notes over IMAP is more limited than native iCloud Notes.\n\nThe following features are reduced or unavailable:\n\n- ❌ advanced typography styles\n- ❌ rich heading templates\n- ❌ interactive checklists\n- ❌ inline sketches\n- ❌ advanced embedded objects\n\nFor best compatibility:\n\n- use standard text\n- use bold/italics\n- use markdown-style lists\n\nBasic note synchronization works reliably.\n\n# 🪶 Lightweight by Design\n\nPineapple Cloud is intentionally engineered for low-resource systems.\n\nPerfect for:\n\n- Raspberry Pi Zero 2 W, 3 Model B/B+, 400, 4 Model B, 5\n- Synology J-series\n- Intel N100 mini PCs\n- Low-power NAS systems\n\nDesigned to minimize:\n\n- RAM usage\n- disk writes\n- CPU overhead\n- thermal load\n\nIdeal for always-on homelab deployments.\n\n# 🏠 Tested Platforms\n\n- ✅ macOS\n- ✅ iOS\n- ✅ Apple Silicon Macs\n- ✅ Raspberry Pi OS\n- ✅ Ubuntu Server\n- ✅ Docker\n- ✅ Synology NAS\n\n# 📦 Portable Storage Layout\n\nAll persistent data lives inside:\n\n```text\n./data\n```\n\nThis makes migrations extremely simple.\n\nMove your stack between machines by copying:\n\n```text\n./data\n```\n\nand redeploying the containers.\n\n# 🆚 Comparison\n\n| Feature               | Pineapple Cloud | Nextcloud | iCloud |\n| --------------------- | --------------- | --------- | ------ |\n| Apple Notes Sync      | ✅              | ❌        | ✅     |\n| Native Apple Apps     | ✅              | Partial   | ✅     |\n| Self-Hosted           | ✅              | ✅        | ❌     |\n| Lightweight           | ✅              | ❌        | N/A    |\n| Raspberry Pi Friendly | ✅              | ⚠️ Heavy  | ❌     |\n| Docker Compose        | ✅              | ✅        | ❌     |\n| Vendor Lock-In        | ❌              | ❌        | ✅     |\n| Privacy First         | ✅              | ⚠️        | ❌     |\n\n# 🧭 Why Self-Host?\n\nCloud convenience should not require surrendering ownership of your personal data.\n\nPineapple Cloud gives Apple users a way to preserve the native experience they already love while moving synchronization back onto infrastructure they control.\n\nYour server.\nYour rules.\nYour data.\n\n# 🤝 Contributing\n\nContributions are welcome.\n\n1. Fork the repository\n2. Create a feature branch\n\n```bash\ngit checkout -b feature/amazing-feature\n```\n\n3. Commit your changes\n\n```bash\ngit commit -m \"feat: add amazing feature\"\n```\n\n4. Push to your branch\n\n```bash\ngit push origin feature/amazing-feature\n```\n\n5. Open a Pull Request\n\n# ⭐ Support the Project\n\nIf Pineapple Cloud helped you reclaim ownership of your Apple data:\n\n- ⭐ Star the repository\n- 🍴 Fork the project\n- 🧠 Share it with the self-hosted community\n- 🛠️ Contribute improvements\n\nHelping others discover the project makes a huge difference.\n\n# ⚖️ License\n\nLicensed under the GNU GPLv3 License.\n\nSee:\n\n```text\nLICENSE\n```\n\nfor details.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjaganganesh%2Fpineapple-cloud","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjaganganesh%2Fpineapple-cloud","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjaganganesh%2Fpineapple-cloud/lists"}