Top Related Projects
A private messenger for Android.
Berty is a secure peer-to-peer messaging app that works with or without internet access, cellular data or trust in the network
A Matrix collaboration client for Android.
a free (libre) open source, mobile OS for Ethereum
Email-based instant messaging for Android.
Quick Overview
Session Android is an open-source, decentralized messaging app that prioritizes user privacy and security. It offers end-to-end encryption, onion routing, and doesn't require phone numbers or email addresses for registration, ensuring anonymity for its users.
Pros
- Strong focus on privacy and security with end-to-end encryption
- Decentralized architecture, reducing reliance on central servers
- No phone number or email required for registration
- Open-source, allowing for community audits and contributions
Cons
- Smaller user base compared to mainstream messaging apps
- May have a steeper learning curve for non-technical users
- Potential for slower message delivery due to decentralized nature
- Limited features compared to some popular messaging applications
Code Examples
As Session Android is a complete messaging application rather than a code library, there are no specific code examples to provide. The project is implemented in Kotlin and Java for Android development.
Getting Started
Since Session Android is an end-user application, there's no code-based getting started guide. However, users can follow these steps to start using the app:
- Visit the project's GitHub repository: https://github.com/oxen-io/session-android
- Download the latest release APK from the Releases section
- Install the APK on your Android device
- Open the app and follow the on-screen instructions to create a new account
- Start messaging securely with other Session users
For developers interested in contributing to the project:
- Fork the repository
- Clone your fork:
git clone https://github.com/your-username/session-android.git
- Set up the development environment as per the project's documentation
- Make changes and submit pull requests to contribute to the project
Competitor Comparisons
A private messenger for Android.
Pros of Signal-Android
- Larger and more active community, with more frequent updates and contributions
- More comprehensive feature set, including voice and video calls
- Stronger focus on security audits and third-party reviews
Cons of Signal-Android
- Less privacy-focused, as it requires a phone number for registration
- More centralized infrastructure, potentially making it more vulnerable to censorship
- Larger codebase, which may be more challenging to audit and maintain
Code Comparison
Session-Android (Kotlin):
private fun handleMessageSent(message: Message) {
val threadID = message.threadID
updateThread(threadID)
updateMessageState(message)
notifyObservers()
}
Signal-Android (Java):
private void handleMessageSent(OutgoingMediaMessage message) {
long threadId = message.getThreadId();
DatabaseFactory.getThreadDatabase(context).update(threadId, true);
DatabaseFactory.getMmsDatabase(context).markAsSent(message.getId(), true);
MessageNotifier.updateNotification(context);
}
Both snippets handle message sending, but Session-Android uses Kotlin and a more concise approach, while Signal-Android uses Java and more explicit database operations.
Berty is a secure peer-to-peer messaging app that works with or without internet access, cellular data or trust in the network
Pros of Berty
- More active development with frequent commits and updates
- Broader feature set, including group messaging and offline communication
- Cross-platform support (iOS, Android, and desktop)
Cons of Berty
- More complex codebase due to its broader scope
- Potentially steeper learning curve for new contributors
- Still in beta, which may lead to more frequent changes and potential instability
Code Comparison
Session Android:
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View {
_binding = FragmentConversationsBinding.inflate(inflater, container, false)
return binding.root
}
Berty:
func (m *MessengerService) ConversationCreate(ctx context.Context, req *messengertypes.ConversationCreate_Request) (*messengertypes.ConversationCreate_Reply, error) {
// Implementation details
}
The code snippets show different languages and approaches, with Session Android using Kotlin for Android development and Berty using Go for its core functionality. This reflects the different focus areas of the projects, with Session Android being more specialized for Android, while Berty aims for a broader, cross-platform approach.
A Matrix collaboration client for Android.
Pros of Element Android
- Larger and more active community, with over 500 contributors
- More comprehensive feature set, including end-to-end encryption and cross-signing
- Better documentation and more frequent updates
Cons of Element Android
- More complex codebase due to extensive features
- Potentially higher resource usage and battery drain
- Steeper learning curve for new developers
Code Comparison
Element Android uses Kotlin extensively:
class RoomListFragment : VectorBaseFragment() {
private val viewModel: RoomListViewModel by fragmentViewModel()
private lateinit var roomListView: RecyclerView
}
Session Android primarily uses Java:
public class ConversationListFragment extends BaseFragment {
private ConversationListAdapter adapter;
private RecyclerView recyclerView;
}
Both projects use similar Android architecture components, but Element Android's codebase is generally more modern and Kotlin-focused.
Additional Notes
- Element Android is part of the larger Matrix ecosystem, offering broader interoperability
- Session Android focuses on privacy and anonymity, with a simpler, more targeted approach
- Element Android has more frequent commits and releases, indicating higher development activity
- Session Android may be easier for developers familiar with Java, while Element Android leverages Kotlin's features
a free (libre) open source, mobile OS for Ethereum
Pros of Status Mobile
- More comprehensive feature set, including a built-in cryptocurrency wallet and Web3 browser
- Larger and more active community, with frequent updates and contributions
- Cross-platform support for both Android and iOS
Cons of Status Mobile
- Higher complexity and larger codebase, potentially making it harder to maintain
- Broader focus may lead to slower development of specific messaging features
- Heavier resource usage due to additional features
Code Comparison
Session Android:
private fun createSessionProtocolStore(context: Context): SessionProtocolStore {
return SessionProtocolStore(context)
}
Status Mobile:
(defn initialize-protocol-store [context]
(-> (Protocol/createProtocolStore context)
(Protocol/setProtocolStore)))
Both projects use different programming languages (Kotlin vs. ClojureScript), reflecting their distinct approaches to mobile app development. Status Mobile's code appears more functional and concise, while Session Android's code is more object-oriented.
Status Mobile offers a more feature-rich experience with its integrated wallet and Web3 capabilities, appealing to users interested in decentralized applications. However, this comes at the cost of increased complexity and potentially slower development of core messaging features. Session Android, on the other hand, maintains a more focused approach on secure messaging, which may result in a more streamlined and efficient communication experience.
Email-based instant messaging for Android.
Pros of Delta Chat
- Open-source and decentralized, using existing email infrastructure
- Supports end-to-end encryption using Autocrypt standard
- Cross-platform compatibility (Android, iOS, desktop)
Cons of Delta Chat
- Relies on email servers, which may have varying levels of security
- Less focus on anonymity compared to Session
- Potentially slower message delivery due to email infrastructure
Code Comparison
Delta Chat (Kotlin):
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
setupToolbar(toolbar, getString(R.string.app_name))
setupNavigation(savedInstanceState)
}
Session (Java):
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_home);
initializeViewModels();
initializeViews();
}
Both projects use similar Android lifecycle methods, but Delta Chat is primarily written in Kotlin, while Session uses Java. Delta Chat's code appears to have more specific setup methods, while Session's code seems more generalized.
Delta Chat focuses on leveraging existing email infrastructure for secure messaging, offering cross-platform support and standard encryption. However, it may have limitations in terms of anonymity and speed compared to Session's custom infrastructure. Session, on the other hand, prioritizes anonymity and uses a decentralized network but may have a steeper learning curve for users familiar with traditional messaging apps.
Convert designs to code with AI
Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.
Try Visual CopilotREADME
Session Android
Download on the Google Play Store
Add the F-Droid repo
Summary
Session integrates directly with Oxen Service Nodes, which are a set of distributed, decentralized and Sybil resistant nodes. Service Nodes act as servers which store messages offline, and a set of nodes which allow for onion routing functionality obfuscating users' IP addresses. For a full understanding of how Session works, read the Session Whitepaper.
Want to contribute? Found a bug or have a feature request?
Please search for any existing issues that describe your bugs in order to avoid duplicate submissions. Submissions can be made by making a pull request to our dev
branch. If you don't know where to start contributing, try reading the Github issues page for ideas.
Build instructions
Build instructions can be found in BUILDING.md.
Translations
Want to help us translate Session into your language? You can do so at https://crowdin.com/project/session-android!
Verifying signatures
Step 1:
wget https://raw.githubusercontent.com/oxen-io/oxen-core/master/utils/gpg_keys/KeeJef.asc
gpg --import KeeJef.asc
Step 2:
Get the signed hash for this release. SESSION_VERSION
needs to be updated for the release you want to verify.
export SESSION_VERSION=1.10.4
wget https://github.com/oxen-io/session-android/releases/download/$SESSION_VERSION/signatures.asc
Step 3:
Verify the signature of the hashes of the files.
gpg --verify signatures.asc 2>&1 |grep "Good signature from"
The command above should print "Good signature from "Kee Jefferys...
". If it does, the hashes are valid but we still have to make the sure the signed hashes matches the downloaded files.
Step 4:
Make sure the two commands below returns the same hash. If they do, files are valid.
sha256sum session-$SESSION_VERSION-universal.apk
grep universal.apk signatures.asc
License
Copyright 2011 Whisper Systems
Copyright 2013-2017 Open Whisper Systems
Copyright 2019-2021 The Oxen Project
Licensed under the GPLv3: http://www.gnu.org/licenses/gpl-3.0.html
Socials
Top Related Projects
A private messenger for Android.
Berty is a secure peer-to-peer messaging app that works with or without internet access, cellular data or trust in the network
A Matrix collaboration client for Android.
a free (libre) open source, mobile OS for Ethereum
Email-based instant messaging for Android.
Convert designs to code with AI
Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.
Try Visual Copilot