Siphon is shutting down on 27th July 2016. To our customers, users and supporters: unfortunately this is the end of the road for Siphon. Our long-term goal was to create the most developer friendly end-to-end publishing platform for mobile apps.

Due to some inherent limitations in the early design decisions that we made (in particular the inability to compile your own native modules with Siphon) we have come to the regrettable conclusion that this vision is not possible at this time. We hoped that these native bridged modules would mature and become less important over time, but this has turned out to not be the case.

All apps created using Siphon are fully compatible with the standard React Native framework and transferring your app should only take a few minutes. Please email us if you need any help migrating your app.

Thanks to everyone who supported us over the past few months.
/docs
Fundamentals Quickstart FAQ Native modules Base versions Running on your device How publishing works Assets Ignoring files Over-the-air updates Convert an existing React Native app Sharing Beta testing Collaborating in a team Tutorials Build a real-time chat app Build a YouTube video browser Using Facebook's SDK with Siphon Turn an existing React Native app into a Siphon app Siphon Sandbox iOS (App Store) Android (Google Play)
Frequently Asked Questions
What is this?

Siphon is a new workflow for mobile app development. We believe that despite the many recent advances in IDEs, languages and tooling, the process of building native mobile apps is still far too clunky.

Siphon apps are written in JavaScript with the React Native framework. Follow our quickstart tutorial to get started.

What can I do?

Please refer to our quickstart page to learn about Siphon's features.

How do I publish my app to the App Store and Google Play?

When you type in the siphon publish command we will ask you to enter your iOS developer account or Google Play publisher account details. We then build, sign and package an app binary for you behind-the-scenes.

The app binary is submitted to the App Store or Google Play on your behalf. It will be listed under your own account name.

To make changes to an app that is already listed, you can run siphon publish again and we will automatically detect whether the update can be issued over-the-air (usually) or if it requires a new binary to be submitted.

Publishing requires a paid plan for commercial apps. Please refer to the pricing page for more information.

How do I use assets in my app?

Siphon supports the asset format recommended by React Native:


<Image source={require('./my-image.png')} />

You should place your assets in the app directory alongside your JavaScript source files. Placing them in subdirectories is fine too.

When you run siphon push we will process these assets and host them for you. An end-user device will only download new or changed assets when it synchronises, saving time and bandwidth.

We recommend reading the official React Native guide on images and assets for more information.
How do I view console logs and errors?

Navigate to your app directory and type in siphon logs. Logs and error messages will be streamed from your device whenever this command is running.

Native modules

In order for us to ensure that your app behaves the same across the sandbox, simulator and developer devices we introduced a constraint: you can not link your own custom native modules to a Siphon app.

This makes it possible for us to say that you never need to open Xcode or Android Studio to use Siphon. But you may be left wondering how to use native functionality not provided by the React Native core library.

The good news is, we bundle lots of the most popular native modules for you behind-the-scenes. You can use them in your apps straight away; simply reference them in your JavaScript code.

See the list of available native modules

Please let us know if there are any native modules that you need for your app, and we will try to integrate them for everyone to use.

Third-party libraries

The app directory created by Siphon works like a typical Node.js project directory. You can install suitable third-party modules using npm install and the command-line tool will push the node_modules directory and bundle it with your app.

Please note that this only works for pure JavaScript libraries. We do not (and will not for the foreseeable future) support custom native modules. However we do include some popular native modules for you to use in your app.

Please let us know if there are any native modules that you need for your app, and we will try to integrate them for everyone to use.

Are over-the-air updates allowed by Apple?

Yes. Because React Native apps are written in JavaScript we fall nicely under Section 3.3.2 of the iOS Developer Program agreement. Hot pushes are explicitly allowed in this case.

Can I build Android apps with Siphon?

Yes! You can run them in the Siphon Sandbox app, which is available on both Apple's App Store and Google's Play Store.

Emulator and device support for Android is coming soon.

Change your app's base version

When you first run the siphon create command, we automatically assign your app a special value called a base version behind the scenes.

It ties your app to a particular version of React Native and also guarantees that a certain set of native modules are available to be referenced within your app's JavaScript code.

How to change your app's base version

Change your app's display name

By default, when you run or publish your app standalone (i.e. outside of the sandbox) it will appear with the app's internal name on the home screen.

For example, if you typed siphon create my-app when you first initialised the app, the text that appears under the app icon will say my-app.

To change this behaviour, edit the file named Siphonfile in the app directory and add a display_name key, so that it looks like something like this:


{
  "base_version": "0.4",
  "display_name": "My App"
}

Finally, run a siphon push to reflect the change. If your app is already listed on the App Store or Play Store, you will need to run siphon publish again to change its display name.

The display_name key has a maximum length of 32 characters and can contain any valid unicode characters. Please check the App Store and Play Store rules before you publish to make sure that the chosen display name is acceptable.
Ignoring files

By default, your app directory will include a .siphonignore file. This file is used by the Siphon client to decide which files in your app directory it should ignore when pushing your app or running it on the simulator.

The .siphonignore file uses the following rules:


# This is a comment

# Specify paths relative to your app directory to ignore them
my/directory
my/file.js

# You can use glob-style patterns also
*.swp # Ignore all files that have a .swp extension

Many Node.js modules are ignored by default to improve compatibility with existing React Native apps. If you wish to use one in your app that is being ignored, you can delete the corresponding entry in the .siphonignore file.

Permissions

Due to the nature of iOS and the way in which we allow you to run multiple apps in the sandbox, we have to be careful about apps requesting permissions (e.g. camera access, geolocation).

For example, the Geolocation API currently returns dummy GPS coordinates when your app runs in the sandbox.

How do over-the-air updates work?

For the vast majority updates (i.e. those that do not require a new version of React Native) we let you push changes to your users without going through the App Store approval process each time.

A user's device checks for updates when the app first loads, or when it enters the foreground after a set period of inactivity. Any problems communicating over the network are hidden from the user; the app will simply try to update itself again next time it enters the foreground.

To make this process fast and efficient, we generate diffs when your app bundle changes (i.e. when the app's JavaScript source code is modified) so that only the minimum needs to be sent over the network. It should typically take less than 5 seconds for most network connections.

In the case of images and other assets, we cache these on the user's device so that only new or changed assets need to be fetched over the network.

Watch the video
More docs
Fundamentals Quickstart FAQ Native modules Base versions Running on your device How publishing works Assets Ignoring files Over-the-air updates Convert an existing React Native app Sharing Beta testing Collaborating in a team Tutorials Build a real-time chat app Build a YouTube video browser Using Facebook's SDK with Siphon Turn an existing React Native app into a Siphon app Siphon Sandbox iOS (App Store) Android (Google Play)