Open source private distributed social network application with focus on security, control and local store of social information.
Let's face it: the Internet is broken.
You know the drill by now. Internet feels like something from the stone age - drowned in spam, junk folders, and those endless "prove you're human" loops that waste your time. Every website bombards you with cookie pop-ups, invisible tracking scripts that follow you everywhere, and ads that somehow know what you searched for last week. Passwords? They're not enough anymore. Now you have to hand over your email, phone number, ssn, address for 2FA just to log in somewhere and wait for this SMS to get through, turning your personal info into another piece of data they own.
But it goes deeper than that.
Your photos, chats, family memories, and even your private thoughts sit on some giant company's servers. They can sell that data, leak it in a hack (which become so common so no-one cares), or change the rules overnight and lock you out of your own account (hello automod and AI with no ability to sympathize you). One wrong post/comment (or no post at all) and suddenly your friends can't see you, your group chats disappear, or your profile gets shadow-banned for reasons they never explain. It's not just annoying; it's your life they're controlling.
And now governments are jumping in too. Laws are piling up that force apps and websites to hand over your private messages, decide what kind of content is "allowed", or even block entire services if they don't comply. What you can say, who you can talk to, and what you're allowed to see is increasingly decided by someone else - not by you and the people you actually care about. It feels less like a free space to connect and more like a monitored public square where the rules keep changing.
On top of all that, the whole thing is designed to waste your time. Endless ads and spam don't just annoy you - they literally steal your attention, the most valuable thing you have. Every scroll, every notification, every "recommended for you" is built to keep you hooked while someone else profits.
We didn't sign up for this constant surveillance, censorship, data leaks, and corporate (or government) control. We just wanted a simple way to stay in touch with the people who matter.
That's exactly why we building aSocial - a social network that actually puts you back in charge.
Imagine this instead:
- Your stuff stays yours. Photos, messages, memories - they live only on your own rules and shared controllably. No company vault holding everything hostage.
- You talk directly to friends. It's private, secure, peer-to-peer - like a locked room where only the people you invite can enter. No middleman reading along.
- Spam and ads are basically gone. A tiny, one-time payment directly to receiver (the digital equivalent of a postage stamp) stops bots and junk cold. Real people get through easily; the noise doesn't.
- No more spying or selling your data. You decide exactly who sees what, and you can change your mind anytime. No trackers, no leaks, no surprises.
- No one can censor or shut you down. Because there's no single company or government in the middle, your connections can't be easily blocked or deleted.
aSocial is about getting back the simple joy of connecting with the people you love - on your terms, without the endless hassle, spying, or someone else deciding what's okay to share.
I'm doing this because I believe we all deserve better than the broken, exhausting internet we have today. We deserve a place that respects our time, our privacy, and our freedom to talk to each other without interference.
If any of this sounds familiar, if you're tired of the same old frustrations too - we'd love for you to be part of it.
The general purpose of the aSocial is to replace all the centralized social networks & messengers and allow the users to never store their information ini just one place. aSocial was born from the idea of complete control over social information, liberated from spam/ad, simplify connection between people and fight censorship. Storing the information on the user's devices, using strong cryptography with an ability of plausible deniability, integration the Bitcoin network will allow us to solve the issues we see everyday in the huge centralized social providers.
- 12/28/2013 - The project was started as typical social
- 10/17/2014 - Mutated into distributed one and found itself. The POC was focused on UI, but some basic components were also prepared.
- 03/30/2016 - Stopped due to breaking Qt changes, not ready Lightning network (second layer of Bitcoin for microtransactions) and overall project complexity impossible to drag by one person.
- 01/31/2021 - The lessons have been learned and rerun the aSocial development was started with SDD and searching for people who can understand & help with thinking and development. Unfortunately noone reached out and the project was stopped again.
- 01/01/2026 - AI assistants raise and a year of successfull usage gave an idea of resurrecting the project development.
WARNING: By using this software you agree not to limit forcefully the other's freedom of ditributing any kind of information even if you don't like it's nature. In case you can't comply - please remove aSocial from your device as fast as possible.
Please check out the wiki page: Wiki
TODO
The application itself is native divided into 2 parts - background backend and UI frontend. Backend working with a simple key-value database for relay/background tasks, frontend working with an encrypted key-value store to process profile data through the VFS → DBKV-rocksdb plugin chain (encrypted container → protobuf KV store).
Profile data is stored inside an encrypted VFS container (data.vfs):
vfs-cakecreates a Shufflecake-inspired container filled with random bytes.- Each passphrase derives a unique key that reveals a separate set of virtual files (plausible deniability).
dbkv-rocksdbopens a virtual.datfile as a temporary RocksDB instance (viaDBKVPluginInterface::openDatabase()→DBKVDatabasePluginInterface). All entity data is serialised with protobuf wire format and stored under a hierarchical key scheme for efficient prefix scans (e.g.c/<persona>/<contact>for contacts).- Data schema is defined in
proto/asocial/v1/*.proto; C++ types are generated at build time byqt_add_protobufinto the sharedasocial_protolibrary. - All DBKV CRUD operations run on a
DBKVDatabasePluginInterfacesession handle and useQProtobufMessagefor serialisation/deserialisation. CoreInterfaceand all plugins exchange data as protobuf-generated types (asocial::v1::*) directly - no QVariantMap conversion. Factory methods (db::create*) return unsaved objects;store*persists them.- KV key helpers, validation functions, factory methods and the plugin permission enum are
auto-generated by
protoc-gen-coredbfrom proto annotations (entity_config/deps_config) using theasocial_tplJinja2-like template engine.
Media files (photos, videos, audio, documents) are handled by the Core media layer on top of
pluggable Storage blob stores (StoragePluginInterface → StorageStorePluginInterface):
storage-fskeeps content-addressed blobs (hex BLAKE2b-256) as plain files under<workdir>/media/— fast, streamable and visible to other applications.storage-vfskeeps blobs as extra virtual files inside the open profiledata.vfs— fully encrypted, for sensitive media (media import <path> vfs).- MediaCodec plugins (
MediaCodecPluginInterface, first onemedia-codec-qt) probe formats and render thumbnails; new formats (RAW, ffmpeg video, ...) are added by dropping in a plugin. - Import deduplicates by content id, detects kind/MIME/dimensions, creates the
Fileentity and a thumbnail childFile(parent_uid).File.urlis a storage URI (fs:<id>/vfs:<id>). - Watch folders: user-selected directories (e.g. the camera folder) are watched; new files land
in a sorting inbox (
MediaInboxItem) where the user assigns owner persona, tags, description. - Person marks:
MediaAnnotationstores points/rectangles (normalized 0..1 coordinates, with an optional time range and keyframe path for videos) referencing Personas/Contacts. - Multi-device sync: media travels as sealed
PackageItems over the Router (MEDIA_MANIFEST with inline thumbnail, MEDIA_REQUEST / MEDIA_CHUNK / MEDIA_HAVE for chunked pull/push).Device.tag_policiesdecide per tag what each device keeps ("full" / "cache" / "thumb" / "none") — a media-server device archives everything, a phone keeps thumbnails and fetches originals on demand. - Container metadata: DB stays the canonical truth; tags/description/person regions can be
mirrored as XMP (mwg-rs regions) — sidecar next to stored blobs, embedded on JPEG export
(
libs/media_meta).
All communication is handled by a background Router - part of the base application (not a plugin), running on its own thread (desktop) or a foreground service (Android). It starts as soon as aSocial runs, before any profile is opened.
- The Router keeps its own encrypted state in a separate
router.vfscontainer. An empty router password lets it auto-start without user interaction (identity more exposed); a configured password keeps its identity in a hidden layer. - The Router owns pluggable Comm carriers (
CommPluginInterface) that move opaquePackages over any medium. The first carrier iscomm-mesh- an anonymous, single-point-of-failure-free mesh with TTL-limited flooding, message de-duplication, per-hop Ed25519 signatures and per-neighbour reputation (a General Mesh; seeAGENTS.mdandtmp/comm_invite_messages_poc). - Privacy boundary: the Profile layer does all the cryptography and hands the Router only a
fully-sealed, opaque
Package. Payloadkind(handshake / message / ack) lives inside the encryptedPackagePayload— never as a cleartext Package field. Multiple items may share one Package (e.g. HANDSHAKE+MESSAGE on first contact). The only on-wire routing hint is a 4-byte tag- a malicious relay can not learn the message source, destination, or payload type.
- A future carrier can attach a one-way Bitcoin/Lightning payment to a message so a recipient can
charge unknown senders (see
tmp/comm_public_payment_poc).
The default graphical interface is built with Qt Quick and designed for both desktop and Android (touch-ready). Features include:
- Persona connection graph – central persona surrounded by contacts with trust-level-weighted connection lines and group-coloured rings
- Family tree – parents, siblings and extended family below the persona
- Interactive timeline – zoomable event bar at the bottom of the screen
- Radial context menu – right-click / long-press for context actions
- Hamburger menu – profile management, persona switching, settings
- Media library – thumbnail grid with import picker, watched-folder inbox sorting, image viewer with person marks, avatar attachment for personas
- Day/night background – animated sky that changes with wall-clock time
- Markdown messages – compose and view messages with rich formatting
Basic features of the social platform:
- Plugins - add or remove components or use the other vendor component as a plugin
- History - store not just dates of item, but also any edit of the items
- Persons - personal & legal entities, existing (with profiles) or imaginary
- Events - anything happened, happening, going to happen in the life
- Messages - monetized conversation threads or any other interaction like profile updates, news
- Overlays - your vision or additional information for existing or new entities, could be password protected
- Synchronization - make sure your devices replicates the information / profiles you have
- Sharing - ability to share your files with friends from any device you have
Based on core features aSocial support the embedded and external additional features:
- Tree of life - usual thing, your relatives and relations
- Testament - special message, will be triggered to send on some condition
- Contracts - special message, signed by 2 parties, could have penalties, money and end dates
- Web-version - access to web interface from web browser
You can see all the feature requests/bugs on the github page:
This is an experimental project - the main goal is to test State Of The Art philosophy on practice.
We would like to see a number of independent developers working on the same project issues for the real money (attached to the ticket) or just for fun. So let's see how this will work.
Repository and it's content is covered by GPL v3.0, so make sure you provide the sources.
If you will have some time - it will be great to see your changes merged to the original repository - but it's your choice, no pressure.
- Clone the repository:
$ git clone https://github.com/state-of-the-art/asocial.git - Run the build script from the repository root:
$ ./build.sh # Debug desktop AppImage (gcc) $ ./build.sh Release # Release desktop AppImage $ ./build.sh android # Debug Android APK $ ./build.sh Release all # Release desktop + Android - Locate the desktop AppImage in
build/result/:$ ./build/result/aSocial-x86_64-Debug.AppImage --help main: Init v0.1.0 Usage: ./aSocial-x86_64.AppImage [options] Options: -h, --help Displays help on commandline options. --help-all Displays help, including generic Qt options. -v, --version Displays version information. --no-gui Load CMD instead of GUI in case GUI is available
The GUI build for Android (arm64-v8a) uses the same script with the android platform:
$ ./build.sh android # Debug (default flavor)
$ ./build.sh Release android # Release
This builds the asocial:build-android image (Qt 6.10 Android + a host toolchain used for the
build-time code generators) and emits an installable aSocial.apk in build/result/.
A few things are different from the desktop build and are worth knowing:
- The
protoc-gen-*code generators are compiled for the build host (they run during the build), while everything else is cross-compiled for the device — seetools.cmakeand each component'stools/directory. - Each lib/plugin declares supported platforms in
manifest.cmake. By default the Android build includesui-gui,dbkv-rocksdb, andvfs-cake; the desktop console (ui-console) listsgcconly. Pass-DASOCIAL_BUILD_ALL_PLATFORMS=ONto attempt all components on every platform. - The aSocial plugins are bundled into the single
.apk(viaQT_ANDROID_EXTRA_LIBS) and loaded at runtime from the app's native library directory, since Android has no<appdir>/pluginslayout. The QtCreator Android kit can be used to deploy/run/debug on a device or emulator; set-DASOCIAL_PLATFORM=androidon the kit (inferred automatically whenANDROIDis set).
Integration tests use the Kotik helper (tests/kotik/) which wraps the
full AppImage lifecycle: it creates an isolated temp directory, launches the
app with -w, monitors stdout/stderr, and provides assertion helpers for
Qt Test.
$ ./test.sh
The whole purpose of this project - is to make sure your personal information will be controlled by you, there is no way the aSocial (except for external plugins, please see their privacy policy) will share your information without your permission with someone. But please be careful - once shared information will stay on the Internet forever, so think twice about what you are doing.