12.1 The App Builder Wizard:

The first step is to create a new App. You can generate the files from a template, write them yourself, or you can use the dx app creation wizard. For your first project, I recommend the last option.


dx-app-wizard
 DNAnexus App Wizard, API v1.0.0
 
 Basic Metadata
 
 Please enter basic metadata fields that will be used to describe your app.
 Optional fields are denoted by options with square brackets.  At the end of
 this wizard, the files necessary for building your app will be generated
 from the answers you provide.
 
 The name of your app must be unique on the DNAnexus platform.
 After creating your app for the first time, you will be able to publish new
 versions using the same app name.  App names are restricted to alphanumeric
 characters (a-z, A-Z, 0-9), and the characters ".", "_", and "-".
 App Name:  findNi 

 The title, if provided, is what is shown as the name of your app on
 the website.  It can be any valid UTF-8 string.
 Title []:  Find Ni 
 

 
 The summary of your app is a short phrase or one-line description
 of what your app does.  It can be any UTF-8 human-readable string.
 Summary []:  Finds words that begin with ni
 

 
 You can publish multiple versions of your app, and the version of
 your app is a string with which to tag a particular version.  We encourage
 the use of Semantic Versioning for labeling your apps (see
 http://semver.org/ for more details).
 Version [0.0.1]:  0.0.1
 

 
 Input Specification
 
 You will now be prompted for each input parameter to your app.  Each
 parameter should have a unique name that uses only the underscore "_" and
 alphanumeric characters, and does not start with a number.
 
 1st input name (<ENTER> to finish):  wordsFile
 Label (optional human-readable name) []:  File of all words
 Your input parameter must be of one of the following classes:
 applet         array:file     array:record   file           int
 array:applet   array:float    array:string   float          record
 array:boolean  array:int      boolean        hash           string
 
 Choose a class (<TAB> twice for choices):  file
 This is an optional parameter [y/n]:  n
 
 2nd input name (<ENTER> to finish):

 Output Specification
 
 You will now be prompted for each output parameter of your app.  Each
 parameter should have a unique name that uses only the underscore "_" and
 alphanumeric characters, and does not start with a number.
 
 1st output name (<ENTER> to finish):  outfile
 Label (optional human-readable name) []:  Output file of words
 Choose a class (<TAB> twice for choices):  file
 
 2nd output name (<ENTER> to finish):

 Timeout Policy
 
 Set a timeout policy for your app. Any single entry point of the
 app that runs longer than the specified timeout will fail with a
 TimeoutExceeded error. Enter an int greater than 0 with a single-letter
 suffix (m=minutes, h=hours, d=days) (e.g. "48h").
 Timeout policy [48h]:  48h

 Template Options
 
 You can write your app in any programming language, but we provide
 templates for the following supported languages: Python, bash
 Programming language:  bash

 Access Permissions
 If you request these extra permissions for your app, users will see this
 fact when launching your app, and certain other restrictions will apply.
 For more information, see
 https://wiki.dnanexus.com/App-Permissions.
 
 Access to the Internet (other than accessing the DNAnexus API).
 Will this app need access to the Internet? [y/N]:  N

 Direct access to the parent project. This is not needed if your app
 specifies outputs,     which will be copied into the project after it's
 done running.
 Will this app need access to the parent project? [y/N]:  N

 System Requirements
 
 Common AWS instance types:
 +--------------------------------------------+
 |Name         |Memory_GB|Storage_GB|CPU_Cores|
 +-------------+---------+----------+---------|
 |mem1_ssd1_x2 |3.8      |32        |2        |
 |mem1_ssd1_x4 |7.5      |80        |4        |
 |mem1_ssd1_x8 |15.0     |160       |8        |
 |mem1_ssd1_x16|30.0     |320       |16       |
 |mem1_ssd1_x32|60.0     |640       |32       |
 |mem2_ssd1_x2 |7.5      |32        |2        |
 |mem2_ssd1_x4 |15.0     |80        |4        |
 |mem2_ssd1_x8 |30.0     |160       |8        |
 |mem3_ssd1_x2 |15.0     |32        |2        |
 |mem3_ssd1_x4 |30.5     |80        |4        |
 |mem3_ssd1_x8 |61.0     |160       |8        |
 |mem3_ssd1_x16|122.0    |320       |16       |
 |mem3_ssd1_x32|244.0    |640       |32       |
 |mem1_ssd2_x2 |3.8      |160       |2        |
 |mem1_ssd2_x4 |7.5      |320       |4        |
 |mem1_ssd2_x8 |15       |640       |8        |
 |mem1_ssd2_x16|30       |1280      |16       |
 |mem1_ssd2_x36|60       |2880      |36       |
 +--------------------------------------------+
 Common Azure instance types:
 +--------------------------------------------------+
 |Name               |Memory_GB|Storage_GB|CPU_Cores|
 +-------------------+---------+----------+---------|
 |azure:mem1_ssd1_x2 |3.9      |32        |2        |
 |azure:mem1_ssd1_x4 |7.8      |64        |4        |
 |azure:mem1_ssd1_x8 |15.7     |128       |8        |
 |azure:mem1_ssd1_x16|31.4     |256       |16       |
 |azure:mem2_ssd1_x1 |3.5      |128       |1        |
 |azure:mem2_ssd1_x2 |7.0      |128       |2        |
 |azure:mem2_ssd1_x4 |14.0     |128       |4        |
 |azure:mem2_ssd1_x8 |28.0     |256       |8        |
 |azure:mem2_ssd1_x16|56.0     |512       |16       |
 |azure:mem3_ssd1_x2 |14.0     |128       |2        |
 |azure:mem3_ssd1_x4 |28.0     |128       |4        |
 |azure:mem3_ssd1_x8 |56.0     |256       |8        |
 |azure:mem3_ssd1_x16|112.0    |512       |16       |
 |azure:mem3_ssd1_x20|140.0    |640       |20       |
 |azure:mem4_ssd1_x2 |28.0     |128       |2        |
 |azure:mem4_ssd1_x4 |56.0     |128       |4        |
 |azure:mem4_ssd1_x8 |112.0    |256       |8        |
 |azure:mem4_ssd1_x16|224      |512       |16       |
 |azure:mem4_ssd1_x32|448      |1024      |32       |
 +--------------------------------------------------+
 Default instance type: The instance type you select here will apply
 to all entry points in your app unless you override it. See
 https://wiki.dnanexus.com/API-Specification-v1.0.0/Instance-Types
 for more information.
 Choose an instance type for your app [mem1_ssd1_x4]:  mem1_ssd_x4

 *** Generating DNAnexus App Template... ***
 
 Your app specification has been written to the dxapp.json file. You can
 specify more app options by editing this file directly (see
 https://wiki.dnanexus.com/Developer-Portal for complete documentation).
 
 Created files:
      findNi/Readme.developer.md
      findNi/Readme.md
      findNi/dxapp.json
      findNi/resources/
      findNi/src/
      findNi/src/findNi.sh
      findNi/test/
 
 App directory created!  See https://wiki.dnanexus.com/Developer-Portal for
 tutorials on how to modify these files, or run "dx build findNi" or "dx
 build --create-app findNi" while logged in with dx.
 
 Running the DNAnexus build utility will create an executable on the
 DNAnexus platform.  Any files found in the resources directory will
 be uploaded so that they will be present in the root directory when the
 executable is run.
 

Since the wizard is interactive, I have already performed this step and the example directory contains a copy of the output:

cp -R ../examples/findNi_original ./ex/findNi