Ultralytics v8.4.43 is out 
Quick summary: Ultralytics v8.4.43 improves dataset reliability by fixing how NDJSON and Ultralytics Platform datasets are resolved during validation, not just training
This makes train/val behavior more consistent and helps prevent validation-time dataset setup issues, especially in distributed runs ![]()
Highlights
The biggest change in v8.4.43 is a unified dataset resolution path for NDJSON and ul://.../datasets/... sources.
If you’re using Ultralytics YOLO with NDJSON datasets or datasets hosted on the Ultralytics Platform, validation now follows the same automatic conversion logic as training. That means fewer surprises, fewer setup failures, and smoother standalone validation workflows ![]()
New Features and Improvements
Unified NDJSON and Platform dataset handling
In PR #24365 by @glenn-jocher, we introduced a shared resolver, convert_ndjson_to_yolo_if_needed(), in ultralytics.data.utils.
This update:
- adds a reusable dataset conversion utility
- replaces the previous train-only inline conversion path
- applies the same logic during validation
- correctly resolves both
.ndjsonandul://...dataset sources in standalone val runs - adds distributed-safe handling to reduce race conditions in multi-GPU and distributed environments

Documentation update
The new utility function is now included in the data utilities docs reference, making it easier to discover and use in advanced workflows.
Minor cleanup
In PR #24351 by @ahmet-f-gumustas, redundant for ... in dict.keys() patterns were replaced with direct dictionary iteration across several files.
This is a small internal code-quality improvement with no intended functional change.
Why this matters
More consistent train + val behavior
Users working with NDJSON or Platform datasets now get the same automatic dataset conversion flow across both stages ![]()
Fewer validation-time failures
A key practical benefit of v8.4.43 is that validation is now much more robust when data is provided as .ndjson files or ul://... URIs ![]()
Better distributed stability
For multi-process and multi-GPU validation, dataset conversion is now coordinated more safely to avoid duplicate work and race issues ![]()
![]()
Low upgrade risk
This release is focused and lightweight: aside from the dataset-resolution fix, the rest is mainly internal cleanup ![]()
What changed
- Remove redundant
.keys()calls in dict iteration in PR #24351 by @ahmet-f-gumustas - Fix NDJSON dataset validation in PR #24365 by @glenn-jocher
You can explore the full diff in the v8.4.42 to v8.4.43 changelog comparison, or view the release directly on the Ultralytics v8.4.43 release page.
Try it out
To upgrade:
pip install -U ultralytics
If you’re validating NDJSON datasets or using datasets from the Ultralytics Platform, this is a great release to pull in right away.
As always, give it a try and let us know how it works for your workflows
Your feedback helps the Ultralytics team and the broader YOLO community keep improving things.