Circles: E2E encrypted social networking

Overview

Circles: E2E encrypted social networking

Circles is a new kind of secure social sharing app.

You can think of it like an encrypted messenger that looks and feels like a social network. Or you can think of Circles as a social network app where every post is encrypted from end to end.

Which is it really? It's both, at the same time.

Features

End-to-end (E2E) Encryption

Every post in Circles is encrypted from your device all the way to your friends' devices. The only people who can see the messages and photos that you share are the people who you have specifically invited to join your social circles and groups.

Circles is built on Matrix. It uses the same E2E security protocols, Olm and Megolm, that Matrix uses for its encrypted group chat. Circles does not attempt to "roll its own" encryption code. Instead, it uses the Matrix iOS SDK for all security and encryption related functions.

Runs on iPhone, iPad, and iPod Touch

Circles for iOS should run on any device with iOS 14+. Building a version of Circles for Android devices is one of our top priorities for the future.

Circles and Groups

In the Circles app, we support two different kinds of social structures: circles and groups.

Circles and groups screenshots

Groups are simpler, so let's talk about them first.

Private Groups

A group in the Circles app works pretty much like a group anywhere else. It has a well-defined set of members, and everyone who's in the group is in the same group with everyone else. Everyone in the group can see everything posted in the group.

Groups screenshots

Any organized group of people in the real world is probably a reasonable fit for a group in the app. For example:

  • Your book club.
  • Your softball team.
  • The people who live on your block, or in your building.
  • Your kid's preschool classroom. (Well, the parents and teachers anyway. Preschoolers definitely shouldn't be on social networks!)

Any organized group of people with well-defined membership is probably a reasonable fit for a group in the app.

Secure Social Circles

Circles are loose, flexible, and overlapping, just like real, organic, human social circles.

In the real world, if you and I are friends, then your set of friends is probably not exactly the same as my set of friends. And that's OK.

Similarly, if you and I are family, that doesn't mean that the set of people who you consider to be family must be exactly the same people that I call family. For one thing, if you and I are blood relatives, then your in-laws are probably totally unrelated to my in-laws, and vice versa.

And, again, that's totally OK. That's how human relationships work. Circles are our way of helping the technology catch up to the social reality.

A circle is a good fit for any type of relationship where every individual has their own network of connections that's distinct from anyone else's.

Circles screenshots

Maybe the best way to think about a circle is that it's like your own little private, secure version of Facebook in a microcosm. The only people in it are the people who you really care about, and they're only sharing things that you have some mutual interest in. Each circle functions like your own personal "wall" or "page" where you can share things. It also gives you your own private timeline of updates from your friends in that circle.

Bonus Feature: Encrypted Photo Galleries

We also give you encrypted photo galleries. You can share a gallery with your friends and family, or you can just use it for yourself as an encrypted cloud backup of your photos.

Photo gallery screenshots

Galleries also give you an easier way to manage photos that you want to share with more than one of your groups or circles. If you upload the photo into a gallery first, you can then share it with a group or a circle with just a couple of taps on the screen.

Try It Out

The Circles beta will be publicly available on Apple's TestFlight service in mid-June 2021. Until then, if you have a recent Mac with Xcode, you can build and run the app yourself.

[user@host ~]$ git clone https://github.com/KombuchaPrivacy/circles-ios.git
[user@host ~]$ cd circles-ios
[user@host circles-ios]$ pod install
[user@host circles-ios]$ open Circles.xcworkspace

NOTE 2021/05/26: Unless you have a signup token, you will not be able to create an account on the beta testing server at this time. However, if you have an existing account on another Matrix homeserver, you can use Circles with that account by making one small change to the code. In KSStore.swift, look at lines 61-65 to change the homeserver to the one that you want to use.

Support us on Kickstarter

Do you want a better social network experience, where you are in control over who can see what you share, where the service doesn't spy on you, and where the service doesn't promote the worst kind of anti-social behaviors in order to sell ads?

You can help us build that future. People who back the project on Kickstarter get big discounts for membership on the new secure social platform that we will be launching later this year.

Kickstarter banner

You might also like...
Restofire is a protocol oriented networking client for Alamofire
Restofire is a protocol oriented networking client for Alamofire

Restofire is a protocol oriented networking client for Alamofire. Features Requirements Installation Usage License Features Global Configuration for h

A Swift Multiplatform Single-threaded Non-blocking Web and Networking Framework
A Swift Multiplatform Single-threaded Non-blocking Web and Networking Framework

Serverside non-blocking IO in Swift Ask questions in our Slack channel! Lightning (formerly Edge) Node Lightning is an HTTP Server and TCP Client/Serv

Simple asynchronous HTTP networking class for Swift

YYHRequest YYHRequest is a simple and lightweight class for loading asynchronous HTTP requests in Swift. Built on NSURLConnection and NSOperationQueue

RSNetworking is a networking library written entirly for the Swift programming language.

RSNetworking is a networking library written entirly for the Swift programming language.

Asynchronous socket networking library for Mac and iOS

CocoaAsyncSocket CocoaAsyncSocket provides easy-to-use and powerful asynchronous socket libraries for macOS, iOS, and tvOS. The classes are described

A delightful networking framework for iOS, macOS, watchOS, and tvOS.
A delightful networking framework for iOS, macOS, watchOS, and tvOS.

AFNetworking is a delightful networking library for iOS, macOS, watchOS, and tvOS. It's built on top of the Foundation URL Loading System, extending t

Showcasing simple SwiftUI and networking capabilities

CovidCounts CovidCounts is powered by SwiftUI. It allows a user to view COVID related data for different U.S. States. App Purpose This app is showcasi

ServiceData is an HTTP networking library written in Swift which can download different types of data.

ServiceData Package Description : ServiceData is an HTTP networking library written in Swift which can download different types of data. Features List

Advanced Networking Layer Using Alamofire with Unit Testing

Advanced Networking Layer Using Alamofire with Unit Testing

Comments
  • Update website repo link and archive GitHub repo

    Update website repo link and archive GitHub repo

    Hey, I noticed the GitLab seems to be the active repo for this project even though the website still links to this GitHub org. Would you consider updating the website to point to the new repo and adding a note to this GitHub page about it or marking it as archived?

    opened by mirdaki 2
  • Any post mortem?

    Any post mortem?

    Hello, @cvwright

    I kind of regret bumping into this app after project was cancelled (according to Kickstarter, and as I'm not a backer I cannot see a message behind cancellation)

    Would you care to give us some post mortem here?

    I think this is important going forward, as social media need changes coming from other place than maximizing corporate profits. I've been spinning an idea in my head for a while about building PoC similar to your project, so...

    What went wrong?

    opened by stanleyguevara 1
Releases(v0.98.1)
  • v0.98.1(Sep 1, 2021)

    Latest updates:

    • Temporarily disabled support for bring-your-own-server. BYOS will return soon after Circles launches in the App Store.

    • We have a new icon. It's blue! I was worried that Apple might think the old icon looked too much like the Apple Photos icon.

    • New and improved interface for managing your account information. Added support for changing your password and for deactivating your account. I hope you never want this last one, but Apple requires it for apps that allow you to create accounts.

    • Removed support for Markdown formatting in posts and image captions. This is a sad one, but unfortunately the performance of the open source library that we were using for Markdown just wasn't up to the task. On the bright side, our timelines load much more quickly now, and the scrolling should be much smoother. Look for Markdown support to return with the release of iOS 15 later this year.

    • Another update to the Recent Activity list. Now it should refresh itself automatically if/when it initially comes up empty.

    • Improved layout and usability on iPad.

    Source code(tar.gz)
    Source code(zip)
  • v0.91.2(Aug 17, 2021)

    Changes in this version:

    • Added auto-renewing App Store subscription for bring-your-own-server (BYOS)
    • Reworked / fixed generation of the recovery encryption key for accounts that use two passwords, e.g. standard Matrix accounts not created with Circles / MSC3265
    • Updated LICENSE to AGPLv3 for versions starting with beta 0.91 and later
    Source code(tar.gz)
    Source code(zip)
  • v0.90.3(Aug 10, 2021)

    Significant changes in build 0.90 (2) and (3):

    • Fixed a bug in the login screen that prevented logging in with accounts on other servers

    • Re-enabled signup after breaking it in 0.90 (1) -- whoops!

    Significant changes in previous build 0.90 (1):

    • Added the ability to use Circles with other servers. Now you don't need an account on kombucha.social. You can use any Matrix homeserver. And you can connect with friends on other servers.

    WARNING: Using Circles on an existing account that you also use for Matrix chat is NOT RECOMMENDED at this time. You have been warned... But also, if you decide to do this anyway, please let me know how it goes. :-)

    Other changes in recent versions:

    • Added emoji reactions

    • Changed the way we display posts, to include the reactions. It's a bit of a mess for now, but it will get better.

    Bug fixes:

    • Changed the way we create circles and groups, to guarantee that they are always encrypted from the time of creation.

    • Fixed a race condition where a newly-accepted Circle would disappear from the list of new circles before the app could ask you where you wanted to follow it.

    Source code(tar.gz)
    Source code(zip)
  • v0.17.2(Jul 19, 2021)

    Latest changes in build 0.17 (2)

    • Enabled saving an encrypted image from a post into your local device's Photos library
    • Enabled fancy text styling (and links) using Markdown. Now, you can do bold, italics, headings, bulleted lists, clickable links, and more. There's no fancy UI yet. Just use Markdown formatting when you write your post, and it will show up in fancy form when people view it.

    Changes in 0.17 (1) over previous builds:

    • Re-enabled replying to posts
    • Changed the interface for composing new posts (including replies). The composer is now a pop-up window (called a "sheet"), like in the iOS Mail app.
    • Added missing help text in the signup flow. Thanks to Elise and Jen for reporting this!
    • Changed the signup flow; Now after you create an account, we don't automatically log you in. Logging in for the first time, using your username and password, lets us work some magic behind the scenes to support automatically verifying your devices and securely backing up your decryption keys.
    Source code(tar.gz)
    Source code(zip)
  • v0.16.5(Jun 28, 2021)

    Improved the layout of the message composer and the message display card.

    Got rid of the frames with fixed limits on height and width. Now we can take up all available space, so as a result it looks much better on the iPad where we have so much more room.

    Also increased the SwiftUI .layoutPriority() of the composer, so instead of getting squished into the top 1/3 of the screen, now it gets all screen real estate not taken up by the keyboard.

    Within the composer itself, when entering the caption for a photo, the photo preview now stays a reasonable size. Previously in 0.16.2, the photo preview was getting squished into a tiny, tiny speck on my test iPhone XR. Now it remains large enough to see the photo, while still allowing sufficient space for the text editor for the caption.

    Source code(tar.gz)
    Source code(zip)
  • v0.16.2(Jun 25, 2021)

    New in this release:

    • Added the ability to write your own captions for image posts.

    • Tightened up the group timeline view. (Thanks to Jonathan on Matrix for the suggestion)

    • Tightened up the text post card, using more of the available horizontal space. (Thanks again to Jonathan)

    • Added more padding around the two buttons for choosing or taking a profile photo during the signup flow. (Thanks to Jen for this one)

    Source code(tar.gz)
    Source code(zip)
  • v0.15.2(Jun 19, 2021)

    This release fixes several issues identified in beta testing of the 0.13 series.

    • Added support for Matrix secure server-side storage (SSSS) to hopefully reduce UISI errors
    • Added support for BlurHash (MSC 2448) for a more visually appealing placeholder while waiting for images to load
    • Fixed an issue where circle rooms weren't being labeled with a room type at creation time in the signup process
    • Fixed an issue where new rooms weren't being encrypted at creation time
    • Added the option to invite a new friend to follow you when you accept their invite

    In order to support SSSS without requiring users to remember yet another password, in this release we change the way we do passwords.

    • The user's "raw" password is first hashed with BCrypt to produce a "root" secret.
    • The root secret is treated sort of like a chain key and passed through a version of the symmetric ratchet to produce two new secret keys
      • One secret key is used as the user's login password
      • The other secret key is used as the encryption key for SSSS

    The biggest drawback of this approach is that we break compatibility with pre-existing Circles accounts, and with other Matrix clients. But I think the approach here is useful enough that I'm going to write it up as an MSC for consideration by the broader Matrix community.

    Source code(tar.gz)
    Source code(zip)
  • v0.13.3(Jun 14, 2021)

    This is the third build of the 0.13 beta.

    This build patches a couple of critical flaws in the earlier 0.13 series:

    • In 0.13.1 the Matrix rooms that represent circles were not being properly labeled with a room type. As a result, when a user accepted an invite to follow a circle, the app never showed the dialog asking the user where they would like to follow the new room.

    • For the first few days of the 0.13 beta release, we had a problem where circle rooms created at signup were not being encrypted. This is strange, because the signup screen's room creation code explicitly makes an API call to enable encryption, and we should not be getting a successful callback unless that API call succeeds. A server-side change (making all invite-only rooms be encrypted by default) seems to have fixed the problem for newly created rooms. To ensure that existing rooms get encrypted, we now run a check whenever we first connect to the homeserver, and for any un-encrypted rooms we use the code in MXRoom to enable encryption. This seems to work. (Somehow calling the API directly via the MXRestClient seems to not work anymore. Argh.)

    Otherwise most of the basic functionality seems to be working. Users can:

    • Create an account and setup their displayname, avatar, and circles
    • Log in
    • Log out (without logging out their Matrix device and losing their keypairs)
    • Create circles and groups
    • Invite people to join circles and groups
    • Accept or reject invites
    • Post text and images

    Some other important functionality is still TODO:

    • Account deletion (required by Apple as of June 2021)
    • Registering additional email addresses, or changing email address
    • Threaded message view
    • Paid subscriptions
    • Sharing photos directly from your gallery
    • Full-screen image view
    • Configuring notification settings
    • Configuring message expiry settings
    Source code(tar.gz)
    Source code(zip)
Owner
Kombucha Digital Privacy Systems
Maker of encrypted apps that help keep your family safe online
Kombucha Digital Privacy Systems
Elegant HTTP Networking in Swift

Alamofire is an HTTP networking library written in Swift. Features Component Libraries Requirements Migration Guides Communication Installation Usage

Alamofire 38.7k Jan 8, 2023
Type-safe networking abstraction layer that associates request type with response type.

APIKit APIKit is a type-safe networking abstraction layer that associates request type with response type. // SearchRepositoriesRequest conforms to Re

Yosuke Ishikawa 1.9k Dec 30, 2022
Robust Swift networking for web APIs

Conduit Conduit is a session-based Swift HTTP networking and auth library. Within each session, requests are sent through a serial pipeline before bei

Mindbody 52 Oct 26, 2022
Lightweight Concurrent Networking Framework

Dots Example To run the example project, clone the repo, and run pod install from the Example directory first. Requirements iOS 8.0+ / macOS 10.10+ /

Amr Salman 37 Nov 19, 2022
Versatile HTTP Networking in Swift

Net is a versatile HTTP networking library written in Swift. ?? Features URL / JSON / Property List Parameter Encoding Upload File / Data / Stream / M

Intelygenz 124 Dec 6, 2022
A type-safe, high-level networking solution for Swift apps

What Type-safe network calls made easy Netswift offers an easy way to perform network calls in a structured and type-safe way. Why Networking in Swift

Dorian Grolaux 23 Apr 27, 2022
🏇 A Swift HTTP / HTTPS networking library just incidentally execute on machines

Thus, programs must be written for people to read, and only incidentally for machines to execute. Harold Abelson, "Structure and Interpretation of Com

John Lui 845 Oct 30, 2022
Sherlock Holmes of the networking layer. :male_detective:

ResponseDetective is a non-intrusive framework for intercepting any outgoing requests and incoming responses between your app and your server for debu

Netguru 1.9k Dec 24, 2022
🌏 A zero-dependency networking solution for building modern and secure iOS, watchOS, macOS and tvOS applications.

A zero-dependency networking solution for building modern and secure iOS, watchOS, macOS and tvOS applications. ?? TermiNetwork was tested in a produc

Bill Panagiotopoulos 90 Dec 17, 2022
Malibu is a networking library built on promises

Description Palm trees, coral reefs and breaking waves. Welcome to the surf club Malibu, a networking library built on promises. It's more than just a

Vadym Markov 410 Dec 30, 2022