Open-source project
ultralytics/ultralytics avatar
ultralytics/ultralytics

Ultralytics YOLO26 and Friends: What the Unified Python Package Actually Gives You

Ultralytics YOLO26, YOLO11, YOLOv8 : object detection, instance segmentation, semantic segmentation, image classification, pose estimation, object tracking

61,631 stars11,763 forksPythonAGPL-3.0

At a glance

What is it?
The ultralytics package bundles YOLO26, YOLO11, and YOLOv8 for detection, segmentation, classification, pose, and tracking. This review covers the real workflow, the AGPL-3.0 catch, and where the single-package approach starts to strain.
Who is it for?
Adopt ultralytics if you need a single Python package that covers detection, segmentation, classification, pose, and tracking with a consistent CLI and Python API, and if you can live with AGPL-3.0 for internal or open-source work. Do not adopt it if you plan to ship a closed-source commercial product, because you will need a separate enterprise license from Ultralytics, or you should look at a permissively licensed alternative like OpenMMLab's mmdetection.
Can I use it commercially?
Yes, with strict conditions. AGPL-3.0 is a network copyleft licence: if people use a modified version over a network, for example as a hosted service, you must offer them its source code under the same licence.
Is it still maintained?
Yes. The repository received new commits within the last day.
What is it written in?
Mainly Python, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on September 15, 2026, and from our analysis. They are not legal advice.

DEEP OPEN-SOURCE ANALYSIS

One Package, Five Tasks, and a Tracking Mode

The ultralytics repository is not a single model. It is a Python package that wraps multiple YOLO generations, from YOLOv3 up to the recently added YOLO26, and exposes them through one interface. The README lists object detection, instance segmentation, semantic segmentation, image classification, pose estimation, and object tracking as supported tasks. That is a wide surface for one install. The practical benefit is that you do not need separate libraries for each task. You load a model weight file, call the same predict or train method, and the package routes to the right architecture. The trade-off is that the package becomes a moving target. Recent releases show constant changes: v8.4.132 extends a fraction argument to the test split, v8.4.131 adds Apple Core AI export, and v8.4.130 enables fraction to limit dataset by image counts. That pace means the API surface you learn today may shift in a month. For a team that wants one tool for many vision jobs, that is a reasonable cost. For a team that needs stability above all, it is a warning sign.

The Actual Mechanism: Model Weights, YAML Datasets, and a Common Config

Under the hood, the package works with pretrained weight files like yolo26n.pt. You load one with the YOLO class, then call train, val, or predict on it. The training path takes a dataset configuration file in YAML, such as coco8.yaml, which describes the data location and class names. The same configuration arguments are used across the CLI and the Python API, which keeps the two interfaces consistent. The README gives a concrete example: model.train(data='coco8.yaml', epochs=100, imgsz=640, device='cpu'). That single call covers dataset loading, model training, and checkpoint saving. The inference path is even simpler: model('path/to/image.jpg') returns a list of results, and results[0].show() displays the output. The package also supports semantic segmentation models pretrained on Cityscapes, depth estimation models evaluated on NYU Depth V2, and classification models pretrained on ImageNet. That means the same Python object can switch tasks just by loading a different weight file. The mechanism is uniform, but the underlying architectures differ, and the package hides that difference behind the YOLO class.

Getting It Running: CLI and Python, With Real Commands

Installation is a single pip command: pip install ultralytics. The README specifies Python 3.8 or newer and PyTorch 1.8 or newer. After that, you can use the yolo command directly from the terminal. The example given is yolo predict model=yolo26n.pt source='https://ultralytics.com/images/bus.jpg'. That downloads the model weights, runs inference on the image, and saves the output. You can add arguments like imgsz=640 to control the input size. In Python, the equivalent is three lines: from ultralytics import YOLO, then model = YOLO('yolo26n.pt'), then results = model('path/to/image.jpg'). Training follows the same pattern with a dataset YAML. The README also mentions alternative installation methods: Conda, Docker, and building from source via Git. For most users, pip is enough. One detail to note: the package requires PyTorch, which is a heavy dependency. If you are on a machine with an older CUDA setup, you may need to install PyTorch separately before installing ultralytics. The README does not cover that step, so plan for it.

The Model Zoo: From YOLOv3 to YOLO26, but Not All Tasks Have All Sizes

The README claims support for a wide range of YOLO models, from YOLOv3 to the latest YOLO26. The tables show YOLO26 models pretrained on COCO for detection, segmentation, and pose estimation. Semantic segmentation models are pretrained on Cityscapes, depth estimation on a multi-dataset mix, and classification on ImageNet. That is a broad set, but the README does not list every size variant for every task. For example, the README only mentions yolo26n.pt in the usage example, which is the nano variant. It does not confirm that all YOLO26 sizes (n, s, m, l, x) are available for all tasks. In practice, you may find that a specific combination, say YOLO26x for semantic segmentation, does not exist. The documentation pages would clarify that, but the README alone leaves it open. If you need a particular size for a production system, check the model tables on the docs site before committing. The same caution applies to older models like YOLOv3, which may not have the same task coverage as YOLO26.

Licensing: AGPL-3.0 Is the Real Constraint

The repository is licensed under AGPL-3.0. That is a strong copyleft license. If you use the package in a service that users access over a network, the AGPL requires you to offer the complete corresponding source code to those users. For many internal tools, that is acceptable. For a commercial product that you sell or host as a closed service, it is a problem. The README addresses this directly: it points to an Enterprise License for commercial use at ultralytics.com/license. That means the project has a dual-licensing model. The open-source version is free under AGPL, and the commercial version costs money. You need to decide early which path you are on. If you are building a proprietary application, factor the enterprise license cost into your budget. If you are building an open-source project, the AGPL may be compatible, but only if your project also uses a compatible license. This is not legal advice, but the boundary is clear from the README: commercial use requires a separate license.

Maintenance and Upgrade Cost: Fast Releases, Breaking Changes Possible

The release history shows a high cadence. The last three releases are dated August 26, 27, and 28, 2026, meaning the maintainers push updates nearly every day. Each release adds a feature or fixes something, like extending the fraction argument or adding a new export format. That is good for innovation, but it creates a maintenance burden. If you pin a version, you miss fixes. If you upgrade often, you risk breaking changes in configuration keys or output formats. The README does not mention a deprecation policy. There is no stated guarantee that arguments like fraction will remain stable across versions. For a production deployment, you should pin the exact version, for example ultralytics==8.4.132, and test upgrades in a staging environment. The package also depends on PyTorch, which has its own release cycle. Upgrading PyTorch to a new major version may force you to upgrade ultralytics as well. That coupling is a real cost that the README does not discuss.

Alternatives: mmdetection and Detectron2 Take a Different Route

If you need a permissively licensed alternative, OpenMMLab's mmdetection is a direct comparison. mmdetection is Apache-2.0 licensed, which means you can use it in commercial products without paying for a separate license. The approach differs in structure: mmdetection is a modular toolbox where you assemble a detector from config files, not a single YOLO class. You define the backbone, neck, and head separately, and you train with a command like tools/train.py. That gives you more control but requires more setup. The ultralytics package hides that complexity behind a simple API. Another alternative is Detectron2 from Facebook AI, which is Apache-2.0 as well and offers a config-based system for detection and segmentation. Detectron2 is heavier and less focused on YOLO architectures, but it is a mature option for research and production. The key difference is licensing and flexibility. If you accept the AGPL and want simplicity, choose ultralytics. If you need permissive licensing and are willing to learn a config system, mmdetection or Detectron2 are the safer bets.

Where the Package Is the Wrong Tool

The ultralytics package is not the right choice for every vision problem. If you need a model that is not YOLO-based, such as a transformer-based detector like DETR or a custom architecture, this package will not help. It only supports YOLO variants. If you need to deploy on a platform that is not supported by the export formats, you may hit a wall. The recent release adding Apple Core AI export shows the team is expanding targets, but there is no guarantee your edge device is covered. Also, the package assumes you have a GPU for training. The README example sets device='cpu', which works but is slow for real datasets. If you have no GPU and need to train on large data, this package will be painfully slow. Finally, if you need fine-grained control over the training loop, such as custom loss functions or data augmentation pipelines, the high-level API may be too restrictive. You can still dig into the source code, but that negates the simplicity benefit. In those cases, a lower-level framework like PyTorch itself, combined with a model definition you control, is a better fit.

Editorial conclusion

Adopt ultralytics if you need a single Python package that covers detection, segmentation, classification, pose, and tracking with a consistent CLI and Python API, and if you can live with AGPL-3.0 for internal or open-source work. Do not adopt it if you plan to ship a closed-source commercial product, because you will need a separate enterprise license from Ultralytics, or you should look at a permissively licensed alternative like OpenMMLab's mmdetection. Before committing, verify that the specific model size you need (for example yolo26n.pt) is available for your target task, check the PyTorch version requirement (>=1.8) against your existing environment, and confirm that the dataset format you use matches one of the supported YAML configs like coco8.yaml. The package is updated frequently, so pin your version and test upgrades in a separate environment before rolling out.

Official sources

  1. Official documentation
  2. Official README
  3. Project repository
  4. Release notes
Community notes

Community notes