Library / SDK
uxlfoundation/oneTBB avatar
uxlfoundation/oneTBB

oneTBB: you specify logical parallelism, and the library decides the threads

oneAPI Threading Building Blocks (oneTBB)

6,785 stars1,206 forksC++Apache-2.0

At a glance

What is it?
oneTBB is a C++ template library for data parallel programming, governed by the UXL Foundation and an implementation of the oneAPI specification. Its distinguishing claim is that you express how much parallelism the work admits, not how many threads to create.
Who is it for?
Adopt oneTBB when your workload is genuinely data parallel and you want the thread count and scheduling left to a runtime rather than managed by hand, because that is the whole design and the parallel algorithms in the examples directory are what you get for it.
Can I use it commercially?
Yes. Apache-2.0 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 1 day 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 November 14, 2026, and from our analysis. They are not legal advice.

From daily snapshots

Star history

  • uxlfoundation/oneTBB6,785 ★ · +36
Star history
Repository2026-09-232026-11-14
uxlfoundation/oneTBB6.7k6.8k

36 Stars in the last 52 days, measured from the daily GitHub snapshot. Compare with other projects

Editorial analysis

The load-bearing claim is that you specify logical parallelism, not threads

The README states the library's purpose plainly: a flexible C++ library that simplifies the work of adding parallelism to complex applications, even if you are not a threading expert. What you get is functions, interfaces and classes to parallelize and scale the code, and the summary reduces the usage instruction to a single sentence. All you have to do is to use the templates.

That is a real claim about the programming model rather than about code brevity. It lets you write parallel programs that take full advantage of multi-core performance, and describes them as portable, composable and having a future-proof scalability. The scalability part is the load-bearing word: if the abstraction is logical work rather than threads, then adding or removing cores does not change your program.

Five differences from typical threading packages are listed, and the first one is the mechanism behind the rest:

* oneTBB enables you to specify logical parallelism instead of threads. * oneTBB targets threading for performance. * oneTBB is compatible with other threading packages. * oneTBB emphasizes scalable, data parallel programming. * oneTBB relies on generic programming.

Two of those deserve unpacking before you commit. Compatible with other threading packages means it is not trying to be the only threading layer in your application, which is what makes it usable inside a codebase that already has a threading choice. Relies on generic programming matches the README's instruction that all you have to do is use the templates.

The targets for the emphasis on data parallel programming are the two ends of the range. parallel_for and parallel_for_each are the loop-shaped cases, and parallel_reduce is the accumulation case where combining results costs something. The graph example is the other end, where the dependency structure is what you are expressing.

The rename from TBB to oneTBB is recorded in the tooling, not just the title

Threading Building Blocks was TBB. The README carries a note that it is now called oneAPI Threading Building Blocks, or oneTBB, to highlight that the tool is a part of the oneAPI ecosystem. That is a naming change for ecosystem reasons, and the consequences show up in the repository rather than in the prose.

Two Coverity Scan projects are referenced: scan.coverity.com/projects/oneapi-src-onetbb and scan.coverity.com/projects/uxlfoundation-onetbb. Two projects for one library suggest the static analysis history spans the move from the oneapi-src namespace to uxlfoundation. If you rely on scan results for your own dependency, check which project covers the version you are actually pulling.

The project is part of the UXL Foundation and is an implementation of the oneAPI specification, which means the specification and the implementation are maintained as separate artifacts. Both are linked: a oneTBB Specification hosted under the oneapi-spec UXL Foundation domain, and a Developer Guide and Reference hosted on the uxlfoundation.github.io pages site. When the two disagree, the specification is the contract and the developer guide is the explanation, and knowing which one you are reading matters if you are checking behaviour rather than usage.

Migration is treated as a first-class path. There is a dedicated Migrating from TBB to oneTBB guide in the documentation, and a migration directory inside examples/ alongside the feature examples, which means migrating an existing TBB codebase is something the project expects people to do and has material for.

The repository also carries a UXL Best Practices badge pointing at a project entry on bestpractices.dev, an OpenSSF security scorecards link, and a SECURITY.md. Those three together are the usual signals for a foundation-governed project that expects to be consumed as a dependency by other projects.

The examples directory doubles as a table of contents for the concepts

The examples/ directory is organised one directory per concept, and reading the directory names tells you what the library considers its distinct ideas to be. There are getting_started, parallel_for, parallel_for_each, parallel_reduce, parallel_pipeline, concurrent_hash_map, concurrent_priority_queue, graph, task_arena, task_group, migration, sycl and test_all, plus a common/ directory.

The progression is a curriculum. getting_started is the entry point. Then the loop-shaped algorithms, where parallel_for applies an operation across a range and parallel_for_each does the same across elements, and parallel_reduce for the accumulating case. Then parallel_pipeline, which is a different shape again because the stages are connected rather than independent. Then the containers, concurrent_hash_map and concurrent_priority_queue, which are the data structures you reach for when the shared state is a container rather than an array.

Then the two structural concepts. task_arena is the scope in which tasks are scheduled, and task_group is a structured grouping within it. If you are coming from a world where threads are the primary object, these two directories are where the mental model changes, and it is worth reading them before the algorithm examples.

graph is the dependency-structure case, where what you are describing is not a loop but a set of nodes and the edges between them. sycl indicates an example that reaches into SYCL rather than plain C++, which matters if you are coming from a data parallel programming model rather than a threads one.

Two other directories are worth noting because they are not examples. test_all is the umbrella target for running everything, which tells you the examples are built as part of the test story rather than as loose snippets.

CMake is the documented build and Bazel is described as basic

The repository carries two build systems, and the README does not treat them as equal. It links a dedicated README for the CMake build system at cmake/README.md, while the Bazel entry is titled Basic support for the Bazel build system. CMakeLists.txt sits at the repository root and there is a full cmake/ directory, whereas the Bazel side is BUILD.bazel, WORKSPACE.bazel, MODULE.bazel, a .bazelversion file and a Bazel.md.

The MODULE.bazel and WORKSPACE.bazel pair is the thing to notice. MODULE.bazel is the newer dependency declaration mechanism and WORKSPACE.bazel is the older one, so having both means the Bazel build is in a state where it serves both styles of consumer. Combined with the word basic in the link title, that is the honest reading: Bazel support exists and is expected to work, but the project is not claiming it is the path of least resistance.

Installation is documented separately from the build. The README points at Installation from Sources in INSTALL.md and sends you there rather than reproducing steps. Release Notes in RELEASE_NOTES.md and System Requirements in SYSTEM_REQUIREMENTS.md are likewise separate documents, and separating requirements from release notes is what lets a reader answer the question they actually have, which is usually whether this version works on my platform rather than what changed.

The versioning document is called oneTBB Versioning Policies and is listed as documentation in its own right, which is unusual and useful. The release tags use a year-style major number: v2023.2.0 released in October 2026 together with TCM 1.6.0, v2023.1.0 in July 2026, and v2023.0.0 in April 2026. A year-major tag tells you which development line a release belongs to but says nothing by itself about whether that line still receives fixes, so the version policy document is the file to read before pinning.

There is also a WASM Support document at the repository root, which tells you WebAssembly is a considered target rather than an aspiration.

Two source directories suggest the runtime is separated from the surface

The repository root lists src/, include/, integration/, test/, doc/, python/, rfcs/, examples/ and third-party-programs.txt, and three of those deserve a note.

include/ and src/ together are the ordinary split between a library's public interface and its implementation. For a template-heavy C++ library that split matters more than usual, because what lands in the header is what the caller instantiates, and a template library that puts too much in the header pays for it in compile time in the caller's build rather than in its own.

thread_composability_manager/ is the entry that does not match a library layout I would guess. A directory at the top level named after a concept rather than after a source or test grouping implies that composability across different threading models is a first-class piece of work with its own implementation, which lines up with the README's claim that oneTBB is compatible with other threading packages. It also implies there is a design discussion behind it, and rfcs/ suggests where that discussion lives.

python/ is the other one. The README does not describe it, which means the Python surface is not something the front page commits to, so if you are evaluating the library for a mixed C++ and Python codebase, the existence of the directory tells you someone built something and the absence of documentation tells you it is not a headline feature.

third-party-programs.txt is a licence-adjacent file: it is the kind of list a project maintains so that the provenance of everything redistributed in its release is on the record. Its presence is a reasonable signal about how the project handles what it ships, and it pairs with the Apache License 2.0 LICENSE.txt and the statement that contributions are submitted under the same licence.

The primary language is recorded as C++, the default branch is master, the repository is not archived, and the last push was 2026-11-02.

Governance sits with the foundation, and the issue versus discussion split is explicit

The project is governed by the UXL Foundation rather than by a company, and the README names the ways to get involved rather than describing a governance structure. You can join the Open Source and Specification Working Group meetings, or subscribe to the UXL Foundation mailing lists to receive the meeting schedule and latest updates, or contribute to the oneTBB project or to the oneTBB specification separately.

That last point is the one to notice. The code and the specification are separate contribution targets. That is what allows them to be kept consistent without one blocking the other, and it is also why the specification lives on its own site and can be referenced as the contract independently of any release.

The contribution mechanics are split across two channels with an explicit rule. GitHub Issues are for feature requests, bug reports and minor inquiries. GitHub Discussions are for broader questions and development-related discussions. For a library at this size that distinction matters, because it keeps the issue tracker readable as a work queue instead of filling it with design arguments.

Support has its own document. The README points at SUPPORT.md to learn how to request help, which suggests a documented path rather than an issue tracker used for support questions.

There are also CODE_OF_CONDUCT.md, CONTRIBUTING.md, MAINTAINERS.md and CODEOWNERS at the repository root. The combination of a code of conduct, a contributing guide, a maintainers file and a code owners file is the standard set for a foundation project that expects outside contributions and needs to say who owns what. CODEOWNERS in particular means review responsibility is assigned per path rather than being undifferentiated.

Finally, the README closes with a note that all names and brands may be claimed as the property of others. That is a trademark disclaimer, and it is worth registering as a fact: it means this project is careful about the difference between the Apache licence covering the code and other rights covering the name.

Editorial conclusion

Adopt oneTBB when your workload is genuinely data parallel and you want the thread count and scheduling left to a runtime rather than managed by hand, because that is the whole design and the parallel algorithms in the examples directory are what you get for it. Expect a migration step if you are coming from classic TBB, since there is a dedicated migration guide and a migration example directory, and the rename to oneTBB means you are reading current names for a library with a long history. Plan your build around CMake first, because Bazel support is described as basic and the CMake build has its own README. And if your problem is task graphs rather than loops, look at the graph and task_arena examples before committing, because the task arena is a concept you inherit rather than a setting you flip.

Frequently asked questions

how to install onetbb

Installation is documented separately from the build. The README points at Installation from Sources in INSTALL.md rather than reproducing steps. For building it, CMakeLists.txt sits at the repository root with a full cmake/ directory and its own README at cmake/README.md, while Bazel support is described as basic and is configured through BUILD.bazel, WORKSPACE.bazel, MODULE.bazel and .bazelversion.

What is the difference between TBB and oneTBB?

oneTBB is the current name for Threading Building Blocks, renamed to highlight that the tool is part of the oneAPI ecosystem. Separately, two Coverity Scan projects are referenced, oneapi-src-onetbb and uxlfoundation-onetbb. A dedicated Migrating from TBB to oneTBB guide exists in the documentation, and examples/ contains a migration directory.

How does oneTBB differ from a typical threading library?

Five differences are listed. It enables you to specify logical parallelism instead of threads, it targets threading for performance, it is compatible with other threading packages, it emphasizes scalable data parallel programming, and it relies on generic programming. Because it works in terms of logical work rather than threads, the thread count is the runtime's decision rather than yours.

How is oneTBB versioned?

The release tags use a year-style major number, with v2023.2.0 in October 2026, v2023.1.0 in July 2026 and v2023.0.0 in April 2026. Because a year-major tag alone does not say whether that line still receives fixes, the project documents oneTBB Versioning Policies in VERSIONING.md as separate documentation, alongside RELEASE_NOTES.md and SYSTEM_REQUIREMENTS.md.

Where do oneTBB issues and design discussions go?

They are split. GitHub Issues are for feature requests, bug reports and minor inquiries, while GitHub Discussions are for broader questions and development-related discussions. Support requests have their own path documented in SUPPORT.md. Project governance sits with the UXL Foundation, and the code and the oneTBB specification are separate contribution targets.

Official sources

  1. License: Apache-2.0
  2. Project website
  3. README
  4. Releases
  5. uxlfoundation/oneTBB on GitHub
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.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/uxlfoundation-onetbb.svg)](https://hysenlabs.com/projects/uxlfoundation-onetbb)

Star history chart for your README

markdown
[![Star history](https://hysenlabs.com/chart/uxlfoundation-onetbb.svg)](https://hysenlabs.com/projects/uxlfoundation-onetbb)

Was this useful?