Welcome to Native Client
Deprecation of the technologies described here has been announced for platforms other than ChromeOS.
Please visit our migration guide for details.
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. Apps and Extensions installed via the Chrome Web Store (CWS) can use NaCl modules without additional prompting. NaCl apps can also be installed from chrome://extensions or the command-line during development, however, this is not a recommended distribution mechanism.
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.