Learn about the languages supported on Windows 10 IoT Core as well as the UWP and non-UWP app types supported on IoT Core.
IoT Core is a UWP centric OS and UWP apps are its primary app type.
Universal Windows Platform (UWP) is a common app platform across all version of Windows 10, including Windows 10 IoT Core. UWP is an evolution of Windows Runtime (WinRT). You can find more information and an overview to UWP on MSDN.
Visual Studio is the primary tool for writing UWP apps for IoT Core and in general. You can find a detailed listing of the compatibility requirements for Visual Studio on MSDN
UWP apps just work on IoT Core, just as they do on other Windows 10 editions. A simple, blank Xaml app in Visual Studio will properly deploy to your IoT Core device just as it would on a phone or Windows 10 PC. All of the standard UWP languages and project templates are fully supported on IoT Core.
There are a few additions to the traditional UWP app-model to support IoT scenarios and any UWP app that takes advantage of them will need the corresponding information added to their manifest. In paticular the “iot” namespace needs to be added to the manifest of these standard UWP apps.
In addition to the traditional UI apps, IoT Core has added a new UWP app type called “Background Applications”. These applications do not have a UI component, but instead have a class that implements the “IBackgroundTask” interface. They then register that class as a “StartupTask” to run at system boot. Since they are still UWP apps, they have access to the same set of APIs and are supported from the same language. The only difference is that there is no UI entry point.
Each type of IBackgroundTask gets its own resource policy. This is usually restrictive to improve battery life and machine resources on devices where these background apps are secondary components of foreground UI apps. On IoT devices, Background Apps are often the primary function of the device and so these StartupTasks get a resource policy that mirrors foreground UI apps on other devices.
The following sample shows the code necessary to build a C# Background App that blinks an LED:
You can find in-depth information on Background apps on MSDN
We also fully support traditional Win32 app types like Console Apps and NT Services. These apps are buit and run the same way as on Windows 10 Desktop. There is also an IoT Core C++ Console project template to make it easy to build from VS.
There are two main limitations on these non-UWP applications:
IoT Core supports a wide range of programming languages.
Traditional UWP languages ship with support in Visual Studio by default. All of the In-Box languages support both UI and Background Applications
The IoT targeted languages require the download of the “Windows IoT Core Project Templates” from the Visual Studio Tools->Extensions and Updates manager. The IoT Focused languages support only Background Applications. You can also build Windows Runtime Components using C#, C++, or Visual Basic and then reference those libraries from any other language (except Python).
C# and VB are both supported as UWP apps and have access to the portion of the .Net Framework available to UWP applications. They support UI apps built with Xaml as well as Background Apps. You can also build Windows Runtime Components that can be used from other supported languages.
With C++ you can build Xaml or DirectX UI apps, as well as UWP Background projects and non-UI Win32 apps.
With Arduino Wiring support you can build apps in Arduino Wiring for many popular components and peripherals in the IoT ecosystem.
Our Arduino Wiring Project Guide provides full instructions on how to get set up to build these apps. The samples copied and linked below will help you get started building your own. You can even build WinRT components in Arduino that can then be used from other languages. This is especially helpful for peripherals that have rich Arduino libraries like LCD character displays.
Blinky Sample Code The full sample code and docs are available in our samples page and you can find the full code below.
With IoT Core’s Node.js supports you can build your Background Apps using this popular language and many of its popular libraries and frameworks. There are a variety of Node.js samples avialable on our github site, but the samples below will give you a great introduction.
The headless blinky sample shows how easy it is to build your first IoT Core Node.js app.
Additional Helpful Samples
IoT Core also supports building Background Apps with Python. Support for the python languages and libaries is fully there, but the python language itself does not support calling UWP APIs and so we provide python libraries to call into critical platform features like GPIO, I2C, PWM, …
This app shows how to build a basic Python Background App that blinks an LED.
Additional Interesting Samples