0.0.3 • Public • Published

    React Native BLE Peripheral

    Native BLE Peripheral in React Native (no support for IOS at the moment)


    This is a simulator for a BLE peripheral, to help with testing BLE apps without an actual peripheral BLE device this project is not yet complete, for all ready parts see documentation below. (docs are not complete, feel free to improve them)

    Realease notes

    • fixed issues fixed on github repo in npm package - starting from version 1.2.0

    Still missing

    • this project have no support for IOS what so ever

    if you would like to contribute to this project or suggest more future features you're welcome to so via an issue or pull request.

    IOS support

    right now this package does not support IOS, so any one that wants to help and contribute the IOS support is more than welcome


    npm install react-native-ble-peripheral --save
    yarn add react-native-ble-peripheral

    npm page -

    Add permissions

    • In AndroidManifest.xml add:
     <uses-permission android:name="android.permission.BLUETOOTH"/>
     <uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>

    Project setup and initialization auto

    react-native link

    Project setup and initialization manually

    • In android/settings.gradle
    include ':react-native-ble-peripheral'
    project(':react-native-ble-peripheral').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-ble-peripheral/android')
    • In android/app/build.gradle
    dependencies {
       compile project(':react-native-ble-peripheral') // <--- add this
    • Register Module (in
    import com.himelbrand.forwardcalls.RNForwardCallsPackage;  // <--- import 
    public class MainActivity extends ReactActivity {
      protected List<ReactPackage> getPackages() {
          return Arrays.<ReactPackage>asList(
              new MainReactPackage(),
              new RNBLEPackage() // <--- Add this 



    import BLEPeripheral from 'react-native-ble-peripheral'

    Add Service

    BLEPeripheral.addService(UUID:string, primary:boolean)

    BLEPeripheral.addService('XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX', true) //for primary service
    BLEPeripheral.addService('XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX', false) //for non primary service

    Add Characteristic

    BLEPeripheral.addCharacteristicToService(ServiceUUID:string, UUID:string, permissions:number, properties:number) the link above is for permissions and properties constants info


    • 1 - Readable
    • 2 - Readable Encrypted
    • 4 - Readable Encrypted MITM (Man-in-the-middle) Protection
    • 16 - Writable
    • 32 - Writable Encrypted
    • 64 - Writable Encrypted MITM Protection
    • 128 - Writable Signed
    • 256 - Writable Signed MITM


    • 1 - Broadcastable
    • 2 - Readable
    • 4 - Writable without response
    • 8 - Writable
    • 16 - Supports notification
    • 32 - Supports indication
    • 64 - Signed Write
    • 128 - Extended properties
    BLEPeripheral.addCharacteristicToService('XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX', 'XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX', 16 | 1, 8) //this is a Characteristic with read and write permissions and notify property

    Notify to devices

    BLEPeripheral.sendNotificationToDevices(ServiceUUID:string, CharacteristicUUID:string, data:byte[])

    • note #1: in js it's not really a byte array, but an array of numbers
    • note #2: the CharacteristicUUID must be of a Characteristic with notify property
    BLEPeripheral.sendNotificationToDevices('XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX', 'XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX', [0x10,0x01,0xA1,0x80]) //sends a notification to all connected devices that, using the char uuid given

    start Advertising

    note:use this only after adding services and characteristics

      .then(res => {
      }).catch(error => {

    In case of error, these are the error codes:

    • 1 - Failed to start advertising as the advertise data to be broadcasted is larger than 31 bytes.
    • 2 - Failed to start advertising because no advertising instance is available.
    • 3 - Failed to start advertising as the advertising is already started.
    • 4 - Operation failed due to an internal error.
    • 5 - This feature is not supported on this platform.

    stop Advertising


    Set name (optional)


    This method sets the name of the device broadcast, before calling start.


    DOCs and project is under development Any help would be welcome... feel free to contact me


    npm i react-native-ble-peripheral-2

    DownloadsWeekly Downloads






    Unpacked Size

    138 kB

    Total Files


    Last publish


    • alexaiinno