a free (libre) open source, mobile OS for Ethereum

Overview

Status - a Mobile Ethereum Operating System

Get it on Google Play Get it on F-Droid Get it on Github

Join us in creating a browser, messenger, and gateway to a decentralized world. Status is a free (libre) open source mobile client targeting Android & iOS built entirely on Ethereum technologies. That's right, no middle men and go-ethereum running directly on your device.

Getting started with Status

Why?

We believe in a medium of pure free trade, economies with fair, permission-less access and a world without intermediaries. We want to create policies that can exist between friends or scale globally, we want to communicate securely and be uninhibited by legacy systems.

We want to take responsibility for our data, the way we conduct ourselves privately and promote this way of life to a mass audience.

We want deep insights into our own economies so we can make informed, data-driven decisions on how to make our lives better. The Ethereum blockchain, Smart Contracts, Swarm and Whisper provides us a path forward.

If this interests you, help us make Status a reality - anyone can contribute and we need everyone at any skill level to participate.

How to Contribute?

Go straight to the docs or join our chat and choose what interests you:

  • Developer Developers are the heart of software and to keep Status beating we need all the help we can get! If you're looking to code in ClojureScript or Golang then Status is the project for you! We use React Native and there is even some Java/Objective-C too!
    Want to learn more about it? Start by reading our Developer Introduction which guides you through the technology stack and start browsing beginner issues. Then you can read how to Build Status, which talks about managing project dependencies, coding guidelines and testing procedures.

  • Community Management
    Metcalfe's law states that the value of a network is proportional to the square of the number of connected users of the system - without community Status is meaningless. We're looking to create a positive, fun environment to explore new ideas, experiment and grow the Status community. Building a community takes a lot of work but the people you'll meet and long lasting relationships you form will be well worth it, check out our Mission and Community Principles

  • Specification / Documentation
    John Dewey once said "Education is not preparation for life; education is life itself ". Developers & Designers need guidance and it all starts from documentation and specifications. Our software is only as good as its documentation, head over to our docs and see how you can improve what we have.

  • Blog Writing
    Content is King, keeping our blog up to date and informing the community of news helps keep everyone on the same page. Jump into our chat and discuss with the team how you can contribute!

  • Testers
    It's bug hunting season! Status is currently under active development and there is sure to be a bunch of learning, build status from scratch or if an android user check out our nightly builds. You can shake your phone to submit bug reports, or start browsing our Github Issues. Every bug you find brings Status closer to stable, usable software for everyone to enjoy!

  • Security
    Status is a visual interface to make permanent changes on the Blockchain, it handles crypto-tokens that have real value and allows 3rd party code execution. Security is paramount to its success. You are given permission to break Status as hard as you can, as long as you share your findings with the community!

  • Evangelism
    Help us spread the word! Tell a friend right now, in fact tell everyone - yell from a mountain if you have to, every person counts! If you've got a great story to tell or have some interesting way you've spread the word about Status let us know about it in our chat

Status API

View our API Docs and learn how to integrate your DApp into Status. You can read more about how to add your DApp to Status here.

Give me Binaries!

You can get our Beta builds for both Android and iOS on our website, through our nightly builds or by building it yourself.

Core Contributors

Core Team Members

Special thanks to @adrian-tiberius. Without the dedication of these outstanding individuals, Status would not exist.

Contact us

Feel free to email us at [email protected] or better yet, join our chat.

License

Licensed under the Mozilla Public License v2.0

Testing Supported by

BrowserStack Status

Coverage Status

Comments
  • Research process of publishing to F-Droid

    Research process of publishing to F-Droid

    Due to amazing work by @PombeirP on the feature/nix-gradle-and-mobile-node2nix branch we now have a working deterministic build of the Android app.

    In order to finally close #1125 I will need to research the exact process of submitting the app.

    opened by jakubgs 203
  • Shadow cljs

    Shadow cljs

    fixes: #10143

    The first step of the transition to shadow-cljs is considered done as iOS and Android are building, and dev commands are working. Some corners were cut in order to "limit" the chunk of work, so the following tasks are still pending but can be done outside of this PR:

    • [ ] move tests alongside their cljs counterpart instead of separate test dir
    • [ ] move translations and js-files back into modules
    • [ ] restore hot-reloading
    • [ ] integrate re-frisk
    • [ ] cleanup js imports
    • [ ] fix warnings to enable clj-kondo
    opened by yenda 162
  • audio messages

    audio messages

    fixes #10669

    Audio message implementation started

    Uses a fork of react-native-audio-toolkit https://github.com/tbenr/react-native-audio-toolkit/tree/v2.0.3-status-v6 which implements

    • metering while recording
    • audio playback of base64 inline audio URL (data:audio/mp3;base64,UklGRhwMAABXQVZF...)
    • fix to various bugs

    recording params are: aac, 22050khz, mono, 32kbs

    activity tracking:

    sender side:

    • [x] audio recording
    • [x] recording playback
    • [x] send base64 audio message
    • [x] recording pause
    • [x] fix issue on android recording pause (need to cherrypick as audiotoolkit pr)
    • [x] max 120sec recording
    • [x] delete file on recording canceled\sent
    • [x] code cleanup\refactoring
    • [x] UI
    • [x] change show\hide behaviour of cancel\send button
    • [x] add remain awake module during recording

    receiver side (chat view)

    • [x] receive base64 audio and prepare player
    • [x] playback
    • [x] issue (ios only?): audio length is unknown before first playback
    • [x] seeking
    • [x] code cleanup\refactoring
    • [x] UI
    • [x] slider: revert to default thumb and use tint color
    • [x] slider: increase update freq or animate

    status: ready

    Tested - OK UI tested - OK 
    opened by tbenr 126
  • Merge desktop and mobile builds into a single job

    Merge desktop and mobile builds into a single job

    This PR does several things:

    • Creates Jenkinsfile.combined which runs major 4 types of builds in parallel
    • Creates Jenkinsfile.{ios,android,linux,macos} to run each build as a separate job
    • Extracts Jenkins stages from Jenkinsfiles into common.groovy, mobile.groovy, and desktop.groovy
    • Adds a cleanup lane to the iOS Fastlane setup to clean up XCode DerivedData folder
    • Adds missing Fastlane dependencies to Gemfile

    The Jenkins builds can be seen here: https://ci.status.im/job/status-react/job/combined/ Here's an example build: TODO Which in turn triggered those: TODO This is not done yet, as I still haven't finished uploading artifacts nor making separate builds for e2e tests in parallel.

    devops 
    opened by jakubgs 124
  • [keycard] handle initialized keycards

    [keycard] handle initialized keycards

    fix #8748 fix #8749

    Summary

    • Correctly handle keycard which is in INIT state during login and setup
    • Also shows warning when recovery with keycard for existing multiaccount is requested.

    Testing notes

    Besides fixing issue #8747 i'm also fixing the case when setup gets interrupted (user quits the app, battery dies, etc). In some cases, keycard can move to INIT or PAIRED state so we need to support setup/recovery for such card states.

    Case 1: User sets the PIN, gets pairing password and puk back - card goes to INIT state, then user quits the app. When setup will be started again, we ask him to pair card (using pairing password), then continue with setup as usual.

    Case 2: Users sets the PIN, pairs the card, then quits - card goes to INIT state and is also paired to device. When setup will be started again, we detect that card is already paired (app stores pairing code behind the scene) and redirect user to recovery phrase confirmation.

    Platforms

    • Android

    status: ready

    Tested - OK keycard 
    opened by dmitryn 121
  • [8069] feature - [Profile] My profile edit and share screens

    [8069] feature - [Profile] My profile edit and share screens

    Fixes #8069

    Review notes

    • made use of cljs-bean, not sure if necessary 🤔, but thought every bit of perf enhancement helps
      • if the use of cljs-bean is approved, make sense to use it everywhere else appropriate
      • I ran make nix-update-lein because of adding this, but did not include the changes it made to:
        • nix/lein/lein-project-deps-maven-inputs.txt
        • nix/lein/lein-project-deps.nix
        • cc @PombeirP @jakubgs
    • not totally sure about profile-pic-name animation/transition - if approved, can be useful in #8071
    • working on this has affected an area covered by [Profile] Other profile screen UI cc @tbenr @rachelhamlin, by virtue of being related
    • #8707 had to be fixed on this one due to https://github.com/status-im/status-react/issues/8069#issuecomment-517591701
    • all features implemented, but may need cleanup by separating inline styles

    Testing notes

    • Tested in iOS-Simulator and Android-avd

    Other notes

    • Slight upgrade to Wallet popover with tap to copy and "Copied" animation feature from this, can be done as a separate PR

    status: ready

    Tested - OK community 
    opened by bitsikka 116
  • Desktop two-pane UI with react-navigation v3

    Desktop two-pane UI with react-navigation v3

    fixes #7399

    Summary

    This PR contains desktop mobile UI updated to work with react-navigation v3

    Review notes

    Testing notes

    Suggestion is to test only mobile platforms.

    Platforms

    • Android
    • iOS
    • macOS
    • Linux
    • Windows

    Areas that maybe impacted

    Functional
    • 1-1 chats
    • public chats
    • group chats
    • wallet / transactions
    • dapps / app browsing
    • account recovery
    • new account
    • user profile updates
    • networks
    • mailservers
    • fleet
    • bootnodes
    Non-functional
    • battery performance
    • CPU performance / speed of the app
    • network consumption

    Steps to test

    • Open Status
    • ...
    • Step 3, etc.

    status: wip

    opened by vkjr 102
  • Partitioned topic and topic negotiation

    Partitioned topic and topic negotiation

    Adds topic negotiation and partitioned topic for group-chats and pairing.

    All the code has been implemented in statusgo: https://github.com/status-im/status-go/pull/1466

    Basically all the whisper filter management is done at that level.

    Technical description

    • On startup we load all chats and send a list of them to status go:

    For a public chat: {:chatId "status"}, we create a single filter, based on the name of the chat.

    For each contact added by us, each user in a group chat and each one to one chat open, we send: {:chatId "0x", :oneToOne true}. This will create a chats, to listen to their contact code.

    Any previously negotiated topic is also returned.

    • Once loaded, we create our filters, and upsert the mailserver topics, both of which are solely based on the filters loaded.

    In order to remove a chat, we delete/stopwatching first the the filter in status-react and then ask status-go to remove the filter. For a public chat we always remove, for a one-to-one we remove only if the user is not in our contacts, or in a group chat or we have a chat open. Negotiated topics are never removed, as otherwise the other user won't be able to contact us anymore.

    On stopping whisper we don't have to ask status-go to remove filters as they are removed automatically.

    Some more logic can be pushed in status-go, but that will be in subsequent PRs.

    Testing

    This is a fairly large change and affects quite a large part of the codebase. Specifically:

    1. Group chats
    2. Pairing
    3. Retrieving history from mailserver
    4. Creating/restoring accounts
    5. Gaps
    6. Compatibility with previous versions
    7. Deleting/Creating one-to-one/group/public chats 8)Performance just after login (between login and plus icon is visible), it should be slightly faster if anything but roughly there should be no difference

    Everything should work just in the same way.

    To test the actual feature you will have check geth.log, in Debug level, for lines.

    Sending on negotiated topic

    Sending on partitioned topic

    Sending on old discovery topic

    And also you need to make sure the public key printed after is the one for the right contact (we also send pairing messages, to your own public key).

    How it works

    It's all based on device-to-device communications, so make sure you pair your devices before testing (might work even if you don't pair them), and that you don't have more than 3 devices on each side.

    The idea is that given a group of devices A1,A2,A3 you will send on:

    old discovery topic that happens if 1) if you don't have information about their devices (no communication happened before) or 2) one of those devices is running an older version.

    partitioned topic if all 3 devices are running this version, but you have not send a message back from each one of those devices.

    negotiated topic if all 3 devices are running this version and you have sent a message back from each one of those devices.

    Examples

    1 device on each side

    A1 running this version, B1 running this version:

    Send messages from A1, (don't send any message from B1) you should see either: Sending on old discovery topic or Sending on partitioned topic. The more you wait with both devices online, the more likely you will start seeing Sending on partitioned topic. (This is due to the fact that devices advertise themselves periodically, so it might take some time to detect each other).

    Once you reply from B1 you should see Sending on negotiated topic on both devices when sending a message.

    A1 running this version, B1 running an older version

    You should always see Sending on old discovery topic when sending messages from A1 (B1 will not have those logs as running an older version).

    1 device on one side, 2 on the other

    A1 running this version, B1 , B2 running this version.

    Pair B1 & B2, sending from A1 should be either Sending on old discovery topic or Sending on partitioned topic. Send a message from B1, you should see Send on negotiated topic. Send a message from A1 you should see Send on partitioned topic. Send a message from B2 you should see Send on negotiated topic. Send a message from A1 you should see Send on negotiated topic.

    A1 running this version, B1 running this version B2 running an older version.

    Pair B1 & B2, sending from A1 should be either Sending on old discovery topic or Sending on partitioned topic. Send a message from B1, you should see Send on negotiated topic. Send a message from A1 you should see Send on old discovery topic. Send a message from B2 (no logs as an older version). Send a message from A1 you should see Send on old discovery topic.

    If a device is running this version, and sending a message to a user that has at least one device running an older version, you should always see: Sending on old discovery topic.

    Basically if all the devices you are sending the message to are running this version

    apologies if it's not clear, feel free to ask any question.

    To test using normal one to one messages (easier) you can enable device-to-device in the settings.

    status: ready

    Tested - OK 
    opened by cammellos 101
  • 0.9.30 Release

    0.9.30 Release

    This is an issue to list and discuss remaining issues for the 0.9.30 release.

    Remaining issues can be viewed with the release tag. https://github.com/status-im/status-react/labels/release

    The 0.9.30 release has several improvements for #cryptolife and Devcon.

    Using this issue to manage the release as team comms are split between Status and Slack cc @status-im/clojure @rachelhamlin @andytudhope @annadanchenko @lukaszfryc

    release 
    opened by chadyj 92
  • Render chat formatting natively

    Render chat formatting natively

    fixes #8263

    What to test:

    • Heavily formatted messages (bold, italic) (#test2 channel)

    see the changes here: https://github.com/status-im/react-native/commit/c005d3125e1424a8fb6929b87408f8e7568142e9

    status: ready

    Tested - OK performance 
    opened by mandrigin 88
  • [#6573]Have the ability to use fingerprint log in to the app (including Touch ID)

    [#6573]Have the ability to use fingerprint log in to the app (including Touch ID)

    fixes #6573

    biometric authentication is done: it supports touch-id and face-id for iOS and fingerprint for Android.

    • I added a new settings

    image

    • when enabled it activates, biometric auth is engaged:
    1. at login when password has been previously saved.
    2. when app comes in foreground after being in background for more than 5 seconds.
    • implemented black list for android based on deviceinfo (i updated react native module status to pull up device model info)

    status: ready

    bounty Tested - OK community 
    opened by tbenr 87
  • Communities Join Screens - Implement all permutations of Context Drawer options

    Communities Join Screens - Implement all permutations of Context Drawer options

    The communities join screens context drawers has lots of possible states dependent on different values, e.g joined, not-joined, token-gated, not token-gated etc

    See the designs here: https://www.figma.com/file/apCsJHT8J58JXbJD2igtbd/Context-Drawers-for-Mobile?node-id=167%3A107129&t=aRVvvzqko8zHGE59-0

    Implement the various combinations for each state. Discuss with design team before beginning this work.

    Tests: Add jest tests covering the function which filters the correct bottom sheet options and ensures the correct values are shown dependent on given values.

    feature S:5 
    opened by J-Son89 0
  •  Communities join screens (Token gated) - Integrate Token Gating Component into communities join screens

    Communities join screens (Token gated) - Integrate Token Gating Component into communities join screens

    The token gated component is created here: https://github.com/status-im/status-mobile/issues/14461

    Use this component on the communities join screens so that the designs are correct for token gated communities: https://www.figma.com/file/h9wo4GipgZURbqqr1vShFN/Communities-for-Mobile?node-id=7643%3A608085&t=MwcMgpIhumI6aTpE-0

    Also ensure the warning message about the user exposing their public key is shown on the request to join Bottom Sheet.

    feature S:3 
    opened by J-Son89 0
  • Move mock data to central location and out of views.

    Move mock data to central location and out of views.

    As discussed with @ilmotta -https://github.com/status-im/status-mobile/pull/14444#discussion_r1033704197

    It would be nice to move mock data to a higher centralised location in the application. This means that views etc do not need to handle such data mocking and eventually when we go to remove the mock data then it is done in one place and the respective views do not need adjustment.

    Discuss with the team on an appropriate solution. Document this discussion and decision

    Go through the codebase and find any mock data. Apply the solution that the team has agreed upon.

    Some examples: "src/status_im2/contexts/communities/discover/view.cljs" "src/status_im2/contexts/communities/overview/view.cljs"

    discuss with Desktop team if they have any knowledge of this api should look so that we can match what will eventually be implemented.

    feature 
    opened by J-Son89 0
  • Add token gating component to Quo2 component library

    Add token gating component to Quo2 component library

    ** Ensure designs are Finished before starting to implement this**

    See the designs here:

    https://www.figma.com/file/h9wo4GipgZURbqqr1vShFN/Communities-for-Mobile?node-id=7858%3A524181&t=dTo01x33vyJzNqsC-0

    Implement the token gating to match the designs.

    some rules: If the user has a token, we always show it first This priorities in rank by which set of tokens the user has which gets them closest to joining.

    Ensure the copy is guiding the user correctly for each case.

    Tests: Add component tests (jest)

    feature S:5 
    opened by J-Son89 0
  • Communities join screens (Non token gated) - Add Manual request Denied flow

    Communities join screens (Non token gated) - Add Manual request Denied flow

    ** This Feature needs to be discussed whether it's needed before beginning.** - It opens a large spam vector so we want to minimise the potential risk.

    Do some research/ discussion whether this is needed or not. Then implement if so.

    See the steps for this flow in: https://www.figma.com/file/h9wo4GipgZURbqqr1vShFN/Communities-for-Mobile?node-id=7035%3A462899&t=4pBzp6AcBrgJRPmM-0

    and ensure all screens of the flow are considered.

    Add the notification to the user that their request has been denied - https://www.figma.com/file/h9wo4GipgZURbqqr1vShFN/Communities-for-Mobile?node-id=1414%3A114283&t=4pBzp6AcBrgJRPmM-0

    Check that bottom sheet option menu items are correct to the designs - https://www.figma.com/file/apCsJHT8J58JXbJD2igtbd/Context-Drawers-for-Mobile?node-id=171%3A182069&t=cC9sSYMuC3Njs4nB-0

    feature 
    opened by J-Son89 0
  • Communities join screens (Non token gated) - Add Manual approval flow designs

    Communities join screens (Non token gated) - Add Manual approval flow designs

    See the steps for this flow in: https://www.figma.com/file/h9wo4GipgZURbqqr1vShFN/Communities-for-Mobile?node-id=7035%3A462899&t=4pBzp6AcBrgJRPmM-0

    and ensure all screens of the flow are considered.

    Sync up with design team before starting the work to ensure there is no additional details that are not clear from the designs.

    Somethings to watch for: text changing in many places from "Join" to "Request to join" etc action buttons page titles request to leave notifications for pending requests cancel request flow

    feature S:2 
    opened by J-Son89 0
Releases(1.20.2)
Owner
Status
A Mobile Ethereum Client.
Status
ONA or Open News App is an open source React Native based application for WordPress News and Blog Websites.

ONA - WordPress Android Version . . ❗ ** iOS Version of App has not been tested yet.** About The App ONA or Open News App is an open source React Nati

Vikas Bukhari 38 Oct 24, 2022
Source code of the official F8 app of 2017, powered by React Native and other Facebook open source projects.

F8 App 2017 This is the entire source code of the official F8 app of 2017, available on Google Play and the App Store. How We Build It We've created a

Facebook Samples 14k Dec 3, 2022
Hekla for Hacker News (open source React Native app)

 Hekla for Hacker News iOS and Android client for Hacker News. Inspired by the Apollo client for Reddit. App features: Tabbed interface for easy navig

Birkir Gudjonsson 360 Dec 4, 2022
:musical_note: [iOS & Android] An open source ambient sound mixer

Kakapo native is an ambient sound mixer for relaxation or productivity. Built with React Native it is available in both the Apple App Store and Google

Daniel Levitt 139 Nov 11, 2022
A free forever meditation app built with React Native.

?? Hey Linda A free forever meditation app built with React Native. Features meditate track progress dark mode more than 100+ meditations current stre

Hey Linda 484 Dec 4, 2022
Crypto Capsule: a free tool used for sending cryptocurrencies into the future

?? ⏲️ Crypto Capsule Crypto Capsule is a free tool used for sending cryptocurrencies into the future. It is essentially a timelock-as-a-service. It is

null 10 Jul 2, 2022
TweetDeck for GitHub - Filter Issues, Activities & Notifications - Web, Mobile & Desktop with 99% code sharing between them

DevHub: GitHub Notifications & Activities on your Desktop Android, iOS, Web & Desktop with 95%+ code sharing between them thanks to React Native + Rea

DevHub 8.6k Dec 3, 2022
Mobile, desktop and website Apps with the same code

Mobile, desktop and website Apps with the same code This project shows how the source code can be architectured to run on multiple devices. As of now,

Benoit VALLON 5.2k Dec 4, 2022
The Art World in Your Pocket or Your Trendy Tech Company's Tote, Artsy's mobile app.

Meta State: production Point People: Brian Beckerle, David Sheldrick CI : This is an Artsy OSS project. Other mobile projects are Energy and Eidolon,

Artsy 3.1k Dec 4, 2022
Rocket.Chat mobile clients

Rocket.Chat Mobile Supported server versions: 0.70.0+ Supported iOS versions: 11+ Supported Android versions: 6.0+ Download Check our docs for beta an

Rocket.Chat 1.5k Dec 4, 2022
:iphone: React-Native mobile application for Buttercup

Buttercup Mobile The mobile application for the Buttercup Credentials Manager. About This repository holds the source for the Buttercup mobile applica

Buttercup 355 Nov 28, 2022
React Native mobile app for Magento 2.x

Open source React Native mobile app for Magento 2 Magento React Native is a fully functional eCommerce App for your Magento 2 website. It uses Magento

Dima Portenko 290 Dec 1, 2022
Audiobook mobile application accomplished with React Native and React ecosystem, just a single code base.

Audiobook App Open Source Audiobook mobile application accomplished with React Native and React ecosystem, just a single code base for both android an

null 282 Dec 3, 2022
Short-term memory training game (mobile). Built with React Native and Redux.

sequent Short-term memory training game. Remember the sequential order of numbers displaying on your screen. Free, no ads, open source. Created in Rea

Przemek Sobstel 82 Nov 10, 2022
A mobile application to deploy private VPN servers in the cloud with DNS ad-blocking and other features

ZudVPN A mobile application to deploy a personal VPN server in the cloud (DigitalOcean, AWS, GCP, Azure and others) with DNS ad-blocking and other fea

ZudVPN 117 Nov 20, 2022
Mobile app for Chatwoot - React Native

Mobile app for chatwoot platform. Built with React Native Chatwoot is an opensource alternative to Intercom, Zendesk, Drift, Crisp etc. Supported Chat

Chatwoot 382 Dec 3, 2022
Gmail mobile app clone built with ReactNative

Gmail mobile app clone built with ReactNative

Princewill Iroka 132 Nov 26, 2022
Project management mobile app built with React Native

Project Management mobile app built with ReactNative App UI Mockup project_management_mobile_app3.mp4 App Screenshots Like this project? Don't forget

Princewill Iroka 169 Nov 26, 2022