unsubbed.co

circled.me

Circled.me handles photo, chat, and sharing community server as a self-hosted solution.

Self-hosted photo sharing, video calls, and community — honestly reviewed. No marketing fluff, just what you get when you run it yourself.

TL;DR

  • What it is: MIT-licensed, self-hosted community server combining iOS/Android photo backup, albums, video/audio calls, chat, and face detection in a single Go binary [README].
  • Who it’s for: Individuals and small, tight-knit groups — families, friend circles, reading clubs — who want to share photos privately without paying iCloud or Google Photos forever [README][1].
  • Cost savings: iCloud+ runs $2.99–$9.99/mo per user. Google One runs $2.99–$9.99/mo. A shared circled.me instance on a $6/mo VPS costs the same regardless of how many family members use it.
  • Key strength: Unusually complete feature set for a small project — photo backup, face tagging, video calls, and group chat all in one container, with very low resource footprint [README].
  • Key weakness: Still actively in development (breaking changes expected), no web UI without the mobile app, push notifications depend on an external circled.me server, and third-party review coverage is essentially zero — the community is tiny [README][1].

What is circled.me

circled.me is a self-hosted community server written in Go, focused on private photo and video sharing among a defined group of people. The developer describes the core goal plainly: “Having the ability to host everything a community needs to be able to communicate and exchange photos, ideas, etc, is the main focus here” [README].

The project launched publicly in late 2023 with the developer announcing it on r/selfhosted as a personal project that had been delayed by work and family for over a year [1]. As of this review it sits at 209 GitHub stars — a small but real community.

The feature set is wider than the modest star count suggests. Beyond photo backup (which many tools do), circled.me adds video and audio calls, group chat, face detection and tagging, “Moments” (automatic photo grouping by time and location), reverse geocoding, and album sharing via secret links. All of this runs in a single Docker container with SQLite as the default database — no external services required beyond whatever storage backend you point it at [README].

The mobile app (Flutter, available on App Store and Google Play) is currently the only interface. There is no browser-based photo gallery in the traditional sense — video and audio calls work from any browser, but browsing your photos requires the app [README]. This is a meaningful constraint for anyone expecting a Nextcloud Photos-style web UI.


Why people choose it

The third-party review ecosystem for circled.me is thin. The only substantive external discussion is the developer’s own r/selfhosted launch post [1], which received a moderate response. This isn’t unusual for small self-hosted projects, but it does mean you’re largely relying on the README and your own judgment rather than synthesized user experience.

From what exists:

The privacy pitch is genuine. The developer is explicit that the point is keeping everything within a defined group: “I strongly believe in local/focused communities and sharing with the community, but at the same time — keeping everything private, within the community” [README]. This is a different goal from Immich (optimized for one user’s backup) or Nextcloud (general-purpose file sync). circled.me is explicitly designed around groups.

The performance claims are plausible. The README emphasizes “fast response times and low CPU and very low memory footprint” [README]. Go is a reasonable language choice for this kind of server, and SQLite as the default DB eliminates a dependency that trips up first-time self-hosters. The developer noted at launch that the app is “very responsive” [1].

The all-in-one angle is real differentiation. Most self-hosted photo tools (Immich, PhotoPrism, Piwigo) don’t include video calling or chat. Most self-hosted chat tools (Matrix, Rocket.Chat) don’t include photo backup. circled.me tries to serve both in one deploy — less software to maintain if your use case fits.

The honest version of “why people choose it” is mostly: they found it, the concept clicked, and they tried it. With 209 stars it hasn’t yet crossed the threshold where there’s a body of comparative user experience to draw from.


Features

Based on the README and project documentation:

Photo and video backup:

  • iOS and Android automatic backup via the circled.me app [README]
  • Supports locally mounted disks or any S3-compatible storage — multiple users can use separate S3 buckets on the same server [README]
  • Automatic video conversion to web-compatible H.264 [README]
  • Configurable asset path pattern for organizing files by year/month [README]

Discovery and organization:

  • Face detection and tagging (HOG by default, optional CNN mode for better accuracy at the cost of speed) [README]
  • “Moments” — automatic grouping of photos by time and proximity [README]
  • Reverse geocoding for all assets (OpenStreetMap; Gaode API available for China) [README]
  • Filtering by tagged person, year, month, location [README][1]
  • Albums with local contributors, viewers, and public “secret link” sharing [README]

Communication:

  • Video and audio calls via the mobile app or any browser [README]
  • TURN server built in (Pion) — you provide your public IP and open the UDP port range [README]
  • Group chat with push notifications [README]
  • Push notifications for new album photos (routed through push.circled.me — an external dependency) [README]

Multi-account and multi-server:

  • The mobile app supports multiple accounts and servers simultaneously — you can have your family server and a friends server on one app [README]
  • First-time setup creates an admin user at http://<IP>:8080 [README]

What’s missing or in progress:

  • No web photo gallery (calls work in browser; photo browsing requires the app) [README]
  • No SSO or LDAP — user management is per-instance
  • No documented REST API for external integration
  • The README carries two active warnings: the project can introduce breaking changes, and it should not be your only backup solution [README]

Pricing: SaaS vs self-hosted math

circled.me has no SaaS tier and no paid plans. It’s open-source MIT software you run yourself. There’s nothing to buy.

The comparison is against commercial photo backup and community services:

Google One (Google Photos):

  • 15 GB free, then $2.99/mo (100 GB), $4.99/mo (200 GB), $9.99/mo (2 TB)
  • Per person — a family of four on 200 GB each = $20/mo, $240/yr

iCloud+:

  • 50 GB: $0.99/mo. 200 GB: $2.99/mo. 2 TB: $9.99/mo (shareable with up to 5 family members via Family Sharing)
  • Tight Apple ecosystem integration; no Android backup

Immich Cloud (if self-hosting Immich isn’t wanted):

  • Data not available at time of writing — Immich is primarily self-hosted

Self-hosted circled.me:

  • Software: $0 (MIT) [README]
  • VPS: $5–8/mo on Hetzner or Contabo for a small family group
  • Storage: $0 if you use attached disk, or S3 costs at your volume

Concrete example: A family of four sharing 500 GB of photos. On Google One per-person plans that’s roughly $15–20/mo. On iCloud+ Family Sharing 2 TB that’s $9.99/mo. On a Hetzner VPS with 240 GB disk plus a small Backblaze B2 bucket: roughly $5–7/mo total, and the storage doesn’t grow with your headcount.

The savings aren’t dramatic the way Zapier-vs-self-hosted automation tools are — $9.99/mo on iCloud is already cheap. The value proposition here is privacy and control, not primarily cost. If you have six people in your extended family each paying $3/mo for cloud photo storage, a shared server changes the math.


Deployment reality check

The README describes a straightforward Docker Compose path [README]:

docker-compose -f docker-compose-example.yaml up

That gets you a running server at http://<YOUR_IP>:8080 where you create the first admin user. SQLite is the default — no MySQL required unless you explicitly configure MYSQL_DSN [README].

What you actually need:

  • A Linux VPS or a machine on your home network
  • Docker and docker-compose
  • A domain name + Caddy or nginx for HTTPS (strongly recommended before handing out app credentials)
  • Ports open for the TURN server if you want video calls to work reliably across NAT: UDP 3478 + your configured traffic range (default 49152–65535) [README]
  • S3 credentials if you want off-server storage; otherwise a mounted disk works

What can go sideways:

The TURN server setup is the most fiddly part. The README requires you to set TURN_SERVER_IP to your public IP and open a UDP port range on your router/firewall. If you skip this, video calls may fail for users behind NAT. There’s no guidance on what “good enough” TURN configuration looks like for home vs. VPS setups [README].

Push notifications route through push.circled.me by default [README]. This means one of the “no external dependencies” claims is conditional — without the external push server, you lose mobile alerts for new photos and messages. You can configure a custom push server, but that requires running additional infrastructure.

The CNN face detection mode is described as “much slower” than the default HOG mode [README]. For large libraries, this could mean significant processing time after import. There’s no estimate of throughput.

The biggest deployment risk is the explicit developer warning: “this project is still in development and could introduce breaking changes” and “do not use this as your main/only backup solution” [README]. These aren’t boilerplate disclaimers — they signal a project that is genuinely mid-development, not a stable production tool.

Realistic time estimate for a technically comfortable user: 45–90 minutes to a running instance with HTTPS and the app connected. For a non-technical user following a step-by-step guide: 3–5 hours, primarily on DNS, reverse proxy setup, and TURN port forwarding. If TURN configuration is unfamiliar, budget extra time or accept that video calls may only work on the same network.


Pros and Cons

Pros

  • MIT license, genuinely self-hosted. Source code is open, no vendor lock-in, no subscription [README].
  • Low footprint. Go server with SQLite default — runs on minimal hardware. No PostgreSQL, no Redis, no Elasticsearch required for basic operation [README].
  • All-in-one for small groups. Photo backup + video calls + chat + face detection in one deploy is unusual in the self-hosted space [README].
  • S3-compatible storage. Each user can have their own S3 bucket on the same server, which is a thoughtful design for privacy between accounts [README][1].
  • Multi-server mobile app. One app, multiple accounts across different servers — useful if you run a family server and a friends server separately [README].
  • Honest README. The developer documents limitations and warnings clearly rather than overpromising [README].
  • No complex dependencies. The SQLite default means no separate database process to manage [README].

Cons

  • No web photo gallery UI. Photo browsing requires the mobile app. This is a hard constraint for anyone who wants a browser-based interface [README].
  • External push dependency. Push notifications go through push.circled.me — you’re trusting a third-party service run by a single developer for core functionality [README].
  • Breaking changes expected. The project explicitly warns about this. Running it in production means accepting migration risk without a stability guarantee [README].
  • Not a backup solution. The README explicitly says so. If your only copy of family photos lives on this server and the server fails, they’re gone [README].
  • Tiny community. 209 GitHub stars means limited forum threads, tutorials, and community troubleshooting. If something breaks at 2am, you’re largely on your own [profile].
  • TURN server complexity. Video calls across networks require TURN configuration that involves public IPs and UDP port ranges — not trivial for home server setups [README].
  • Single maintainer risk. The developer’s email is in the README. One person’s availability determines whether issues get fixed [README][1].
  • No REST API documentation. External integration or automation is not currently first-class [README].

Who should use this / who shouldn’t

Use circled.me if:

  • You want to share photos with a defined group (family, close friends) and privacy from cloud providers matters more to you than feature polish.
  • You or someone in your group can handle basic Docker + reverse proxy setup and is willing to read a README.
  • You want photo backup, video calls, and group chat without running three separate self-hosted apps.
  • You’re comfortable with the fact that this is a developing project and have a secondary backup of anything irreplaceable.

Skip it (look at Immich instead) if:

  • You want a polished, actively reviewed, high-star self-hosted photo backup with a feature-rich web UI. Immich (40K+ stars, active development team) is the benchmark here.
  • You need a stable, non-breaking production deployment for a large library.
  • You want a REST API for integration with other tools.

Skip it (stay on iCloud Family / Google Photos) if:

  • Your household already shares one iCloud+ 2TB plan at $9.99/mo — the savings don’t justify the setup cost unless privacy is the real concern.
  • No one in your household is comfortable managing a Linux server or Docker setup.
  • You rely on tight iOS integration (Live Photos, Shared Library sync, HEIC handling) that Google/Apple handles seamlessly.

Skip it (use Nextcloud instead) if:

  • You want a browser-based photo gallery alongside file sync, calendar, and contacts.
  • You need SSO or user federation.
  • You want a project with enterprise support options and a large plugin ecosystem.

Alternatives worth considering

  • Immich — the current benchmark for self-hosted photo backup. 40K+ GitHub stars, active team, excellent web UI, machine learning face/object recognition, active mobile app. Heavier resource footprint than circled.me but far more mature.
  • PhotoPrism — similar to Immich, strong web UI, AI tagging, S3 support. Commercial licensing for some features.
  • Nextcloud — general-purpose: file sync, photos, calendar, contacts, video calls (Nextcloud Talk), docs. Much larger feature set, much larger operational complexity.
  • Matrix + Element — if the video calls and chat are the primary need and you want a federated, standards-based protocol. No photo backup built in.
  • Piwigo — mature self-hosted photo gallery with a proper web UI. No video calls or chat.
  • LibrePhotos — self-hosted Google Photos alternative with face recognition and map views. Web-first.

For the specific use case circled.me targets — private family/community photo sharing with communication — the realistic comparison is Immich + a separate chat tool versus circled.me as a combined package. If integration matters and you accept lower maturity, circled.me wins on simplicity of infrastructure. If maturity and community support matter more, Immich is the safer bet.


Bottom line

circled.me is a genuine, honest, low-footprint self-hosted community server that does something genuinely useful: combines photo backup, video calls, and group chat in one container that a developer can deploy in an afternoon. The MIT license is real, the resource footprint is low, and the all-in-one design is thoughtful. But it’s a one-person project at 209 GitHub stars with explicit active-development warnings, no web UI, an external push notification dependency, and essentially no third-party review record to draw from. The Immich project solved the same “self-host your family photos” problem more thoroughly and with a much larger community behind it. circled.me makes sense if you specifically want the social layer — calls and chat — bundled with photo backup and you’re comfortable being an early adopter on a developing project. If you want production-grade self-hosted photo backup today, start with Immich and add a separate Matrix server if you need communication. Return to circled.me in 12–18 months when the breaking-changes warnings come off the README.


Sources

  1. r/selfhosted — “circled.me: just open-sourced my self-hosted community server and app” (Oct 2023). https://www.reddit.com/r/selfhosted/comments/176un72/circledme_just_opensourced_my_selfhosted/

Primary sources:

Features

Mobile & Desktop

  • Mobile App