- TypeScript 91.9%
- JavaScript 8.1%
|
|
||
|---|---|---|
| .forgejo | ||
| assets | ||
| docs | ||
| fastlane/metadata/android | ||
| locales | ||
| nodejs-assets/nodejs-project | ||
| patches | ||
| plugins | ||
| scripts | ||
| src | ||
| .gitignore | ||
| .nvmrc | ||
| app.config.js | ||
| app.json | ||
| babel.config.js | ||
| CONTRIBUTING.md | ||
| eas.json | ||
| LICENSE | ||
| package-lock.json | ||
| package.json | ||
| react-native.config.js | ||
| README.md | ||
| tsconfig.json | ||
What is Holos?
Holos is a Fediverse client that turns your smartphone into a complete ActivityPub server. Unlike traditional clients that connect to remote instances, Holos runs the server directly on your device.
You own everything:
- Your cryptographic keys never leave your phone
- Your posts are stored locally first
- Your followers list belongs to you
- Your identity is portable
A relay server provides your stable identity (@you@relay.domain) and routes incoming messages to your device.
Features
Publish
Create posts with rich content:
- Text with mentions and hashtags
- Media attachments (images, videos, audio)
- Polls with multiple choices
- Content warnings for sensitive content
- Quote posts (FEP-e232)
- Visibility: public, unlisted, followers-only, or direct
Save drafts and continue editing later.
Discover
Multiple timelines to explore the Fediverse:
- Home - Posts from people you follow
- Local - Posts from your relay instance
- Federated - Public posts from the wider Fediverse
- Hashtags - Follow and browse hashtags
Full-text search for posts, accounts, and hashtags.
Connect
Build your social network:
- Follow accounts from any ActivityPub server
- Accept or reject follow requests
- Create lists to organize who you follow
- Block and mute accounts
- Report content to instance moderators
Conversations
Direct messages with:
- Conversation threads
- Unread message indicators
- Multiple recipients
Notifications
Stay informed with:
- Real-time notifications when online (WebSocket)
- Push notifications when offline (UnifiedPush / Expo)
- Per-type preferences (mentions, likes, boosts, follows)
Profile
Customize your presence:
- Display name, bio, avatar, header
- Profile fields (links, pronouns, etc.)
- Featured hashtags
- Pinned posts
- Account migration support
Personalization
Make it yours:
- Light, dark, or system theme
- Custom accent colors
- Multiple display modes (cards, compact)
- Language selection (English, French)
- Custom emojis
Multi-account
Manage multiple identities:
- Switch between accounts
- Isolated data per account
- Shared public timeline cache
Offline-first
Works without constant connectivity:
- All data stored locally in SQLite
- Activities queued when offline
- Automatic sync when back online
- Storage management tools
How It Works
Fediverse <--> Relay Server <--> Your Phone
(Mastodon, (stable URL, (ActivityPub
Pleroma, message queue, server,
Misskey...) push notifs) SQLite DB)
Your phone runs a Node.js server that handles ActivityPub protocol, HTTP signatures, and stores everything in a local SQLite database. The relay provides your stable identity and forwards incoming requests via WebSocket tunnel.
Getting Started
Requirements
- Android device (iOS coming soon)
- A Holos relay account (or self-host with Holos Relay Server)
Build from Source
git clone <repository>
cd holos
npm install
cd nodejs-assets/nodejs-project && npm install && cd ../..
npm run prebuild:clean
npm start
# In another terminal:
npx expo run:android
See Setup Guide for detailed instructions.
Tech Stack
| Layer | Technology |
|---|---|
| UI | React Native 0.81 + Expo 54 |
| Design | React Native Paper (Material Design 3) |
| Server | Node.js Mobile 18 + Hono |
| Database | SQLite (sql.js) |
| Protocol | ActivityPub + HTTP Signatures |
| Real-time | Socket.IO + WebSocket Tunnel |
Documentation
- Architecture - Technical design and database schema
- Setup Guide - Development environment setup