the tishadow repl is available and evaluates commands in a persistent sand-boxed context.

to launch the repl enter the following command:

  tishadow repl

launchApp(appName), closeApp() and clearCache() methods available to interact with apps cached in the TiShadow app.

require(), Ti.include() and assets are relative the running app inside the tishadow app

note: you can now also pipe to the tishadow repl using the --pipe flag. have a look at this screencast


you can add spies on objects so that you can modify them from the repl at run time. in your code add the following command

addSpy(name, object)

this can be included as a comment which will automatically be uncommented when pushed using tishadow, for example


to get the object from the repl, simply use, e.g.


for alloy, since comments are removed at compile time you can use the following alloy.jmk to automatically inject spies on the $ object in your controllers, naming the spy with the file's name

from the browser

enter the following address in a browser window:


in the editor you can enter code and press command+s to deploy the code snippet to all connected devices. Have a look at the demo video.

coding from the webpage works much like the repl and variables are stored in a sand-boxed context


the tishadow appify command can be used to create a stand-alone app that is integrated with tishadow. the app automatically launches the contained tishadow bundle and connects to a pre-configured server. this allows connecting to the deployed app via the repl and/or push upgrades.

you may need to provide the --host, --port and/or --room configuration of the remote tishadow server you want the app to connect to. since the appify command generates a new project you will need to provide the destination path for the new project. E.g.

  $ mkdir ~/myapp
  $ tishadow appify -d ~/myapp --host --port 80 --room my_private_room

new: you can run the server with the --manage-versions flag and it will track bundle versions. apps (or appified apps) that connect with an old version will automatically upgrade. you may wish to use the deploy command instead of the run command, which sends new versions to your server without immediately pushing it out to connected devices.

see the following blog post for a guided example


you can capture screenshots of all connected devices using the following command:

  $ tishadow screenshot

the screenshots will be saved in png format in the /tmp directory or the path configured using the --screenshot-path flag when starting the server.

alternatively, instead of saving the screenshots you can stream them to the browser. use the following command:

  $ tishadow screenshot --screencast 1000 --scale 0.1

in the above example a screenshot is sent every 1000ms and scales the images to 10% of their height/width. Go to: http://localhost:3000/screencast to view the screencast.

tishadow server hosting

the tishadow server can be hosted on a number of paas providers. most however have limited support for web sockets. you may need to use the --long-polling flag when running the tishadow server.

you may wish to try it is a service designed specifically for tishadow appified apps. manages version deployment so you can use control which versions are deployed to the devices and even supports production a/b testing.