{
"$type": "site.standard.document",
"bskyPostRef": {
"cid": "bafyreid4434blkrhgyysfoldoy4qjkoyhufq6irzs6fvvoxqjukwxbx2bq",
"uri": "at://did:plc:6dmfe46c76jjenq3kaxc5eds/app.bsky.feed.post/3mesdcmhpaho2"
},
"path": "/2026/02/qcoro-0.13.0-release-announcement/",
"publishedAt": "2026-02-13T00:00:00.000Z",
"site": "https://dvratil.cz",
"tags": [
"292",
"294",
"318",
"280",
"312",
"282",
"310",
"305",
"See changelog on Github",
"GitHub Sponsors",
"Ko-fi"
],
"textContent": "This release brings improvements to generators, better build system integration and several bugfixes.\n\nAs always, big thanks to everyone who reported issues and contributed to QCoro. Your help is much appreciated!\n\n## Directly Awaiting Qt Types in AsyncGenerator Coroutines\n\nThe biggest improvement in this release is that `QCoro::AsyncGenerator` coroutines now support directly `co_await`ing Qt types without the `qCoro()` wrapper, just like `QCoro::Task` coroutines already do (#292).\n\nPreviously, if you wanted to await a `QNetworkReply` inside an `AsyncGenerator`, you had to wrap it with `qCoro()`:\n\n\n QCoro::AsyncGenerator<QByteArray> fetchPages(QNetworkAccessManager &nam, QStringList urls) {\n for (const auto &url : urls) {\n auto *reply = co_await qCoro(nam.get(QNetworkRequest{QUrl{url}}));\n co_yield reply->readAll();\n }\n }\n\n\nStarting with QCoro 0.13.0, you can `co_await` directly, just like in `QCoro::Task`:\n\n\n QCoro::AsyncGenerator<QByteArray> fetchPages(QNetworkAccessManager &nam, QStringList urls) {\n for (const auto &url : urls) {\n auto *reply = co_await nam.get(QNetworkRequest{QUrl{url}});\n co_yield reply->readAll();\n }\n }\n\n\n## Other Features and Changes\n\n * Generator’s `.end()` method is now `const` (and `constexpr`), so it can be called on const generator objects (#294).\n * `GeneratorIterator` can now be constructed in an invalid state, allowing lazy initialization of iterators (#318).\n * `qcoro.h` now only includes QtNetwork and QtDBus headers when those features are actually enabled, resulting in cleaner builds when optional modules are disabled (#280).\n\n\n\n## Bugfixes\n\n * Fixed memory leak in QFuture coro wrapper when a task is destroyed while awaiting on a QFuture (#312, Daniel Vr√°til)\n * Fixed include paths when using QCoro with CMake’s FetchContent (#282, Daniel Vr√°til; #310, Nicolas Fella)\n * Fixed QCoroNetworkReply test on Qt 6.10 (#305, Daniel Vr√°til)\n\n\n\n## Full changelog\n\nSee changelog on Github\n\n## Support\n\nIf you enjoy using QCoro, consider supporting its development on GitHub Sponsors or buy me a coffee on Ko-fi (after all, more coffee means more code, right?).",
"title": "QCoro 0.13.0 Release Announcement"
}