Convert Figma logo to code with AI

oxen-io logosession-android

A private messenger for Android.

1,826
169
1,826
320

Top Related Projects

A private messenger for Android.

7,583

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:

  1. Visit the project's GitHub repository: https://github.com/oxen-io/session-android
  2. Download the latest release APK from the Releases section
  3. Install the APK on your Android device
  4. Open the app and follow the on-screen instructions to create a new account
  5. Start messaging securely with other Session users

For developers interested in contributing to the project:

  1. Fork the repository
  2. Clone your fork: git clone https://github.com/your-username/session-android.git
  3. Set up the development environment as per the project's documentation
  4. 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.

7,583

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 Figma logo designs to code with AI

Visual Copilot

Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.

Try Visual Copilot

README

Session Android

Download on the Google Play Store

Add the F-Droid repo

Download the APK from here

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