Contiki-NG for Constrained IPv6 IoT Devices
Contiki-NG: The OS for Next Generation IoT Devices
At a glance
- What is it?
- Contiki-NG is a C-based operating system for low-power IoT devices that communicate over constrained networks. Its main appeal is its focus on IPv6, 6LoWPAN, 6TiSCH, RPL, and CoAP, but adopting it requires accepting platform-specific integration work.
- Who is it for?
- Contiki-NG fits teams building small embedded products around IPv6 constrained-networking protocols. It is a poor fit for a team seeking a general-purpose operating system with a fully documented installation path in the repository README.
- Can I use it commercially?
- Yes. BSD-3-Clause is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
- Is it still maintained?
- Yes. The repository last received commits 9 days ago.
- What is it written in?
- Mainly C, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on October 22, 2026, and from our analysis. They are not legal advice.
Editorial analysis
Why Contiki-NG Targets Resource-Constrained IoT Systems
Contiki-NG addresses devices that need an operating system but cannot be treated like conventional servers or desktop computers. Its stated priorities are dependable low-power communication, security, reliability, and standard Internet protocols. The target audience is therefore engineers designing embedded or wireless IoT devices whose networking and energy constraints matter more than a general-purpose user interface or broad application runtime.
The protocol set gives this positioning a specific meaning. Contiki-NG includes IPv6 and 6LoWPAN support, 6TiSCH for scheduled communication, RPL for IPv6 routing, and CoAP for constrained application traffic. These technologies are not incidental dependencies around a conventional OS. They form the communication model the project is designed around, making Contiki-NG more relevant to a battery-powered sensor network than to an application that expects conventional networking and a full POSIX environment.
Contiki-NG began as a fork of Contiki OS and retains some of its original features. That history may matter to teams carrying over knowledge or code from the earlier system. The repository does not present Contiki-NG as a drop-in replacement, however, and the README does not claim compatibility with every Contiki OS source file. Migration needs a file-level review rather than an assumption based on shared origins.
Contiki-NG Protocol Stack and Repository Structure
The documented communication layers form a sequence that can be understood as IPv6 traffic adapted for constrained links through 6LoWPAN, with routing provided through RPL and scheduling through 6TiSCH. CoAP appears separately as an application protocol for constrained IoT communication. The README groups these as standard protocols supported by the operating system, but it does not provide packet traces, internal module diagrams, or a complete description of their interactions.
The repository layout makes the implementation scope more concrete. Core operating-system code is under `os/`, processor and architecture support are separated under `arch/`, tests are under `tests/`, and build definitions occupy the repository root as `Makefile.*` files. Platform-specific work is not mixed into a single generic application directory. Examples cover CoAP, hello-world, RPL UDP, border routing, MQTT, WebSocket, NAT64, multicast, storage, EDHOC, SNMP, serial and SLIP radios, LwM2M, and 6TiSCH.
That breadth has two consequences. First, engineers can inspect examples close to a likely use case instead of beginning with an undocumented application interface. Second, the project exposes several networking choices that can create configuration and compatibility decisions. Selecting RPL, 6TiSCH, CoAP, MQTT, WebSocket, NAT64, or a border-router design is not interchangeable. The README does not document a single universal application entry point, so the correct starting point depends on the device role and network architecture.
Examples as the First Contiki-NG Development Surface
The `examples/hello-world/` directory is the clearest documented starting point for a new user because its name identifies the smallest first application. More specialized examples then provide concrete implementations for CoAP, RPL UDP, 6TiSCH, MQTT, WebSocket, storage, multicast, NAT64, SNMP, and border routing. Based on the repository layout, these are also the best sources for finding platform macros, build selections, and protocol configuration used by actual applications.
An engineer should not assume that an example can be compiled for an arbitrary development machine. Contiki-NG is cross-platform at the project level, but the README does not enumerate supported boards, host operating systems, compilers, or device-programming tools. The `arch/` directory and root Makefiles indicate that hardware abstraction and target selection are part of the build system. Yet neither the README nor the repository listing documents which values must be supplied for a specific board.
The absence of a ready-made command in the README is an adoption constraint, not just a documentation inconvenience. It means the initial build cannot be reproduced from the repository overview alone. Before committing to the project, an engineering team needs to locate the board or platform guide, identify its compiler and flashing requirements, and determine which root Makefile target corresponds to that hardware. The example should then be treated as the first application to build for the chosen target.
Finding Installation and Hardware Integration Instructions
The README directs users to the Contiki-NG documentation for technical information and to `doc/` for documentation held in the repository. It does not provide installation commands, package names, supported tool versions, target names, or a hardware-flashing procedure. For that reason, this article does not invent a command sequence that the README does not document.
A practical first-use tutorial starts by opening the official documentation for the selected board or platform, then identifying its required compiler, linker setup, build target, and programming interface. After those values are known, the engineer can use `examples/hello-world/` as the first real application and use the root `Makefile.*` files to determine how a target is selected. The target-specific instructions must supply the exact invocation because the README does not.
The reader should expect to verify several outputs during this process. A successful toolchain setup should produce a firmware image for the selected device, not merely a native host binary. That image should then be transferred using the programmer named by the board documentation. The hello-world application should run on the hardware before protocol examples are added. This sequence narrows toolchain, image-format, and deployment problems before networking configuration becomes part of the failure surface.
Contiki-NG also includes a `.devcontainer/` directory, which indicates that a development-container configuration exists in the repository. The README does not say what tools that container contains or whether it supports a specific target. It should not be treated as a turnkey installation for every hardware platform.
Protocol Choices for Routers, Sensors, and Gateways
The example directories show that Contiki-NG supports several distinct device roles. A sensor application can begin with `examples/hello-world/` and then use a protocol example such as CoAP or RPL UDP. A network edge device may examine `examples/rpl-border-router/` or `examples/ip64-router/`. Radio-facing or integration work may involve `examples/serialradio/` or `examples/slip-radio/`. These names indicate different system boundaries rather than interchangeable demos of one function.
6TiSCH appears as a supported communication model and has its own `examples/6tisch/` area. The README does not provide enough detail to state its scheduling behavior or configuration sequence. For a team evaluating that path, the first verification target should therefore be the official 6TiSCH documentation and the checked-in example, not an inferred schedule from the topic label.
CoAP and LwM2M are both represented, while MQTT appears in a client example. WebSocket, NAT64, SNMP, multicast, EDHOC, and storage address further requirements. This makes Contiki-NG useful when a device needs a protocol-specific example, but it also means that “supports IoT” is too broad a buying criterion. The device's role, link technology, routing requirements, application protocol, storage needs, and gateway arrangement determine which subset is relevant.
The `tests/` directory adds another source for adoption work. Its presence indicates that the repository organizes automated testing, but the README does not list platforms, test scope, or coverage. A team should inspect the relevant tests before assuming that its board or protocol combination has automated validation.
Contiki-NG Constraints for General-Purpose Applications
Contiki-NG is the wrong tool when the requirement is phrased simply as “an operating system for an embedded product” without a constrained-networking purpose. The README centers the project on low-power IoT communication and a defined collection of protocols. It does not present Contiki-NG as a Linux-compatible system, a real-time industrial control platform, or a general mobile operating system.
It is also a weak fit for a team unwilling to work at the board and target level. The repository contains architecture-specific code, platform-specific examples, multiple Makefiles, and many networking configurations. The README does not present a single install-and-run path independent of hardware. That target sensitivity is expected for this category of software, but it creates real onboarding and maintenance work.
Another boundary is upgrade selection. The project has separate major releases, including versions 5.0, 5.1, and 5.2. The repository overview does not document automatic migration from one release to another, nor does it claim that applications and board configurations are source-compatible across releases. Upgrading may require checking examples, build targets, APIs, and platform support for the specific release selected by the product team.
A different architecture is necessary when the application is not built around constrained IPv6 communication. An engineer should first establish the device's networking role and traffic pattern. If those requirements do not align with the documented IoT focus, selecting Contiki-NG based only on its C implementation or embedded status would ignore the reason the project exists.
Contiki-NG License, Releases, and Upgrade Work
Unless a file states otherwise, Contiki-NG sources use the 3-clause BSD license. The README states that the license permits use and distribution in binary or source form provided the copyright license is retained in source code. Projects incorporating Contiki-NG therefore need to preserve the required notice and review file-level license markings when assembling a product. This is a statement of the documented terms, not legal advice about a particular distribution.
The repository is not archived, and its last push was on 2026-10-13. Version 5.2 was released on 2026-08-14, following Version 5.1 on 2025-09-20 and Version 5.0 on 2024-12-30. These dates provide a concrete release history for planning, but they do not prove compatibility between releases or support for a particular board.
The upgrade cost depends on the parts of the tree a product uses. Changes to an application under `examples/`, platform configuration under `arch/`, a networking stack under `os/`, or root build logic can have different consequences. Because the README does not publish a migration guide or compatibility matrix, an adopting team must compare the chosen release's documentation and examples with its own integration points. Retaining a known-good release-specific configuration is more defensible than assuming that `develop` is the appropriate production baseline.
Editorial conclusion
Contiki-NG fits teams building small embedded products around IPv6 constrained-networking protocols. It is a poor fit for a team seeking a general-purpose operating system with a fully documented installation path in the repository README. Before adoption, verify that the documentation provides a compatible board toolchain, build target, deployment process, and protocol configuration for the intended hardware.
Frequently asked questions
What operating systems and hardware does Contiki-NG support?
Contiki-NG is described as cross-platform, but the README does not enumerate supported boards, host operating systems, compilers, or flashing tools. Consult the official documentation and repository `doc/` directory for the target-specific requirements.
Which protocols does Contiki-NG support?
The README explicitly identifies IPv6, 6LoWPAN, 6TiSCH, RPL, and CoAP. The repository also includes examples for MQTT, WebSocket, NAT64, SNMP, multicast, EDHOC, and LwM2M.
Can I build Contiki-NG directly from the README?
The README does not include installation commands, target names, tool versions, or a build invocation. It directs users to the documentation, so target-specific setup must be taken from the official documentation or repository `doc/` files.
Official sources
Add this badge to your README
If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.
[](https://hysenlabs.com/projects/contiki-ng-contiki-ng)Was this useful?