{
  "$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"
}