Welcome to Native Client

To get the SDK and
installation instructions
visit the SDK Download page.

Native Client is a sandbox for running compiled C and C++ code in the browser efficiently and securely, independent of the user’s operating system. Portable Native Client extends that technology with architecture independence, letting developers compile their code once to run in any website and on any architecture with ahead-of-time (AOT) translation.

In short, Native Client brings the performance and low-level control of native code to modern web browsers, without sacrificing the security and portability of the web. Watch the video below for an overview of Native Client, including its goals, how it works, and how Portable Native Client lets developers run native compiled code on the web.

Two Types of Modules

Native Client comes in two flavors.

  • Portable Native Client (PNaCl): Pronounced ‘pinnacle’, PNaCl runs single, portable (pexe) executables and is available in most implementations of Chrome. A translator built into Chrome translates the pexe into native code for the client hardware. The entire module is translated before any code is executed rather than as the code is executed. PNaCl modules can be hosted from any web server.
  • Native Client (NaCl): Also called traditional or non-portable Native Client, NaCl runs architecture-dependent (nexe) modules, which are packaged into an application. At runtime, the browser decides which nexe to load based on the architecture of the client machine. NaCl modules must be run from the Chrome Web Store (CWS). Fortunately, work from PNaCl modules can be used to create NaCl modules.

These flavors are described in more depth in PNaCl and NaCl

Hello World

To jump right in take the tutorial that walks you through a basic web application for Portable Native Client (PNaCl). This is a client-side application that uses HTML, JavaScript, and a Native Client module written in C++.

A Little More Advanced

If you’ve already got the basics down, you’re probably trying to get a real application ready for production. You’re building, debugging or ready to distribute.

Nuts and Bolts

You’ve been working on a Native Client module for a while now and you’ve run into an arcane problem. You may need to refer to the PNaCl Bitcode Reference or the Sandbox internals.

I Want to Know Everything

So, you like to read now and try later. Start with our Technical Overview

Send us comments and feedback on the native-client-discuss mailing list, or ask questions using Stack Overflow’s google-nativeclient tag.