Home | History | Annotate | Download | only in devcycle
      1 {{+bindTo:partials.standard_nacl_api}}
      2 
      3 <section id="running">
      4 <h1 id="running">Running</h1>
      5 <div class="contents local" id="contents" style="display: none">
      6 <ul class="small-gap">
      7 <li><a class="reference internal" href="#introduction" id="id5">Introduction</a></li>
      8 <li><a class="reference internal" href="#portable-native-client-pnacl-applications" id="id6">Portable Native Client (PNaCl) applications</a></li>
      9 <li><a class="reference internal" href="#native-client-applications-and-the-chrome-web-store" id="id7">Native Client applications and the Chrome Web Store</a></li>
     10 <li><p class="first"><a class="reference internal" href="#prerequisites" id="id8">Prerequisites</a></p>
     11 <ul class="small-gap">
     12 <li><a class="reference internal" href="#browser-and-pepper-versions" id="id9">Browser and Pepper versions</a></li>
     13 <li><a class="reference internal" href="#chrome-cache" id="id10">Chrome Cache</a></li>
     14 </ul>
     15 </li>
     16 <li><p class="first"><a class="reference internal" href="#requirements" id="id11">Requirements</a></p>
     17 <ul class="small-gap">
     18 <li><a class="reference internal" href="#native-client-flag" id="id12">Native Client flag</a></li>
     19 <li><a class="reference internal" href="#web-server" id="id13">Web server</a></li>
     20 </ul>
     21 </li>
     22 <li><a class="reference internal" href="#technique-1-local-server" id="id14">Technique 1: Local server</a></li>
     23 <li><a class="reference internal" href="#technique-2-packaged-application-loaded-as-an-unpacked-extension" id="id15">Technique 2: Packaged application loaded as an unpacked extension</a></li>
     24 <li><a class="reference internal" href="#technique-3-hosted-application-loaded-as-an-unpacked-extension" id="id16">Technique 3: Hosted application loaded as an unpacked extension</a></li>
     25 <li><a class="reference internal" href="#technique-4-chrome-web-store-application-with-trusted-testers" id="id17">Technique 4: Chrome Web Store application with trusted testers</a></li>
     26 </ul>
     27 
     28 </div><section id="introduction">
     29 <h2 id="introduction">Introduction</h2>
     30 <p>This document describes how to run Native Client applications during
     31 development.</p>
     32 <p>The workflow for PNaCl applications is straightfoward and will only be discussed
     33 briefly. For NaCl applications distributed through the web-store, there is a
     34 number of options and these will be discussed more in-depth.</p>
     35 </section><section id="portable-native-client-pnacl-applications">
     36 <h2 id="portable-native-client-pnacl-applications">Portable Native Client (PNaCl) applications</h2>
     37 <p>Running PNaCl applications from the open web is enabled in Chrome version 31 and
     38 above; therefore, no special provisions are required to run and test such
     39 applications locally. An application that uses a PNaCl module can be tested
     40 similarly to any other web application that only consists of HTML, CSS and
     41 JavaScript.</p>
     42 <p>To better simulate a production environment, it&#8217;s recommended to start a local
     43 web server to serve the application&#8217;s files. The NaCl SDK comes with a simple
     44 local server built in, and the process of using it to run PNaCl applications is
     45 described in <a class="reference internal" href="/native-client/devguide/tutorial/tutorial-part1.html#tutorial-step-2"><em>the tutorial</em></a>.</p>
     46 </section><section id="native-client-applications-and-the-chrome-web-store">
     47 <h2 id="native-client-applications-and-the-chrome-web-store">Native Client applications and the Chrome Web Store</h2>
     48 <p>Before reading about how to run Native Client applications, it&#8217;s important to
     49 understand a little bit about how Native Client applications are distributed.
     50 As explained in <a class="reference internal" href="/native-client/devguide/distributing.html"><em>Distributing Your Application</em></a>, Native
     51 Client applications must currently be distributed through the <strong>Chrome Web
     52 Store (CWS)</strong>. Applications in the CWS are one of three types:</p>
     53 <ul class="small-gap">
     54 <li>A <strong>hosted application</strong> is an application that you host on a server of your
     55 choice. To distribute an application as a hosted application, you upload
     56 application metadata to the CWS.</li>
     57 <li>A <strong>packaged application</strong> is an application that is hosted in the CWS and
     58 downloaded to the user&#8217;s machine. To distribute an application as a packaged
     59 application, you upload the entire application, including all application
     60 assets and metadata, to the CWS.</li>
     61 <li>An <strong>extension</strong> is a packaged application that has a tiny UI component
     62 (extensions are typically used to extend the functionality of the Chrome
     63 browser). To distribute an application as an extension, you upload the entire
     64 application, including all application assets and metadata, to the CWS.</li>
     65 </ul>
     66 <p>It&#8217;s clearly not convenient to package and upload files to the Chrome Web Store
     67 every time you want to run a new build of your application, but there are four
     68 alternative techniques you can use to run the application during development.
     69 These techniques are listed in the following table and described in detail
     70 below. Each technique has certain requirements (NaCl flag, web server, and/or
     71 CWS metadata); these are explained in the <a class="reference internal" href="#requirements"><em>Requirements</em></a>
     72 section below.</p>
     73 <table border="1" class="docutils">
     74 <colgroup>
     75 </colgroup>
     76 <thead valign="bottom">
     77 <tr class="row-odd"><th class="head">#</th>
     78 <th class="head">Technique</th>
     79 <th class="head">Requires NaCl flag</th>
     80 <th class="head">Requires Web Server</th>
     81 <th class="head">Requires CWS Metadata</th>
     82 <th class="head">Description</th>
     83 </tr>
     84 </thead>
     85 <tbody valign="top">
     86 <tr class="row-even"><td>1</td>
     87 <td>Local server</td>
     88 <td><img alt="CHK" src="/native-client/images/check-red.png" /></td>
     89 <td><img alt="CHK" src="/native-client/images/check-red.png" /></td>
     90 <td>&nbsp;</td>
     91 <td>Run a local server and simply point your browser to your application on
     92 the server.</td>
     93 </tr>
     94 <tr class="row-odd"><td>2</td>
     95 <td>Packaged application loaded as an unpacked extension</td>
     96 <td>&nbsp;</td>
     97 <td>&nbsp;</td>
     98 <td><img alt="CHK" src="/native-client/images/check-red.png" /></td>
     99 <td>Load your packaged application into Chrome as an unpacked extension and
    100 run it without a server. An unpacked extension is simply an application
    101 whose source and metadata files are located in a plain (unzipped) folder
    102 on your development machine. The CWS manifest file (explained below) must
    103 specify a <code>local_path</code> field.</td>
    104 </tr>
    105 <tr class="row-even"><td>3</td>
    106 <td>Hosted application loaded as an unpacked extension</td>
    107 <td>&nbsp;</td>
    108 <td><img alt="CHK" src="/native-client/images/check-red.png" /></td>
    109 <td><img alt="CHK" src="/native-client/images/check-red.png" /></td>
    110 <td>Load your hosted application into Chrome as an unpacked extension and run
    111 it from a server (which can be a local server). The CWS manifest file
    112 must specify a <code>web_url</code> field.</td>
    113 </tr>
    114 <tr class="row-odd"><td>4</td>
    115 <td>CWS application with untrusted testers</td>
    116 <td>&nbsp;</td>
    117 <td>&nbsp;</td>
    118 <td><img alt="CHK" src="/native-client/images/check-red.png" /></td>
    119 <td>This is the standard technique for distributing a packaged or hosted
    120 application in the CWS, but you can limit the application to a few
    121 trusted testers. This technique requires a server if your application is
    122 a hosted application.</td>
    123 </tr>
    124 </tbody>
    125 </table>
    126 <p>Which of the above techniques you use to run your application during development
    127 is largely a matter of personal preference (i.e., would you rather start a local
    128 server or create CWS metadata?). As a general rule, once you have an idea of how
    129 you plan to distribute your application, you should use the corresponding
    130 technique during development. Choosing a distribution option depends on a number
    131 of factors such as application size, application start-up time, hosting costs,
    132 offline functionality, etc. (see <a class="reference internal" href="/native-client/devguide/distributing.html"><em>Distributing Your Application</em></a> for details), but you don&#8217;t need to make a decision about how
    133 to distribute your application at the outset.</p>
    134 <p>The next two sections of this document describe a couple of prerequisites for
    135 running applications during development, and explain the three requirements
    136 listed in the table above (NaCl flag, web server, and CWS metadata). The
    137 subsequent sections of the document provide instructions for how to use each of
    138 the four techniques.</p>
    139 </section><section id="prerequisites">
    140 <h2 id="prerequisites">Prerequisites</h2>
    141 <section id="browser-and-pepper-versions">
    142 <h3 id="browser-and-pepper-versions">Browser and Pepper versions</h3>
    143 <p>Before you run a new build of your application, make sure that you&#8217;re using the
    144 correct version of Chrome. Each version of Chrome supports a corresponding
    145 version of the Pepper API. You (and your users) must use a version of Chrome
    146 that is equal to or higher than the version of the Pepper API that your
    147 application uses. For example, if you compiled your application using the
    148 <code>pepper_31</code> bundle, your application uses the Pepper 31 API, and you must run
    149 the application in Chrome 31 or higher. To check which version of Chrome you&#8217;re
    150 using, type <code>about:version</code> in the Chrome address bar.</p>
    151 </section><section id="chrome-cache">
    152 <span id="cache"></span><h3 id="chrome-cache"><span id="cache"></span>Chrome Cache</h3>
    153 <p>Chrome caches resources aggressively. You should disable Chrome&#8217;s cache whenever
    154 you are developing a Native Client application in order to make sure Chrome
    155 loads new versions of your application. Follow the instructions <a class="reference internal" href="/native-client/devguide/tutorial/tutorial-part1.html#tutorial-step-3"><em>in the
    156 tutorial</em></a>.</p>
    157 </section></section><section id="requirements">
    158 <span id="id1"></span><h2 id="requirements"><span id="id1"></span>Requirements</h2>
    159 <section id="native-client-flag">
    160 <span id="flag"></span><h3 id="native-client-flag"><span id="flag"></span>Native Client flag</h3>
    161 <p>Native Client is automatically enabled for applications that are installed from
    162 the Chrome Web Store. To enable Native Client for applications that are not
    163 installed from the Chrome Web Store, you must explicitly turn on the Native
    164 Client flag in Chrome as follows:</p>
    165 <ol class="arabic simple">
    166 <li>Type <code>about:flags</code> in the Chrome address bar.</li>
    167 <li>Scroll down to &#8220;Native Client&#8221;.</li>
    168 <li>If the link below &#8220;Native Client&#8221; says &#8220;Disable&#8221;, then Native Client is
    169 already enabled and you don&#8217;t need to do anything else.</li>
    170 <li>If the link below &#8220;Native Client&#8221; says &#8220;Enable&#8221;:<ul class="small-gap">
    171 <li>Click the &#8220;Enable&#8221; link.</li>
    172 <li>Click the &#8220;Relaunch Now&#8221; button in the bottom of the screen. <strong>Native
    173 Client will not be enabled until you relaunch your browser</strong>. All browser
    174 windows will restart when you relaunch Chrome.</li>
    175 </ul>
    176 </li>
    177 </ol>
    178 <p>If you enable the Native Client flag and still can&#8217;t run applications from
    179 outside the Chrome Web Store, you may need to enable the Native Client plugin:</p>
    180 <ol class="arabic simple">
    181 <li>Type <code>about:plugins</code> in the Chrome address bar.</li>
    182 <li>Scroll down to &#8220;Native Client&#8221;.</li>
    183 <li>If the link below &#8220;Native Client&#8221; says &#8220;Enable&#8221;, click the link to enable
    184 the Native Client plugin. You do not need to relaunch Chrome after enabling
    185 the Native Client plugin.</li>
    186 </ol>
    187 </section><section id="web-server">
    188 <span id="id2"></span><h3 id="web-server"><span id="id2"></span>Web server</h3>
    189 <p>For security reasons, Native Client applications must come from a server (you
    190 can&#8217;t simply drag HTML files into your browser). The Native Client SDK comes
    191 with a lightweight Python web server that you can run to serve your application
    192 locally. The server can be invoked from a Makefile. Here is how to run the
    193 server:</p>
    194 <pre>
    195 $ cd examples
    196 $ make serve
    197 </pre>
    198 <p>By default, the server listens for requests on port 5103. You can use the server
    199 to run most applications under the <code>examples</code> directory where you started the
    200 server. For example, to run the <code>flock</code> example in the SDK, start the server
    201 and point your browser to <code>http://localhost:5103/demo/flock/</code>.</p>
    202 <p>Some of the applications need special flags to Chrome, and must be run with the
    203 <code>make run</code> command. See <a class="reference internal" href="/native-client/sdk/examples.html#id1"><em>Run the SDK examples</em></a> for more details.</p>
    204 <section id="chrome-web-store-metadata">
    205 <span id="metadata"></span><h4 id="chrome-web-store-metadata"><span id="metadata"></span>Chrome Web Store metadata</h4>
    206 <p>Applications published in the Chrome Web Store must be accompanied by CWS
    207 metadata; specifically, a Chrome Web Store manifest file named
    208 <code>manifest.json</code>, and at least one icon.</p>
    209 <p>Below is an example of a CWS manifest file for a <strong>hosted application</strong>:</p>
    210 <pre class="prettyprint">
    211 {
    212   &quot;name&quot;: &quot;My NaCl App&quot;,
    213   &quot;description&quot;: &quot;Simple game implemented using Native Client&quot;,
    214   &quot;version&quot;: &quot;0.1&quot;,
    215   &quot;icons&quot;: {
    216     &quot;128&quot;: &quot;icon128.png&quot;
    217   },
    218   &quot;app&quot;: {
    219     &quot;urls&quot;: [
    220       &quot;http://mysubdomain.example.com/";
    221     ],
    222     &quot;launch&quot;: {
    223       &quot;web_url&quot;: &quot;http://mysubdomain.example.com/my_app_main_page.html";
    224     }
    225   }
    226 }
    227 </pre>
    228 <p>For a <strong>packaged application</strong>, you can omit the urls field, and replace the
    229 <code>web_url</code> field with a <code>local_path</code> field, as shown below:</p>
    230 <pre class="prettyprint">
    231 {
    232   &quot;name&quot;: &quot;My NaCl App&quot;,
    233   &quot;description&quot;: &quot;Simple game implemented using Native Client&quot;,
    234   &quot;version&quot;: &quot;0.1&quot;,
    235   &quot;icons&quot;: {
    236     &quot;16&quot;: &quot;icon16.png&quot;,
    237     &quot;128&quot;: &quot;icon128.png&quot;
    238   },
    239   &quot;app&quot;: {
    240     &quot;launch&quot;: {
    241       &quot;local_path&quot;: &quot;my_app_main_page.html&quot;
    242     }
    243   }
    244 }
    245 </pre>
    246 <p>You must put the <code>manifest.json</code> file in the same directory as your
    247 application&#8217;s main HTML page.</p>
    248 <p>If you don&#8217;t have icons for your application, you can use the following icons as
    249 placeholders:</p>
    250 <p><img alt="ICON16" src="/native-client/images/icon16.png" /></p>
    251 <p><img alt="ICON128" src="/native-client/images/icon128.png" /></p>
    252 <p>Put the icons in the same directory as the CWS manifest file. For more
    253 information about CWS manifest files and application icons, see:</p>
    254 <ul class="small-gap">
    255 <li><a class="reference external" href="/webstore/get_started_simple">Chrome Web Store Tutorial: Getting Started</a></li>
    256 <li><a class="reference external" href="/extensions/manifest">Chrome Web Store Formats: Manifest Files</a></li>
    257 </ul>
    258 </section></section></section><section id="technique-1-local-server">
    259 <h2 id="technique-1-local-server">Technique 1: Local server</h2>
    260 <p>To run your application from a local server:</p>
    261 <ul class="small-gap">
    262 <li>Enable the <a class="reference internal" href="#flag"><em>Native Client flag</em></a> in Chrome.</li>
    263 <li>Start a <a class="reference internal" href="#web-server"><em>local web server</em></a>.</li>
    264 <li>Put your application under the examples directory in the SDK bundle you are
    265 using (e.g., in the directory <code>pepper_31/examples/my_app</code>).</li>
    266 <li>Access your application on the local server by typing the location of its
    267 HTML file in Chrome, e.g.:
    268 <code>http://localhost:5103/my_app/my_app_main_page.html</code>.</li>
    269 </ul>
    270 <aside class="note">
    271 <strong>Note:</strong> You don&#8217;t have to use a local web server&#8212;you can use another
    272 server if you already have one running. You must still enable the Native
    273 Client flag in order to run your application from the server.
    274 </aside>
    275 </section><section id="technique-2-packaged-application-loaded-as-an-unpacked-extension">
    276 <h2 id="technique-2-packaged-application-loaded-as-an-unpacked-extension">Technique 2: Packaged application loaded as an unpacked extension</h2>
    277 <p>For development purposes, Chrome lets you load a packaged application as an
    278 unpacked extension. To load and run your packaged application as an unpacked
    279 extension:</p>
    280 <ol class="arabic simple">
    281 <li>Create a Chrome Web Store manifest file and one or more icons for your
    282 application.<ul class="small-gap">
    283 <li>Follow the instructions above under Chrome Web Store metadata to create
    284 these files.</li>
    285 <li>Note that the CWS manifest file should contain the <code>local_path</code> field
    286 rather than the <code>web_url</code> field.</li>
    287 </ul>
    288 </li>
    289 <li>Put the CWS manifest file and the application icon(s) in the same directory
    290 as your application&#8217;s main HTML page.</li>
    291 <li>Load the application as an unpacked extension in Chrome:<ul class="small-gap">
    292 <li>Bring up the extensions management page in Chrome by clicking the menu
    293 icon <img alt="menu-icon" src="/native-client/images/menu-icon.png" /> and choosing <strong>Tools &gt; Extensions</strong>.</li>
    294 <li>Check the box for <strong>Developer mode</strong> and then click the <strong>Load unpacked
    295 extension</strong> button:
    296 <img alt="extensions" src="/native-client/images/extensions-management.png" /></li>
    297 <li>In the file dialog that appears, select your application directory. Unless
    298 you get an error dialog, you&#8217;ve now installed your app in Chrome.</li>
    299 </ul>
    300 </li>
    301 <li>Open a new tab in Chrome and click the <strong>Apps</strong> link at the bottom of the
    302 page to show your installed apps:
    303 <img alt="new-tab-apps" src="/native-client/images/new-tab-apps.png" /></li>
    304 <li>The icon for your newly installed app should appear on the New Tab page.
    305 Click the icon to launch the app.</li>
    306 </ol>
    307 <p>For additional information about how to create CWS metadata and load your
    308 application into Chrome (including troubleshooting information), see the
    309 <a class="reference external" href="/webstore/get_started_simple">Chrome Web Store Tutorial: Getting Started</a>.</p>
    310 <p>See also <a class="reference internal" href="/native-client/sdk/examples.html#run-sdk-examples-as-packaged"><em>Run the SDK examples as packaged apps</em></a>.</p>
    311 </section><section id="technique-3-hosted-application-loaded-as-an-unpacked-extension">
    312 <h2 id="technique-3-hosted-application-loaded-as-an-unpacked-extension">Technique 3: Hosted application loaded as an unpacked extension</h2>
    313 <p>For development purposes, Chrome lets you load a hosted application as an
    314 unpacked extension. To load and run your hosted application as an unpacked
    315 extension:</p>
    316 <ol class="arabic simple">
    317 <li>Start a web server to serve your application.<ul class="small-gap">
    318 <li>You can use the <a class="reference internal" href="#web-server"><em>local web server</em></a> included with the
    319 Native Client SDK if you want.</li>
    320 </ul>
    321 </li>
    322 <li>Upload your application (.html, .nmf, .nexe, .css, .js, image files, etc.)
    323 to the server.<ul class="small-gap">
    324 <li>If you&#8217;re using the local server included with the Native Client SDK,
    325 simply put your application under the <code>examples</code> directory in the SDK
    326 bundle you are using (e.g., in the directory
    327 <code>pepper_31/examples/my_app</code>).</li>
    328 </ul>
    329 </li>
    330 <li>Create a Chrome Web Store manifest file and one or more icons for your
    331 application.<ul class="small-gap">
    332 <li>Follow the instructions above under <a class="reference internal" href="#metadata"><em>Chrome Web Store metadata</em></a> to create these files.</li>
    333 <li>In the CWS manifest file, the <code>web_url</code> field should specify the
    334 location of your application on your server. If you&#8217;re using the local
    335 server included with the SDK, the <code>web_url</code> field should look something
    336 like <code>http://localhost:5103/my_app/my_app_main_page.html</code>.</li>
    337 </ul>
    338 </li>
    339 <li>Put the CWS manifest file and the application icon(s) in the same directory
    340 as your application&#8217;s main HTML page.</li>
    341 <li>Load the application as an unpacked extension in Chrome:<ul class="small-gap">
    342 <li>Bring up the extensions management page in Chrome by clicking the menu
    343 icon <img alt="menu-icon" src="/native-client/images/menu-icon.png" /> and choosing <strong>Tools &gt; Extensions</strong>.</li>
    344 <li>Check the box for <strong>Developer mode</strong> and then click the <strong>Load unpacked
    345 extension</strong> button:
    346 <img alt="extensions" src="/native-client/images/extensions-management.png" /></li>
    347 <li>In the file dialog that appears, select your application directory. Unless
    348 you get an error dialog, you&#8217;ve now installed your app in Chrome.</li>
    349 </ul>
    350 </li>
    351 <li>Open a new tab in Chrome and click the <strong>Apps</strong> link at the bottom of the
    352 page to show your installed apps:
    353 <img alt="new-tab-apps" src="/native-client/images/new-tab-apps.png" /></li>
    354 <li>The icon for your newly installed app should appear on the New Tab page.
    355 Click the icon to launch the app.</li>
    356 </ol>
    357 <p>For additional information about how to create CWS metadata and load your
    358 application into Chrome (including troubleshooting information), see the
    359 <a class="reference external" href="/webstore/get_started_simple">Chrome Web Store Tutorial: Getting Started</a>.</p>
    360 </section><section id="technique-4-chrome-web-store-application-with-trusted-testers">
    361 <h2 id="technique-4-chrome-web-store-application-with-trusted-testers">Technique 4: Chrome Web Store application with trusted testers</h2>
    362 <p>When you&#8217;re ready to test your application more broadly, you can upload the
    363 application to the Chrome Web Store and let some trusted testers run it. Here
    364 is how to do so:</p>
    365 <ol class="arabic simple">
    366 <li>Create the Chrome Web Store metadata required to publish your application:<ul class="small-gap">
    367 <li>First, create a Chrome Web Store manifest file and one or more icons for
    368 your application, as described above under <a class="reference internal" href="#metadata"><em>Chrome Web Store metadata</em></a>. Note that packaged applications must have at least two icons
    369 (a 16x16 icon and a 128x128 icon).</li>
    370 <li>You also need to create the following additional assets before you can
    371 publish your application:<ul class="small-gap">
    372 <li>a screenshot (size must be 640x400 or 1280x800)</li>
    373 <li>a promotional image called a &#8220;small tile&#8221; (size must be 440x280)</li>
    374 </ul>
    375 </li>
    376 </ul>
    377 </li>
    378 <li>For a <strong>packaged application</strong>:<ul class="small-gap">
    379 <li>Create a zip file with the CWS manifest file, the application icons, and
    380 all your application files (.html, .nmf, .nexe, .css, .js, image files,
    381 etc.)</li>
    382 </ul>
    383 </li>
    384 <li>For a <strong>hosted application</strong>:<ul class="small-gap">
    385 <li>Create a zip file with the CWS manifest file and the application icon(s).</li>
    386 <li>Upload the application files (.html, .nmf, .nexe, .css, .js, image files,
    387 etc.) to the server on which the application is being hosted.</li>
    388 <li>Use <a class="reference external" href="http://www.google.com/webmasters/tools/">Google Webmaster Tools</a> to
    389 verify ownership of the web site on which the application runs.</li>
    390 </ul>
    391 </li>
    392 <li>Log in to the <a class="reference external" href="https://chrome.google.com/webstore/developer/dashboard">Chrome Web Store Developer Dashboard</a>.<ul class="small-gap">
    393 <li>The first time you log in, click the &#8220;Add new item&#8221; button to display the
    394 Google Chrome Web Store Developer Agreement. Review and accept the
    395 agreement and then return to the <a class="reference external" href="https://chrome.google.com/webstore/developer/dashboard">Developer Dashboard</a>.</li>
    396 </ul>
    397 </li>
    398 <li>Click &#8220;Edit your tester accounts&#8221; at the bottom of the Developer Dashboard.</li>
    399 <li>Enter a series of email addresses for your testers (separated by commas or
    400 whitespace), and click the &#8220;Save Changes&#8221; button.</li>
    401 <li>Click the &#8220;Add new item&#8221; button to add your application to the Chrome Web
    402 Store.</li>
    403 <li>Click the &#8220;Choose file&#8221; button and select the zip file you created earlier.</li>
    404 <li>Click the &#8220;Upload&#8221; button; this uploads your zip file and opens the &#8220;Edit
    405 item&#8221; page.</li>
    406 <li>Edit the following required fields on the &#8220;Edit item&#8221; page:<ul class="small-gap">
    407 <li>Upload an application icon.</li>
    408 <li>Upload a screenshot.</li>
    409 <li>Upload a small tile.</li>
    410 <li>Select a category for your application (accounting application, action
    411 game, etc.).</li>
    412 <li>Select a language for your application.</li>
    413 </ul>
    414 </li>
    415 <li>If you are an owner or manager of a Google Group, you can select that group
    416 in the &#8220;Trusted testers&#8221; field.<ul class="small-gap">
    417 <li>You may want to create a Google Group specifically for your testers. When
    418 you add a group to the &#8220;Trusted testers&#8221; field, all group members will be
    419 able to test the application, in addition to the individuals you added to
    420 the &#8220;trusted tester accounts&#8221; field on the Developer Dashboard.</li>
    421 </ul>
    422 </li>
    423 <li>Click the &#8220;Publish to test accounts&#8221; button at the bottom of the page and
    424 click &#8220;OK&#8221;.</li>
    425 <li>A page comes up that shows your application&#8217;s listing in the Chrome Web
    426 Store. Copy the URL and mail it to your trusted testers.<ul class="small-gap">
    427 <li>When you publish an application to test accounts, the application&#8217;s CWS
    428 listing is visible only to you and to people who are logged into those
    429 accounts. Your application won&#8217;t appear in search results, so you need to
    430 give testers a direct link to your application&#8217;s CWS listing. Users won&#8217;t
    431 be able to find the application by searching in the CWS.</li>
    432 </ul>
    433 </li>
    434 </ol>
    435 <p>To publish an application to the world after publishing it to test accounts,
    436 you must first unpublish the application. For additional information see
    437 <a class="reference external" href="/webstore/docs/publish">Publishing Your App</a>, and in particular <a class="reference external" href="/webstore/publish#testaccounts">Publishing
    438 to test accounts</a>.</p>
    439 </section></section>
    440 
    441 {{/partials.standard_nacl_api}}
    442