You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iggy.apache.org by gi...@apache.org on 2026/10/02 06:15:41 UTC

(iggy-website) branch asf-site updated (dc2c74447 -> dbfcca10e)

This is an automated email from the ASF dual-hosted git repository.

github-actions[bot] pushed a change to branch asf-site
in repository https://gitbox.apache.org/repos/asf/iggy-website.git


 discard dc2c74447 Deploy website from main branch 0c8cf01d9a52f0aa9d9e021d5546121e3a517a44
     new dbfcca10e Deploy website from main branch 0c8cf01d9a52f0aa9d9e021d5546121e3a517a44

This update added new revisions after undoing existing revisions.
That is to say, some revisions that were in the old version of the
branch are not in the new version.  This situation occurs
when a user --force pushes a change and generates a repository
containing something like this:

 * -- * -- B -- O -- O -- O   (dc2c74447)
            \
             N -- N -- N   refs/heads/asf-site (dbfcca10e)

You should already have received notification emails for all of the O
revisions, and so the following emails describe only the N revisions
from the common base, B.

Any revisions marked "omit" are not gone; other references still
refer to them.  Any revisions marked "discard" are gone forever.

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 404.html                                           |  2 +-
 404/index.html                                     |  2 +-
 __next.!KGhvbWUp.__PAGE__.txt                      |  2 +-
 __next.!KGhvbWUp.txt                               |  2 +-
 __next._full.txt                                   |  2 +-
 __next._index.txt                                  |  2 +-
 __next._tree.txt                                   |  2 +-
 .../_buildManifest.js                              |  0
 .../_clientMiddlewareManifest.js                   |  0
 .../_ssgManifest.js                                |  0
 _not-found/__next._full.txt                        |  2 +-
 _not-found/__next._not-found.__PAGE__.txt          |  2 +-
 _not-found/__next._tree.txt                        |  2 +-
 _not-found/index.html                              |  2 +-
 _not-found/index.txt                               |  2 +-
 api/search                                         |  2 +-
 .../__next.!KHNpdGUp.blogs.$c$slug.__PAGE__.txt    |  2 +-
 blogs/2023/08/16/welcome/__next.!KHNpdGUp.txt      |  2 +-
 blogs/2023/08/16/welcome/__next._full.txt          |  2 +-
 blogs/2023/08/16/welcome/__next._index.txt         |  2 +-
 blogs/2023/08/16/welcome/__next._tree.txt          |  2 +-
 blogs/2023/08/16/welcome/index.html                |  2 +-
 blogs/2023/08/16/welcome/index.txt                 |  2 +-
 .../__next.!KHNpdGUp.blogs.$c$slug.__PAGE__.txt    |  2 +-
 .../08/19/message-headers/__next.!KHNpdGUp.txt     |  2 +-
 blogs/2023/08/19/message-headers/__next._full.txt  |  2 +-
 blogs/2023/08/19/message-headers/__next._index.txt |  2 +-
 blogs/2023/08/19/message-headers/__next._tree.txt  |  2 +-
 blogs/2023/08/19/message-headers/index.html        |  2 +-
 blogs/2023/08/19/message-headers/index.txt         |  2 +-
 .../__next.!KHNpdGUp.blogs.$c$slug.__PAGE__.txt    |  2 +-
 .../2023/08/22/message-state/__next.!KHNpdGUp.txt  |  2 +-
 blogs/2023/08/22/message-state/__next._full.txt    |  2 +-
 blogs/2023/08/22/message-state/__next._index.txt   |  2 +-
 blogs/2023/08/22/message-state/__next._tree.txt    |  2 +-
 blogs/2023/08/22/message-state/index.html          |  2 +-
 blogs/2023/08/22/message-state/index.txt           |  2 +-
 .../__next.!KHNpdGUp.blogs.$c$slug.__PAGE__.txt    |  2 +-
 .../2023/08/27/message-expiry/__next.!KHNpdGUp.txt |  2 +-
 blogs/2023/08/27/message-expiry/__next._full.txt   |  2 +-
 blogs/2023/08/27/message-expiry/__next._index.txt  |  2 +-
 blogs/2023/08/27/message-expiry/__next._tree.txt   |  2 +-
 blogs/2023/08/27/message-expiry/index.html         |  2 +-
 blogs/2023/08/27/message-expiry/index.txt          |  2 +-
 .../__next.!KHNpdGUp.blogs.$c$slug.__PAGE__.txt    |  2 +-
 .../08/31/updated-schemas/__next.!KHNpdGUp.txt     |  2 +-
 blogs/2023/08/31/updated-schemas/__next._full.txt  |  2 +-
 blogs/2023/08/31/updated-schemas/__next._index.txt |  2 +-
 blogs/2023/08/31/updated-schemas/__next._tree.txt  |  2 +-
 blogs/2023/08/31/updated-schemas/index.html        |  2 +-
 blogs/2023/08/31/updated-schemas/index.txt         |  2 +-
 .../__next.!KHNpdGUp.blogs.$c$slug.__PAGE__.txt    |  2 +-
 .../20/users-and-permissions/__next.!KHNpdGUp.txt  |  2 +-
 .../09/20/users-and-permissions/__next._full.txt   |  2 +-
 .../09/20/users-and-permissions/__next._index.txt  |  2 +-
 .../09/20/users-and-permissions/__next._tree.txt   |  2 +-
 blogs/2023/09/20/users-and-permissions/index.html  |  2 +-
 blogs/2023/09/20/users-and-permissions/index.txt   |  2 +-
 .../__next.!KHNpdGUp.blogs.$c$slug.__PAGE__.txt    |  2 +-
 .../10/02/consumer-identifier/__next.!KHNpdGUp.txt |  2 +-
 .../10/02/consumer-identifier/__next._full.txt     |  2 +-
 .../10/02/consumer-identifier/__next._index.txt    |  2 +-
 .../10/02/consumer-identifier/__next._tree.txt     |  2 +-
 blogs/2023/10/02/consumer-identifier/index.html    |  2 +-
 blogs/2023/10/02/consumer-identifier/index.txt     |  2 +-
 .../__next.!KHNpdGUp.blogs.$c$slug.__PAGE__.txt    |  2 +-
 .../12/personal-access-tokens/__next.!KHNpdGUp.txt |  2 +-
 .../10/12/personal-access-tokens/__next._full.txt  |  2 +-
 .../10/12/personal-access-tokens/__next._index.txt |  2 +-
 .../10/12/personal-access-tokens/__next._tree.txt  |  2 +-
 blogs/2023/10/12/personal-access-tokens/index.html |  2 +-
 blogs/2023/10/12/personal-access-tokens/index.txt  |  2 +-
 .../__next.!KHNpdGUp.blogs.$c$slug.__PAGE__.txt    |  2 +-
 .../2023/11/26/release-0.1.0/__next.!KHNpdGUp.txt  |  2 +-
 blogs/2023/11/26/release-0.1.0/__next._full.txt    |  2 +-
 blogs/2023/11/26/release-0.1.0/__next._index.txt   |  2 +-
 blogs/2023/11/26/release-0.1.0/__next._tree.txt    |  2 +-
 blogs/2023/11/26/release-0.1.0/index.html          |  2 +-
 blogs/2023/11/26/release-0.1.0/index.txt           |  2 +-
 .../__next.!KHNpdGUp.blogs.$c$slug.__PAGE__.txt    |  2 +-
 .../__next.!KHNpdGUp.txt                           |  2 +-
 .../__next._full.txt                               |  2 +-
 .../__next._index.txt                              |  2 +-
 .../__next._tree.txt                               |  2 +-
 .../building-message-streaming-in-rust/index.html  |  2 +-
 .../building-message-streaming-in-rust/index.txt   |  2 +-
 .../__next.!KHNpdGUp.blogs.$c$slug.__PAGE__.txt    |  2 +-
 .../__next.!KHNpdGUp.txt                           |  2 +-
 .../__next._full.txt                               |  2 +-
 .../__next._index.txt                              |  2 +-
 .../__next._tree.txt                               |  2 +-
 .../index.html                                     |  2 +-
 .../index.txt                                      |  2 +-
 .../__next.!KHNpdGUp.blogs.$c$slug.__PAGE__.txt    |  2 +-
 .../__next.!KHNpdGUp.txt                           |  2 +-
 .../__next._full.txt                               |  2 +-
 .../__next._index.txt                              |  2 +-
 .../__next._tree.txt                               |  2 +-
 .../technology-radar-and-currrent-goals/index.html |  2 +-
 .../technology-radar-and-currrent-goals/index.txt  |  2 +-
 .../__next.!KHNpdGUp.blogs.$c$slug.__PAGE__.txt    |  2 +-
 .../02/10/apache-incubator/__next.!KHNpdGUp.txt    |  2 +-
 blogs/2025/02/10/apache-incubator/__next._full.txt |  2 +-
 .../2025/02/10/apache-incubator/__next._index.txt  |  2 +-
 blogs/2025/02/10/apache-incubator/__next._tree.txt |  2 +-
 blogs/2025/02/10/apache-incubator/index.html       |  2 +-
 blogs/2025/02/10/apache-incubator/index.txt        |  2 +-
 .../__next.!KHNpdGUp.blogs.$c$slug.__PAGE__.txt    |  2 +-
 .../17/transparent-benchmarks/__next.!KHNpdGUp.txt |  2 +-
 .../02/17/transparent-benchmarks/__next._full.txt  |  2 +-
 .../02/17/transparent-benchmarks/__next._index.txt |  2 +-
 .../02/17/transparent-benchmarks/__next._tree.txt  |  2 +-
 blogs/2025/02/17/transparent-benchmarks/index.html |  2 +-
 blogs/2025/02/17/transparent-benchmarks/index.txt  |  2 +-
 .../__next.!KHNpdGUp.blogs.$c$slug.__PAGE__.txt    |  2 +-
 .../zero-copy-deserialization/__next.!KHNpdGUp.txt |  2 +-
 .../08/zero-copy-deserialization/__next._full.txt  |  2 +-
 .../08/zero-copy-deserialization/__next._index.txt |  2 +-
 .../08/zero-copy-deserialization/__next._tree.txt  |  2 +-
 .../05/08/zero-copy-deserialization/index.html     |  2 +-
 .../2025/05/08/zero-copy-deserialization/index.txt |  2 +-
 .../__next.!KHNpdGUp.blogs.$c$slug.__PAGE__.txt    |  2 +-
 .../06/06/connectors-runtime/__next.!KHNpdGUp.txt  |  2 +-
 .../2025/06/06/connectors-runtime/__next._full.txt |  2 +-
 .../06/06/connectors-runtime/__next._index.txt     |  2 +-
 .../2025/06/06/connectors-runtime/__next._tree.txt |  2 +-
 blogs/2025/06/06/connectors-runtime/index.html     |  2 +-
 blogs/2025/06/06/connectors-runtime/index.txt      |  2 +-
 .../__next.!KHNpdGUp.blogs.$c$slug.__PAGE__.txt    |  2 +-
 .../2025/08/10/release-0.5.0/__next.!KHNpdGUp.txt  |  2 +-
 blogs/2025/08/10/release-0.5.0/__next._full.txt    |  2 +-
 blogs/2025/08/10/release-0.5.0/__next._index.txt   |  2 +-
 blogs/2025/08/10/release-0.5.0/__next._tree.txt    |  2 +-
 blogs/2025/08/10/release-0.5.0/index.html          |  2 +-
 blogs/2025/08/10/release-0.5.0/index.txt           |  2 +-
 .../__next.!KHNpdGUp.blogs.$c$slug.__PAGE__.txt    |  2 +-
 .../11/17/websocket-io-uring/__next.!KHNpdGUp.txt  |  2 +-
 .../2025/11/17/websocket-io-uring/__next._full.txt |  2 +-
 .../11/17/websocket-io-uring/__next._index.txt     |  2 +-
 .../2025/11/17/websocket-io-uring/__next._tree.txt |  2 +-
 blogs/2025/11/17/websocket-io-uring/index.html     |  2 +-
 blogs/2025/11/17/websocket-io-uring/index.txt      |  2 +-
 .../__next.!KHNpdGUp.blogs.$c$slug.__PAGE__.txt    |  2 +-
 .../2025/12/09/release-0.6.0/__next.!KHNpdGUp.txt  |  2 +-
 blogs/2025/12/09/release-0.6.0/__next._full.txt    |  2 +-
 blogs/2025/12/09/release-0.6.0/__next._index.txt   |  2 +-
 blogs/2025/12/09/release-0.6.0/__next._tree.txt    |  2 +-
 blogs/2025/12/09/release-0.6.0/index.html          |  2 +-
 blogs/2025/12/09/release-0.6.0/index.txt           |  2 +-
 .../__next.!KHNpdGUp.blogs.$c$slug.__PAGE__.txt    |  2 +-
 .../2026/02/24/release-0.7.0/__next.!KHNpdGUp.txt  |  2 +-
 blogs/2026/02/24/release-0.7.0/__next._full.txt    |  2 +-
 blogs/2026/02/24/release-0.7.0/__next._index.txt   |  2 +-
 blogs/2026/02/24/release-0.7.0/__next._tree.txt    |  2 +-
 blogs/2026/02/24/release-0.7.0/index.html          |  2 +-
 blogs/2026/02/24/release-0.7.0/index.txt           |  2 +-
 .../__next.!KHNpdGUp.blogs.$c$slug.__PAGE__.txt    |  2 +-
 .../thread-per-core-io_uring/__next.!KHNpdGUp.txt  |  2 +-
 .../27/thread-per-core-io_uring/__next._full.txt   |  2 +-
 .../27/thread-per-core-io_uring/__next._index.txt  |  2 +-
 .../27/thread-per-core-io_uring/__next._tree.txt   |  2 +-
 .../2026/02/27/thread-per-core-io_uring/index.html |  2 +-
 .../2026/02/27/thread-per-core-io_uring/index.txt  |  2 +-
 .../__next.!KHNpdGUp.blogs.$c$slug.__PAGE__.txt    |  2 +-
 .../2026/04/22/release-0.8.0/__next.!KHNpdGUp.txt  |  2 +-
 blogs/2026/04/22/release-0.8.0/__next._full.txt    |  2 +-
 blogs/2026/04/22/release-0.8.0/__next._index.txt   |  2 +-
 blogs/2026/04/22/release-0.8.0/__next._tree.txt    |  2 +-
 blogs/2026/04/22/release-0.8.0/index.html          |  2 +-
 blogs/2026/04/22/release-0.8.0/index.txt           |  2 +-
 .../__next.!KHNpdGUp.blogs.$c$slug.__PAGE__.txt    |  2 +-
 .../__next.!KHNpdGUp.txt                           |  2 +-
 .../__next._full.txt                               |  2 +-
 .../__next._index.txt                              |  2 +-
 .../__next._tree.txt                               |  2 +-
 .../index.html                                     |  2 +-
 .../index.txt                                      |  2 +-
 .../__next.!KHNpdGUp.blogs.$c$slug.__PAGE__.txt    |  2 +-
 .../2026/09/21/release-0.9.0/__next.!KHNpdGUp.txt  |  2 +-
 blogs/2026/09/21/release-0.9.0/__next._full.txt    |  2 +-
 blogs/2026/09/21/release-0.9.0/__next._index.txt   |  2 +-
 blogs/2026/09/21/release-0.9.0/__next._tree.txt    |  2 +-
 blogs/2026/09/21/release-0.9.0/index.html          |  2 +-
 blogs/2026/09/21/release-0.9.0/index.txt           |  2 +-
 .../__next.!KHNpdGUp.blogs.$c$slug.__PAGE__.txt    |  2 +-
 .../28/vsr-clustering-part-1/__next.!KHNpdGUp.txt  |  2 +-
 .../09/28/vsr-clustering-part-1/__next._full.txt   |  2 +-
 .../09/28/vsr-clustering-part-1/__next._index.txt  |  2 +-
 .../09/28/vsr-clustering-part-1/__next._tree.txt   |  2 +-
 blogs/2026/09/28/vsr-clustering-part-1/index.html  |  2 +-
 blogs/2026/09/28/vsr-clustering-part-1/index.txt   |  2 +-
 blogs/__next.!KHNpdGUp.blogs.__PAGE__.txt          |  2 +-
 blogs/__next.!KHNpdGUp.txt                         |  2 +-
 blogs/__next._full.txt                             |  2 +-
 blogs/__next._index.txt                            |  2 +-
 blogs/__next._tree.txt                             |  2 +-
 blogs/index.html                                   |  2 +-
 blogs/index.txt                                    |  2 +-
 community/__next.!KHNpdGUp.community.__PAGE__.txt  |  2 +-
 community/__next.!KHNpdGUp.txt                     |  2 +-
 community/__next._full.txt                         |  2 +-
 community/__next._index.txt                        |  2 +-
 community/__next._tree.txt                         |  2 +-
 ...pdGUp.community.become-a-committer.__PAGE__.txt |  2 +-
 community/become-a-committer/__next.!KHNpdGUp.txt  |  2 +-
 community/become-a-committer/__next._full.txt      |  2 +-
 community/become-a-committer/__next._index.txt     |  2 +-
 community/become-a-committer/__next._tree.txt      |  2 +-
 community/become-a-committer/index.html            |  2 +-
 community/become-a-committer/index.txt             |  2 +-
 ...next.!KHNpdGUp.community.brand-kit.__PAGE__.txt |  2 +-
 community/brand-kit/__next.!KHNpdGUp.txt           |  2 +-
 community/brand-kit/__next._full.txt               |  2 +-
 community/brand-kit/__next._index.txt              |  2 +-
 community/brand-kit/__next._tree.txt               |  2 +-
 community/brand-kit/index.html                     |  2 +-
 community/brand-kit/index.txt                      |  2 +-
 ...GUp.community.graduation-checklist.__PAGE__.txt |  2 +-
 .../graduation-checklist/__next.!KHNpdGUp.txt      |  2 +-
 community/graduation-checklist/__next._full.txt    |  2 +-
 community/graduation-checklist/__next._index.txt   |  2 +-
 community/graduation-checklist/__next._tree.txt    |  2 +-
 community/graduation-checklist/index.html          |  2 +-
 community/graduation-checklist/index.txt           |  2 +-
 ...NpdGUp.community.how-to-contribute.__PAGE__.txt |  2 +-
 community/how-to-contribute/__next.!KHNpdGUp.txt   |  2 +-
 community/how-to-contribute/__next._full.txt       |  2 +-
 community/how-to-contribute/__next._index.txt      |  2 +-
 community/how-to-contribute/__next._tree.txt       |  2 +-
 community/how-to-contribute/index.html             |  2 +-
 community/how-to-contribute/index.txt              |  2 +-
 ...!KHNpdGUp.community.how-to-release.__PAGE__.txt |  2 +-
 community/how-to-release/__next.!KHNpdGUp.txt      |  2 +-
 community/how-to-release/__next._full.txt          |  2 +-
 community/how-to-release/__next._index.txt         |  2 +-
 community/how-to-release/__next._tree.txt          |  2 +-
 community/how-to-release/index.html                |  2 +-
 community/how-to-release/index.txt                 |  2 +-
 community/index.html                               |  2 +-
 community/index.txt                                |  2 +-
 ....!KHNpdGUp.community.mailing-lists.__PAGE__.txt |  2 +-
 community/mailing-lists/__next.!KHNpdGUp.txt       |  2 +-
 community/mailing-lists/__next._full.txt           |  2 +-
 community/mailing-lists/__next._index.txt          |  2 +-
 community/mailing-lists/__next._tree.txt           |  2 +-
 community/mailing-lists/index.html                 |  2 +-
 community/mailing-lists/index.txt                  |  2 +-
 .../__next.!KHNpdGUp.community.team.__PAGE__.txt   |  2 +-
 community/team/__next.!KHNpdGUp.txt                |  2 +-
 community/team/__next._full.txt                    |  2 +-
 community/team/__next._index.txt                   |  2 +-
 community/team/__next._tree.txt                    |  2 +-
 community/team/index.html                          |  2 +-
 community/team/index.txt                           |  2 +-
 ....!KGFyY2hpdmUp.docs.!MC44.$oc$slug.__PAGE__.txt |  2 +-
 docs/0.8/__next.!KGFyY2hpdmUp.docs.!MC44.txt       |  2 +-
 docs/0.8/__next._full.txt                          |  2 +-
 docs/0.8/__next._index.txt                         |  2 +-
 docs/0.8/__next._tree.txt                          |  2 +-
 ....!KGFyY2hpdmUp.docs.!MC44.$oc$slug.__PAGE__.txt |  2 +-
 .../__next.!KGFyY2hpdmUp.docs.!MC44.txt            |  2 +-
 docs/0.8/ai/introduction/__next._full.txt          |  2 +-
 docs/0.8/ai/introduction/__next._index.txt         |  2 +-
 docs/0.8/ai/introduction/__next._tree.txt          |  2 +-
 docs/0.8/ai/introduction/index.html                |  2 +-
 docs/0.8/ai/introduction/index.txt                 |  2 +-
 ....!KGFyY2hpdmUp.docs.!MC44.$oc$slug.__PAGE__.txt |  2 +-
 .../0.8/ai/mcp/__next.!KGFyY2hpdmUp.docs.!MC44.txt |  2 +-
 docs/0.8/ai/mcp/__next._full.txt                   |  2 +-
 docs/0.8/ai/mcp/__next._index.txt                  |  2 +-
 docs/0.8/ai/mcp/__next._tree.txt                   |  2 +-
 docs/0.8/ai/mcp/index.html                         |  2 +-
 docs/0.8/ai/mcp/index.txt                          |  2 +-
 ....!KGFyY2hpdmUp.docs.!MC44.$oc$slug.__PAGE__.txt |  2 +-
 .../__next.!KGFyY2hpdmUp.docs.!MC44.txt            |  2 +-
 docs/0.8/binary-protocol/__next._full.txt          |  2 +-
 docs/0.8/binary-protocol/__next._index.txt         |  2 +-
 docs/0.8/binary-protocol/__next._tree.txt          |  2 +-
 ....!KGFyY2hpdmUp.docs.!MC44.$oc$slug.__PAGE__.txt |  2 +-
 .../cluster/__next.!KGFyY2hpdmUp.docs.!MC44.txt    |  2 +-
 docs/0.8/binary-protocol/cluster/__next._full.txt  |  2 +-
 docs/0.8/binary-protocol/cluster/__next._index.txt |  2 +-
 docs/0.8/binary-protocol/cluster/__next._tree.txt  |  2 +-
 docs/0.8/binary-protocol/cluster/index.html        |  2 +-
 docs/0.8/binary-protocol/cluster/index.txt         |  2 +-
 ....!KGFyY2hpdmUp.docs.!MC44.$oc$slug.__PAGE__.txt |  2 +-
 .../commands/__next.!KGFyY2hpdmUp.docs.!MC44.txt   |  2 +-
 docs/0.8/binary-protocol/commands/__next._full.txt |  2 +-
 .../0.8/binary-protocol/commands/__next._index.txt |  2 +-
 docs/0.8/binary-protocol/commands/__next._tree.txt |  2 +-
 docs/0.8/binary-protocol/commands/index.html       |  2 +-
 docs/0.8/binary-protocol/commands/index.txt        |  2 +-
 ....!KGFyY2hpdmUp.docs.!MC44.$oc$slug.__PAGE__.txt |  2 +-
 .../__next.!KGFyY2hpdmUp.docs.!MC44.txt            |  2 +-
 .../connection-lifecycle/__next._full.txt          |  2 +-
 .../connection-lifecycle/__next._index.txt         |  2 +-
 .../connection-lifecycle/__next._tree.txt          |  2 +-
 .../connection-lifecycle/index.html                |  2 +-
 .../binary-protocol/connection-lifecycle/index.txt |  2 +-
 ....!KGFyY2hpdmUp.docs.!MC44.$oc$slug.__PAGE__.txt |  2 +-
 .../encodings/__next.!KGFyY2hpdmUp.docs.!MC44.txt  |  2 +-
 .../0.8/binary-protocol/encodings/__next._full.txt |  2 +-
 .../binary-protocol/encodings/__next._index.txt    |  2 +-
 .../0.8/binary-protocol/encodings/__next._tree.txt |  2 +-
 docs/0.8/binary-protocol/encodings/index.html      |  2 +-
 docs/0.8/binary-protocol/encodings/index.txt       |  2 +-
 ....!KGFyY2hpdmUp.docs.!MC44.$oc$slug.__PAGE__.txt |  2 +-
 .../framing/__next.!KGFyY2hpdmUp.docs.!MC44.txt    |  2 +-
 docs/0.8/binary-protocol/framing/__next._full.txt  |  2 +-
 docs/0.8/binary-protocol/framing/__next._index.txt |  2 +-
 docs/0.8/binary-protocol/framing/__next._tree.txt  |  2 +-
 docs/0.8/binary-protocol/framing/index.html        |  2 +-
 docs/0.8/binary-protocol/framing/index.txt         |  2 +-
 docs/0.8/binary-protocol/index.html                |  2 +-
 docs/0.8/binary-protocol/index.txt                 |  2 +-
 ....!KGFyY2hpdmUp.docs.!MC44.$oc$slug.__PAGE__.txt |  2 +-
 .../messages/__next.!KGFyY2hpdmUp.docs.!MC44.txt   |  2 +-
 docs/0.8/binary-protocol/messages/__next._full.txt |  2 +-
 .../0.8/binary-protocol/messages/__next._index.txt |  2 +-
 docs/0.8/binary-protocol/messages/__next._tree.txt |  2 +-
 docs/0.8/binary-protocol/messages/index.html       |  2 +-
 docs/0.8/binary-protocol/messages/index.txt        |  2 +-
 ....!KGFyY2hpdmUp.docs.!MC44.$oc$slug.__PAGE__.txt |  2 +-
 .../commands/__next.!KGFyY2hpdmUp.docs.!MC44.txt   |  2 +-
 docs/0.8/cli/commands/__next._full.txt             |  2 +-
 docs/0.8/cli/commands/__next._index.txt            |  2 +-
 docs/0.8/cli/commands/__next._tree.txt             |  2 +-
 docs/0.8/cli/commands/index.html                   |  2 +-
 docs/0.8/cli/commands/index.txt                    |  2 +-
 ....!KGFyY2hpdmUp.docs.!MC44.$oc$slug.__PAGE__.txt |  2 +-
 .../cli/start/__next.!KGFyY2hpdmUp.docs.!MC44.txt  |  2 +-
 docs/0.8/cli/start/__next._full.txt                |  2 +-
 docs/0.8/cli/start/__next._index.txt               |  2 +-
 docs/0.8/cli/start/__next._tree.txt                |  2 +-
 docs/0.8/cli/start/index.html                      |  2 +-
 docs/0.8/cli/start/index.txt                       |  2 +-
 ....!KGFyY2hpdmUp.docs.!MC44.$oc$slug.__PAGE__.txt |  2 +-
 .../__next.!KGFyY2hpdmUp.docs.!MC44.txt            |  2 +-
 .../clustering/client-failover/__next._full.txt    |  2 +-
 .../clustering/client-failover/__next._index.txt   |  2 +-
 .../clustering/client-failover/__next._tree.txt    |  2 +-
 docs/0.8/clustering/client-failover/index.html     |  2 +-
 docs/0.8/clustering/client-failover/index.txt      |  2 +-
 ....!KGFyY2hpdmUp.docs.!MC44.$oc$slug.__PAGE__.txt |  2 +-
 .../__next.!KGFyY2hpdmUp.docs.!MC44.txt            |  2 +-
 docs/0.8/clustering/configuration/__next._full.txt |  2 +-
 .../0.8/clustering/configuration/__next._index.txt |  2 +-
 docs/0.8/clustering/configuration/__next._tree.txt |  2 +-
 docs/0.8/clustering/configuration/index.html       |  2 +-
 docs/0.8/clustering/configuration/index.txt        |  2 +-
 ....!KGFyY2hpdmUp.docs.!MC44.$oc$slug.__PAGE__.txt |  2 +-
 .../deploy/__next.!KGFyY2hpdmUp.docs.!MC44.txt     |  2 +-
 docs/0.8/clustering/deploy/__next._full.txt        |  2 +-
 docs/0.8/clustering/deploy/__next._index.txt       |  2 +-
 docs/0.8/clustering/deploy/__next._tree.txt        |  2 +-
 docs/0.8/clustering/deploy/index.html              |  2 +-
 docs/0.8/clustering/deploy/index.txt               |  2 +-
 ....!KGFyY2hpdmUp.docs.!MC44.$oc$slug.__PAGE__.txt |  2 +-
 .../durability/__next.!KGFyY2hpdmUp.docs.!MC44.txt |  2 +-
 docs/0.8/clustering/durability/__next._full.txt    |  2 +-
 docs/0.8/clustering/durability/__next._index.txt   |  2 +-
 docs/0.8/clustering/durability/__next._tree.txt    |  2 +-
 docs/0.8/clustering/durability/index.html          |  2 +-
 docs/0.8/clustering/durability/index.txt           |  2 +-
 ....!KGFyY2hpdmUp.docs.!MC44.$oc$slug.__PAGE__.txt |  2 +-
 .../security/__next.!KGFyY2hpdmUp.docs.!MC44.txt   |  2 +-
 docs/0.8/clustering/security/__next._full.txt      |  2 +-
 docs/0.8/clustering/security/__next._index.txt     |  2 +-
 docs/0.8/clustering/security/__next._tree.txt      |  2 +-
 docs/0.8/clustering/security/index.html            |  2 +-
 docs/0.8/clustering/security/index.txt             |  2 +-
 ....!KGFyY2hpdmUp.docs.!MC44.$oc$slug.__PAGE__.txt |  2 +-
 .../vsr/__next.!KGFyY2hpdmUp.docs.!MC44.txt        |  2 +-
 docs/0.8/clustering/vsr/__next._full.txt           |  2 +-
 docs/0.8/clustering/vsr/__next._index.txt          |  2 +-
 docs/0.8/clustering/vsr/__next._tree.txt           |  2 +-
 docs/0.8/clustering/vsr/index.html                 |  2 +-
 docs/0.8/clustering/vsr/index.txt                  |  2 +-
 ....!KGFyY2hpdmUp.docs.!MC44.$oc$slug.__PAGE__.txt |  2 +-
 .../__next.!KGFyY2hpdmUp.docs.!MC44.txt            |  2 +-
 docs/0.8/connectors/introduction/__next._full.txt  |  2 +-
 docs/0.8/connectors/introduction/__next._index.txt |  2 +-
 docs/0.8/connectors/introduction/__next._tree.txt  |  2 +-
 docs/0.8/connectors/introduction/index.html        |  2 +-
 docs/0.8/connectors/introduction/index.txt         |  2 +-
 ....!KGFyY2hpdmUp.docs.!MC44.$oc$slug.__PAGE__.txt |  2 +-
 .../__next.!KGFyY2hpdmUp.docs.!MC44.txt            |  2 +-
 docs/0.8/connectors/observability/__next._full.txt |  2 +-
 .../0.8/connectors/observability/__next._index.txt |  2 +-
 docs/0.8/connectors/observability/__next._tree.txt |  2 +-
 docs/0.8/connectors/observability/index.html       |  2 +-
 docs/0.8/connectors/observability/index.txt        |  2 +-
 ....!KGFyY2hpdmUp.docs.!MC44.$oc$slug.__PAGE__.txt |  2 +-
 .../runtime/__next.!KGFyY2hpdmUp.docs.!MC44.txt    |  2 +-
 docs/0.8/connectors/runtime/__next._full.txt       |  2 +-
 docs/0.8/connectors/runtime/__next._index.txt      |  2 +-
 docs/0.8/connectors/runtime/__next._tree.txt       |  2 +-
 docs/0.8/connectors/runtime/index.html             |  2 +-
 docs/0.8/connectors/runtime/index.txt              |  2 +-
 ....!KGFyY2hpdmUp.docs.!MC44.$oc$slug.__PAGE__.txt |  2 +-
 .../sdk/__next.!KGFyY2hpdmUp.docs.!MC44.txt        |  2 +-
 docs/0.8/connectors/sdk/__next._full.txt           |  2 +-
 docs/0.8/connectors/sdk/__next._index.txt          |  2 +-
 docs/0.8/connectors/sdk/__next._tree.txt           |  2 +-
 docs/0.8/connectors/sdk/index.html                 |  2 +-
 docs/0.8/connectors/sdk/index.txt                  |  2 +-
 ....!KGFyY2hpdmUp.docs.!MC44.$oc$slug.__PAGE__.txt |  2 +-
 .../clickhouse/__next.!KGFyY2hpdmUp.docs.!MC44.txt |  2 +-
 .../connectors/sinks/clickhouse/__next._full.txt   |  2 +-
 .../connectors/sinks/clickhouse/__next._index.txt  |  2 +-
 .../connectors/sinks/clickhouse/__next._tree.txt   |  2 +-
 docs/0.8/connectors/sinks/clickhouse/index.html    |  2 +-
 docs/0.8/connectors/sinks/clickhouse/index.txt     |  2 +-
 ....!KGFyY2hpdmUp.docs.!MC44.$oc$slug.__PAGE__.txt |  2 +-
 .../delta/__next.!KGFyY2hpdmUp.docs.!MC44.txt      |  2 +-
 docs/0.8/connectors/sinks/delta/__next._full.txt   |  2 +-
 docs/0.8/connectors/sinks/delta/__next._index.txt  |  2 +-
 docs/0.8/connectors/sinks/delta/__next._tree.txt   |  2 +-
 docs/0.8/connectors/sinks/delta/index.html         |  2 +-
 docs/0.8/connectors/sinks/delta/index.txt          |  2 +-
 ....!KGFyY2hpdmUp.docs.!MC44.$oc$slug.__PAGE__.txt |  2 +-
 .../doris/__next.!KGFyY2hpdmUp.docs.!MC44.txt      |  2 +-
 docs/0.8/connectors/sinks/doris/__next._full.txt   |  2 +-
 docs/0.8/connectors/sinks/doris/__next._index.txt  |  2 +-
 docs/0.8/connectors/sinks/doris/__next._tree.txt   |  2 +-
 docs/0.8/connectors/sinks/doris/index.html         |  2 +-
 docs/0.8/connectors/sinks/doris/index.txt          |  2 +-
 ....!KGFyY2hpdmUp.docs.!MC44.$oc$slug.__PAGE__.txt |  2 +-
 .../__next.!KGFyY2hpdmUp.docs.!MC44.txt            |  2 +-
 .../sinks/elasticsearch/__next._full.txt           |  2 +-
 .../sinks/elasticsearch/__next._index.txt          |  2 +-
 .../sinks/elasticsearch/__next._tree.txt           |  2 +-
 docs/0.8/connectors/sinks/elasticsearch/index.html |  2 +-
 docs/0.8/connectors/sinks/elasticsearch/index.txt  |  2 +-
 ....!KGFyY2hpdmUp.docs.!MC44.$oc$slug.__PAGE__.txt |  2 +-
 .../sinks/http/__next.!KGFyY2hpdmUp.docs.!MC44.txt |  2 +-
 docs/0.8/connectors/sinks/http/__next._full.txt    |  2 +-
 docs/0.8/connectors/sinks/http/__next._index.txt   |  2 +-
 docs/0.8/connectors/sinks/http/__next._tree.txt    |  2 +-
 docs/0.8/connectors/sinks/http/index.html          |  2 +-
 docs/0.8/connectors/sinks/http/index.txt           |  2 +-
 ....!KGFyY2hpdmUp.docs.!MC44.$oc$slug.__PAGE__.txt |  2 +-
 .../iceberg/__next.!KGFyY2hpdmUp.docs.!MC44.txt    |  2 +-
 docs/0.8/connectors/sinks/iceberg/__next._full.txt |  2 +-
 .../0.8/connectors/sinks/iceberg/__next._index.txt |  2 +-
 docs/0.8/connectors/sinks/iceberg/__next._tree.txt |  2 +-
 docs/0.8/connectors/sinks/iceberg/index.html       |  2 +-
 docs/0.8/connectors/sinks/iceberg/index.txt        |  2 +-
 ....!KGFyY2hpdmUp.docs.!MC44.$oc$slug.__PAGE__.txt |  2 +-
 .../influxdb/__next.!KGFyY2hpdmUp.docs.!MC44.txt   |  2 +-
 .../0.8/connectors/sinks/influxdb/__next._full.txt |  2 +-
 .../connectors/sinks/influxdb/__next._index.txt    |  2 +-
 .../0.8/connectors/sinks/influxdb/__next._tree.txt |  2 +-
 docs/0.8/connectors/sinks/influxdb/index.html      |  2 +-
 docs/0.8/connectors/sinks/influxdb/index.txt       |  2 +-
 ....!KGFyY2hpdmUp.docs.!MC44.$oc$slug.__PAGE__.txt |  2 +-
 .../__next.!KGFyY2hpdmUp.docs.!MC44.txt            |  2 +-
 .../connectors/sinks/meilisearch/__next._full.txt  |  2 +-
 .../connectors/sinks/meilisearch/__next._index.txt |  2 +-
 .../connectors/sinks/meilisearch/__next._tree.txt  |  2 +-
 docs/0.8/connectors/sinks/meilisearch/index.html   |  2 +-
 docs/0.8/connectors/sinks/meilisearch/index.txt    |  2 +-
 ....!KGFyY2hpdmUp.docs.!MC44.$oc$slug.__PAGE__.txt |  2 +-
 .../mongodb/__next.!KGFyY2hpdmUp.docs.!MC44.txt    |  2 +-
 docs/0.8/connectors/sinks/mongodb/__next._full.txt |  2 +-
 .../0.8/connectors/sinks/mongodb/__next._index.txt |  2 +-
 docs/0.8/connectors/sinks/mongodb/__next._tree.txt |  2 +-
 docs/0.8/connectors/sinks/mongodb/index.html       |  2 +-
 docs/0.8/connectors/sinks/mongodb/index.txt        |  2 +-
 ....!KGFyY2hpdmUp.docs.!MC44.$oc$slug.__PAGE__.txt | 33 +++++-----
 .../postgres/__next.!KGFyY2hpdmUp.docs.!MC44.txt   |  2 +-
 .../0.8/connectors/sinks/postgres/__next._full.txt | 23 +++----
 .../connectors/sinks/postgres/__next._index.txt    |  2 +-
 .../0.8/connectors/sinks/postgres/__next._tree.txt |  2 +-
 docs/0.8/connectors/sinks/postgres/index.html      |  4 +-
 docs/0.8/connectors/sinks/postgres/index.txt       | 23 +++----
 ....!KGFyY2hpdmUp.docs.!MC44.$oc$slug.__PAGE__.txt |  2 +-
 .../quickwit/__next.!KGFyY2hpdmUp.docs.!MC44.txt   |  2 +-
 .../0.8/connectors/sinks/quickwit/__next._full.txt |  2 +-
 .../connectors/sinks/quickwit/__next._index.txt    |  2 +-
 .../0.8/connectors/sinks/quickwit/__next._tree.txt |  2 +-
 docs/0.8/connectors/sinks/quickwit/index.html      |  2 +-
 docs/0.8/connectors/sinks/quickwit/index.txt       |  2 +-
 ....!KGFyY2hpdmUp.docs.!MC44.$oc$slug.__PAGE__.txt |  2 +-
 .../sinks/s3/__next.!KGFyY2hpdmUp.docs.!MC44.txt   |  2 +-
 docs/0.8/connectors/sinks/s3/__next._full.txt      |  2 +-
 docs/0.8/connectors/sinks/s3/__next._index.txt     |  2 +-
 docs/0.8/connectors/sinks/s3/__next._tree.txt      |  2 +-
 docs/0.8/connectors/sinks/s3/index.html            |  2 +-
 docs/0.8/connectors/sinks/s3/index.txt             |  2 +-
 ....!KGFyY2hpdmUp.docs.!MC44.$oc$slug.__PAGE__.txt |  2 +-
 .../sinks/sink/__next.!KGFyY2hpdmUp.docs.!MC44.txt |  2 +-
 docs/0.8/connectors/sinks/sink/__next._full.txt    |  2 +-
 docs/0.8/connectors/sinks/sink/__next._index.txt   |  2 +-
 docs/0.8/connectors/sinks/sink/__next._tree.txt    |  2 +-
 docs/0.8/connectors/sinks/sink/index.html          |  2 +-
 docs/0.8/connectors/sinks/sink/index.txt           |  2 +-
 ....!KGFyY2hpdmUp.docs.!MC44.$oc$slug.__PAGE__.txt |  2 +-
 .../stdout/__next.!KGFyY2hpdmUp.docs.!MC44.txt     |  2 +-
 docs/0.8/connectors/sinks/stdout/__next._full.txt  |  2 +-
 docs/0.8/connectors/sinks/stdout/__next._index.txt |  2 +-
 docs/0.8/connectors/sinks/stdout/__next._tree.txt  |  2 +-
 docs/0.8/connectors/sinks/stdout/index.html        |  2 +-
 docs/0.8/connectors/sinks/stdout/index.txt         |  2 +-
 ....!KGFyY2hpdmUp.docs.!MC44.$oc$slug.__PAGE__.txt |  2 +-
 .../surrealdb/__next.!KGFyY2hpdmUp.docs.!MC44.txt  |  2 +-
 .../connectors/sinks/surrealdb/__next._full.txt    |  2 +-
 .../connectors/sinks/surrealdb/__next._index.txt   |  2 +-
 .../connectors/sinks/surrealdb/__next._tree.txt    |  2 +-
 docs/0.8/connectors/sinks/surrealdb/index.html     |  2 +-
 docs/0.8/connectors/sinks/surrealdb/index.txt      |  2 +-
 ....!KGFyY2hpdmUp.docs.!MC44.$oc$slug.__PAGE__.txt |  2 +-
 .../__next.!KGFyY2hpdmUp.docs.!MC44.txt            |  2 +-
 .../sources/elasticsearch/__next._full.txt         |  2 +-
 .../sources/elasticsearch/__next._index.txt        |  2 +-
 .../sources/elasticsearch/__next._tree.txt         |  2 +-
 .../connectors/sources/elasticsearch/index.html    |  2 +-
 .../0.8/connectors/sources/elasticsearch/index.txt |  2 +-
 ....!KGFyY2hpdmUp.docs.!MC44.$oc$slug.__PAGE__.txt |  2 +-
 .../influxdb/__next.!KGFyY2hpdmUp.docs.!MC44.txt   |  2 +-
 .../connectors/sources/influxdb/__next._full.txt   |  2 +-
 .../connectors/sources/influxdb/__next._index.txt  |  2 +-
 .../connectors/sources/influxdb/__next._tree.txt   |  2 +-
 docs/0.8/connectors/sources/influxdb/index.html    |  2 +-
 docs/0.8/connectors/sources/influxdb/index.txt     |  2 +-
 ....!KGFyY2hpdmUp.docs.!MC44.$oc$slug.__PAGE__.txt |  2 +-
 .../postgres/__next.!KGFyY2hpdmUp.docs.!MC44.txt   |  2 +-
 .../connectors/sources/postgres/__next._full.txt   |  2 +-
 .../connectors/sources/postgres/__next._index.txt  |  2 +-
 .../connectors/sources/postgres/__next._tree.txt   |  2 +-
 docs/0.8/connectors/sources/postgres/index.html    |  2 +-
 docs/0.8/connectors/sources/postgres/index.txt     |  2 +-
 ....!KGFyY2hpdmUp.docs.!MC44.$oc$slug.__PAGE__.txt |  2 +-
 .../random/__next.!KGFyY2hpdmUp.docs.!MC44.txt     |  2 +-
 .../0.8/connectors/sources/random/__next._full.txt |  2 +-
 .../connectors/sources/random/__next._index.txt    |  2 +-
 .../0.8/connectors/sources/random/__next._tree.txt |  2 +-
 docs/0.8/connectors/sources/random/index.html      |  2 +-
 docs/0.8/connectors/sources/random/index.txt       |  2 +-
 ....!KGFyY2hpdmUp.docs.!MC44.$oc$slug.__PAGE__.txt |  2 +-
 .../source/__next.!KGFyY2hpdmUp.docs.!MC44.txt     |  2 +-
 .../0.8/connectors/sources/source/__next._full.txt |  2 +-
 .../connectors/sources/source/__next._index.txt    |  2 +-
 .../0.8/connectors/sources/source/__next._tree.txt |  2 +-
 docs/0.8/connectors/sources/source/index.html      |  2 +-
 docs/0.8/connectors/sources/source/index.txt       |  2 +-
 ....!KGFyY2hpdmUp.docs.!MC44.$oc$slug.__PAGE__.txt |  2 +-
 .../transforms/__next.!KGFyY2hpdmUp.docs.!MC44.txt |  2 +-
 docs/0.8/connectors/transforms/__next._full.txt    |  2 +-
 docs/0.8/connectors/transforms/__next._index.txt   |  2 +-
 docs/0.8/connectors/transforms/__next._tree.txt    |  2 +-
 docs/0.8/connectors/transforms/index.html          |  2 +-
 docs/0.8/connectors/transforms/index.txt           |  2 +-
 ....!KGFyY2hpdmUp.docs.!MC44.$oc$slug.__PAGE__.txt |  2 +-
 .../faq/faq/__next.!KGFyY2hpdmUp.docs.!MC44.txt    |  2 +-
 docs/0.8/faq/faq/__next._full.txt                  |  2 +-
 docs/0.8/faq/faq/__next._index.txt                 |  2 +-
 docs/0.8/faq/faq/__next._tree.txt                  |  2 +-
 docs/0.8/faq/faq/index.html                        |  2 +-
 docs/0.8/faq/faq/index.txt                         |  2 +-
 docs/0.8/index.html                                |  2 +-
 docs/0.8/index.txt                                 |  2 +-
 ....!KGFyY2hpdmUp.docs.!MC44.$oc$slug.__PAGE__.txt |  2 +-
 .../about/__next.!KGFyY2hpdmUp.docs.!MC44.txt      |  2 +-
 docs/0.8/introduction/about/__next._full.txt       |  2 +-
 docs/0.8/introduction/about/__next._index.txt      |  2 +-
 docs/0.8/introduction/about/__next._tree.txt       |  2 +-
 docs/0.8/introduction/about/index.html             |  2 +-
 docs/0.8/introduction/about/index.txt              |  2 +-
 ....!KGFyY2hpdmUp.docs.!MC44.$oc$slug.__PAGE__.txt |  2 +-
 .../__next.!KGFyY2hpdmUp.docs.!MC44.txt            |  2 +-
 .../0.8/introduction/architecture/__next._full.txt |  2 +-
 .../introduction/architecture/__next._index.txt    |  2 +-
 .../0.8/introduction/architecture/__next._tree.txt |  2 +-
 docs/0.8/introduction/architecture/index.html      |  2 +-
 docs/0.8/introduction/architecture/index.txt       |  2 +-
 ....!KGFyY2hpdmUp.docs.!MC44.$oc$slug.__PAGE__.txt |  2 +-
 .../concepts/__next.!KGFyY2hpdmUp.docs.!MC44.txt   |  2 +-
 docs/0.8/introduction/concepts/__next._full.txt    |  2 +-
 docs/0.8/introduction/concepts/__next._index.txt   |  2 +-
 docs/0.8/introduction/concepts/__next._tree.txt    |  2 +-
 docs/0.8/introduction/concepts/index.html          |  2 +-
 docs/0.8/introduction/concepts/index.txt           |  2 +-
 ....!KGFyY2hpdmUp.docs.!MC44.$oc$slug.__PAGE__.txt |  2 +-
 .../__next.!KGFyY2hpdmUp.docs.!MC44.txt            |  2 +-
 .../introduction/getting-started/__next._full.txt  |  2 +-
 .../introduction/getting-started/__next._index.txt |  2 +-
 .../introduction/getting-started/__next._tree.txt  |  2 +-
 docs/0.8/introduction/getting-started/index.html   |  2 +-
 docs/0.8/introduction/getting-started/index.txt    |  2 +-
 ....!KGFyY2hpdmUp.docs.!MC44.$oc$slug.__PAGE__.txt |  2 +-
 .../__next.!KGFyY2hpdmUp.docs.!MC44.txt            |  2 +-
 docs/0.8/sdk/connection-strings/__next._full.txt   |  2 +-
 docs/0.8/sdk/connection-strings/__next._index.txt  |  2 +-
 docs/0.8/sdk/connection-strings/__next._tree.txt   |  2 +-
 docs/0.8/sdk/connection-strings/index.html         |  2 +-
 docs/0.8/sdk/connection-strings/index.txt          |  2 +-
 ....!KGFyY2hpdmUp.docs.!MC44.$oc$slug.__PAGE__.txt |  2 +-
 .../cpp/intro/__next.!KGFyY2hpdmUp.docs.!MC44.txt  |  2 +-
 docs/0.8/sdk/cpp/intro/__next._full.txt            |  2 +-
 docs/0.8/sdk/cpp/intro/__next._index.txt           |  2 +-
 docs/0.8/sdk/cpp/intro/__next._tree.txt            |  2 +-
 docs/0.8/sdk/cpp/intro/index.html                  |  2 +-
 docs/0.8/sdk/cpp/intro/index.txt                   |  2 +-
 ....!KGFyY2hpdmUp.docs.!MC44.$oc$slug.__PAGE__.txt |  2 +-
 .../examples/__next.!KGFyY2hpdmUp.docs.!MC44.txt   |  2 +-
 docs/0.8/sdk/csharp/examples/__next._full.txt      |  2 +-
 docs/0.8/sdk/csharp/examples/__next._index.txt     |  2 +-
 docs/0.8/sdk/csharp/examples/__next._tree.txt      |  2 +-
 docs/0.8/sdk/csharp/examples/index.html            |  2 +-
 docs/0.8/sdk/csharp/examples/index.txt             |  2 +-
 ....!KGFyY2hpdmUp.docs.!MC44.$oc$slug.__PAGE__.txt |  2 +-
 .../guide/__next.!KGFyY2hpdmUp.docs.!MC44.txt      |  2 +-
 docs/0.8/sdk/csharp/guide/__next._full.txt         |  2 +-
 docs/0.8/sdk/csharp/guide/__next._index.txt        |  2 +-
 docs/0.8/sdk/csharp/guide/__next._tree.txt         |  2 +-
 docs/0.8/sdk/csharp/guide/index.html               |  2 +-
 docs/0.8/sdk/csharp/guide/index.txt                |  2 +-
 ....!KGFyY2hpdmUp.docs.!MC44.$oc$slug.__PAGE__.txt |  2 +-
 .../__next.!KGFyY2hpdmUp.docs.!MC44.txt            |  2 +-
 .../0.8/sdk/csharp/high-level-sdk/__next._full.txt |  2 +-
 .../sdk/csharp/high-level-sdk/__next._index.txt    |  2 +-
 .../0.8/sdk/csharp/high-level-sdk/__next._tree.txt |  2 +-
 docs/0.8/sdk/csharp/high-level-sdk/index.html      |  2 +-
 docs/0.8/sdk/csharp/high-level-sdk/index.txt       |  2 +-
 ....!KGFyY2hpdmUp.docs.!MC44.$oc$slug.__PAGE__.txt |  2 +-
 .../intro/__next.!KGFyY2hpdmUp.docs.!MC44.txt      |  2 +-
 docs/0.8/sdk/csharp/intro/__next._full.txt         |  2 +-
 docs/0.8/sdk/csharp/intro/__next._index.txt        |  2 +-
 docs/0.8/sdk/csharp/intro/__next._tree.txt         |  2 +-
 docs/0.8/sdk/csharp/intro/index.html               |  2 +-
 docs/0.8/sdk/csharp/intro/index.txt                |  2 +-
 ....!KGFyY2hpdmUp.docs.!MC44.$oc$slug.__PAGE__.txt |  2 +-
 .../examples/__next.!KGFyY2hpdmUp.docs.!MC44.txt   |  2 +-
 docs/0.8/sdk/go/examples/__next._full.txt          |  2 +-
 docs/0.8/sdk/go/examples/__next._index.txt         |  2 +-
 docs/0.8/sdk/go/examples/__next._tree.txt          |  2 +-
 docs/0.8/sdk/go/examples/index.html                |  2 +-
 docs/0.8/sdk/go/examples/index.txt                 |  2 +-
 ....!KGFyY2hpdmUp.docs.!MC44.$oc$slug.__PAGE__.txt |  2 +-
 .../go/intro/__next.!KGFyY2hpdmUp.docs.!MC44.txt   |  2 +-
 docs/0.8/sdk/go/intro/__next._full.txt             |  2 +-
 docs/0.8/sdk/go/intro/__next._index.txt            |  2 +-
 docs/0.8/sdk/go/intro/__next._tree.txt             |  2 +-
 docs/0.8/sdk/go/intro/index.html                   |  2 +-
 docs/0.8/sdk/go/intro/index.txt                    |  2 +-
 ....!KGFyY2hpdmUp.docs.!MC44.$oc$slug.__PAGE__.txt |  2 +-
 .../__next.!KGFyY2hpdmUp.docs.!MC44.txt            |  2 +-
 docs/0.8/sdk/introduction/__next._full.txt         |  2 +-
 docs/0.8/sdk/introduction/__next._index.txt        |  2 +-
 docs/0.8/sdk/introduction/__next._tree.txt         |  2 +-
 docs/0.8/sdk/introduction/index.html               |  2 +-
 docs/0.8/sdk/introduction/index.txt                |  2 +-
 ....!KGFyY2hpdmUp.docs.!MC44.$oc$slug.__PAGE__.txt |  2 +-
 .../examples/__next.!KGFyY2hpdmUp.docs.!MC44.txt   |  2 +-
 docs/0.8/sdk/java/examples/__next._full.txt        |  2 +-
 docs/0.8/sdk/java/examples/__next._index.txt       |  2 +-
 docs/0.8/sdk/java/examples/__next._tree.txt        |  2 +-
 docs/0.8/sdk/java/examples/index.html              |  2 +-
 docs/0.8/sdk/java/examples/index.txt               |  2 +-
 ....!KGFyY2hpdmUp.docs.!MC44.$oc$slug.__PAGE__.txt |  2 +-
 .../java/intro/__next.!KGFyY2hpdmUp.docs.!MC44.txt |  2 +-
 docs/0.8/sdk/java/intro/__next._full.txt           |  2 +-
 docs/0.8/sdk/java/intro/__next._index.txt          |  2 +-
 docs/0.8/sdk/java/intro/__next._tree.txt           |  2 +-
 docs/0.8/sdk/java/intro/index.html                 |  2 +-
 docs/0.8/sdk/java/intro/index.txt                  |  2 +-
 ....!KGFyY2hpdmUp.docs.!MC44.$oc$slug.__PAGE__.txt |  2 +-
 .../examples/__next.!KGFyY2hpdmUp.docs.!MC44.txt   |  2 +-
 docs/0.8/sdk/node/examples/__next._full.txt        |  2 +-
 docs/0.8/sdk/node/examples/__next._index.txt       |  2 +-
 docs/0.8/sdk/node/examples/__next._tree.txt        |  2 +-
 docs/0.8/sdk/node/examples/index.html              |  2 +-
 docs/0.8/sdk/node/examples/index.txt               |  2 +-
 ....!KGFyY2hpdmUp.docs.!MC44.$oc$slug.__PAGE__.txt |  2 +-
 .../node/intro/__next.!KGFyY2hpdmUp.docs.!MC44.txt |  2 +-
 docs/0.8/sdk/node/intro/__next._full.txt           |  2 +-
 docs/0.8/sdk/node/intro/__next._index.txt          |  2 +-
 docs/0.8/sdk/node/intro/__next._tree.txt           |  2 +-
 docs/0.8/sdk/node/intro/index.html                 |  2 +-
 docs/0.8/sdk/node/intro/index.txt                  |  2 +-
 ....!KGFyY2hpdmUp.docs.!MC44.$oc$slug.__PAGE__.txt |  2 +-
 .../php/intro/__next.!KGFyY2hpdmUp.docs.!MC44.txt  |  2 +-
 docs/0.8/sdk/php/intro/__next._full.txt            |  2 +-
 docs/0.8/sdk/php/intro/__next._index.txt           |  2 +-
 docs/0.8/sdk/php/intro/__next._tree.txt            |  2 +-
 docs/0.8/sdk/php/intro/index.html                  |  2 +-
 docs/0.8/sdk/php/intro/index.txt                   |  2 +-
 ....!KGFyY2hpdmUp.docs.!MC44.$oc$slug.__PAGE__.txt |  2 +-
 .../examples/__next.!KGFyY2hpdmUp.docs.!MC44.txt   |  2 +-
 docs/0.8/sdk/python/examples/__next._full.txt      |  2 +-
 docs/0.8/sdk/python/examples/__next._index.txt     |  2 +-
 docs/0.8/sdk/python/examples/__next._tree.txt      |  2 +-
 docs/0.8/sdk/python/examples/index.html            |  2 +-
 docs/0.8/sdk/python/examples/index.txt             |  2 +-
 ....!KGFyY2hpdmUp.docs.!MC44.$oc$slug.__PAGE__.txt |  2 +-
 .../intro/__next.!KGFyY2hpdmUp.docs.!MC44.txt      |  2 +-
 docs/0.8/sdk/python/intro/__next._full.txt         |  2 +-
 docs/0.8/sdk/python/intro/__next._index.txt        |  2 +-
 docs/0.8/sdk/python/intro/__next._tree.txt         |  2 +-
 docs/0.8/sdk/python/intro/index.html               |  2 +-
 docs/0.8/sdk/python/intro/index.txt                |  2 +-
 ....!KGFyY2hpdmUp.docs.!MC44.$oc$slug.__PAGE__.txt |  2 +-
 .../examples/__next.!KGFyY2hpdmUp.docs.!MC44.txt   |  2 +-
 docs/0.8/sdk/rust/examples/__next._full.txt        |  2 +-
 docs/0.8/sdk/rust/examples/__next._index.txt       |  2 +-
 docs/0.8/sdk/rust/examples/__next._tree.txt        |  2 +-
 docs/0.8/sdk/rust/examples/index.html              |  2 +-
 docs/0.8/sdk/rust/examples/index.txt               |  2 +-
 ....!KGFyY2hpdmUp.docs.!MC44.$oc$slug.__PAGE__.txt |  2 +-
 .../__next.!KGFyY2hpdmUp.docs.!MC44.txt            |  2 +-
 docs/0.8/sdk/rust/high-level-sdk/__next._full.txt  |  2 +-
 docs/0.8/sdk/rust/high-level-sdk/__next._index.txt |  2 +-
 docs/0.8/sdk/rust/high-level-sdk/__next._tree.txt  |  2 +-
 docs/0.8/sdk/rust/high-level-sdk/index.html        |  2 +-
 docs/0.8/sdk/rust/high-level-sdk/index.txt         |  2 +-
 ....!KGFyY2hpdmUp.docs.!MC44.$oc$slug.__PAGE__.txt |  2 +-
 .../rust/intro/__next.!KGFyY2hpdmUp.docs.!MC44.txt |  2 +-
 docs/0.8/sdk/rust/intro/__next._full.txt           |  2 +-
 docs/0.8/sdk/rust/intro/__next._index.txt          |  2 +-
 docs/0.8/sdk/rust/intro/__next._tree.txt           |  2 +-
 docs/0.8/sdk/rust/intro/index.html                 |  2 +-
 docs/0.8/sdk/rust/intro/index.txt                  |  2 +-
 ....!KGFyY2hpdmUp.docs.!MC44.$oc$slug.__PAGE__.txt |  2 +-
 .../__next.!KGFyY2hpdmUp.docs.!MC44.txt            |  2 +-
 docs/0.8/sdk/rust/stream-builder/__next._full.txt  |  2 +-
 docs/0.8/sdk/rust/stream-builder/__next._index.txt |  2 +-
 docs/0.8/sdk/rust/stream-builder/__next._tree.txt  |  2 +-
 docs/0.8/sdk/rust/stream-builder/index.html        |  2 +-
 docs/0.8/sdk/rust/stream-builder/index.txt         |  2 +-
 ....!KGFyY2hpdmUp.docs.!MC44.$oc$slug.__PAGE__.txt |  2 +-
 .../__next.!KGFyY2hpdmUp.docs.!MC44.txt            |  2 +-
 docs/0.8/server/benchmarking/__next._full.txt      |  2 +-
 docs/0.8/server/benchmarking/__next._index.txt     |  2 +-
 docs/0.8/server/benchmarking/__next._tree.txt      |  2 +-
 docs/0.8/server/benchmarking/index.html            |  2 +-
 docs/0.8/server/benchmarking/index.txt             |  2 +-
 ....!KGFyY2hpdmUp.docs.!MC44.$oc$slug.__PAGE__.txt |  2 +-
 .../__next.!KGFyY2hpdmUp.docs.!MC44.txt            |  2 +-
 docs/0.8/server/configuration/__next._full.txt     |  2 +-
 docs/0.8/server/configuration/__next._index.txt    |  2 +-
 docs/0.8/server/configuration/__next._tree.txt     |  2 +-
 docs/0.8/server/configuration/index.html           |  2 +-
 docs/0.8/server/configuration/index.txt            |  2 +-
 ....!KGFyY2hpdmUp.docs.!MC44.$oc$slug.__PAGE__.txt |  2 +-
 .../docker/__next.!KGFyY2hpdmUp.docs.!MC44.txt     |  2 +-
 docs/0.8/server/docker/__next._full.txt            |  2 +-
 docs/0.8/server/docker/__next._index.txt           |  2 +-
 docs/0.8/server/docker/__next._tree.txt            |  2 +-
 docs/0.8/server/docker/index.html                  |  2 +-
 docs/0.8/server/docker/index.txt                   |  2 +-
 ....!KGFyY2hpdmUp.docs.!MC44.$oc$slug.__PAGE__.txt |  2 +-
 .../durability/__next.!KGFyY2hpdmUp.docs.!MC44.txt |  2 +-
 docs/0.8/server/durability/__next._full.txt        |  2 +-
 docs/0.8/server/durability/__next._index.txt       |  2 +-
 docs/0.8/server/durability/__next._tree.txt        |  2 +-
 docs/0.8/server/durability/index.html              |  2 +-
 docs/0.8/server/durability/index.txt               |  2 +-
 ....!KGFyY2hpdmUp.docs.!MC44.$oc$slug.__PAGE__.txt |  2 +-
 .../__next.!KGFyY2hpdmUp.docs.!MC44.txt            |  2 +-
 docs/0.8/server/introduction/__next._full.txt      |  2 +-
 docs/0.8/server/introduction/__next._index.txt     |  2 +-
 docs/0.8/server/introduction/__next._tree.txt      |  2 +-
 docs/0.8/server/introduction/index.html            |  2 +-
 docs/0.8/server/introduction/index.txt             |  2 +-
 ....!KGFyY2hpdmUp.docs.!MC44.$oc$slug.__PAGE__.txt |  2 +-
 .../__next.!KGFyY2hpdmUp.docs.!MC44.txt            |  2 +-
 docs/0.8/server/linux-tuning/__next._full.txt      |  2 +-
 docs/0.8/server/linux-tuning/__next._index.txt     |  2 +-
 docs/0.8/server/linux-tuning/__next._tree.txt      |  2 +-
 docs/0.8/server/linux-tuning/index.html            |  2 +-
 docs/0.8/server/linux-tuning/index.txt             |  2 +-
 ....!KGFyY2hpdmUp.docs.!MC44.$oc$slug.__PAGE__.txt |  2 +-
 .../networking/__next.!KGFyY2hpdmUp.docs.!MC44.txt |  2 +-
 docs/0.8/server/networking/__next._full.txt        |  2 +-
 docs/0.8/server/networking/__next._index.txt       |  2 +-
 docs/0.8/server/networking/__next._tree.txt        |  2 +-
 docs/0.8/server/networking/index.html              |  2 +-
 docs/0.8/server/networking/index.txt               |  2 +-
 ....!KGFyY2hpdmUp.docs.!MC44.$oc$slug.__PAGE__.txt |  2 +-
 .../security/__next.!KGFyY2hpdmUp.docs.!MC44.txt   |  2 +-
 docs/0.8/server/security/__next._full.txt          |  2 +-
 docs/0.8/server/security/__next._index.txt         |  2 +-
 docs/0.8/server/security/__next._tree.txt          |  2 +-
 docs/0.8/server/security/index.html                |  2 +-
 docs/0.8/server/security/index.txt                 |  2 +-
 ....!KGFyY2hpdmUp.docs.!MC44.$oc$slug.__PAGE__.txt |  2 +-
 .../__next.!KGFyY2hpdmUp.docs.!MC44.txt            |  2 +-
 docs/0.8/server/storage-engine/__next._full.txt    |  2 +-
 docs/0.8/server/storage-engine/__next._index.txt   |  2 +-
 docs/0.8/server/storage-engine/__next._tree.txt    |  2 +-
 docs/0.8/server/storage-engine/index.html          |  2 +-
 docs/0.8/server/storage-engine/index.txt           |  2 +-
 ....!KGFyY2hpdmUp.docs.!MC44.$oc$slug.__PAGE__.txt |  2 +-
 .../__next.!KGFyY2hpdmUp.docs.!MC44.txt            |  2 +-
 docs/0.8/server/topic-options/__next._full.txt     |  2 +-
 docs/0.8/server/topic-options/__next._index.txt    |  2 +-
 docs/0.8/server/topic-options/__next._tree.txt     |  2 +-
 docs/0.8/server/topic-options/index.html           |  2 +-
 docs/0.8/server/topic-options/index.txt            |  2 +-
 ....!KGFyY2hpdmUp.docs.!MC44.$oc$slug.__PAGE__.txt |  2 +-
 .../start/__next.!KGFyY2hpdmUp.docs.!MC44.txt      |  2 +-
 docs/0.8/web_ui/start/__next._full.txt             |  2 +-
 docs/0.8/web_ui/start/__next._index.txt            |  2 +-
 docs/0.8/web_ui/start/__next._tree.txt             |  2 +-
 docs/0.8/web_ui/start/index.html                   |  2 +-
 docs/0.8/web_ui/start/index.txt                    |  2 +-
 ...__next.!KGN1cnJlbnQp.docs.$oc$slug.__PAGE__.txt |  2 +-
 docs/__next.!KGN1cnJlbnQp.docs.txt                 |  2 +-
 docs/__next._full.txt                              |  2 +-
 docs/__next._index.txt                             |  2 +-
 docs/__next._tree.txt                              |  2 +-
 ...__next.!KGN1cnJlbnQp.docs.$oc$slug.__PAGE__.txt |  2 +-
 docs/ai/introduction/__next.!KGN1cnJlbnQp.docs.txt |  2 +-
 docs/ai/introduction/__next._full.txt              |  2 +-
 docs/ai/introduction/__next._index.txt             |  2 +-
 docs/ai/introduction/__next._tree.txt              |  2 +-
 docs/ai/introduction/index.html                    |  2 +-
 docs/ai/introduction/index.txt                     |  2 +-
 ...__next.!KGN1cnJlbnQp.docs.$oc$slug.__PAGE__.txt |  2 +-
 docs/ai/mcp/__next.!KGN1cnJlbnQp.docs.txt          |  2 +-
 docs/ai/mcp/__next._full.txt                       |  2 +-
 docs/ai/mcp/__next._index.txt                      |  2 +-
 docs/ai/mcp/__next._tree.txt                       |  2 +-
 docs/ai/mcp/index.html                             |  2 +-
 docs/ai/mcp/index.txt                              |  2 +-
 ...__next.!KGN1cnJlbnQp.docs.$oc$slug.__PAGE__.txt |  2 +-
 docs/binary-protocol/__next.!KGN1cnJlbnQp.docs.txt |  2 +-
 docs/binary-protocol/__next._full.txt              |  2 +-
 docs/binary-protocol/__next._index.txt             |  2 +-
 docs/binary-protocol/__next._tree.txt              |  2 +-
 ...__next.!KGN1cnJlbnQp.docs.$oc$slug.__PAGE__.txt |  2 +-
 .../cluster/__next.!KGN1cnJlbnQp.docs.txt          |  2 +-
 docs/binary-protocol/cluster/__next._full.txt      |  2 +-
 docs/binary-protocol/cluster/__next._index.txt     |  2 +-
 docs/binary-protocol/cluster/__next._tree.txt      |  2 +-
 docs/binary-protocol/cluster/index.html            |  2 +-
 docs/binary-protocol/cluster/index.txt             |  2 +-
 ...__next.!KGN1cnJlbnQp.docs.$oc$slug.__PAGE__.txt |  2 +-
 .../commands/__next.!KGN1cnJlbnQp.docs.txt         |  2 +-
 docs/binary-protocol/commands/__next._full.txt     |  2 +-
 docs/binary-protocol/commands/__next._index.txt    |  2 +-
 docs/binary-protocol/commands/__next._tree.txt     |  2 +-
 docs/binary-protocol/commands/index.html           |  2 +-
 docs/binary-protocol/commands/index.txt            |  2 +-
 ...__next.!KGN1cnJlbnQp.docs.$oc$slug.__PAGE__.txt |  2 +-
 .../__next.!KGN1cnJlbnQp.docs.txt                  |  2 +-
 .../connection-lifecycle/__next._full.txt          |  2 +-
 .../connection-lifecycle/__next._index.txt         |  2 +-
 .../connection-lifecycle/__next._tree.txt          |  2 +-
 .../connection-lifecycle/index.html                |  2 +-
 .../binary-protocol/connection-lifecycle/index.txt |  2 +-
 ...__next.!KGN1cnJlbnQp.docs.$oc$slug.__PAGE__.txt |  2 +-
 .../encodings/__next.!KGN1cnJlbnQp.docs.txt        |  2 +-
 docs/binary-protocol/encodings/__next._full.txt    |  2 +-
 docs/binary-protocol/encodings/__next._index.txt   |  2 +-
 docs/binary-protocol/encodings/__next._tree.txt    |  2 +-
 docs/binary-protocol/encodings/index.html          |  2 +-
 docs/binary-protocol/encodings/index.txt           |  2 +-
 ...__next.!KGN1cnJlbnQp.docs.$oc$slug.__PAGE__.txt |  2 +-
 .../framing/__next.!KGN1cnJlbnQp.docs.txt          |  2 +-
 docs/binary-protocol/framing/__next._full.txt      |  2 +-
 docs/binary-protocol/framing/__next._index.txt     |  2 +-
 docs/binary-protocol/framing/__next._tree.txt      |  2 +-
 docs/binary-protocol/framing/index.html            |  2 +-
 docs/binary-protocol/framing/index.txt             |  2 +-
 docs/binary-protocol/index.html                    |  2 +-
 docs/binary-protocol/index.txt                     |  2 +-
 ...__next.!KGN1cnJlbnQp.docs.$oc$slug.__PAGE__.txt |  2 +-
 .../messages/__next.!KGN1cnJlbnQp.docs.txt         |  2 +-
 docs/binary-protocol/messages/__next._full.txt     |  2 +-
 docs/binary-protocol/messages/__next._index.txt    |  2 +-
 docs/binary-protocol/messages/__next._tree.txt     |  2 +-
 docs/binary-protocol/messages/index.html           |  2 +-
 docs/binary-protocol/messages/index.txt            |  2 +-
 ...__next.!KGN1cnJlbnQp.docs.$oc$slug.__PAGE__.txt |  2 +-
 docs/cli/commands/__next.!KGN1cnJlbnQp.docs.txt    |  2 +-
 docs/cli/commands/__next._full.txt                 |  2 +-
 docs/cli/commands/__next._index.txt                |  2 +-
 docs/cli/commands/__next._tree.txt                 |  2 +-
 docs/cli/commands/index.html                       |  2 +-
 docs/cli/commands/index.txt                        |  2 +-
 ...__next.!KGN1cnJlbnQp.docs.$oc$slug.__PAGE__.txt |  2 +-
 docs/cli/start/__next.!KGN1cnJlbnQp.docs.txt       |  2 +-
 docs/cli/start/__next._full.txt                    |  2 +-
 docs/cli/start/__next._index.txt                   |  2 +-
 docs/cli/start/__next._tree.txt                    |  2 +-
 docs/cli/start/index.html                          |  2 +-
 docs/cli/start/index.txt                           |  2 +-
 ...__next.!KGN1cnJlbnQp.docs.$oc$slug.__PAGE__.txt |  2 +-
 .../client-failover/__next.!KGN1cnJlbnQp.docs.txt  |  2 +-
 docs/clustering/client-failover/__next._full.txt   |  2 +-
 docs/clustering/client-failover/__next._index.txt  |  2 +-
 docs/clustering/client-failover/__next._tree.txt   |  2 +-
 docs/clustering/client-failover/index.html         |  2 +-
 docs/clustering/client-failover/index.txt          |  2 +-
 ...__next.!KGN1cnJlbnQp.docs.$oc$slug.__PAGE__.txt |  2 +-
 .../configuration/__next.!KGN1cnJlbnQp.docs.txt    |  2 +-
 docs/clustering/configuration/__next._full.txt     |  2 +-
 docs/clustering/configuration/__next._index.txt    |  2 +-
 docs/clustering/configuration/__next._tree.txt     |  2 +-
 docs/clustering/configuration/index.html           |  2 +-
 docs/clustering/configuration/index.txt            |  2 +-
 ...__next.!KGN1cnJlbnQp.docs.$oc$slug.__PAGE__.txt |  2 +-
 .../deploy/__next.!KGN1cnJlbnQp.docs.txt           |  2 +-
 docs/clustering/deploy/__next._full.txt            |  2 +-
 docs/clustering/deploy/__next._index.txt           |  2 +-
 docs/clustering/deploy/__next._tree.txt            |  2 +-
 docs/clustering/deploy/index.html                  |  2 +-
 docs/clustering/deploy/index.txt                   |  2 +-
 ...__next.!KGN1cnJlbnQp.docs.$oc$slug.__PAGE__.txt |  2 +-
 .../durability/__next.!KGN1cnJlbnQp.docs.txt       |  2 +-
 docs/clustering/durability/__next._full.txt        |  2 +-
 docs/clustering/durability/__next._index.txt       |  2 +-
 docs/clustering/durability/__next._tree.txt        |  2 +-
 docs/clustering/durability/index.html              |  2 +-
 docs/clustering/durability/index.txt               |  2 +-
 ...__next.!KGN1cnJlbnQp.docs.$oc$slug.__PAGE__.txt |  2 +-
 .../security/__next.!KGN1cnJlbnQp.docs.txt         |  2 +-
 docs/clustering/security/__next._full.txt          |  2 +-
 docs/clustering/security/__next._index.txt         |  2 +-
 docs/clustering/security/__next._tree.txt          |  2 +-
 docs/clustering/security/index.html                |  2 +-
 docs/clustering/security/index.txt                 |  2 +-
 ...__next.!KGN1cnJlbnQp.docs.$oc$slug.__PAGE__.txt |  2 +-
 docs/clustering/vsr/__next.!KGN1cnJlbnQp.docs.txt  |  2 +-
 docs/clustering/vsr/__next._full.txt               |  2 +-
 docs/clustering/vsr/__next._index.txt              |  2 +-
 docs/clustering/vsr/__next._tree.txt               |  2 +-
 docs/clustering/vsr/index.html                     |  2 +-
 docs/clustering/vsr/index.txt                      |  2 +-
 ...__next.!KGN1cnJlbnQp.docs.$oc$slug.__PAGE__.txt |  2 +-
 .../introduction/__next.!KGN1cnJlbnQp.docs.txt     |  2 +-
 docs/connectors/introduction/__next._full.txt      |  2 +-
 docs/connectors/introduction/__next._index.txt     |  2 +-
 docs/connectors/introduction/__next._tree.txt      |  2 +-
 docs/connectors/introduction/index.html            |  2 +-
 docs/connectors/introduction/index.txt             |  2 +-
 ...__next.!KGN1cnJlbnQp.docs.$oc$slug.__PAGE__.txt |  2 +-
 .../observability/__next.!KGN1cnJlbnQp.docs.txt    |  2 +-
 docs/connectors/observability/__next._full.txt     |  2 +-
 docs/connectors/observability/__next._index.txt    |  2 +-
 docs/connectors/observability/__next._tree.txt     |  2 +-
 docs/connectors/observability/index.html           |  2 +-
 docs/connectors/observability/index.txt            |  2 +-
 ...__next.!KGN1cnJlbnQp.docs.$oc$slug.__PAGE__.txt |  2 +-
 .../runtime/__next.!KGN1cnJlbnQp.docs.txt          |  2 +-
 docs/connectors/runtime/__next._full.txt           |  2 +-
 docs/connectors/runtime/__next._index.txt          |  2 +-
 docs/connectors/runtime/__next._tree.txt           |  2 +-
 docs/connectors/runtime/index.html                 |  2 +-
 docs/connectors/runtime/index.txt                  |  2 +-
 ...__next.!KGN1cnJlbnQp.docs.$oc$slug.__PAGE__.txt |  2 +-
 docs/connectors/sdk/__next.!KGN1cnJlbnQp.docs.txt  |  2 +-
 docs/connectors/sdk/__next._full.txt               |  2 +-
 docs/connectors/sdk/__next._index.txt              |  2 +-
 docs/connectors/sdk/__next._tree.txt               |  2 +-
 docs/connectors/sdk/index.html                     |  2 +-
 docs/connectors/sdk/index.txt                      |  2 +-
 ...__next.!KGN1cnJlbnQp.docs.$oc$slug.__PAGE__.txt |  2 +-
 .../sinks/clickhouse/__next.!KGN1cnJlbnQp.docs.txt |  2 +-
 docs/connectors/sinks/clickhouse/__next._full.txt  |  2 +-
 docs/connectors/sinks/clickhouse/__next._index.txt |  2 +-
 docs/connectors/sinks/clickhouse/__next._tree.txt  |  2 +-
 docs/connectors/sinks/clickhouse/index.html        |  2 +-
 docs/connectors/sinks/clickhouse/index.txt         |  2 +-
 ...__next.!KGN1cnJlbnQp.docs.$oc$slug.__PAGE__.txt |  2 +-
 .../sinks/delta/__next.!KGN1cnJlbnQp.docs.txt      |  2 +-
 docs/connectors/sinks/delta/__next._full.txt       |  2 +-
 docs/connectors/sinks/delta/__next._index.txt      |  2 +-
 docs/connectors/sinks/delta/__next._tree.txt       |  2 +-
 docs/connectors/sinks/delta/index.html             |  2 +-
 docs/connectors/sinks/delta/index.txt              |  2 +-
 ...__next.!KGN1cnJlbnQp.docs.$oc$slug.__PAGE__.txt |  2 +-
 .../sinks/doris/__next.!KGN1cnJlbnQp.docs.txt      |  2 +-
 docs/connectors/sinks/doris/__next._full.txt       |  2 +-
 docs/connectors/sinks/doris/__next._index.txt      |  2 +-
 docs/connectors/sinks/doris/__next._tree.txt       |  2 +-
 docs/connectors/sinks/doris/index.html             |  2 +-
 docs/connectors/sinks/doris/index.txt              |  2 +-
 ...__next.!KGN1cnJlbnQp.docs.$oc$slug.__PAGE__.txt |  2 +-
 .../elasticsearch/__next.!KGN1cnJlbnQp.docs.txt    |  2 +-
 .../sinks/elasticsearch/__next._full.txt           |  2 +-
 .../sinks/elasticsearch/__next._index.txt          |  2 +-
 .../sinks/elasticsearch/__next._tree.txt           |  2 +-
 docs/connectors/sinks/elasticsearch/index.html     |  2 +-
 docs/connectors/sinks/elasticsearch/index.txt      |  2 +-
 ...__next.!KGN1cnJlbnQp.docs.$oc$slug.__PAGE__.txt |  2 +-
 .../sinks/http/__next.!KGN1cnJlbnQp.docs.txt       |  2 +-
 docs/connectors/sinks/http/__next._full.txt        |  2 +-
 docs/connectors/sinks/http/__next._index.txt       |  2 +-
 docs/connectors/sinks/http/__next._tree.txt        |  2 +-
 docs/connectors/sinks/http/index.html              |  2 +-
 docs/connectors/sinks/http/index.txt               |  2 +-
 ...__next.!KGN1cnJlbnQp.docs.$oc$slug.__PAGE__.txt |  2 +-
 .../sinks/iceberg/__next.!KGN1cnJlbnQp.docs.txt    |  2 +-
 docs/connectors/sinks/iceberg/__next._full.txt     |  2 +-
 docs/connectors/sinks/iceberg/__next._index.txt    |  2 +-
 docs/connectors/sinks/iceberg/__next._tree.txt     |  2 +-
 docs/connectors/sinks/iceberg/index.html           |  2 +-
 docs/connectors/sinks/iceberg/index.txt            |  2 +-
 ...__next.!KGN1cnJlbnQp.docs.$oc$slug.__PAGE__.txt |  2 +-
 .../sinks/influxdb/__next.!KGN1cnJlbnQp.docs.txt   |  2 +-
 docs/connectors/sinks/influxdb/__next._full.txt    |  2 +-
 docs/connectors/sinks/influxdb/__next._index.txt   |  2 +-
 docs/connectors/sinks/influxdb/__next._tree.txt    |  2 +-
 docs/connectors/sinks/influxdb/index.html          |  2 +-
 docs/connectors/sinks/influxdb/index.txt           |  2 +-
 ...__next.!KGN1cnJlbnQp.docs.$oc$slug.__PAGE__.txt |  2 +-
 .../meilisearch/__next.!KGN1cnJlbnQp.docs.txt      |  2 +-
 docs/connectors/sinks/meilisearch/__next._full.txt |  2 +-
 .../connectors/sinks/meilisearch/__next._index.txt |  2 +-
 docs/connectors/sinks/meilisearch/__next._tree.txt |  2 +-
 docs/connectors/sinks/meilisearch/index.html       |  2 +-
 docs/connectors/sinks/meilisearch/index.txt        |  2 +-
 ...__next.!KGN1cnJlbnQp.docs.$oc$slug.__PAGE__.txt |  2 +-
 .../sinks/mongodb/__next.!KGN1cnJlbnQp.docs.txt    |  2 +-
 docs/connectors/sinks/mongodb/__next._full.txt     |  2 +-
 docs/connectors/sinks/mongodb/__next._index.txt    |  2 +-
 docs/connectors/sinks/mongodb/__next._tree.txt     |  2 +-
 docs/connectors/sinks/mongodb/index.html           |  2 +-
 docs/connectors/sinks/mongodb/index.txt            |  2 +-
 ...__next.!KGN1cnJlbnQp.docs.$oc$slug.__PAGE__.txt | 11 ++--
 .../sinks/postgres/__next.!KGN1cnJlbnQp.docs.txt   |  2 +-
 docs/connectors/sinks/postgres/__next._full.txt    | 31 +++++-----
 docs/connectors/sinks/postgres/__next._index.txt   |  2 +-
 docs/connectors/sinks/postgres/__next._tree.txt    |  2 +-
 docs/connectors/sinks/postgres/index.html          |  4 +-
 docs/connectors/sinks/postgres/index.txt           | 31 +++++-----
 ...__next.!KGN1cnJlbnQp.docs.$oc$slug.__PAGE__.txt |  2 +-
 .../sinks/quickwit/__next.!KGN1cnJlbnQp.docs.txt   |  2 +-
 docs/connectors/sinks/quickwit/__next._full.txt    |  2 +-
 docs/connectors/sinks/quickwit/__next._index.txt   |  2 +-
 docs/connectors/sinks/quickwit/__next._tree.txt    |  2 +-
 docs/connectors/sinks/quickwit/index.html          |  2 +-
 docs/connectors/sinks/quickwit/index.txt           |  2 +-
 ...__next.!KGN1cnJlbnQp.docs.$oc$slug.__PAGE__.txt |  2 +-
 .../sinks/s3/__next.!KGN1cnJlbnQp.docs.txt         |  2 +-
 docs/connectors/sinks/s3/__next._full.txt          |  2 +-
 docs/connectors/sinks/s3/__next._index.txt         |  2 +-
 docs/connectors/sinks/s3/__next._tree.txt          |  2 +-
 docs/connectors/sinks/s3/index.html                |  2 +-
 docs/connectors/sinks/s3/index.txt                 |  2 +-
 ...__next.!KGN1cnJlbnQp.docs.$oc$slug.__PAGE__.txt |  2 +-
 .../sinks/sink/__next.!KGN1cnJlbnQp.docs.txt       |  2 +-
 docs/connectors/sinks/sink/__next._full.txt        |  2 +-
 docs/connectors/sinks/sink/__next._index.txt       |  2 +-
 docs/connectors/sinks/sink/__next._tree.txt        |  2 +-
 docs/connectors/sinks/sink/index.html              |  2 +-
 docs/connectors/sinks/sink/index.txt               |  2 +-
 ...__next.!KGN1cnJlbnQp.docs.$oc$slug.__PAGE__.txt |  2 +-
 .../sinks/stdout/__next.!KGN1cnJlbnQp.docs.txt     |  2 +-
 docs/connectors/sinks/stdout/__next._full.txt      |  2 +-
 docs/connectors/sinks/stdout/__next._index.txt     |  2 +-
 docs/connectors/sinks/stdout/__next._tree.txt      |  2 +-
 docs/connectors/sinks/stdout/index.html            |  2 +-
 docs/connectors/sinks/stdout/index.txt             |  2 +-
 ...__next.!KGN1cnJlbnQp.docs.$oc$slug.__PAGE__.txt |  2 +-
 .../sinks/surrealdb/__next.!KGN1cnJlbnQp.docs.txt  |  2 +-
 docs/connectors/sinks/surrealdb/__next._full.txt   |  2 +-
 docs/connectors/sinks/surrealdb/__next._index.txt  |  2 +-
 docs/connectors/sinks/surrealdb/__next._tree.txt   |  2 +-
 docs/connectors/sinks/surrealdb/index.html         |  2 +-
 docs/connectors/sinks/surrealdb/index.txt          |  2 +-
 ...__next.!KGN1cnJlbnQp.docs.$oc$slug.__PAGE__.txt |  2 +-
 .../elasticsearch/__next.!KGN1cnJlbnQp.docs.txt    |  2 +-
 .../sources/elasticsearch/__next._full.txt         |  2 +-
 .../sources/elasticsearch/__next._index.txt        |  2 +-
 .../sources/elasticsearch/__next._tree.txt         |  2 +-
 docs/connectors/sources/elasticsearch/index.html   |  2 +-
 docs/connectors/sources/elasticsearch/index.txt    |  2 +-
 ...__next.!KGN1cnJlbnQp.docs.$oc$slug.__PAGE__.txt |  2 +-
 .../sources/influxdb/__next.!KGN1cnJlbnQp.docs.txt |  2 +-
 docs/connectors/sources/influxdb/__next._full.txt  |  2 +-
 docs/connectors/sources/influxdb/__next._index.txt |  2 +-
 docs/connectors/sources/influxdb/__next._tree.txt  |  2 +-
 docs/connectors/sources/influxdb/index.html        |  2 +-
 docs/connectors/sources/influxdb/index.txt         |  2 +-
 ...__next.!KGN1cnJlbnQp.docs.$oc$slug.__PAGE__.txt | 56 ++++++++---------
 .../sources/postgres/__next.!KGN1cnJlbnQp.docs.txt |  2 +-
 docs/connectors/sources/postgres/__next._full.txt  | 70 +++++++++++-----------
 docs/connectors/sources/postgres/__next._index.txt |  2 +-
 docs/connectors/sources/postgres/__next._tree.txt  |  2 +-
 docs/connectors/sources/postgres/index.html        |  6 +-
 docs/connectors/sources/postgres/index.txt         | 70 +++++++++++-----------
 ...__next.!KGN1cnJlbnQp.docs.$oc$slug.__PAGE__.txt |  2 +-
 .../sources/random/__next.!KGN1cnJlbnQp.docs.txt   |  2 +-
 docs/connectors/sources/random/__next._full.txt    |  2 +-
 docs/connectors/sources/random/__next._index.txt   |  2 +-
 docs/connectors/sources/random/__next._tree.txt    |  2 +-
 docs/connectors/sources/random/index.html          |  2 +-
 docs/connectors/sources/random/index.txt           |  2 +-
 ...__next.!KGN1cnJlbnQp.docs.$oc$slug.__PAGE__.txt |  2 +-
 .../sources/source/__next.!KGN1cnJlbnQp.docs.txt   |  2 +-
 docs/connectors/sources/source/__next._full.txt    |  2 +-
 docs/connectors/sources/source/__next._index.txt   |  2 +-
 docs/connectors/sources/source/__next._tree.txt    |  2 +-
 docs/connectors/sources/source/index.html          |  2 +-
 docs/connectors/sources/source/index.txt           |  2 +-
 ...__next.!KGN1cnJlbnQp.docs.$oc$slug.__PAGE__.txt |  2 +-
 .../transforms/__next.!KGN1cnJlbnQp.docs.txt       |  2 +-
 docs/connectors/transforms/__next._full.txt        |  2 +-
 docs/connectors/transforms/__next._index.txt       |  2 +-
 docs/connectors/transforms/__next._tree.txt        |  2 +-
 docs/connectors/transforms/index.html              |  2 +-
 docs/connectors/transforms/index.txt               |  2 +-
 ...__next.!KGN1cnJlbnQp.docs.$oc$slug.__PAGE__.txt |  2 +-
 docs/faq/faq/__next.!KGN1cnJlbnQp.docs.txt         |  2 +-
 docs/faq/faq/__next._full.txt                      |  2 +-
 docs/faq/faq/__next._index.txt                     |  2 +-
 docs/faq/faq/__next._tree.txt                      |  2 +-
 docs/faq/faq/index.html                            |  2 +-
 docs/faq/faq/index.txt                             |  2 +-
 docs/index.html                                    |  2 +-
 docs/index.txt                                     |  2 +-
 ...__next.!KGN1cnJlbnQp.docs.$oc$slug.__PAGE__.txt |  2 +-
 .../about/__next.!KGN1cnJlbnQp.docs.txt            |  2 +-
 docs/introduction/about/__next._full.txt           |  2 +-
 docs/introduction/about/__next._index.txt          |  2 +-
 docs/introduction/about/__next._tree.txt           |  2 +-
 docs/introduction/about/index.html                 |  2 +-
 docs/introduction/about/index.txt                  |  2 +-
 ...__next.!KGN1cnJlbnQp.docs.$oc$slug.__PAGE__.txt |  2 +-
 .../architecture/__next.!KGN1cnJlbnQp.docs.txt     |  2 +-
 docs/introduction/architecture/__next._full.txt    |  2 +-
 docs/introduction/architecture/__next._index.txt   |  2 +-
 docs/introduction/architecture/__next._tree.txt    |  2 +-
 docs/introduction/architecture/index.html          |  2 +-
 docs/introduction/architecture/index.txt           |  2 +-
 ...__next.!KGN1cnJlbnQp.docs.$oc$slug.__PAGE__.txt |  2 +-
 .../concepts/__next.!KGN1cnJlbnQp.docs.txt         |  2 +-
 docs/introduction/concepts/__next._full.txt        |  2 +-
 docs/introduction/concepts/__next._index.txt       |  2 +-
 docs/introduction/concepts/__next._tree.txt        |  2 +-
 docs/introduction/concepts/index.html              |  2 +-
 docs/introduction/concepts/index.txt               |  2 +-
 ...__next.!KGN1cnJlbnQp.docs.$oc$slug.__PAGE__.txt |  2 +-
 .../getting-started/__next.!KGN1cnJlbnQp.docs.txt  |  2 +-
 docs/introduction/getting-started/__next._full.txt |  2 +-
 .../introduction/getting-started/__next._index.txt |  2 +-
 docs/introduction/getting-started/__next._tree.txt |  2 +-
 docs/introduction/getting-started/index.html       |  2 +-
 docs/introduction/getting-started/index.txt        |  2 +-
 ...__next.!KGN1cnJlbnQp.docs.$oc$slug.__PAGE__.txt |  2 +-
 .../quickstart/__next.!KGN1cnJlbnQp.docs.txt       |  2 +-
 docs/introduction/quickstart/__next._full.txt      |  2 +-
 docs/introduction/quickstart/__next._index.txt     |  2 +-
 docs/introduction/quickstart/__next._tree.txt      |  2 +-
 docs/introduction/quickstart/index.html            |  2 +-
 docs/introduction/quickstart/index.txt             |  2 +-
 ...__next.!KGN1cnJlbnQp.docs.$oc$slug.__PAGE__.txt |  2 +-
 .../__next.!KGN1cnJlbnQp.docs.txt                  |  2 +-
 docs/sdk/connection-strings/__next._full.txt       |  2 +-
 docs/sdk/connection-strings/__next._index.txt      |  2 +-
 docs/sdk/connection-strings/__next._tree.txt       |  2 +-
 docs/sdk/connection-strings/index.html             |  2 +-
 docs/sdk/connection-strings/index.txt              |  2 +-
 ...__next.!KGN1cnJlbnQp.docs.$oc$slug.__PAGE__.txt |  2 +-
 docs/sdk/cpp/intro/__next.!KGN1cnJlbnQp.docs.txt   |  2 +-
 docs/sdk/cpp/intro/__next._full.txt                |  2 +-
 docs/sdk/cpp/intro/__next._index.txt               |  2 +-
 docs/sdk/cpp/intro/__next._tree.txt                |  2 +-
 docs/sdk/cpp/intro/index.html                      |  2 +-
 docs/sdk/cpp/intro/index.txt                       |  2 +-
 ...__next.!KGN1cnJlbnQp.docs.$oc$slug.__PAGE__.txt |  2 +-
 .../csharp/examples/__next.!KGN1cnJlbnQp.docs.txt  |  2 +-
 docs/sdk/csharp/examples/__next._full.txt          |  2 +-
 docs/sdk/csharp/examples/__next._index.txt         |  2 +-
 docs/sdk/csharp/examples/__next._tree.txt          |  2 +-
 docs/sdk/csharp/examples/index.html                |  2 +-
 docs/sdk/csharp/examples/index.txt                 |  2 +-
 ...__next.!KGN1cnJlbnQp.docs.$oc$slug.__PAGE__.txt |  2 +-
 .../sdk/csharp/guide/__next.!KGN1cnJlbnQp.docs.txt |  2 +-
 docs/sdk/csharp/guide/__next._full.txt             |  2 +-
 docs/sdk/csharp/guide/__next._index.txt            |  2 +-
 docs/sdk/csharp/guide/__next._tree.txt             |  2 +-
 docs/sdk/csharp/guide/index.html                   |  2 +-
 docs/sdk/csharp/guide/index.txt                    |  2 +-
 ...__next.!KGN1cnJlbnQp.docs.$oc$slug.__PAGE__.txt |  2 +-
 .../high-level-sdk/__next.!KGN1cnJlbnQp.docs.txt   |  2 +-
 docs/sdk/csharp/high-level-sdk/__next._full.txt    |  2 +-
 docs/sdk/csharp/high-level-sdk/__next._index.txt   |  2 +-
 docs/sdk/csharp/high-level-sdk/__next._tree.txt    |  2 +-
 docs/sdk/csharp/high-level-sdk/index.html          |  2 +-
 docs/sdk/csharp/high-level-sdk/index.txt           |  2 +-
 ...__next.!KGN1cnJlbnQp.docs.$oc$slug.__PAGE__.txt |  2 +-
 .../sdk/csharp/intro/__next.!KGN1cnJlbnQp.docs.txt |  2 +-
 docs/sdk/csharp/intro/__next._full.txt             |  2 +-
 docs/sdk/csharp/intro/__next._index.txt            |  2 +-
 docs/sdk/csharp/intro/__next._tree.txt             |  2 +-
 docs/sdk/csharp/intro/index.html                   |  2 +-
 docs/sdk/csharp/intro/index.txt                    |  2 +-
 ...__next.!KGN1cnJlbnQp.docs.$oc$slug.__PAGE__.txt |  2 +-
 docs/sdk/go/examples/__next.!KGN1cnJlbnQp.docs.txt |  2 +-
 docs/sdk/go/examples/__next._full.txt              |  2 +-
 docs/sdk/go/examples/__next._index.txt             |  2 +-
 docs/sdk/go/examples/__next._tree.txt              |  2 +-
 docs/sdk/go/examples/index.html                    |  2 +-
 docs/sdk/go/examples/index.txt                     |  2 +-
 ...__next.!KGN1cnJlbnQp.docs.$oc$slug.__PAGE__.txt |  2 +-
 docs/sdk/go/intro/__next.!KGN1cnJlbnQp.docs.txt    |  2 +-
 docs/sdk/go/intro/__next._full.txt                 |  2 +-
 docs/sdk/go/intro/__next._index.txt                |  2 +-
 docs/sdk/go/intro/__next._tree.txt                 |  2 +-
 docs/sdk/go/intro/index.html                       |  2 +-
 docs/sdk/go/intro/index.txt                        |  2 +-
 ...__next.!KGN1cnJlbnQp.docs.$oc$slug.__PAGE__.txt |  2 +-
 .../sdk/introduction/__next.!KGN1cnJlbnQp.docs.txt |  2 +-
 docs/sdk/introduction/__next._full.txt             |  2 +-
 docs/sdk/introduction/__next._index.txt            |  2 +-
 docs/sdk/introduction/__next._tree.txt             |  2 +-
 docs/sdk/introduction/index.html                   |  2 +-
 docs/sdk/introduction/index.txt                    |  2 +-
 ...__next.!KGN1cnJlbnQp.docs.$oc$slug.__PAGE__.txt |  2 +-
 .../java/examples/__next.!KGN1cnJlbnQp.docs.txt    |  2 +-
 docs/sdk/java/examples/__next._full.txt            |  2 +-
 docs/sdk/java/examples/__next._index.txt           |  2 +-
 docs/sdk/java/examples/__next._tree.txt            |  2 +-
 docs/sdk/java/examples/index.html                  |  2 +-
 docs/sdk/java/examples/index.txt                   |  2 +-
 ...__next.!KGN1cnJlbnQp.docs.$oc$slug.__PAGE__.txt |  2 +-
 docs/sdk/java/intro/__next.!KGN1cnJlbnQp.docs.txt  |  2 +-
 docs/sdk/java/intro/__next._full.txt               |  2 +-
 docs/sdk/java/intro/__next._index.txt              |  2 +-
 docs/sdk/java/intro/__next._tree.txt               |  2 +-
 docs/sdk/java/intro/index.html                     |  2 +-
 docs/sdk/java/intro/index.txt                      |  2 +-
 ...__next.!KGN1cnJlbnQp.docs.$oc$slug.__PAGE__.txt |  2 +-
 .../node/examples/__next.!KGN1cnJlbnQp.docs.txt    |  2 +-
 docs/sdk/node/examples/__next._full.txt            |  2 +-
 docs/sdk/node/examples/__next._index.txt           |  2 +-
 docs/sdk/node/examples/__next._tree.txt            |  2 +-
 docs/sdk/node/examples/index.html                  |  2 +-
 docs/sdk/node/examples/index.txt                   |  2 +-
 ...__next.!KGN1cnJlbnQp.docs.$oc$slug.__PAGE__.txt |  2 +-
 docs/sdk/node/intro/__next.!KGN1cnJlbnQp.docs.txt  |  2 +-
 docs/sdk/node/intro/__next._full.txt               |  2 +-
 docs/sdk/node/intro/__next._index.txt              |  2 +-
 docs/sdk/node/intro/__next._tree.txt               |  2 +-
 docs/sdk/node/intro/index.html                     |  2 +-
 docs/sdk/node/intro/index.txt                      |  2 +-
 ...__next.!KGN1cnJlbnQp.docs.$oc$slug.__PAGE__.txt |  2 +-
 docs/sdk/php/intro/__next.!KGN1cnJlbnQp.docs.txt   |  2 +-
 docs/sdk/php/intro/__next._full.txt                |  2 +-
 docs/sdk/php/intro/__next._index.txt               |  2 +-
 docs/sdk/php/intro/__next._tree.txt                |  2 +-
 docs/sdk/php/intro/index.html                      |  2 +-
 docs/sdk/php/intro/index.txt                       |  2 +-
 ...__next.!KGN1cnJlbnQp.docs.$oc$slug.__PAGE__.txt |  2 +-
 .../python/examples/__next.!KGN1cnJlbnQp.docs.txt  |  2 +-
 docs/sdk/python/examples/__next._full.txt          |  2 +-
 docs/sdk/python/examples/__next._index.txt         |  2 +-
 docs/sdk/python/examples/__next._tree.txt          |  2 +-
 docs/sdk/python/examples/index.html                |  2 +-
 docs/sdk/python/examples/index.txt                 |  2 +-
 ...__next.!KGN1cnJlbnQp.docs.$oc$slug.__PAGE__.txt |  2 +-
 .../sdk/python/intro/__next.!KGN1cnJlbnQp.docs.txt |  2 +-
 docs/sdk/python/intro/__next._full.txt             |  2 +-
 docs/sdk/python/intro/__next._index.txt            |  2 +-
 docs/sdk/python/intro/__next._tree.txt             |  2 +-
 docs/sdk/python/intro/index.html                   |  2 +-
 docs/sdk/python/intro/index.txt                    |  2 +-
 ...__next.!KGN1cnJlbnQp.docs.$oc$slug.__PAGE__.txt |  2 +-
 .../rust/examples/__next.!KGN1cnJlbnQp.docs.txt    |  2 +-
 docs/sdk/rust/examples/__next._full.txt            |  2 +-
 docs/sdk/rust/examples/__next._index.txt           |  2 +-
 docs/sdk/rust/examples/__next._tree.txt            |  2 +-
 docs/sdk/rust/examples/index.html                  |  2 +-
 docs/sdk/rust/examples/index.txt                   |  2 +-
 ...__next.!KGN1cnJlbnQp.docs.$oc$slug.__PAGE__.txt |  2 +-
 .../high-level-sdk/__next.!KGN1cnJlbnQp.docs.txt   |  2 +-
 docs/sdk/rust/high-level-sdk/__next._full.txt      |  2 +-
 docs/sdk/rust/high-level-sdk/__next._index.txt     |  2 +-
 docs/sdk/rust/high-level-sdk/__next._tree.txt      |  2 +-
 docs/sdk/rust/high-level-sdk/index.html            |  2 +-
 docs/sdk/rust/high-level-sdk/index.txt             |  2 +-
 ...__next.!KGN1cnJlbnQp.docs.$oc$slug.__PAGE__.txt |  2 +-
 docs/sdk/rust/intro/__next.!KGN1cnJlbnQp.docs.txt  |  2 +-
 docs/sdk/rust/intro/__next._full.txt               |  2 +-
 docs/sdk/rust/intro/__next._index.txt              |  2 +-
 docs/sdk/rust/intro/__next._tree.txt               |  2 +-
 docs/sdk/rust/intro/index.html                     |  2 +-
 docs/sdk/rust/intro/index.txt                      |  2 +-
 ...__next.!KGN1cnJlbnQp.docs.$oc$slug.__PAGE__.txt |  2 +-
 .../stream-builder/__next.!KGN1cnJlbnQp.docs.txt   |  2 +-
 docs/sdk/rust/stream-builder/__next._full.txt      |  2 +-
 docs/sdk/rust/stream-builder/__next._index.txt     |  2 +-
 docs/sdk/rust/stream-builder/__next._tree.txt      |  2 +-
 docs/sdk/rust/stream-builder/index.html            |  2 +-
 docs/sdk/rust/stream-builder/index.txt             |  2 +-
 ...__next.!KGN1cnJlbnQp.docs.$oc$slug.__PAGE__.txt |  2 +-
 .../benchmarking/__next.!KGN1cnJlbnQp.docs.txt     |  2 +-
 docs/server/benchmarking/__next._full.txt          |  2 +-
 docs/server/benchmarking/__next._index.txt         |  2 +-
 docs/server/benchmarking/__next._tree.txt          |  2 +-
 docs/server/benchmarking/index.html                |  2 +-
 docs/server/benchmarking/index.txt                 |  2 +-
 ...__next.!KGN1cnJlbnQp.docs.$oc$slug.__PAGE__.txt |  2 +-
 .../configuration/__next.!KGN1cnJlbnQp.docs.txt    |  2 +-
 docs/server/configuration/__next._full.txt         |  2 +-
 docs/server/configuration/__next._index.txt        |  2 +-
 docs/server/configuration/__next._tree.txt         |  2 +-
 docs/server/configuration/index.html               |  2 +-
 docs/server/configuration/index.txt                |  2 +-
 ...__next.!KGN1cnJlbnQp.docs.$oc$slug.__PAGE__.txt |  2 +-
 docs/server/docker/__next.!KGN1cnJlbnQp.docs.txt   |  2 +-
 docs/server/docker/__next._full.txt                |  2 +-
 docs/server/docker/__next._index.txt               |  2 +-
 docs/server/docker/__next._tree.txt                |  2 +-
 docs/server/docker/index.html                      |  2 +-
 docs/server/docker/index.txt                       |  2 +-
 ...__next.!KGN1cnJlbnQp.docs.$oc$slug.__PAGE__.txt |  2 +-
 .../durability/__next.!KGN1cnJlbnQp.docs.txt       |  2 +-
 docs/server/durability/__next._full.txt            |  2 +-
 docs/server/durability/__next._index.txt           |  2 +-
 docs/server/durability/__next._tree.txt            |  2 +-
 docs/server/durability/index.html                  |  2 +-
 docs/server/durability/index.txt                   |  2 +-
 ...__next.!KGN1cnJlbnQp.docs.$oc$slug.__PAGE__.txt |  2 +-
 .../introduction/__next.!KGN1cnJlbnQp.docs.txt     |  2 +-
 docs/server/introduction/__next._full.txt          |  2 +-
 docs/server/introduction/__next._index.txt         |  2 +-
 docs/server/introduction/__next._tree.txt          |  2 +-
 docs/server/introduction/index.html                |  2 +-
 docs/server/introduction/index.txt                 |  2 +-
 ...__next.!KGN1cnJlbnQp.docs.$oc$slug.__PAGE__.txt |  2 +-
 .../linux-tuning/__next.!KGN1cnJlbnQp.docs.txt     |  2 +-
 docs/server/linux-tuning/__next._full.txt          |  2 +-
 docs/server/linux-tuning/__next._index.txt         |  2 +-
 docs/server/linux-tuning/__next._tree.txt          |  2 +-
 docs/server/linux-tuning/index.html                |  2 +-
 docs/server/linux-tuning/index.txt                 |  2 +-
 ...__next.!KGN1cnJlbnQp.docs.$oc$slug.__PAGE__.txt |  2 +-
 .../networking/__next.!KGN1cnJlbnQp.docs.txt       |  2 +-
 docs/server/networking/__next._full.txt            |  2 +-
 docs/server/networking/__next._index.txt           |  2 +-
 docs/server/networking/__next._tree.txt            |  2 +-
 docs/server/networking/index.html                  |  2 +-
 docs/server/networking/index.txt                   |  2 +-
 ...__next.!KGN1cnJlbnQp.docs.$oc$slug.__PAGE__.txt |  2 +-
 docs/server/security/__next.!KGN1cnJlbnQp.docs.txt |  2 +-
 docs/server/security/__next._full.txt              |  2 +-
 docs/server/security/__next._index.txt             |  2 +-
 docs/server/security/__next._tree.txt              |  2 +-
 docs/server/security/index.html                    |  2 +-
 docs/server/security/index.txt                     |  2 +-
 ...__next.!KGN1cnJlbnQp.docs.$oc$slug.__PAGE__.txt |  2 +-
 .../storage-engine/__next.!KGN1cnJlbnQp.docs.txt   |  2 +-
 docs/server/storage-engine/__next._full.txt        |  2 +-
 docs/server/storage-engine/__next._index.txt       |  2 +-
 docs/server/storage-engine/__next._tree.txt        |  2 +-
 docs/server/storage-engine/index.html              |  2 +-
 docs/server/storage-engine/index.txt               |  2 +-
 ...__next.!KGN1cnJlbnQp.docs.$oc$slug.__PAGE__.txt |  2 +-
 .../topic-options/__next.!KGN1cnJlbnQp.docs.txt    |  2 +-
 docs/server/topic-options/__next._full.txt         |  2 +-
 docs/server/topic-options/__next._index.txt        |  2 +-
 docs/server/topic-options/__next._tree.txt         |  2 +-
 docs/server/topic-options/index.html               |  2 +-
 docs/server/topic-options/index.txt                |  2 +-
 ...__next.!KGN1cnJlbnQp.docs.$oc$slug.__PAGE__.txt |  2 +-
 docs/web_ui/start/__next.!KGN1cnJlbnQp.docs.txt    |  2 +-
 docs/web_ui/start/__next._full.txt                 |  2 +-
 docs/web_ui/start/__next._index.txt                |  2 +-
 docs/web_ui/start/__next._tree.txt                 |  2 +-
 docs/web_ui/start/index.html                       |  2 +-
 docs/web_ui/start/index.txt                        |  2 +-
 downloads/__next.!KHNpdGUp.downloads.__PAGE__.txt  |  2 +-
 downloads/__next.!KHNpdGUp.txt                     |  2 +-
 downloads/__next._full.txt                         |  2 +-
 downloads/__next._index.txt                        |  2 +-
 downloads/__next._tree.txt                         |  2 +-
 downloads/index.html                               |  2 +-
 downloads/index.txt                                |  2 +-
 index.html                                         |  2 +-
 index.txt                                          |  2 +-
 .../__next.!KHNpdGUp.powered-by.__PAGE__.txt       |  2 +-
 powered-by/__next.!KHNpdGUp.txt                    |  2 +-
 powered-by/__next._full.txt                        |  2 +-
 powered-by/__next._index.txt                       |  2 +-
 powered-by/__next._tree.txt                        |  2 +-
 powered-by/index.html                              |  2 +-
 powered-by/index.txt                               |  2 +-
 sitemap.xml                                        | 12 ++--
 1384 files changed, 1561 insertions(+), 1549 deletions(-)
 rename _next/static/{yMOBZuXYrPxBbCU4Zg9GV => CEAllZE6ERPzzxzpa_n8G}/_buildManifest.js (100%)
 rename _next/static/{yMOBZuXYrPxBbCU4Zg9GV => CEAllZE6ERPzzxzpa_n8G}/_clientMiddlewareManifest.js (100%)
 rename _next/static/{yMOBZuXYrPxBbCU4Zg9GV => CEAllZE6ERPzzxzpa_n8G}/_ssgManifest.js (100%)


(iggy-website) 01/01: Deploy website from main branch 0c8cf01d9a52f0aa9d9e021d5546121e3a517a44

Posted by gi...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

github-actions[bot] pushed a commit to branch asf-site
in repository https://gitbox.apache.org/repos/asf/iggy-website.git

commit dbfcca10ee9bacbf0d41f24bec45c86182128de5
Author: github-actions[bot] <gi...@users.noreply.github.com>
AuthorDate: Fri Oct 2 06:15:28 2026 +0000

    Deploy website from main branch 0c8cf01d9a52f0aa9d9e021d5546121e3a517a44
---
 .asf.yaml                                          |    62 +
 .htaccess                                          |    23 +
 .nojekyll                                          |     0
 404.html                                           |     1 +
 404/index.html                                     |     1 +
 __next.!KGhvbWUp.__PAGE__.txt                      |    38 +
 __next.!KGhvbWUp.txt                               |    21 +
 __next._full.txt                                   |    56 +
 __next._index.txt                                  |    20 +
 __next._tree.txt                                   |     2 +
 .../static/CEAllZE6ERPzzxzpa_n8G/_buildManifest.js |    11 +
 .../_clientMiddlewareManifest.js                   |     1 +
 _next/static/CEAllZE6ERPzzxzpa_n8G/_ssgManifest.js |     1 +
 _next/static/chunks/05hk4ely-lns6.js               |     1 +
 _next/static/chunks/071bbedt711a2.js               |   209 +
 _next/static/chunks/08raq5rgljbqk.js               |     3 +
 _next/static/chunks/0cz1d0mv5g_q7.js               |     1 +
 _next/static/chunks/0n3fueko2xquo.js               |     1 +
 _next/static/chunks/0oyn-8imgh6-q.js               |     1 +
 _next/static/chunks/16qqkei9469ey.js               |     1 +
 _next/static/chunks/17q0p_lwaje36.js               |     1 +
 _next/static/chunks/1_55v0vlfews3.css              |     1 +
 _next/static/chunks/1b4x7zdkhqilh.js               |     1 +
 _next/static/chunks/1gvwe0velnw6a.js               |     1 +
 _next/static/chunks/1iye7dwhtxrnu.js               |     1 +
 _next/static/chunks/1k39uva2a578s.js               |     1 +
 _next/static/chunks/1l5oo27jquscq.js               |     1 +
 _next/static/chunks/1qt6pht_u0de1.js               |    31 +
 _next/static/chunks/1t7fq8t6712vg.js               |     1 +
 _next/static/chunks/1z2lpfq1lbp7g.js               |    10 +
 _next/static/chunks/23ktdyx90z0v3.js               |    18 +
 _next/static/chunks/241-fa32f9zay.js               |     1 +
 _next/static/chunks/250gopd52txql.js               |     1 +
 _next/static/chunks/25tdu_vs69zb1.js               |    79 +
 _next/static/chunks/2acxnoy-pyob4.js               |    18 +
 _next/static/chunks/2pq32ykmh9rrm.js               |     1 +
 _next/static/chunks/2t6t05zi_39zz.js               |     1 +
 _next/static/chunks/2tvyahbdutabx.js               |     3 +
 _next/static/chunks/2wome6lnndfqk.js               |    22 +
 _next/static/chunks/2wp8u1d1wdfez.js               |     1 +
 _next/static/chunks/2yzsws2usue-b.js               |     1 +
 _next/static/chunks/3-_96y-evozm0.js               |     1 +
 _next/static/chunks/3nptizve4zde0.js               |     1 +
 _next/static/chunks/3x8y3fmtn6lnc.js               |     1 +
 _next/static/chunks/3zvry4l5_wb57.js               |     1 +
 _next/static/chunks/43wd2so83e0g5.js               |     1 +
 _next/static/chunks/turbopack-1wnby4lbl7v2_.js     |     1 +
 _next/static/media/bench_cli.1-fhqrov-qp4v.png     |   Bin 0 -> 380000 bytes
 .../static/media/bench_platform.0bo2yyz7dwbml.png  |   Bin 0 -> 326093 bytes
 .../static/media/diagram_szpont.41ta8ztt55657.png  |   Bin 0 -> 271604 bytes
 _next/static/media/ecs.1sn17ptlulrjo.png           |   Bin 0 -> 154902 bytes
 _next/static/media/gh_trending.2y416vr29a0r9.jpeg  |   Bin 0 -> 390292 bytes
 .../static/media/iggy-tlp-stats.0p3givpkjrraq.png  |   Bin 0 -> 369263 bytes
 _next/static/media/iggy_0_1_0.0clj9t7ympyk_.jpg    |   Bin 0 -> 82650 bytes
 .../media/iggy_batch_schema_1.3cagdlc-o0vo6.png    |   Bin 0 -> 525799 bytes
 .../media/iggy_batch_schema_2.26b3k0h57ovv9.png    |   Bin 0 -> 546950 bytes
 _next/static/media/iggy_bench.0ojommldlm3ph.png    |   Bin 0 -> 111659 bytes
 _next/static/media/iggy_bench.2bpvdoykamynj.jpeg   |   Bin 0 -> 615288 bytes
 .../media/iggy_bench_0_1_0.3bn66g2gq5-sr.jpeg      |   Bin 0 -> 1386983 bytes
 .../static/media/iggy_bench_cli.1dvlsqwuveg77.png  |   Bin 0 -> 515157 bytes
 .../media/iggy_bench_dashboard.00i6b1efz5g4z.png   |   Bin 0 -> 394188 bytes
 .../static/media/iggy_ci_0_1_0.0-oxzxtnw-dza.jpeg  |   Bin 0 -> 538032 bytes
 _next/static/media/iggy_ci_cd.0753t43uxufyj.jpeg   |   Bin 0 -> 78169 bytes
 _next/static/media/iggy_cli.3s80q2olm9gpf.png      |   Bin 0 -> 90242 bytes
 _next/static/media/iggy_cli.3v4qrbskenyj6.jpeg     |   Bin 0 -> 538239 bytes
 .../static/media/iggy_cli_0_1_0.20dihcl7p1g24.jpeg |   Bin 0 -> 1049410 bytes
 _next/static/media/iggy_cluster.0vh8hf-jnuy59.png  |   Bin 0 -> 872341 bytes
 _next/static/media/iggy_docker.3vqu9xi5n6lif.png   |   Bin 0 -> 721661 bytes
 _next/static/media/iggy_logo.0ms27-mgvvn9p.png     |   Bin 0 -> 105328 bytes
 _next/static/media/iggy_perf.0gkt2u6iax1h_.png     |   Bin 0 -> 68641 bytes
 _next/static/media/iggy_rocket.15h9qw3pw3uoh.png   |   Bin 0 -> 225148 bytes
 _next/static/media/iggy_sample.1qqv2qiduvn6g.jpeg  |   Bin 0 -> 874973 bytes
 _next/static/media/iggy_server.0vu5l6z-4fqzl.png   |   Bin 0 -> 1176428 bytes
 _next/static/media/iggy_server.3f5vl0n4vscs5.jpeg  |   Bin 0 -> 976463 bytes
 .../media/iggy_server_0_1_0.14n_edtclen0g.jpeg     |   Bin 0 -> 1064181 bytes
 _next/static/media/iggy_stars.39e41437tycxn.png    |   Bin 0 -> 35419 bytes
 .../media/iggy_technology_radar.0t-pti5rv_g38.png  |   Bin 0 -> 406596 bytes
 _next/static/media/iggy_tpc.0ejc62k9xqcu6.png      |   Bin 0 -> 423184 bytes
 _next/static/media/iggy_vsr.0o7op9bm15129.png      |   Bin 0 -> 3958317 bytes
 _next/static/media/iggy_web.1g9_wep0g51yk.png      |   Bin 0 -> 109581 bytes
 _next/static/media/iggy_web_ui.10pkflbhh3k76.jpeg  |   Bin 0 -> 215638 bytes
 _next/static/media/iggy_web_ui.3b5h_z5hpnm9g.png   |   Bin 0 -> 49250 bytes
 .../media/iggy_web_ui_0_1_0.10pkflbhh3k76.jpeg     |   Bin 0 -> 215638 bytes
 _next/static/media/iggys.26-hz1yki2g5f.jpeg        |   Bin 0 -> 512046 bytes
 .../media/leader_elections.0q2g_7a47wdz8.jpeg      |   Bin 0 -> 1299078 bytes
 .../media/no_zero_copy_consumer.2e08e0hkhbnym.png  |   Bin 0 -> 1490151 bytes
 .../media/no_zero_copy_producer.0g-czjxs_73qh.png  |   Bin 0 -> 684901 bytes
 _next/static/media/pc_16_0.7.3r9jfjtjotb9e.png     |   Bin 0 -> 842734 bytes
 _next/static/media/pc_tcp.2xzly9hsjf0ya.png        |   Bin 0 -> 197964 bytes
 _next/static/media/pc_ws.3b_64fo_99_os.png         |   Bin 0 -> 184540 bytes
 .../static/media/pp_16_0.5_fsync.3cgj8iv8w-7xp.png |   Bin 0 -> 607289 bytes
 _next/static/media/pp_16_0.5_rl.1ruo0gqariwpr.png  |   Bin 0 -> 200013 bytes
 _next/static/media/pp_16_0.6.433c3ldpfo7-w.png     |   Bin 0 -> 210659 bytes
 _next/static/media/pp_16_0.7.0blplnkk1xx8w.png     |   Bin 0 -> 236428 bytes
 .../static/media/pp_16_0.7_fsync.3thi297vhw56p.png |   Bin 0 -> 292373 bytes
 .../static/media/pp_32_0.5_fsync.3ct9t4ac6yxi4.png |   Bin 0 -> 612916 bytes
 _next/static/media/pp_32_0.5_rl.0jb0wodod5fo0.png  |   Bin 0 -> 212749 bytes
 _next/static/media/pp_32_0.6.3jtae11yef9e0.png     |   Bin 0 -> 156460 bytes
 _next/static/media/pp_32_0.7.2yr3xjrlg39yw.png     |   Bin 0 -> 167854 bytes
 .../static/media/pp_32_0.7_fsync.12f7_-vtpz6e_.png |   Bin 0 -> 432903 bytes
 _next/static/media/pp_8_0.5_rl.0mn9ddufidtyx.png   |   Bin 0 -> 156545 bytes
 _next/static/media/pp_8_0.6_rl.1x0d8tcn3ce5h.png   |   Bin 0 -> 147937 bytes
 _next/static/media/pp_8_0.7_rl.2qajpsu4jk_m4.png   |   Bin 0 -> 245574 bytes
 _next/static/media/sharding.0ix4do1t7gg9_.png      |   Bin 0 -> 535868 bytes
 _next/static/media/tcp-1234.0g9m0zu_8axr-.png      |   Bin 0 -> 205593 bytes
 _next/static/media/ws-1234.0wu96ov6rlbmx.png       |   Bin 0 -> 190067 bytes
 .../media/zero_copy_consumer.2ht72ksqbdj46.png     |   Bin 0 -> 485344 bytes
 .../media/zero_copy_producer.41mwm63joq0ig.png     |   Bin 0 -> 602342 bytes
 _not-found/__next._full.txt                        |    28 +
 _not-found/__next._not-found.__PAGE__.txt          |    35 +
 _not-found/__next._tree.txt                        |     2 +
 _not-found/index.html                              |     1 +
 _not-found/index.txt                               |    28 +
 .../iggy-tlp-stats.png                             |   Bin 0 -> 369263 bytes
 apache-incubator/iggy_logo.png                     |   Bin 0 -> 105328 bytes
 api/search                                         |     1 +
 blogs/2023/08/16/welcome.md                        |    14 +
 .../__next.!KHNpdGUp.blogs.$c$slug.__PAGE__.txt    |    31 +
 blogs/2023/08/16/welcome/__next.!KHNpdGUp.txt      |    30 +
 blogs/2023/08/16/welcome/__next._full.txt          |    52 +
 blogs/2023/08/16/welcome/__next._index.txt         |    20 +
 blogs/2023/08/16/welcome/__next._tree.txt          |     3 +
 blogs/2023/08/16/welcome/index.html                |     3 +
 blogs/2023/08/16/welcome/index.txt                 |    52 +
 blogs/2023/08/19/message-headers.md                |   249 +
 .../__next.!KHNpdGUp.blogs.$c$slug.__PAGE__.txt    |   182 +
 .../08/19/message-headers/__next.!KHNpdGUp.txt     |    30 +
 blogs/2023/08/19/message-headers/__next._full.txt  |   205 +
 blogs/2023/08/19/message-headers/__next._index.txt |    20 +
 blogs/2023/08/19/message-headers/__next._tree.txt  |     3 +
 blogs/2023/08/19/message-headers/index.html        |   172 +
 blogs/2023/08/19/message-headers/index.txt         |   205 +
 blogs/2023/08/22/message-state.md                  |   143 +
 .../__next.!KHNpdGUp.blogs.$c$slug.__PAGE__.txt    |   100 +
 .../2023/08/22/message-state/__next.!KHNpdGUp.txt  |    30 +
 blogs/2023/08/22/message-state/__next._full.txt    |   122 +
 blogs/2023/08/22/message-state/__next._index.txt   |    20 +
 blogs/2023/08/22/message-state/__next._tree.txt    |     3 +
 blogs/2023/08/22/message-state/index.html          |    98 +
 blogs/2023/08/22/message-state/index.txt           |   122 +
 blogs/2023/08/27/message-expiry.md                 |    96 +
 .../__next.!KHNpdGUp.blogs.$c$slug.__PAGE__.txt    |    70 +
 .../2023/08/27/message-expiry/__next.!KHNpdGUp.txt |    30 +
 blogs/2023/08/27/message-expiry/__next._full.txt   |    93 +
 blogs/2023/08/27/message-expiry/__next._index.txt  |    20 +
 blogs/2023/08/27/message-expiry/__next._tree.txt   |     3 +
 blogs/2023/08/27/message-expiry/index.html         |    50 +
 blogs/2023/08/27/message-expiry/index.txt          |    93 +
 blogs/2023/08/31/updated-schemas.md                |    56 +
 .../__next.!KHNpdGUp.blogs.$c$slug.__PAGE__.txt    |    46 +
 .../08/31/updated-schemas/__next.!KHNpdGUp.txt     |    30 +
 blogs/2023/08/31/updated-schemas/__next._full.txt  |    69 +
 blogs/2023/08/31/updated-schemas/__next._index.txt |    20 +
 blogs/2023/08/31/updated-schemas/__next._tree.txt  |     3 +
 blogs/2023/08/31/updated-schemas/index.html        |    24 +
 blogs/2023/08/31/updated-schemas/index.txt         |    69 +
 blogs/2023/09/20/users-and-permissions.md          |   366 +
 .../__next.!KHNpdGUp.blogs.$c$slug.__PAGE__.txt    |   217 +
 .../20/users-and-permissions/__next.!KHNpdGUp.txt  |    30 +
 .../09/20/users-and-permissions/__next._full.txt   |   240 +
 .../09/20/users-and-permissions/__next._index.txt  |    20 +
 .../09/20/users-and-permissions/__next._tree.txt   |     3 +
 blogs/2023/09/20/users-and-permissions/index.html  |   278 +
 blogs/2023/09/20/users-and-permissions/index.txt   |   240 +
 blogs/2023/10/02/consumer-identifier.md            |    89 +
 .../__next.!KHNpdGUp.blogs.$c$slug.__PAGE__.txt    |    64 +
 .../10/02/consumer-identifier/__next.!KHNpdGUp.txt |    30 +
 .../10/02/consumer-identifier/__next._full.txt     |    87 +
 .../10/02/consumer-identifier/__next._index.txt    |    20 +
 .../10/02/consumer-identifier/__next._tree.txt     |     3 +
 blogs/2023/10/02/consumer-identifier/index.html    |    57 +
 blogs/2023/10/02/consumer-identifier/index.txt     |    87 +
 blogs/2023/10/12/personal-access-tokens.md         |    91 +
 .../__next.!KHNpdGUp.blogs.$c$slug.__PAGE__.txt    |    60 +
 .../12/personal-access-tokens/__next.!KHNpdGUp.txt |    30 +
 .../10/12/personal-access-tokens/__next._full.txt  |    83 +
 .../10/12/personal-access-tokens/__next._index.txt |    20 +
 .../10/12/personal-access-tokens/__next._tree.txt  |     3 +
 blogs/2023/10/12/personal-access-tokens/index.html |    55 +
 blogs/2023/10/12/personal-access-tokens/index.txt  |    83 +
 blogs/2023/11/26/release-0.1.0.md                  |    40 +
 .../__next.!KHNpdGUp.blogs.$c$slug.__PAGE__.txt    |    44 +
 .../2023/11/26/release-0.1.0/__next.!KHNpdGUp.txt  |    30 +
 blogs/2023/11/26/release-0.1.0/__next._full.txt    |    67 +
 blogs/2023/11/26/release-0.1.0/__next._index.txt   |    20 +
 blogs/2023/11/26/release-0.1.0/__next._tree.txt    |     3 +
 blogs/2023/11/26/release-0.1.0/index.html          |    16 +
 blogs/2023/11/26/release-0.1.0/index.txt           |    67 +
 .../12/29/building-message-streaming-in-rust.md    |   149 +
 .../__next.!KHNpdGUp.blogs.$c$slug.__PAGE__.txt    |    89 +
 .../__next.!KHNpdGUp.txt                           |    30 +
 .../__next._full.txt                               |   113 +
 .../__next._index.txt                              |    20 +
 .../__next._tree.txt                               |     3 +
 .../building-message-streaming-in-rust/index.html  |    96 +
 .../building-message-streaming-in-rust/index.txt   |   113 +
 .../one-year-of-building-the-message-streaming.md  |   130 +
 .../__next.!KHNpdGUp.blogs.$c$slug.__PAGE__.txt    |    79 +
 .../__next.!KHNpdGUp.txt                           |    30 +
 .../__next._full.txt                               |   102 +
 .../__next._index.txt                              |    20 +
 .../__next._tree.txt                               |     3 +
 .../index.html                                     |    78 +
 .../index.txt                                      |   102 +
 .../10/28/technology-radar-and-currrent-goals.md   |   133 +
 .../__next.!KHNpdGUp.blogs.$c$slug.__PAGE__.txt    |    86 +
 .../__next.!KHNpdGUp.txt                           |    30 +
 .../__next._full.txt                               |   109 +
 .../__next._index.txt                              |    20 +
 .../__next._tree.txt                               |     3 +
 .../technology-radar-and-currrent-goals/index.html |    87 +
 .../technology-radar-and-currrent-goals/index.txt  |   109 +
 blogs/2025/02/10/apache-incubator.md               |    68 +
 .../__next.!KHNpdGUp.blogs.$c$slug.__PAGE__.txt    |    52 +
 .../02/10/apache-incubator/__next.!KHNpdGUp.txt    |    30 +
 blogs/2025/02/10/apache-incubator/__next._full.txt |    75 +
 .../2025/02/10/apache-incubator/__next._index.txt  |    20 +
 blogs/2025/02/10/apache-incubator/__next._tree.txt |     3 +
 blogs/2025/02/10/apache-incubator/index.html       |    44 +
 blogs/2025/02/10/apache-incubator/index.txt        |    75 +
 blogs/2025/02/17/transparent-benchmarks.md         |    51 +
 .../__next.!KHNpdGUp.blogs.$c$slug.__PAGE__.txt    |    47 +
 .../17/transparent-benchmarks/__next.!KHNpdGUp.txt |    30 +
 .../02/17/transparent-benchmarks/__next._full.txt  |    69 +
 .../02/17/transparent-benchmarks/__next._index.txt |    20 +
 .../02/17/transparent-benchmarks/__next._tree.txt  |     3 +
 blogs/2025/02/17/transparent-benchmarks/index.html |    26 +
 blogs/2025/02/17/transparent-benchmarks/index.txt  |    69 +
 blogs/2025/05/08/zero-copy-deserialization.md      |   137 +
 .../__next.!KHNpdGUp.blogs.$c$slug.__PAGE__.txt    |    79 +
 .../zero-copy-deserialization/__next.!KHNpdGUp.txt |    30 +
 .../08/zero-copy-deserialization/__next._full.txt  |   102 +
 .../08/zero-copy-deserialization/__next._index.txt |    20 +
 .../08/zero-copy-deserialization/__next._tree.txt  |     4 +
 .../05/08/zero-copy-deserialization/index.html     |    73 +
 .../2025/05/08/zero-copy-deserialization/index.txt |   102 +
 blogs/2025/06/06/connectors-runtime.md             |   109 +
 .../__next.!KHNpdGUp.blogs.$c$slug.__PAGE__.txt    |    87 +
 .../06/06/connectors-runtime/__next.!KHNpdGUp.txt  |    30 +
 .../2025/06/06/connectors-runtime/__next._full.txt |   110 +
 .../06/06/connectors-runtime/__next._index.txt     |    20 +
 .../2025/06/06/connectors-runtime/__next._tree.txt |     3 +
 blogs/2025/06/06/connectors-runtime/index.html     |    73 +
 blogs/2025/06/06/connectors-runtime/index.txt      |   110 +
 blogs/2025/08/10/release-0.5.0.md                  |   108 +
 .../__next.!KHNpdGUp.blogs.$c$slug.__PAGE__.txt    |    63 +
 .../2025/08/10/release-0.5.0/__next.!KHNpdGUp.txt  |    30 +
 blogs/2025/08/10/release-0.5.0/__next._full.txt    |    86 +
 blogs/2025/08/10/release-0.5.0/__next._index.txt   |    20 +
 blogs/2025/08/10/release-0.5.0/__next._tree.txt    |     3 +
 blogs/2025/08/10/release-0.5.0/index.html          |    68 +
 blogs/2025/08/10/release-0.5.0/index.txt           |    86 +
 blogs/2025/11/17/websocket-io-uring.md             |   477 +
 .../__next.!KHNpdGUp.blogs.$c$slug.__PAGE__.txt    |   278 +
 .../11/17/websocket-io-uring/__next.!KHNpdGUp.txt  |    30 +
 .../2025/11/17/websocket-io-uring/__next._full.txt |   299 +
 .../11/17/websocket-io-uring/__next._index.txt     |    20 +
 .../2025/11/17/websocket-io-uring/__next._tree.txt |     3 +
 blogs/2025/11/17/websocket-io-uring/index.html     |   366 +
 blogs/2025/11/17/websocket-io-uring/index.txt      |   299 +
 blogs/2025/12/09/release-0.6.0.md                  |   111 +
 .../__next.!KHNpdGUp.blogs.$c$slug.__PAGE__.txt    |    65 +
 .../2025/12/09/release-0.6.0/__next.!KHNpdGUp.txt  |    30 +
 blogs/2025/12/09/release-0.6.0/__next._full.txt    |    88 +
 blogs/2025/12/09/release-0.6.0/__next._index.txt   |    20 +
 blogs/2025/12/09/release-0.6.0/__next._tree.txt    |     3 +
 blogs/2025/12/09/release-0.6.0/index.html          |    78 +
 blogs/2025/12/09/release-0.6.0/index.txt           |    88 +
 blogs/2026/02/24/release-0.7.0.md                  |   169 +
 .../__next.!KHNpdGUp.blogs.$c$slug.__PAGE__.txt    |    79 +
 .../2026/02/24/release-0.7.0/__next.!KHNpdGUp.txt  |    30 +
 blogs/2026/02/24/release-0.7.0/__next._full.txt    |   101 +
 blogs/2026/02/24/release-0.7.0/__next._index.txt   |    20 +
 blogs/2026/02/24/release-0.7.0/__next._tree.txt    |     3 +
 blogs/2026/02/24/release-0.7.0/index.html          |   127 +
 blogs/2026/02/24/release-0.7.0/index.txt           |   101 +
 blogs/2026/02/27/thread-per-core-io_uring.md       |   303 +
 .../__next.!KHNpdGUp.blogs.$c$slug.__PAGE__.txt    |   164 +
 .../thread-per-core-io_uring/__next.!KHNpdGUp.txt  |    30 +
 .../27/thread-per-core-io_uring/__next._full.txt   |   187 +
 .../27/thread-per-core-io_uring/__next._index.txt  |    20 +
 .../27/thread-per-core-io_uring/__next._tree.txt   |     3 +
 .../2026/02/27/thread-per-core-io_uring/index.html |   184 +
 .../2026/02/27/thread-per-core-io_uring/index.txt  |   187 +
 blogs/2026/04/22/release-0.8.0.md                  |   245 +
 .../__next.!KHNpdGUp.blogs.$c$slug.__PAGE__.txt    |   105 +
 .../2026/04/22/release-0.8.0/__next.!KHNpdGUp.txt  |    30 +
 blogs/2026/04/22/release-0.8.0/__next._full.txt    |   127 +
 blogs/2026/04/22/release-0.8.0/__next._index.txt   |    20 +
 blogs/2026/04/22/release-0.8.0/__next._tree.txt    |     3 +
 blogs/2026/04/22/release-0.8.0/index.html          |   210 +
 blogs/2026/04/22/release-0.8.0/index.txt           |   127 +
 ...apache-iggy-top-level-project-tlp-graduation.md |    85 +
 .../__next.!KHNpdGUp.blogs.$c$slug.__PAGE__.txt    |    64 +
 .../__next.!KHNpdGUp.txt                           |    30 +
 .../__next._full.txt                               |    87 +
 .../__next._index.txt                              |    20 +
 .../__next._tree.txt                               |     4 +
 .../index.html                                     |    49 +
 .../index.txt                                      |    87 +
 blogs/2026/09/21/release-0.9.0.md                  |   545 +
 .../__next.!KHNpdGUp.blogs.$c$slug.__PAGE__.txt    |   215 +
 .../2026/09/21/release-0.9.0/__next.!KHNpdGUp.txt  |    30 +
 blogs/2026/09/21/release-0.9.0/__next._full.txt    |   240 +
 blogs/2026/09/21/release-0.9.0/__next._index.txt   |    20 +
 blogs/2026/09/21/release-0.9.0/__next._tree.txt    |     4 +
 blogs/2026/09/21/release-0.9.0/index.html          |   398 +
 blogs/2026/09/21/release-0.9.0/index.txt           |   240 +
 blogs/2026/09/28/vsr-clustering-part-1.md          |   151 +
 .../__next.!KHNpdGUp.blogs.$c$slug.__PAGE__.txt    |    82 +
 .../28/vsr-clustering-part-1/__next.!KHNpdGUp.txt  |    30 +
 .../09/28/vsr-clustering-part-1/__next._full.txt   |   105 +
 .../09/28/vsr-clustering-part-1/__next._index.txt  |    20 +
 .../09/28/vsr-clustering-part-1/__next._tree.txt   |     3 +
 blogs/2026/09/28/vsr-clustering-part-1/index.html  |    52 +
 blogs/2026/09/28/vsr-clustering-part-1/index.txt   |   105 +
 blogs/__next.!KHNpdGUp.blogs.__PAGE__.txt          |    47 +
 blogs/__next.!KHNpdGUp.txt                         |    30 +
 blogs/__next._full.txt                             |    72 +
 blogs/__next._index.txt                            |    20 +
 blogs/__next._tree.txt                             |     2 +
 blogs/index.html                                   |     1 +
 blogs/index.txt                                    |    72 +
 building-message-streaming/gh_trending.jpeg        |   Bin 0 -> 390292 bytes
 building-message-streaming/iggy_bench.jpeg         |   Bin 0 -> 615288 bytes
 building-message-streaming/iggy_ci_cd.jpeg         |   Bin 0 -> 78169 bytes
 building-message-streaming/iggy_cli.jpeg           |   Bin 0 -> 538239 bytes
 building-message-streaming/iggy_sample.jpeg        |   Bin 0 -> 874973 bytes
 building-message-streaming/iggy_server.jpeg        |   Bin 0 -> 976463 bytes
 building-message-streaming/iggy_web_ui.jpeg        |   Bin 0 -> 215638 bytes
 building-message-streaming/iggys.jpeg              |   Bin 0 -> 512046 bytes
 building-message-streaming/leader_elections.jpeg   |   Bin 0 -> 1299078 bytes
 community/__next.!KHNpdGUp.community.__PAGE__.txt  |    30 +
 community/__next.!KHNpdGUp.txt                     |    30 +
 community/__next._full.txt                         |    55 +
 community/__next._index.txt                        |    20 +
 community/__next._tree.txt                         |     2 +
 ...pdGUp.community.become-a-committer.__PAGE__.txt |    32 +
 community/become-a-committer/__next.!KHNpdGUp.txt  |    30 +
 community/become-a-committer/__next._full.txt      |    57 +
 community/become-a-committer/__next._index.txt     |    20 +
 community/become-a-committer/__next._tree.txt      |     2 +
 community/become-a-committer/index.html            |     1 +
 community/become-a-committer/index.txt             |    57 +
 ...next.!KHNpdGUp.community.brand-kit.__PAGE__.txt |    33 +
 community/brand-kit/__next.!KHNpdGUp.txt           |    30 +
 community/brand-kit/__next._full.txt               |    57 +
 community/brand-kit/__next._index.txt              |    20 +
 community/brand-kit/__next._tree.txt               |     2 +
 community/brand-kit/index.html                     |     1 +
 community/brand-kit/index.txt                      |    57 +
 ...GUp.community.graduation-checklist.__PAGE__.txt |    38 +
 .../graduation-checklist/__next.!KHNpdGUp.txt      |    30 +
 community/graduation-checklist/__next._full.txt    |    63 +
 community/graduation-checklist/__next._index.txt   |    20 +
 community/graduation-checklist/__next._tree.txt    |     2 +
 community/graduation-checklist/index.html          |     1 +
 community/graduation-checklist/index.txt           |    63 +
 ...NpdGUp.community.how-to-contribute.__PAGE__.txt |    30 +
 community/how-to-contribute/__next.!KHNpdGUp.txt   |    30 +
 community/how-to-contribute/__next._full.txt       |    55 +
 community/how-to-contribute/__next._index.txt      |    20 +
 community/how-to-contribute/__next._tree.txt       |     2 +
 community/how-to-contribute/index.html             |     1 +
 community/how-to-contribute/index.txt              |    55 +
 ...!KHNpdGUp.community.how-to-release.__PAGE__.txt |    29 +
 community/how-to-release/__next.!KHNpdGUp.txt      |    30 +
 community/how-to-release/__next._full.txt          |    53 +
 community/how-to-release/__next._index.txt         |    20 +
 community/how-to-release/__next._tree.txt          |     2 +
 community/how-to-release/index.html                |     1 +
 community/how-to-release/index.txt                 |    53 +
 community/index.html                               |     1 +
 community/index.txt                                |    55 +
 ....!KHNpdGUp.community.mailing-lists.__PAGE__.txt |    32 +
 community/mailing-lists/__next.!KHNpdGUp.txt       |    30 +
 community/mailing-lists/__next._full.txt           |    56 +
 community/mailing-lists/__next._index.txt          |    20 +
 community/mailing-lists/__next._tree.txt           |     2 +
 community/mailing-lists/index.html                 |     1 +
 community/mailing-lists/index.txt                  |    56 +
 .../__next.!KHNpdGUp.community.team.__PAGE__.txt   |    48 +
 community/team/__next.!KHNpdGUp.txt                |    30 +
 community/team/__next._full.txt                    |    72 +
 community/team/__next._index.txt                   |    20 +
 community/team/__next._tree.txt                    |     2 +
 community/team/index.html                          |     1 +
 community/team/index.txt                           |    72 +
 docs.md                                            |    75 +
 ....!KGFyY2hpdmUp.docs.!MC44.$oc$slug.__PAGE__.txt |    42 +
 docs/0.8/__next.!KGFyY2hpdmUp.docs.!MC44.txt       |    33 +
 docs/0.8/__next._full.txt                          |    75 +
 docs/0.8/__next._index.txt                         |    20 +
 docs/0.8/__next._tree.txt                          |     2 +
 ....!KGFyY2hpdmUp.docs.!MC44.$oc$slug.__PAGE__.txt |    26 +
 .../__next.!KGFyY2hpdmUp.docs.!MC44.txt            |    33 +
 docs/0.8/ai/introduction/__next._full.txt          |    55 +
 docs/0.8/ai/introduction/__next._index.txt         |    20 +
 docs/0.8/ai/introduction/__next._tree.txt          |     2 +
 docs/0.8/ai/introduction/index.html                |     4 +
 docs/0.8/ai/introduction/index.txt                 |    55 +
 ....!KGFyY2hpdmUp.docs.!MC44.$oc$slug.__PAGE__.txt |   105 +
 .../0.8/ai/mcp/__next.!KGFyY2hpdmUp.docs.!MC44.txt |    33 +
 docs/0.8/ai/mcp/__next._full.txt                   |   130 +
 docs/0.8/ai/mcp/__next._index.txt                  |    20 +
 docs/0.8/ai/mcp/__next._tree.txt                   |     2 +
 docs/0.8/ai/mcp/index.html                         |   113 +
 docs/0.8/ai/mcp/index.txt                          |   130 +
 ....!KGFyY2hpdmUp.docs.!MC44.$oc$slug.__PAGE__.txt |    33 +
 .../__next.!KGFyY2hpdmUp.docs.!MC44.txt            |    33 +
 docs/0.8/binary-protocol/__next._full.txt          |    62 +
 docs/0.8/binary-protocol/__next._index.txt         |    20 +
 docs/0.8/binary-protocol/__next._tree.txt          |     2 +
 ....!KGFyY2hpdmUp.docs.!MC44.$oc$slug.__PAGE__.txt |    89 +
 .../cluster/__next.!KGFyY2hpdmUp.docs.!MC44.txt    |    33 +
 docs/0.8/binary-protocol/cluster/__next._full.txt  |   116 +
 docs/0.8/binary-protocol/cluster/__next._index.txt |    20 +
 docs/0.8/binary-protocol/cluster/__next._tree.txt  |     2 +
 docs/0.8/binary-protocol/cluster/index.html        |    84 +
 docs/0.8/binary-protocol/cluster/index.txt         |   116 +
 ....!KGFyY2hpdmUp.docs.!MC44.$oc$slug.__PAGE__.txt |   224 +
 .../commands/__next.!KGFyY2hpdmUp.docs.!MC44.txt   |    33 +
 docs/0.8/binary-protocol/commands/__next._full.txt |   257 +
 .../0.8/binary-protocol/commands/__next._index.txt |    20 +
 docs/0.8/binary-protocol/commands/__next._tree.txt |     2 +
 docs/0.8/binary-protocol/commands/index.html       |   217 +
 docs/0.8/binary-protocol/commands/index.txt        |   257 +
 ....!KGFyY2hpdmUp.docs.!MC44.$oc$slug.__PAGE__.txt |    54 +
 .../__next.!KGFyY2hpdmUp.docs.!MC44.txt            |    33 +
 .../connection-lifecycle/__next._full.txt          |    77 +
 .../connection-lifecycle/__next._index.txt         |    20 +
 .../connection-lifecycle/__next._tree.txt          |     2 +
 .../connection-lifecycle/index.html                |    35 +
 .../binary-protocol/connection-lifecycle/index.txt |    77 +
 ....!KGFyY2hpdmUp.docs.!MC44.$oc$slug.__PAGE__.txt |    72 +
 .../encodings/__next.!KGFyY2hpdmUp.docs.!MC44.txt  |    33 +
 .../0.8/binary-protocol/encodings/__next._full.txt |    98 +
 .../binary-protocol/encodings/__next._index.txt    |    20 +
 .../0.8/binary-protocol/encodings/__next._tree.txt |     2 +
 docs/0.8/binary-protocol/encodings/index.html      |    59 +
 docs/0.8/binary-protocol/encodings/index.txt       |    98 +
 ....!KGFyY2hpdmUp.docs.!MC44.$oc$slug.__PAGE__.txt |    72 +
 .../framing/__next.!KGFyY2hpdmUp.docs.!MC44.txt    |    33 +
 docs/0.8/binary-protocol/framing/__next._full.txt  |   100 +
 docs/0.8/binary-protocol/framing/__next._index.txt |    20 +
 docs/0.8/binary-protocol/framing/__next._tree.txt  |     2 +
 docs/0.8/binary-protocol/framing/index.html        |    60 +
 docs/0.8/binary-protocol/framing/index.txt         |   100 +
 docs/0.8/binary-protocol/index.html                |    22 +
 docs/0.8/binary-protocol/index.txt                 |    62 +
 ....!KGFyY2hpdmUp.docs.!MC44.$oc$slug.__PAGE__.txt |    45 +
 .../messages/__next.!KGFyY2hpdmUp.docs.!MC44.txt   |    33 +
 docs/0.8/binary-protocol/messages/__next._full.txt |    67 +
 .../0.8/binary-protocol/messages/__next._index.txt |    20 +
 docs/0.8/binary-protocol/messages/__next._tree.txt |     2 +
 docs/0.8/binary-protocol/messages/index.html       |    12 +
 docs/0.8/binary-protocol/messages/index.txt        |    67 +
 ....!KGFyY2hpdmUp.docs.!MC44.$oc$slug.__PAGE__.txt |   157 +
 .../commands/__next.!KGFyY2hpdmUp.docs.!MC44.txt   |    33 +
 docs/0.8/cli/commands/__next._full.txt             |   181 +
 docs/0.8/cli/commands/__next._index.txt            |    20 +
 docs/0.8/cli/commands/__next._tree.txt             |     2 +
 docs/0.8/cli/commands/index.html                   |   210 +
 docs/0.8/cli/commands/index.txt                    |   181 +
 ....!KGFyY2hpdmUp.docs.!MC44.$oc$slug.__PAGE__.txt |    73 +
 .../cli/start/__next.!KGFyY2hpdmUp.docs.!MC44.txt  |    33 +
 docs/0.8/cli/start/__next._full.txt                |    98 +
 docs/0.8/cli/start/__next._index.txt               |    20 +
 docs/0.8/cli/start/__next._tree.txt                |     2 +
 docs/0.8/cli/start/index.html                      |    95 +
 docs/0.8/cli/start/index.txt                       |    98 +
 ....!KGFyY2hpdmUp.docs.!MC44.$oc$slug.__PAGE__.txt |    47 +
 .../__next.!KGFyY2hpdmUp.docs.!MC44.txt            |    33 +
 .../clustering/client-failover/__next._full.txt    |    72 +
 .../clustering/client-failover/__next._index.txt   |    20 +
 .../clustering/client-failover/__next._tree.txt    |     2 +
 docs/0.8/clustering/client-failover/index.html     |    25 +
 docs/0.8/clustering/client-failover/index.txt      |    72 +
 ....!KGFyY2hpdmUp.docs.!MC44.$oc$slug.__PAGE__.txt |    65 +
 .../__next.!KGFyY2hpdmUp.docs.!MC44.txt            |    33 +
 docs/0.8/clustering/configuration/__next._full.txt |    89 +
 .../0.8/clustering/configuration/__next._index.txt |    20 +
 docs/0.8/clustering/configuration/__next._tree.txt |     2 +
 docs/0.8/clustering/configuration/index.html       |    65 +
 docs/0.8/clustering/configuration/index.txt        |    89 +
 ....!KGFyY2hpdmUp.docs.!MC44.$oc$slug.__PAGE__.txt |    89 +
 .../deploy/__next.!KGFyY2hpdmUp.docs.!MC44.txt     |    33 +
 docs/0.8/clustering/deploy/__next._full.txt        |   115 +
 docs/0.8/clustering/deploy/__next._index.txt       |    20 +
 docs/0.8/clustering/deploy/__next._tree.txt        |     2 +
 docs/0.8/clustering/deploy/index.html              |   109 +
 docs/0.8/clustering/deploy/index.txt               |   115 +
 ....!KGFyY2hpdmUp.docs.!MC44.$oc$slug.__PAGE__.txt |    59 +
 .../durability/__next.!KGFyY2hpdmUp.docs.!MC44.txt |    33 +
 docs/0.8/clustering/durability/__next._full.txt    |    88 +
 docs/0.8/clustering/durability/__next._index.txt   |    20 +
 docs/0.8/clustering/durability/__next._tree.txt    |     2 +
 docs/0.8/clustering/durability/index.html          |    99 +
 docs/0.8/clustering/durability/index.txt           |    88 +
 ....!KGFyY2hpdmUp.docs.!MC44.$oc$slug.__PAGE__.txt |    53 +
 .../security/__next.!KGFyY2hpdmUp.docs.!MC44.txt   |    33 +
 docs/0.8/clustering/security/__next._full.txt      |    77 +
 docs/0.8/clustering/security/__next._index.txt     |    20 +
 docs/0.8/clustering/security/__next._tree.txt      |     2 +
 docs/0.8/clustering/security/index.html            |    48 +
 docs/0.8/clustering/security/index.txt             |    77 +
 ....!KGFyY2hpdmUp.docs.!MC44.$oc$slug.__PAGE__.txt |    69 +
 .../vsr/__next.!KGFyY2hpdmUp.docs.!MC44.txt        |    33 +
 docs/0.8/clustering/vsr/__next._full.txt           |   107 +
 docs/0.8/clustering/vsr/__next._index.txt          |    20 +
 docs/0.8/clustering/vsr/__next._tree.txt           |     2 +
 docs/0.8/clustering/vsr/index.html                 |    69 +
 docs/0.8/clustering/vsr/index.txt                  |   107 +
 ....!KGFyY2hpdmUp.docs.!MC44.$oc$slug.__PAGE__.txt |    78 +
 .../__next.!KGFyY2hpdmUp.docs.!MC44.txt            |    33 +
 docs/0.8/connectors/introduction/__next._full.txt  |   110 +
 docs/0.8/connectors/introduction/__next._index.txt |    20 +
 docs/0.8/connectors/introduction/__next._tree.txt  |     2 +
 docs/0.8/connectors/introduction/index.html        |    91 +
 docs/0.8/connectors/introduction/index.txt         |   110 +
 ....!KGFyY2hpdmUp.docs.!MC44.$oc$slug.__PAGE__.txt |    56 +
 .../__next.!KGFyY2hpdmUp.docs.!MC44.txt            |    33 +
 docs/0.8/connectors/observability/__next._full.txt |    80 +
 .../0.8/connectors/observability/__next._index.txt |    20 +
 docs/0.8/connectors/observability/__next._tree.txt |     2 +
 docs/0.8/connectors/observability/index.html       |    61 +
 docs/0.8/connectors/observability/index.txt        |    80 +
 ....!KGFyY2hpdmUp.docs.!MC44.$oc$slug.__PAGE__.txt |    98 +
 .../runtime/__next.!KGFyY2hpdmUp.docs.!MC44.txt    |    33 +
 docs/0.8/connectors/runtime/__next._full.txt       |   124 +
 docs/0.8/connectors/runtime/__next._index.txt      |    20 +
 docs/0.8/connectors/runtime/__next._tree.txt       |     2 +
 docs/0.8/connectors/runtime/index.html             |   168 +
 docs/0.8/connectors/runtime/index.txt              |   124 +
 ....!KGFyY2hpdmUp.docs.!MC44.$oc$slug.__PAGE__.txt |   149 +
 .../sdk/__next.!KGFyY2hpdmUp.docs.!MC44.txt        |    33 +
 docs/0.8/connectors/sdk/__next._full.txt           |   173 +
 docs/0.8/connectors/sdk/__next._index.txt          |    20 +
 docs/0.8/connectors/sdk/__next._tree.txt           |     2 +
 docs/0.8/connectors/sdk/index.html                 |   204 +
 docs/0.8/connectors/sdk/index.txt                  |   173 +
 ....!KGFyY2hpdmUp.docs.!MC44.$oc$slug.__PAGE__.txt |    70 +
 .../clickhouse/__next.!KGFyY2hpdmUp.docs.!MC44.txt |    33 +
 .../connectors/sinks/clickhouse/__next._full.txt   |    94 +
 .../connectors/sinks/clickhouse/__next._index.txt  |    20 +
 .../connectors/sinks/clickhouse/__next._tree.txt   |     2 +
 docs/0.8/connectors/sinks/clickhouse/index.html    |    46 +
 docs/0.8/connectors/sinks/clickhouse/index.txt     |    94 +
 ....!KGFyY2hpdmUp.docs.!MC44.$oc$slug.__PAGE__.txt |    65 +
 .../delta/__next.!KGFyY2hpdmUp.docs.!MC44.txt      |    33 +
 docs/0.8/connectors/sinks/delta/__next._full.txt   |    89 +
 docs/0.8/connectors/sinks/delta/__next._index.txt  |    20 +
 docs/0.8/connectors/sinks/delta/__next._tree.txt   |     2 +
 docs/0.8/connectors/sinks/delta/index.html         |    51 +
 docs/0.8/connectors/sinks/delta/index.txt          |    89 +
 ....!KGFyY2hpdmUp.docs.!MC44.$oc$slug.__PAGE__.txt |    71 +
 .../doris/__next.!KGFyY2hpdmUp.docs.!MC44.txt      |    33 +
 docs/0.8/connectors/sinks/doris/__next._full.txt   |    95 +
 docs/0.8/connectors/sinks/doris/__next._index.txt  |    20 +
 docs/0.8/connectors/sinks/doris/__next._tree.txt   |     2 +
 docs/0.8/connectors/sinks/doris/index.html         |    50 +
 docs/0.8/connectors/sinks/doris/index.txt          |    95 +
 ....!KGFyY2hpdmUp.docs.!MC44.$oc$slug.__PAGE__.txt |    65 +
 .../__next.!KGFyY2hpdmUp.docs.!MC44.txt            |    33 +
 .../sinks/elasticsearch/__next._full.txt           |    87 +
 .../sinks/elasticsearch/__next._index.txt          |    20 +
 .../sinks/elasticsearch/__next._tree.txt           |     2 +
 docs/0.8/connectors/sinks/elasticsearch/index.html |    49 +
 docs/0.8/connectors/sinks/elasticsearch/index.txt  |    87 +
 ....!KGFyY2hpdmUp.docs.!MC44.$oc$slug.__PAGE__.txt |    76 +
 .../sinks/http/__next.!KGFyY2hpdmUp.docs.!MC44.txt |    33 +
 docs/0.8/connectors/sinks/http/__next._full.txt    |   103 +
 docs/0.8/connectors/sinks/http/__next._index.txt   |    20 +
 docs/0.8/connectors/sinks/http/__next._tree.txt    |     2 +
 docs/0.8/connectors/sinks/http/index.html          |   115 +
 docs/0.8/connectors/sinks/http/index.txt           |   103 +
 ....!KGFyY2hpdmUp.docs.!MC44.$oc$slug.__PAGE__.txt |    69 +
 .../iceberg/__next.!KGFyY2hpdmUp.docs.!MC44.txt    |    33 +
 docs/0.8/connectors/sinks/iceberg/__next._full.txt |    92 +
 .../0.8/connectors/sinks/iceberg/__next._index.txt |    20 +
 docs/0.8/connectors/sinks/iceberg/__next._tree.txt |     2 +
 docs/0.8/connectors/sinks/iceberg/index.html       |    80 +
 docs/0.8/connectors/sinks/iceberg/index.txt        |    92 +
 ....!KGFyY2hpdmUp.docs.!MC44.$oc$slug.__PAGE__.txt |    69 +
 .../influxdb/__next.!KGFyY2hpdmUp.docs.!MC44.txt   |    33 +
 .../0.8/connectors/sinks/influxdb/__next._full.txt |    93 +
 .../connectors/sinks/influxdb/__next._index.txt    |    20 +
 .../0.8/connectors/sinks/influxdb/__next._tree.txt |     2 +
 docs/0.8/connectors/sinks/influxdb/index.html      |    51 +
 docs/0.8/connectors/sinks/influxdb/index.txt       |    93 +
 ....!KGFyY2hpdmUp.docs.!MC44.$oc$slug.__PAGE__.txt |    67 +
 .../__next.!KGFyY2hpdmUp.docs.!MC44.txt            |    33 +
 .../connectors/sinks/meilisearch/__next._full.txt  |    91 +
 .../connectors/sinks/meilisearch/__next._index.txt |    20 +
 .../connectors/sinks/meilisearch/__next._tree.txt  |     2 +
 docs/0.8/connectors/sinks/meilisearch/index.html   |    39 +
 docs/0.8/connectors/sinks/meilisearch/index.txt    |    91 +
 ....!KGFyY2hpdmUp.docs.!MC44.$oc$slug.__PAGE__.txt |    73 +
 .../mongodb/__next.!KGFyY2hpdmUp.docs.!MC44.txt    |    33 +
 docs/0.8/connectors/sinks/mongodb/__next._full.txt |    95 +
 .../0.8/connectors/sinks/mongodb/__next._index.txt |    20 +
 docs/0.8/connectors/sinks/mongodb/__next._tree.txt |     2 +
 docs/0.8/connectors/sinks/mongodb/index.html       |    55 +
 docs/0.8/connectors/sinks/mongodb/index.txt        |    95 +
 ....!KGFyY2hpdmUp.docs.!MC44.$oc$slug.__PAGE__.txt |    55 +
 .../postgres/__next.!KGFyY2hpdmUp.docs.!MC44.txt   |    33 +
 .../0.8/connectors/sinks/postgres/__next._full.txt |    79 +
 .../connectors/sinks/postgres/__next._index.txt    |    20 +
 .../0.8/connectors/sinks/postgres/__next._tree.txt |     2 +
 docs/0.8/connectors/sinks/postgres/index.html      |    68 +
 docs/0.8/connectors/sinks/postgres/index.txt       |    79 +
 ....!KGFyY2hpdmUp.docs.!MC44.$oc$slug.__PAGE__.txt |    82 +
 .../quickwit/__next.!KGFyY2hpdmUp.docs.!MC44.txt   |    33 +
 .../0.8/connectors/sinks/quickwit/__next._full.txt |   103 +
 .../connectors/sinks/quickwit/__next._index.txt    |    20 +
 .../0.8/connectors/sinks/quickwit/__next._tree.txt |     2 +
 docs/0.8/connectors/sinks/quickwit/index.html      |    59 +
 docs/0.8/connectors/sinks/quickwit/index.txt       |   103 +
 ....!KGFyY2hpdmUp.docs.!MC44.$oc$slug.__PAGE__.txt |    69 +
 .../sinks/s3/__next.!KGFyY2hpdmUp.docs.!MC44.txt   |    33 +
 docs/0.8/connectors/sinks/s3/__next._full.txt      |    94 +
 docs/0.8/connectors/sinks/s3/__next._index.txt     |    20 +
 docs/0.8/connectors/sinks/s3/__next._tree.txt      |     2 +
 docs/0.8/connectors/sinks/s3/index.html            |    46 +
 docs/0.8/connectors/sinks/s3/index.txt             |    94 +
 ....!KGFyY2hpdmUp.docs.!MC44.$oc$slug.__PAGE__.txt |   159 +
 .../sinks/sink/__next.!KGFyY2hpdmUp.docs.!MC44.txt |    33 +
 docs/0.8/connectors/sinks/sink/__next._full.txt    |   182 +
 docs/0.8/connectors/sinks/sink/__next._index.txt   |    20 +
 docs/0.8/connectors/sinks/sink/__next._tree.txt    |     2 +
 docs/0.8/connectors/sinks/sink/index.html          |   188 +
 docs/0.8/connectors/sinks/sink/index.txt           |   182 +
 ....!KGFyY2hpdmUp.docs.!MC44.$oc$slug.__PAGE__.txt |    49 +
 .../stdout/__next.!KGFyY2hpdmUp.docs.!MC44.txt     |    33 +
 docs/0.8/connectors/sinks/stdout/__next._full.txt  |    70 +
 docs/0.8/connectors/sinks/stdout/__next._index.txt |    20 +
 docs/0.8/connectors/sinks/stdout/__next._tree.txt  |     2 +
 docs/0.8/connectors/sinks/stdout/index.html        |    24 +
 docs/0.8/connectors/sinks/stdout/index.txt         |    70 +
 ....!KGFyY2hpdmUp.docs.!MC44.$oc$slug.__PAGE__.txt |    67 +
 .../surrealdb/__next.!KGFyY2hpdmUp.docs.!MC44.txt  |    33 +
 .../connectors/sinks/surrealdb/__next._full.txt    |    91 +
 .../connectors/sinks/surrealdb/__next._index.txt   |    20 +
 .../connectors/sinks/surrealdb/__next._tree.txt    |     2 +
 docs/0.8/connectors/sinks/surrealdb/index.html     |    39 +
 docs/0.8/connectors/sinks/surrealdb/index.txt      |    91 +
 ....!KGFyY2hpdmUp.docs.!MC44.$oc$slug.__PAGE__.txt |    61 +
 .../__next.!KGFyY2hpdmUp.docs.!MC44.txt            |    33 +
 .../sources/elasticsearch/__next._full.txt         |    84 +
 .../sources/elasticsearch/__next._index.txt        |    20 +
 .../sources/elasticsearch/__next._tree.txt         |     2 +
 .../connectors/sources/elasticsearch/index.html    |    36 +
 .../0.8/connectors/sources/elasticsearch/index.txt |    84 +
 ....!KGFyY2hpdmUp.docs.!MC44.$oc$slug.__PAGE__.txt |    74 +
 .../influxdb/__next.!KGFyY2hpdmUp.docs.!MC44.txt   |    33 +
 .../connectors/sources/influxdb/__next._full.txt   |    97 +
 .../connectors/sources/influxdb/__next._index.txt  |    20 +
 .../connectors/sources/influxdb/__next._tree.txt   |     2 +
 docs/0.8/connectors/sources/influxdb/index.html    |    62 +
 docs/0.8/connectors/sources/influxdb/index.txt     |    97 +
 ....!KGFyY2hpdmUp.docs.!MC44.$oc$slug.__PAGE__.txt |    59 +
 .../postgres/__next.!KGFyY2hpdmUp.docs.!MC44.txt   |    33 +
 .../connectors/sources/postgres/__next._full.txt   |    83 +
 .../connectors/sources/postgres/__next._index.txt  |    20 +
 .../connectors/sources/postgres/__next._tree.txt   |     2 +
 docs/0.8/connectors/sources/postgres/index.html    |    64 +
 docs/0.8/connectors/sources/postgres/index.txt     |    83 +
 ....!KGFyY2hpdmUp.docs.!MC44.$oc$slug.__PAGE__.txt |    53 +
 .../random/__next.!KGFyY2hpdmUp.docs.!MC44.txt     |    33 +
 .../0.8/connectors/sources/random/__next._full.txt |    75 +
 .../connectors/sources/random/__next._index.txt    |    20 +
 .../0.8/connectors/sources/random/__next._tree.txt |     2 +
 docs/0.8/connectors/sources/random/index.html      |    28 +
 docs/0.8/connectors/sources/random/index.txt       |    75 +
 ....!KGFyY2hpdmUp.docs.!MC44.$oc$slug.__PAGE__.txt |   257 +
 .../source/__next.!KGFyY2hpdmUp.docs.!MC44.txt     |    33 +
 .../0.8/connectors/sources/source/__next._full.txt |   281 +
 .../connectors/sources/source/__next._index.txt    |    20 +
 .../0.8/connectors/sources/source/__next._tree.txt |     2 +
 docs/0.8/connectors/sources/source/index.html      |   273 +
 docs/0.8/connectors/sources/source/index.txt       |   281 +
 ....!KGFyY2hpdmUp.docs.!MC44.$oc$slug.__PAGE__.txt |    95 +
 .../transforms/__next.!KGFyY2hpdmUp.docs.!MC44.txt |    33 +
 docs/0.8/connectors/transforms/__next._full.txt    |   122 +
 docs/0.8/connectors/transforms/__next._index.txt   |    20 +
 docs/0.8/connectors/transforms/__next._tree.txt    |     2 +
 docs/0.8/connectors/transforms/index.html          |   139 +
 docs/0.8/connectors/transforms/index.txt           |   122 +
 ....!KGFyY2hpdmUp.docs.!MC44.$oc$slug.__PAGE__.txt |    53 +
 .../faq/faq/__next.!KGFyY2hpdmUp.docs.!MC44.txt    |    33 +
 docs/0.8/faq/faq/__next._full.txt                  |    82 +
 docs/0.8/faq/faq/__next._index.txt                 |    20 +
 docs/0.8/faq/faq/__next._tree.txt                  |     2 +
 docs/0.8/faq/faq/index.html                        |    24 +
 docs/0.8/faq/faq/index.txt                         |    82 +
 docs/0.8/index.html                                |    40 +
 docs/0.8/index.txt                                 |    75 +
 ....!KGFyY2hpdmUp.docs.!MC44.$oc$slug.__PAGE__.txt |    99 +
 .../about/__next.!KGFyY2hpdmUp.docs.!MC44.txt      |    33 +
 docs/0.8/introduction/about/__next._full.txt       |   144 +
 docs/0.8/introduction/about/__next._index.txt      |    20 +
 docs/0.8/introduction/about/__next._tree.txt       |     2 +
 docs/0.8/introduction/about/index.html             |    93 +
 docs/0.8/introduction/about/index.txt              |   144 +
 ....!KGFyY2hpdmUp.docs.!MC44.$oc$slug.__PAGE__.txt |    84 +
 .../__next.!KGFyY2hpdmUp.docs.!MC44.txt            |    33 +
 .../0.8/introduction/architecture/__next._full.txt |   108 +
 .../introduction/architecture/__next._index.txt    |    20 +
 .../0.8/introduction/architecture/__next._tree.txt |     2 +
 docs/0.8/introduction/architecture/index.html      |   148 +
 docs/0.8/introduction/architecture/index.txt       |   108 +
 ....!KGFyY2hpdmUp.docs.!MC44.$oc$slug.__PAGE__.txt |    71 +
 .../concepts/__next.!KGFyY2hpdmUp.docs.!MC44.txt   |    33 +
 docs/0.8/introduction/concepts/__next._full.txt    |    96 +
 docs/0.8/introduction/concepts/__next._index.txt   |    20 +
 docs/0.8/introduction/concepts/__next._tree.txt    |     2 +
 docs/0.8/introduction/concepts/index.html          |    70 +
 docs/0.8/introduction/concepts/index.txt           |    96 +
 ....!KGFyY2hpdmUp.docs.!MC44.$oc$slug.__PAGE__.txt |   359 +
 .../__next.!KGFyY2hpdmUp.docs.!MC44.txt            |    33 +
 .../introduction/getting-started/__next._full.txt  |   397 +
 .../introduction/getting-started/__next._index.txt |    20 +
 .../introduction/getting-started/__next._tree.txt  |     2 +
 docs/0.8/introduction/getting-started/index.html   |   424 +
 docs/0.8/introduction/getting-started/index.txt    |   397 +
 ....!KGFyY2hpdmUp.docs.!MC44.$oc$slug.__PAGE__.txt |    67 +
 .../__next.!KGFyY2hpdmUp.docs.!MC44.txt            |    33 +
 docs/0.8/sdk/connection-strings/__next._full.txt   |    89 +
 docs/0.8/sdk/connection-strings/__next._index.txt  |    20 +
 docs/0.8/sdk/connection-strings/__next._tree.txt   |     2 +
 docs/0.8/sdk/connection-strings/index.html         |    52 +
 docs/0.8/sdk/connection-strings/index.txt          |    89 +
 ....!KGFyY2hpdmUp.docs.!MC44.$oc$slug.__PAGE__.txt |   108 +
 .../cpp/intro/__next.!KGFyY2hpdmUp.docs.!MC44.txt  |    33 +
 docs/0.8/sdk/cpp/intro/__next._full.txt            |   129 +
 docs/0.8/sdk/cpp/intro/__next._index.txt           |    20 +
 docs/0.8/sdk/cpp/intro/__next._tree.txt            |     2 +
 docs/0.8/sdk/cpp/intro/index.html                  |    92 +
 docs/0.8/sdk/cpp/intro/index.txt                   |   129 +
 ....!KGFyY2hpdmUp.docs.!MC44.$oc$slug.__PAGE__.txt |   192 +
 .../examples/__next.!KGFyY2hpdmUp.docs.!MC44.txt   |    33 +
 docs/0.8/sdk/csharp/examples/__next._full.txt      |   215 +
 docs/0.8/sdk/csharp/examples/__next._index.txt     |    20 +
 docs/0.8/sdk/csharp/examples/__next._tree.txt      |     2 +
 docs/0.8/sdk/csharp/examples/index.html            |   168 +
 docs/0.8/sdk/csharp/examples/index.txt             |   215 +
 ....!KGFyY2hpdmUp.docs.!MC44.$oc$slug.__PAGE__.txt |   417 +
 .../guide/__next.!KGFyY2hpdmUp.docs.!MC44.txt      |    33 +
 docs/0.8/sdk/csharp/guide/__next._full.txt         |   450 +
 docs/0.8/sdk/csharp/guide/__next._index.txt        |    20 +
 docs/0.8/sdk/csharp/guide/__next._tree.txt         |     2 +
 docs/0.8/sdk/csharp/guide/index.html               |   478 +
 docs/0.8/sdk/csharp/guide/index.txt                |   450 +
 ....!KGFyY2hpdmUp.docs.!MC44.$oc$slug.__PAGE__.txt |   205 +
 .../__next.!KGFyY2hpdmUp.docs.!MC44.txt            |    33 +
 .../0.8/sdk/csharp/high-level-sdk/__next._full.txt |   223 +
 .../sdk/csharp/high-level-sdk/__next._index.txt    |    20 +
 .../0.8/sdk/csharp/high-level-sdk/__next._tree.txt |     2 +
 docs/0.8/sdk/csharp/high-level-sdk/index.html      |   205 +
 docs/0.8/sdk/csharp/high-level-sdk/index.txt       |   223 +
 ....!KGFyY2hpdmUp.docs.!MC44.$oc$slug.__PAGE__.txt |   151 +
 .../intro/__next.!KGFyY2hpdmUp.docs.!MC44.txt      |    33 +
 docs/0.8/sdk/csharp/intro/__next._full.txt         |   187 +
 docs/0.8/sdk/csharp/intro/__next._index.txt        |    20 +
 docs/0.8/sdk/csharp/intro/__next._tree.txt         |     2 +
 docs/0.8/sdk/csharp/intro/index.html               |   163 +
 docs/0.8/sdk/csharp/intro/index.txt                |   187 +
 ....!KGFyY2hpdmUp.docs.!MC44.$oc$slug.__PAGE__.txt |    49 +
 .../examples/__next.!KGFyY2hpdmUp.docs.!MC44.txt   |    33 +
 docs/0.8/sdk/go/examples/__next._full.txt          |    75 +
 docs/0.8/sdk/go/examples/__next._index.txt         |    20 +
 docs/0.8/sdk/go/examples/__next._tree.txt          |     2 +
 docs/0.8/sdk/go/examples/index.html                |    30 +
 docs/0.8/sdk/go/examples/index.txt                 |    75 +
 ....!KGFyY2hpdmUp.docs.!MC44.$oc$slug.__PAGE__.txt |   201 +
 .../go/intro/__next.!KGFyY2hpdmUp.docs.!MC44.txt   |    33 +
 docs/0.8/sdk/go/intro/__next._full.txt             |   227 +
 docs/0.8/sdk/go/intro/__next._index.txt            |    20 +
 docs/0.8/sdk/go/intro/__next._tree.txt             |     2 +
 docs/0.8/sdk/go/intro/index.html                   |   188 +
 docs/0.8/sdk/go/intro/index.txt                    |   227 +
 ....!KGFyY2hpdmUp.docs.!MC44.$oc$slug.__PAGE__.txt |    69 +
 .../__next.!KGFyY2hpdmUp.docs.!MC44.txt            |    33 +
 docs/0.8/sdk/introduction/__next._full.txt         |    95 +
 docs/0.8/sdk/introduction/__next._index.txt        |    20 +
 docs/0.8/sdk/introduction/__next._tree.txt         |     2 +
 docs/0.8/sdk/introduction/index.html               |    54 +
 docs/0.8/sdk/introduction/index.txt                |    95 +
 ....!KGFyY2hpdmUp.docs.!MC44.$oc$slug.__PAGE__.txt |    48 +
 .../examples/__next.!KGFyY2hpdmUp.docs.!MC44.txt   |    33 +
 docs/0.8/sdk/java/examples/__next._full.txt        |    79 +
 docs/0.8/sdk/java/examples/__next._index.txt       |    20 +
 docs/0.8/sdk/java/examples/__next._tree.txt        |     2 +
 docs/0.8/sdk/java/examples/index.html              |    55 +
 docs/0.8/sdk/java/examples/index.txt               |    79 +
 ....!KGFyY2hpdmUp.docs.!MC44.$oc$slug.__PAGE__.txt |   160 +
 .../java/intro/__next.!KGFyY2hpdmUp.docs.!MC44.txt |    33 +
 docs/0.8/sdk/java/intro/__next._full.txt           |   194 +
 docs/0.8/sdk/java/intro/__next._index.txt          |    20 +
 docs/0.8/sdk/java/intro/__next._tree.txt           |     2 +
 docs/0.8/sdk/java/intro/index.html                 |   163 +
 docs/0.8/sdk/java/intro/index.txt                  |   194 +
 ....!KGFyY2hpdmUp.docs.!MC44.$oc$slug.__PAGE__.txt |    49 +
 .../examples/__next.!KGFyY2hpdmUp.docs.!MC44.txt   |    33 +
 docs/0.8/sdk/node/examples/__next._full.txt        |    77 +
 docs/0.8/sdk/node/examples/__next._index.txt       |    20 +
 docs/0.8/sdk/node/examples/__next._tree.txt        |     2 +
 docs/0.8/sdk/node/examples/index.html              |    33 +
 docs/0.8/sdk/node/examples/index.txt               |    77 +
 ....!KGFyY2hpdmUp.docs.!MC44.$oc$slug.__PAGE__.txt |   113 +
 .../node/intro/__next.!KGFyY2hpdmUp.docs.!MC44.txt |    33 +
 docs/0.8/sdk/node/intro/__next._full.txt           |   141 +
 docs/0.8/sdk/node/intro/__next._index.txt          |    20 +
 docs/0.8/sdk/node/intro/__next._tree.txt           |     2 +
 docs/0.8/sdk/node/intro/index.html                 |   115 +
 docs/0.8/sdk/node/intro/index.txt                  |   141 +
 ....!KGFyY2hpdmUp.docs.!MC44.$oc$slug.__PAGE__.txt |   103 +
 .../php/intro/__next.!KGFyY2hpdmUp.docs.!MC44.txt  |    33 +
 docs/0.8/sdk/php/intro/__next._full.txt            |   130 +
 docs/0.8/sdk/php/intro/__next._index.txt           |    20 +
 docs/0.8/sdk/php/intro/__next._tree.txt            |     2 +
 docs/0.8/sdk/php/intro/index.html                  |   116 +
 docs/0.8/sdk/php/intro/index.txt                   |   130 +
 ....!KGFyY2hpdmUp.docs.!MC44.$oc$slug.__PAGE__.txt |    52 +
 .../examples/__next.!KGFyY2hpdmUp.docs.!MC44.txt   |    33 +
 docs/0.8/sdk/python/examples/__next._full.txt      |    75 +
 docs/0.8/sdk/python/examples/__next._index.txt     |    20 +
 docs/0.8/sdk/python/examples/__next._tree.txt      |     2 +
 docs/0.8/sdk/python/examples/index.html            |    35 +
 docs/0.8/sdk/python/examples/index.txt             |    75 +
 ....!KGFyY2hpdmUp.docs.!MC44.$oc$slug.__PAGE__.txt |   101 +
 .../intro/__next.!KGFyY2hpdmUp.docs.!MC44.txt      |    33 +
 docs/0.8/sdk/python/intro/__next._full.txt         |   129 +
 docs/0.8/sdk/python/intro/__next._index.txt        |    20 +
 docs/0.8/sdk/python/intro/__next._tree.txt         |     2 +
 docs/0.8/sdk/python/intro/index.html               |   103 +
 docs/0.8/sdk/python/intro/index.txt                |   129 +
 ....!KGFyY2hpdmUp.docs.!MC44.$oc$slug.__PAGE__.txt |    44 +
 .../examples/__next.!KGFyY2hpdmUp.docs.!MC44.txt   |    33 +
 docs/0.8/sdk/rust/examples/__next._full.txt        |    78 +
 docs/0.8/sdk/rust/examples/__next._index.txt       |    20 +
 docs/0.8/sdk/rust/examples/__next._tree.txt        |     2 +
 docs/0.8/sdk/rust/examples/index.html              |    59 +
 docs/0.8/sdk/rust/examples/index.txt               |    78 +
 ....!KGFyY2hpdmUp.docs.!MC44.$oc$slug.__PAGE__.txt |    93 +
 .../__next.!KGFyY2hpdmUp.docs.!MC44.txt            |    33 +
 docs/0.8/sdk/rust/high-level-sdk/__next._full.txt  |   119 +
 docs/0.8/sdk/rust/high-level-sdk/__next._index.txt |    20 +
 docs/0.8/sdk/rust/high-level-sdk/__next._tree.txt  |     2 +
 docs/0.8/sdk/rust/high-level-sdk/index.html        |    93 +
 docs/0.8/sdk/rust/high-level-sdk/index.txt         |   119 +
 ....!KGFyY2hpdmUp.docs.!MC44.$oc$slug.__PAGE__.txt |   122 +
 .../rust/intro/__next.!KGFyY2hpdmUp.docs.!MC44.txt |    33 +
 docs/0.8/sdk/rust/intro/__next._full.txt           |   150 +
 docs/0.8/sdk/rust/intro/__next._index.txt          |    20 +
 docs/0.8/sdk/rust/intro/__next._tree.txt           |     2 +
 docs/0.8/sdk/rust/intro/index.html                 |   103 +
 docs/0.8/sdk/rust/intro/index.txt                  |   150 +
 ....!KGFyY2hpdmUp.docs.!MC44.$oc$slug.__PAGE__.txt |   282 +
 .../__next.!KGFyY2hpdmUp.docs.!MC44.txt            |    33 +
 docs/0.8/sdk/rust/stream-builder/__next._full.txt  |   311 +
 docs/0.8/sdk/rust/stream-builder/__next._index.txt |    20 +
 docs/0.8/sdk/rust/stream-builder/__next._tree.txt  |     2 +
 docs/0.8/sdk/rust/stream-builder/index.html        |   338 +
 docs/0.8/sdk/rust/stream-builder/index.txt         |   311 +
 ....!KGFyY2hpdmUp.docs.!MC44.$oc$slug.__PAGE__.txt |    71 +
 .../__next.!KGFyY2hpdmUp.docs.!MC44.txt            |    33 +
 docs/0.8/server/benchmarking/__next._full.txt      |   100 +
 docs/0.8/server/benchmarking/__next._index.txt     |    20 +
 docs/0.8/server/benchmarking/__next._tree.txt      |     2 +
 docs/0.8/server/benchmarking/index.html            |    69 +
 docs/0.8/server/benchmarking/index.txt             |   100 +
 ....!KGFyY2hpdmUp.docs.!MC44.$oc$slug.__PAGE__.txt |   149 +
 .../__next.!KGFyY2hpdmUp.docs.!MC44.txt            |    33 +
 docs/0.8/server/configuration/__next._full.txt     |   177 +
 docs/0.8/server/configuration/__next._index.txt    |    20 +
 docs/0.8/server/configuration/__next._tree.txt     |     2 +
 docs/0.8/server/configuration/index.html           |   160 +
 docs/0.8/server/configuration/index.txt            |   177 +
 ....!KGFyY2hpdmUp.docs.!MC44.$oc$slug.__PAGE__.txt |   111 +
 .../docker/__next.!KGFyY2hpdmUp.docs.!MC44.txt     |    33 +
 docs/0.8/server/docker/__next._full.txt            |   140 +
 docs/0.8/server/docker/__next._index.txt           |    20 +
 docs/0.8/server/docker/__next._tree.txt            |     2 +
 docs/0.8/server/docker/index.html                  |   129 +
 docs/0.8/server/docker/index.txt                   |   140 +
 ....!KGFyY2hpdmUp.docs.!MC44.$oc$slug.__PAGE__.txt |    65 +
 .../durability/__next.!KGFyY2hpdmUp.docs.!MC44.txt |    33 +
 docs/0.8/server/durability/__next._full.txt        |    93 +
 docs/0.8/server/durability/__next._index.txt       |    20 +
 docs/0.8/server/durability/__next._tree.txt        |     2 +
 docs/0.8/server/durability/index.html              |    96 +
 docs/0.8/server/durability/index.txt               |    93 +
 ....!KGFyY2hpdmUp.docs.!MC44.$oc$slug.__PAGE__.txt |    46 +
 .../__next.!KGFyY2hpdmUp.docs.!MC44.txt            |    33 +
 docs/0.8/server/introduction/__next._full.txt      |    78 +
 docs/0.8/server/introduction/__next._index.txt     |    20 +
 docs/0.8/server/introduction/__next._tree.txt      |     2 +
 docs/0.8/server/introduction/index.html            |    19 +
 docs/0.8/server/introduction/index.txt             |    78 +
 ....!KGFyY2hpdmUp.docs.!MC44.$oc$slug.__PAGE__.txt |    93 +
 .../__next.!KGFyY2hpdmUp.docs.!MC44.txt            |    33 +
 docs/0.8/server/linux-tuning/__next._full.txt      |   128 +
 docs/0.8/server/linux-tuning/__next._index.txt     |    20 +
 docs/0.8/server/linux-tuning/__next._tree.txt      |     2 +
 docs/0.8/server/linux-tuning/index.html            |    72 +
 docs/0.8/server/linux-tuning/index.txt             |   128 +
 ....!KGFyY2hpdmUp.docs.!MC44.$oc$slug.__PAGE__.txt |    67 +
 .../networking/__next.!KGFyY2hpdmUp.docs.!MC44.txt |    33 +
 docs/0.8/server/networking/__next._full.txt        |    94 +
 docs/0.8/server/networking/__next._index.txt       |    20 +
 docs/0.8/server/networking/__next._tree.txt        |     2 +
 docs/0.8/server/networking/index.html              |    73 +
 docs/0.8/server/networking/index.txt               |    94 +
 ....!KGFyY2hpdmUp.docs.!MC44.$oc$slug.__PAGE__.txt |    77 +
 .../security/__next.!KGFyY2hpdmUp.docs.!MC44.txt   |    33 +
 docs/0.8/server/security/__next._full.txt          |   103 +
 docs/0.8/server/security/__next._index.txt         |    20 +
 docs/0.8/server/security/__next._tree.txt          |     2 +
 docs/0.8/server/security/index.html                |    75 +
 docs/0.8/server/security/index.txt                 |   103 +
 ....!KGFyY2hpdmUp.docs.!MC44.$oc$slug.__PAGE__.txt |   119 +
 .../__next.!KGFyY2hpdmUp.docs.!MC44.txt            |    33 +
 docs/0.8/server/storage-engine/__next._full.txt    |   149 +
 docs/0.8/server/storage-engine/__next._index.txt   |    20 +
 docs/0.8/server/storage-engine/__next._tree.txt    |     2 +
 docs/0.8/server/storage-engine/index.html          |   142 +
 docs/0.8/server/storage-engine/index.txt           |   149 +
 ....!KGFyY2hpdmUp.docs.!MC44.$oc$slug.__PAGE__.txt |    64 +
 .../__next.!KGFyY2hpdmUp.docs.!MC44.txt            |    33 +
 docs/0.8/server/topic-options/__next._full.txt     |    91 +
 docs/0.8/server/topic-options/__next._index.txt    |    20 +
 docs/0.8/server/topic-options/__next._tree.txt     |     2 +
 docs/0.8/server/topic-options/index.html           |    43 +
 docs/0.8/server/topic-options/index.txt            |    91 +
 ....!KGFyY2hpdmUp.docs.!MC44.$oc$slug.__PAGE__.txt |   114 +
 .../start/__next.!KGFyY2hpdmUp.docs.!MC44.txt      |    33 +
 docs/0.8/web_ui/start/__next._full.txt             |   141 +
 docs/0.8/web_ui/start/__next._index.txt            |    20 +
 docs/0.8/web_ui/start/__next._tree.txt             |     2 +
 docs/0.8/web_ui/start/index.html                   |   121 +
 docs/0.8/web_ui/start/index.txt                    |   141 +
 ...__next.!KGN1cnJlbnQp.docs.$oc$slug.__PAGE__.txt |    47 +
 docs/__next.!KGN1cnJlbnQp.docs.txt                 |    31 +
 docs/__next._full.txt                              |    78 +
 docs/__next._index.txt                             |    20 +
 docs/__next._tree.txt                              |     2 +
 docs/ai/introduction.md                            |    17 +
 ...__next.!KGN1cnJlbnQp.docs.$oc$slug.__PAGE__.txt |    37 +
 docs/ai/introduction/__next.!KGN1cnJlbnQp.docs.txt |    31 +
 docs/ai/introduction/__next._full.txt              |    60 +
 docs/ai/introduction/__next._index.txt             |    20 +
 docs/ai/introduction/__next._tree.txt              |     2 +
 docs/ai/introduction/index.html                    |     6 +
 docs/ai/introduction/index.txt                     |    60 +
 docs/ai/mcp.md                                     |   250 +
 ...__next.!KGN1cnJlbnQp.docs.$oc$slug.__PAGE__.txt |   117 +
 docs/ai/mcp/__next.!KGN1cnJlbnQp.docs.txt          |    31 +
 docs/ai/mcp/__next._full.txt                       |   157 +
 docs/ai/mcp/__next._index.txt                      |    20 +
 docs/ai/mcp/__next._tree.txt                       |     2 +
 docs/ai/mcp/index.html                             |   130 +
 docs/ai/mcp/index.txt                              |   157 +
 docs/binary-protocol.md                            |    26 +
 ...__next.!KGN1cnJlbnQp.docs.$oc$slug.__PAGE__.txt |    37 +
 docs/binary-protocol/__next.!KGN1cnJlbnQp.docs.txt |    31 +
 docs/binary-protocol/__next._full.txt              |    66 +
 docs/binary-protocol/__next._index.txt             |    20 +
 docs/binary-protocol/__next._tree.txt              |     2 +
 docs/binary-protocol/cluster.md                    |   175 +
 ...__next.!KGN1cnJlbnQp.docs.$oc$slug.__PAGE__.txt |   106 +
 .../cluster/__next.!KGN1cnJlbnQp.docs.txt          |    31 +
 docs/binary-protocol/cluster/__next._full.txt      |   129 +
 docs/binary-protocol/cluster/__next._index.txt     |    20 +
 docs/binary-protocol/cluster/__next._tree.txt      |     2 +
 docs/binary-protocol/cluster/index.html            |    84 +
 docs/binary-protocol/cluster/index.txt             |   129 +
 docs/binary-protocol/commands.md                   |   440 +
 ...__next.!KGN1cnJlbnQp.docs.$oc$slug.__PAGE__.txt |   212 +
 .../commands/__next.!KGN1cnJlbnQp.docs.txt         |    31 +
 docs/binary-protocol/commands/__next._full.txt     |   245 +
 docs/binary-protocol/commands/__next._index.txt    |    20 +
 docs/binary-protocol/commands/__next._tree.txt     |     2 +
 docs/binary-protocol/commands/index.html           |   221 +
 docs/binary-protocol/commands/index.txt            |   245 +
 docs/binary-protocol/connection-lifecycle.md       |    72 +
 ...__next.!KGN1cnJlbnQp.docs.$oc$slug.__PAGE__.txt |    52 +
 .../__next.!KGN1cnJlbnQp.docs.txt                  |    31 +
 .../connection-lifecycle/__next._full.txt          |    75 +
 .../connection-lifecycle/__next._index.txt         |    20 +
 .../connection-lifecycle/__next._tree.txt          |     2 +
 .../connection-lifecycle/index.html                |    36 +
 .../binary-protocol/connection-lifecycle/index.txt |    75 +
 docs/binary-protocol/encodings.md                  |   133 +
 ...__next.!KGN1cnJlbnQp.docs.$oc$slug.__PAGE__.txt |    68 +
 .../encodings/__next.!KGN1cnJlbnQp.docs.txt        |    31 +
 docs/binary-protocol/encodings/__next._full.txt    |    94 +
 docs/binary-protocol/encodings/__next._index.txt   |    20 +
 docs/binary-protocol/encodings/__next._tree.txt    |     2 +
 docs/binary-protocol/encodings/index.html          |    59 +
 docs/binary-protocol/encodings/index.txt           |    94 +
 docs/binary-protocol/framing.md                    |   203 +
 ...__next.!KGN1cnJlbnQp.docs.$oc$slug.__PAGE__.txt |    90 +
 .../framing/__next.!KGN1cnJlbnQp.docs.txt          |    31 +
 docs/binary-protocol/framing/__next._full.txt      |   115 +
 docs/binary-protocol/framing/__next._index.txt     |    20 +
 docs/binary-protocol/framing/__next._tree.txt      |     2 +
 docs/binary-protocol/framing/index.html            |    62 +
 docs/binary-protocol/framing/index.txt             |   115 +
 docs/binary-protocol/index.html                    |    22 +
 docs/binary-protocol/index.txt                     |    66 +
 docs/binary-protocol/messages.md                   |    47 +
 ...__next.!KGN1cnJlbnQp.docs.$oc$slug.__PAGE__.txt |    44 +
 .../messages/__next.!KGN1cnJlbnQp.docs.txt         |    31 +
 docs/binary-protocol/messages/__next._full.txt     |    65 +
 docs/binary-protocol/messages/__next._index.txt    |    20 +
 docs/binary-protocol/messages/__next._tree.txt     |     2 +
 docs/binary-protocol/messages/index.html           |    12 +
 docs/binary-protocol/messages/index.txt            |    65 +
 docs/cli/commands.md                               |   387 +
 ...__next.!KGN1cnJlbnQp.docs.$oc$slug.__PAGE__.txt |   148 +
 docs/cli/commands/__next.!KGN1cnJlbnQp.docs.txt    |    31 +
 docs/cli/commands/__next._full.txt                 |   172 +
 docs/cli/commands/__next._index.txt                |    20 +
 docs/cli/commands/__next._tree.txt                 |     2 +
 docs/cli/commands/index.html                       |   215 +
 docs/cli/commands/index.txt                        |   172 +
 docs/cli/start.md                                  |   186 +
 ...__next.!KGN1cnJlbnQp.docs.$oc$slug.__PAGE__.txt |    80 +
 docs/cli/start/__next.!KGN1cnJlbnQp.docs.txt       |    31 +
 docs/cli/start/__next._full.txt                    |   103 +
 docs/cli/start/__next._index.txt                   |    20 +
 docs/cli/start/__next._tree.txt                    |     2 +
 docs/cli/start/index.html                          |   102 +
 docs/cli/start/index.txt                           |   103 +
 docs/clustering/client-failover.md                 |    60 +
 ...__next.!KGN1cnJlbnQp.docs.$oc$slug.__PAGE__.txt |    49 +
 .../client-failover/__next.!KGN1cnJlbnQp.docs.txt  |    31 +
 docs/clustering/client-failover/__next._full.txt   |    72 +
 docs/clustering/client-failover/__next._index.txt  |    20 +
 docs/clustering/client-failover/__next._tree.txt   |     2 +
 docs/clustering/client-failover/index.html         |    26 +
 docs/clustering/client-failover/index.txt          |    72 +
 docs/clustering/configuration.md                   |   131 +
 ...__next.!KGN1cnJlbnQp.docs.$oc$slug.__PAGE__.txt |    80 +
 .../configuration/__next.!KGN1cnJlbnQp.docs.txt    |    31 +
 docs/clustering/configuration/__next._full.txt     |   101 +
 docs/clustering/configuration/__next._index.txt    |    20 +
 docs/clustering/configuration/__next._tree.txt     |     2 +
 docs/clustering/configuration/index.html           |    70 +
 docs/clustering/configuration/index.txt            |   101 +
 docs/clustering/deploy.md                          |   180 +
 ...__next.!KGN1cnJlbnQp.docs.$oc$slug.__PAGE__.txt |    93 +
 .../deploy/__next.!KGN1cnJlbnQp.docs.txt           |    31 +
 docs/clustering/deploy/__next._full.txt            |   117 +
 docs/clustering/deploy/__next._index.txt           |    20 +
 docs/clustering/deploy/__next._tree.txt            |     2 +
 docs/clustering/deploy/index.html                  |   118 +
 docs/clustering/deploy/index.txt                   |   117 +
 docs/clustering/durability.md                      |   145 +
 ...__next.!KGN1cnJlbnQp.docs.$oc$slug.__PAGE__.txt |    54 +
 .../durability/__next.!KGN1cnJlbnQp.docs.txt       |    31 +
 docs/clustering/durability/__next._full.txt        |    82 +
 docs/clustering/durability/__next._index.txt       |    20 +
 docs/clustering/durability/__next._tree.txt        |     2 +
 docs/clustering/durability/index.html              |   102 +
 docs/clustering/durability/index.txt               |    82 +
 docs/clustering/security.md                        |    74 +
 ...__next.!KGN1cnJlbnQp.docs.$oc$slug.__PAGE__.txt |    57 +
 .../security/__next.!KGN1cnJlbnQp.docs.txt         |    31 +
 docs/clustering/security/__next._full.txt          |    79 +
 docs/clustering/security/__next._index.txt         |    20 +
 docs/clustering/security/__next._tree.txt          |     2 +
 docs/clustering/security/index.html                |    49 +
 docs/clustering/security/index.txt                 |    79 +
 docs/clustering/vsr.md                             |   110 +
 ...__next.!KGN1cnJlbnQp.docs.$oc$slug.__PAGE__.txt |    71 +
 docs/clustering/vsr/__next.!KGN1cnJlbnQp.docs.txt  |    31 +
 docs/clustering/vsr/__next._full.txt               |   101 +
 docs/clustering/vsr/__next._index.txt              |    20 +
 docs/clustering/vsr/__next._tree.txt               |     2 +
 docs/clustering/vsr/index.html                     |    69 +
 docs/clustering/vsr/index.txt                      |   101 +
 docs/connectors/introduction.md                    |   155 +
 ...__next.!KGN1cnJlbnQp.docs.$oc$slug.__PAGE__.txt |    87 +
 .../introduction/__next.!KGN1cnJlbnQp.docs.txt     |    31 +
 docs/connectors/introduction/__next._full.txt      |   121 +
 docs/connectors/introduction/__next._index.txt     |    20 +
 docs/connectors/introduction/__next._tree.txt      |     2 +
 docs/connectors/introduction/index.html            |   100 +
 docs/connectors/introduction/index.txt             |   121 +
 docs/connectors/observability.md                   |   102 +
 ...__next.!KGN1cnJlbnQp.docs.$oc$slug.__PAGE__.txt |    61 +
 .../observability/__next.!KGN1cnJlbnQp.docs.txt    |    31 +
 docs/connectors/observability/__next._full.txt     |    88 +
 docs/connectors/observability/__next._index.txt    |    20 +
 docs/connectors/observability/__next._tree.txt     |     2 +
 docs/connectors/observability/index.html           |    62 +
 docs/connectors/observability/index.txt            |    88 +
 docs/connectors/runtime.md                         |   256 +
 ...__next.!KGN1cnJlbnQp.docs.$oc$slug.__PAGE__.txt |   116 +
 .../runtime/__next.!KGN1cnJlbnQp.docs.txt          |    31 +
 docs/connectors/runtime/__next._full.txt           |   141 +
 docs/connectors/runtime/__next._index.txt          |    20 +
 docs/connectors/runtime/__next._tree.txt           |     2 +
 docs/connectors/runtime/index.html                 |   201 +
 docs/connectors/runtime/index.txt                  |   141 +
 docs/connectors/sdk.md                             |   360 +
 ...__next.!KGN1cnJlbnQp.docs.$oc$slug.__PAGE__.txt |   213 +
 docs/connectors/sdk/__next.!KGN1cnJlbnQp.docs.txt  |    31 +
 docs/connectors/sdk/__next._full.txt               |   241 +
 docs/connectors/sdk/__next._index.txt              |    20 +
 docs/connectors/sdk/__next._tree.txt               |     2 +
 docs/connectors/sdk/index.html                     |   271 +
 docs/connectors/sdk/index.txt                      |   241 +
 docs/connectors/sinks/clickhouse.md                |   103 +
 ...__next.!KGN1cnJlbnQp.docs.$oc$slug.__PAGE__.txt |    63 +
 .../sinks/clickhouse/__next.!KGN1cnJlbnQp.docs.txt |    31 +
 docs/connectors/sinks/clickhouse/__next._full.txt  |    90 +
 docs/connectors/sinks/clickhouse/__next._index.txt |    20 +
 docs/connectors/sinks/clickhouse/__next._tree.txt  |     2 +
 docs/connectors/sinks/clickhouse/index.html        |    56 +
 docs/connectors/sinks/clickhouse/index.txt         |    90 +
 docs/connectors/sinks/delta.md                     |    95 +
 ...__next.!KGN1cnJlbnQp.docs.$oc$slug.__PAGE__.txt |    71 +
 .../sinks/delta/__next.!KGN1cnJlbnQp.docs.txt      |    31 +
 docs/connectors/sinks/delta/__next._full.txt       |    95 +
 docs/connectors/sinks/delta/__next._index.txt      |    20 +
 docs/connectors/sinks/delta/__next._tree.txt       |     2 +
 docs/connectors/sinks/delta/index.html             |    57 +
 docs/connectors/sinks/delta/index.txt              |    95 +
 docs/connectors/sinks/doris.md                     |   102 +
 ...__next.!KGN1cnJlbnQp.docs.$oc$slug.__PAGE__.txt |    79 +
 .../sinks/doris/__next.!KGN1cnJlbnQp.docs.txt      |    31 +
 docs/connectors/sinks/doris/__next._full.txt       |   104 +
 docs/connectors/sinks/doris/__next._index.txt      |    20 +
 docs/connectors/sinks/doris/__next._tree.txt       |     2 +
 docs/connectors/sinks/doris/index.html             |    58 +
 docs/connectors/sinks/doris/index.txt              |   104 +
 docs/connectors/sinks/elasticsearch.md             |    98 +
 ...__next.!KGN1cnJlbnQp.docs.$oc$slug.__PAGE__.txt |    75 +
 .../elasticsearch/__next.!KGN1cnJlbnQp.docs.txt    |    31 +
 .../sinks/elasticsearch/__next._full.txt           |    98 +
 .../sinks/elasticsearch/__next._index.txt          |    20 +
 .../sinks/elasticsearch/__next._tree.txt           |     2 +
 docs/connectors/sinks/elasticsearch/index.html     |    58 +
 docs/connectors/sinks/elasticsearch/index.txt      |    98 +
 docs/connectors/sinks/http.md                      |   228 +
 ...__next.!KGN1cnJlbnQp.docs.$oc$slug.__PAGE__.txt |   100 +
 .../sinks/http/__next.!KGN1cnJlbnQp.docs.txt       |    31 +
 docs/connectors/sinks/http/__next._full.txt        |   127 +
 docs/connectors/sinks/http/__next._index.txt       |    20 +
 docs/connectors/sinks/http/__next._tree.txt        |     2 +
 docs/connectors/sinks/http/index.html              |   148 +
 docs/connectors/sinks/http/index.txt               |   127 +
 docs/connectors/sinks/iceberg.md                   |   173 +
 ...__next.!KGN1cnJlbnQp.docs.$oc$slug.__PAGE__.txt |    95 +
 .../sinks/iceberg/__next.!KGN1cnJlbnQp.docs.txt    |    31 +
 docs/connectors/sinks/iceberg/__next._full.txt     |   118 +
 docs/connectors/sinks/iceberg/__next._index.txt    |    20 +
 docs/connectors/sinks/iceberg/__next._tree.txt     |     2 +
 docs/connectors/sinks/iceberg/index.html           |   147 +
 docs/connectors/sinks/iceberg/index.txt            |   118 +
 docs/connectors/sinks/influxdb.md                  |   126 +
 ...__next.!KGN1cnJlbnQp.docs.$oc$slug.__PAGE__.txt |    87 +
 .../sinks/influxdb/__next.!KGN1cnJlbnQp.docs.txt   |    31 +
 docs/connectors/sinks/influxdb/__next._full.txt    |   113 +
 docs/connectors/sinks/influxdb/__next._index.txt   |    20 +
 docs/connectors/sinks/influxdb/__next._tree.txt    |     2 +
 docs/connectors/sinks/influxdb/index.html          |    72 +
 docs/connectors/sinks/influxdb/index.txt           |   113 +
 docs/connectors/sinks/meilisearch.md               |    96 +
 ...__next.!KGN1cnJlbnQp.docs.$oc$slug.__PAGE__.txt |    78 +
 .../meilisearch/__next.!KGN1cnJlbnQp.docs.txt      |    31 +
 docs/connectors/sinks/meilisearch/__next._full.txt |   103 +
 .../connectors/sinks/meilisearch/__next._index.txt |    20 +
 docs/connectors/sinks/meilisearch/__next._tree.txt |     2 +
 docs/connectors/sinks/meilisearch/index.html       |    49 +
 docs/connectors/sinks/meilisearch/index.txt        |   103 +
 docs/connectors/sinks/mongodb.md                   |   126 +
 ...__next.!KGN1cnJlbnQp.docs.$oc$slug.__PAGE__.txt |    90 +
 .../sinks/mongodb/__next.!KGN1cnJlbnQp.docs.txt    |    31 +
 docs/connectors/sinks/mongodb/__next._full.txt     |   114 +
 docs/connectors/sinks/mongodb/__next._index.txt    |    20 +
 docs/connectors/sinks/mongodb/__next._tree.txt     |     2 +
 docs/connectors/sinks/mongodb/index.html           |    76 +
 docs/connectors/sinks/mongodb/index.txt            |   114 +
 docs/connectors/sinks/postgres.md                  |   156 +
 ...__next.!KGN1cnJlbnQp.docs.$oc$slug.__PAGE__.txt |    90 +
 .../sinks/postgres/__next.!KGN1cnJlbnQp.docs.txt   |    31 +
 docs/connectors/sinks/postgres/__next._full.txt    |   114 +
 docs/connectors/sinks/postgres/__next._index.txt   |    20 +
 docs/connectors/sinks/postgres/__next._tree.txt    |     2 +
 docs/connectors/sinks/postgres/index.html          |    89 +
 docs/connectors/sinks/postgres/index.txt           |   114 +
 docs/connectors/sinks/quickwit.md                  |   158 +
 ...__next.!KGN1cnJlbnQp.docs.$oc$slug.__PAGE__.txt |   137 +
 .../sinks/quickwit/__next.!KGN1cnJlbnQp.docs.txt   |    31 +
 docs/connectors/sinks/quickwit/__next._full.txt    |   160 +
 docs/connectors/sinks/quickwit/__next._index.txt   |    20 +
 docs/connectors/sinks/quickwit/__next._tree.txt    |     2 +
 docs/connectors/sinks/quickwit/index.html          |    98 +
 docs/connectors/sinks/quickwit/index.txt           |   160 +
 docs/connectors/sinks/s3.md                        |   148 +
 ...__next.!KGN1cnJlbnQp.docs.$oc$slug.__PAGE__.txt |   102 +
 .../sinks/s3/__next.!KGN1cnJlbnQp.docs.txt         |    31 +
 docs/connectors/sinks/s3/__next._full.txt          |   128 +
 docs/connectors/sinks/s3/__next._index.txt         |    20 +
 docs/connectors/sinks/s3/__next._tree.txt          |     2 +
 docs/connectors/sinks/s3/index.html                |    76 +
 docs/connectors/sinks/s3/index.txt                 |   128 +
 docs/connectors/sinks/sink.md                      |   300 +
 ...__next.!KGN1cnJlbnQp.docs.$oc$slug.__PAGE__.txt |   170 +
 .../sinks/sink/__next.!KGN1cnJlbnQp.docs.txt       |    31 +
 docs/connectors/sinks/sink/__next._full.txt        |   196 +
 docs/connectors/sinks/sink/__next._index.txt       |    20 +
 docs/connectors/sinks/sink/__next._tree.txt        |     2 +
 docs/connectors/sinks/sink/index.html              |   201 +
 docs/connectors/sinks/sink/index.txt               |   196 +
 docs/connectors/sinks/stdout.md                    |    50 +
 ...__next.!KGN1cnJlbnQp.docs.$oc$slug.__PAGE__.txt |    58 +
 .../sinks/stdout/__next.!KGN1cnJlbnQp.docs.txt     |    31 +
 docs/connectors/sinks/stdout/__next._full.txt      |    80 +
 docs/connectors/sinks/stdout/__next._index.txt     |    20 +
 docs/connectors/sinks/stdout/__next._tree.txt      |     2 +
 docs/connectors/sinks/stdout/index.html            |    28 +
 docs/connectors/sinks/stdout/index.txt             |    80 +
 docs/connectors/sinks/surrealdb.md                 |   124 +
 ...__next.!KGN1cnJlbnQp.docs.$oc$slug.__PAGE__.txt |    84 +
 .../sinks/surrealdb/__next.!KGN1cnJlbnQp.docs.txt  |    31 +
 docs/connectors/sinks/surrealdb/__next._full.txt   |   107 +
 docs/connectors/sinks/surrealdb/__next._index.txt  |    20 +
 docs/connectors/sinks/surrealdb/__next._tree.txt   |     2 +
 docs/connectors/sinks/surrealdb/index.html         |    59 +
 docs/connectors/sinks/surrealdb/index.txt          |   107 +
 docs/connectors/sources/elasticsearch.md           |   114 +
 ...__next.!KGN1cnJlbnQp.docs.$oc$slug.__PAGE__.txt |    71 +
 .../elasticsearch/__next.!KGN1cnJlbnQp.docs.txt    |    31 +
 .../sources/elasticsearch/__next._full.txt         |    93 +
 .../sources/elasticsearch/__next._index.txt        |    20 +
 .../sources/elasticsearch/__next._tree.txt         |     2 +
 docs/connectors/sources/elasticsearch/index.html   |    55 +
 docs/connectors/sources/elasticsearch/index.txt    |    93 +
 docs/connectors/sources/influxdb.md                |   135 +
 ...__next.!KGN1cnJlbnQp.docs.$oc$slug.__PAGE__.txt |    90 +
 .../sources/influxdb/__next.!KGN1cnJlbnQp.docs.txt |    31 +
 docs/connectors/sources/influxdb/__next._full.txt  |   112 +
 docs/connectors/sources/influxdb/__next._index.txt |    20 +
 docs/connectors/sources/influxdb/__next._tree.txt  |     2 +
 docs/connectors/sources/influxdb/index.html        |    79 +
 docs/connectors/sources/influxdb/index.txt         |   112 +
 docs/connectors/sources/postgres.md                |   175 +
 ...__next.!KGN1cnJlbnQp.docs.$oc$slug.__PAGE__.txt |    95 +
 .../sources/postgres/__next.!KGN1cnJlbnQp.docs.txt |    31 +
 docs/connectors/sources/postgres/__next._full.txt  |   120 +
 docs/connectors/sources/postgres/__next._index.txt |    20 +
 docs/connectors/sources/postgres/__next._tree.txt  |     2 +
 docs/connectors/sources/postgres/index.html        |    99 +
 docs/connectors/sources/postgres/index.txt         |   120 +
 docs/connectors/sources/random.md                  |    59 +
 ...__next.!KGN1cnJlbnQp.docs.$oc$slug.__PAGE__.txt |    60 +
 .../sources/random/__next.!KGN1cnJlbnQp.docs.txt   |    31 +
 docs/connectors/sources/random/__next._full.txt    |    83 +
 docs/connectors/sources/random/__next._index.txt   |    20 +
 docs/connectors/sources/random/__next._tree.txt    |     2 +
 docs/connectors/sources/random/index.html          |    32 +
 docs/connectors/sources/random/index.txt           |    83 +
 docs/connectors/sources/source.md                  |   423 +
 ...__next.!KGN1cnJlbnQp.docs.$oc$slug.__PAGE__.txt |   304 +
 .../sources/source/__next.!KGN1cnJlbnQp.docs.txt   |    31 +
 docs/connectors/sources/source/__next._full.txt    |   329 +
 docs/connectors/sources/source/__next._index.txt   |    20 +
 docs/connectors/sources/source/__next._tree.txt    |     2 +
 docs/connectors/sources/source/index.html          |   316 +
 docs/connectors/sources/source/index.txt           |   329 +
 docs/connectors/transforms.md                      |   230 +
 ...__next.!KGN1cnJlbnQp.docs.$oc$slug.__PAGE__.txt |   100 +
 .../transforms/__next.!KGN1cnJlbnQp.docs.txt       |    31 +
 docs/connectors/transforms/__next._full.txt        |   122 +
 docs/connectors/transforms/__next._index.txt       |    20 +
 docs/connectors/transforms/__next._tree.txt        |     2 +
 docs/connectors/transforms/index.html              |   149 +
 docs/connectors/transforms/index.txt               |   122 +
 docs/faq/faq.md                                    |    55 +
 ...__next.!KGN1cnJlbnQp.docs.$oc$slug.__PAGE__.txt |    50 +
 docs/faq/faq/__next.!KGN1cnJlbnQp.docs.txt         |    31 +
 docs/faq/faq/__next._full.txt                      |    82 +
 docs/faq/faq/__next._index.txt                     |    20 +
 docs/faq/faq/__next._tree.txt                      |     2 +
 docs/faq/faq/index.html                            |    25 +
 docs/faq/faq/index.txt                             |    82 +
 docs/index.html                                    |    40 +
 docs/index.txt                                     |    78 +
 docs/introduction/about.md                         |   149 +
 ...__next.!KGN1cnJlbnQp.docs.$oc$slug.__PAGE__.txt |    93 +
 .../about/__next.!KGN1cnJlbnQp.docs.txt            |    31 +
 docs/introduction/about/__next._full.txt           |   144 +
 docs/introduction/about/__next._index.txt          |    20 +
 docs/introduction/about/__next._tree.txt           |     2 +
 docs/introduction/about/index.html                 |    94 +
 docs/introduction/about/index.txt                  |   144 +
 docs/introduction/architecture.md                  |   172 +
 ...__next.!KGN1cnJlbnQp.docs.$oc$slug.__PAGE__.txt |    85 +
 .../architecture/__next.!KGN1cnJlbnQp.docs.txt     |    31 +
 docs/introduction/architecture/__next._full.txt    |   111 +
 docs/introduction/architecture/__next._index.txt   |    20 +
 docs/introduction/architecture/__next._tree.txt    |     2 +
 docs/introduction/architecture/index.html          |   154 +
 docs/introduction/architecture/index.txt           |   111 +
 docs/introduction/concepts.md                      |   117 +
 ...__next.!KGN1cnJlbnQp.docs.$oc$slug.__PAGE__.txt |    70 +
 .../concepts/__next.!KGN1cnJlbnQp.docs.txt         |    31 +
 docs/introduction/concepts/__next._full.txt        |    98 +
 docs/introduction/concepts/__next._index.txt       |    20 +
 docs/introduction/concepts/__next._tree.txt        |     2 +
 docs/introduction/concepts/index.html              |    70 +
 docs/introduction/concepts/index.txt               |    98 +
 docs/introduction/getting-started.md               |   589 +
 ...__next.!KGN1cnJlbnQp.docs.$oc$slug.__PAGE__.txt |   413 +
 .../getting-started/__next.!KGN1cnJlbnQp.docs.txt  |    31 +
 docs/introduction/getting-started/__next._full.txt |   450 +
 .../introduction/getting-started/__next._index.txt |    20 +
 docs/introduction/getting-started/__next._tree.txt |     2 +
 docs/introduction/getting-started/index.html       |   467 +
 docs/introduction/getting-started/index.txt        |   450 +
 docs/introduction/quickstart.md                    |   112 +
 ...__next.!KGN1cnJlbnQp.docs.$oc$slug.__PAGE__.txt |   107 +
 .../quickstart/__next.!KGN1cnJlbnQp.docs.txt       |    31 +
 docs/introduction/quickstart/__next._full.txt      |   133 +
 docs/introduction/quickstart/__next._index.txt     |    20 +
 docs/introduction/quickstart/__next._tree.txt      |     2 +
 docs/introduction/quickstart/index.html            |    88 +
 docs/introduction/quickstart/index.txt             |   133 +
 docs/sdk/connection-strings.md                     |   181 +
 ...__next.!KGN1cnJlbnQp.docs.$oc$slug.__PAGE__.txt |    77 +
 .../__next.!KGN1cnJlbnQp.docs.txt                  |    31 +
 docs/sdk/connection-strings/__next._full.txt       |   100 +
 docs/sdk/connection-strings/__next._index.txt      |    20 +
 docs/sdk/connection-strings/__next._tree.txt       |     2 +
 docs/sdk/connection-strings/index.html             |    62 +
 docs/sdk/connection-strings/index.txt              |   100 +
 docs/sdk/cpp/intro.md                              |   122 +
 ...__next.!KGN1cnJlbnQp.docs.$oc$slug.__PAGE__.txt |   102 +
 docs/sdk/cpp/intro/__next.!KGN1cnJlbnQp.docs.txt   |    31 +
 docs/sdk/cpp/intro/__next._full.txt                |   130 +
 docs/sdk/cpp/intro/__next._index.txt               |    20 +
 docs/sdk/cpp/intro/__next._tree.txt                |     2 +
 docs/sdk/cpp/intro/index.html                      |    91 +
 docs/sdk/cpp/intro/index.txt                       |   130 +
 docs/sdk/csharp/examples.md                        |   218 +
 ...__next.!KGN1cnJlbnQp.docs.$oc$slug.__PAGE__.txt |   200 +
 .../csharp/examples/__next.!KGN1cnJlbnQp.docs.txt  |    31 +
 docs/sdk/csharp/examples/__next._full.txt          |   224 +
 docs/sdk/csharp/examples/__next._index.txt         |    20 +
 docs/sdk/csharp/examples/__next._tree.txt          |     2 +
 docs/sdk/csharp/examples/index.html                |   180 +
 docs/sdk/csharp/examples/index.txt                 |   224 +
 docs/sdk/csharp/guide.md                           |   708 +
 ...__next.!KGN1cnJlbnQp.docs.$oc$slug.__PAGE__.txt |   436 +
 .../sdk/csharp/guide/__next.!KGN1cnJlbnQp.docs.txt |    31 +
 docs/sdk/csharp/guide/__next._full.txt             |   470 +
 docs/sdk/csharp/guide/__next._index.txt            |    20 +
 docs/sdk/csharp/guide/__next._tree.txt             |     2 +
 docs/sdk/csharp/guide/index.html                   |   490 +
 docs/sdk/csharp/guide/index.txt                    |   470 +
 docs/sdk/csharp/high-level-sdk.md                  |   333 +
 ...__next.!KGN1cnJlbnQp.docs.$oc$slug.__PAGE__.txt |   226 +
 .../high-level-sdk/__next.!KGN1cnJlbnQp.docs.txt   |    31 +
 docs/sdk/csharp/high-level-sdk/__next._full.txt    |   250 +
 docs/sdk/csharp/high-level-sdk/__next._index.txt   |    20 +
 docs/sdk/csharp/high-level-sdk/__next._tree.txt    |     2 +
 docs/sdk/csharp/high-level-sdk/index.html          |   215 +
 docs/sdk/csharp/high-level-sdk/index.txt           |   250 +
 docs/sdk/csharp/intro.md                           |   222 +
 ...__next.!KGN1cnJlbnQp.docs.$oc$slug.__PAGE__.txt |   178 +
 .../sdk/csharp/intro/__next.!KGN1cnJlbnQp.docs.txt |    31 +
 docs/sdk/csharp/intro/__next._full.txt             |   207 +
 docs/sdk/csharp/intro/__next._index.txt            |    20 +
 docs/sdk/csharp/intro/__next._tree.txt             |     2 +
 docs/sdk/csharp/intro/index.html                   |   171 +
 docs/sdk/csharp/intro/index.txt                    |   207 +
 docs/sdk/go/examples.md                            |    61 +
 ...__next.!KGN1cnJlbnQp.docs.$oc$slug.__PAGE__.txt |    51 +
 docs/sdk/go/examples/__next.!KGN1cnJlbnQp.docs.txt |    31 +
 docs/sdk/go/examples/__next._full.txt              |    75 +
 docs/sdk/go/examples/__next._index.txt             |    20 +
 docs/sdk/go/examples/__next._tree.txt              |     2 +
 docs/sdk/go/examples/index.html                    |    30 +
 docs/sdk/go/examples/index.txt                     |    75 +
 docs/sdk/go/intro.md                               |   246 +
 ...__next.!KGN1cnJlbnQp.docs.$oc$slug.__PAGE__.txt |   208 +
 docs/sdk/go/intro/__next.!KGN1cnJlbnQp.docs.txt    |    31 +
 docs/sdk/go/intro/__next._full.txt                 |   234 +
 docs/sdk/go/intro/__next._index.txt                |    20 +
 docs/sdk/go/intro/__next._tree.txt                 |     2 +
 docs/sdk/go/intro/index.html                       |   195 +
 docs/sdk/go/intro/index.txt                        |   234 +
 docs/sdk/introduction.md                           |   145 +
 ...__next.!KGN1cnJlbnQp.docs.$oc$slug.__PAGE__.txt |    78 +
 .../sdk/introduction/__next.!KGN1cnJlbnQp.docs.txt |    31 +
 docs/sdk/introduction/__next._full.txt             |   103 +
 docs/sdk/introduction/__next._index.txt            |    20 +
 docs/sdk/introduction/__next._tree.txt             |     2 +
 docs/sdk/introduction/index.html                   |    62 +
 docs/sdk/introduction/index.txt                    |   103 +
 docs/sdk/java/examples.md                          |    92 +
 ...__next.!KGN1cnJlbnQp.docs.$oc$slug.__PAGE__.txt |    50 +
 .../java/examples/__next.!KGN1cnJlbnQp.docs.txt    |    31 +
 docs/sdk/java/examples/__next._full.txt            |    81 +
 docs/sdk/java/examples/__next._index.txt           |    20 +
 docs/sdk/java/examples/__next._tree.txt            |     2 +
 docs/sdk/java/examples/index.html                  |    56 +
 docs/sdk/java/examples/index.txt                   |    81 +
 docs/sdk/java/intro.md                             |   225 +
 ...__next.!KGN1cnJlbnQp.docs.$oc$slug.__PAGE__.txt |   167 +
 docs/sdk/java/intro/__next.!KGN1cnJlbnQp.docs.txt  |    31 +
 docs/sdk/java/intro/__next._full.txt               |   194 +
 docs/sdk/java/intro/__next._index.txt              |    20 +
 docs/sdk/java/intro/__next._tree.txt               |     2 +
 docs/sdk/java/intro/index.html                     |   177 +
 docs/sdk/java/intro/index.txt                      |   194 +
 docs/sdk/node/examples.md                          |    57 +
 ...__next.!KGN1cnJlbnQp.docs.$oc$slug.__PAGE__.txt |    47 +
 .../node/examples/__next.!KGN1cnJlbnQp.docs.txt    |    31 +
 docs/sdk/node/examples/__next._full.txt            |    71 +
 docs/sdk/node/examples/__next._index.txt           |    20 +
 docs/sdk/node/examples/__next._tree.txt            |     2 +
 docs/sdk/node/examples/index.html                  |    32 +
 docs/sdk/node/examples/index.txt                   |    71 +
 docs/sdk/node/intro.md                             |   150 +
 ...__next.!KGN1cnJlbnQp.docs.$oc$slug.__PAGE__.txt |   128 +
 docs/sdk/node/intro/__next.!KGN1cnJlbnQp.docs.txt  |    31 +
 docs/sdk/node/intro/__next._full.txt               |   155 +
 docs/sdk/node/intro/__next._index.txt              |    20 +
 docs/sdk/node/intro/__next._tree.txt               |     2 +
 docs/sdk/node/intro/index.html                     |   116 +
 docs/sdk/node/intro/index.txt                      |   155 +
 docs/sdk/php/intro.md                              |   161 +
 ...__next.!KGN1cnJlbnQp.docs.$oc$slug.__PAGE__.txt |   104 +
 docs/sdk/php/intro/__next.!KGN1cnJlbnQp.docs.txt   |    31 +
 docs/sdk/php/intro/__next._full.txt                |   129 +
 docs/sdk/php/intro/__next._index.txt               |    20 +
 docs/sdk/php/intro/__next._tree.txt                |     2 +
 docs/sdk/php/intro/index.html                      |   120 +
 docs/sdk/php/intro/index.txt                       |   129 +
 docs/sdk/python/examples.md                        |    53 +
 ...__next.!KGN1cnJlbnQp.docs.$oc$slug.__PAGE__.txt |    49 +
 .../python/examples/__next.!KGN1cnJlbnQp.docs.txt  |    31 +
 docs/sdk/python/examples/__next._full.txt          |    75 +
 docs/sdk/python/examples/__next._index.txt         |    20 +
 docs/sdk/python/examples/__next._tree.txt          |     2 +
 docs/sdk/python/examples/index.html                |    35 +
 docs/sdk/python/examples/index.txt                 |    75 +
 docs/sdk/python/intro.md                           |   143 +
 ...__next.!KGN1cnJlbnQp.docs.$oc$slug.__PAGE__.txt |   110 +
 .../sdk/python/intro/__next.!KGN1cnJlbnQp.docs.txt |    31 +
 docs/sdk/python/intro/__next._full.txt             |   135 +
 docs/sdk/python/intro/__next._index.txt            |    20 +
 docs/sdk/python/intro/__next._tree.txt             |     2 +
 docs/sdk/python/intro/index.html                   |   109 +
 docs/sdk/python/intro/index.txt                    |   135 +
 docs/sdk/rust/examples.md                          |    99 +
 ...__next.!KGN1cnJlbnQp.docs.$oc$slug.__PAGE__.txt |    49 +
 .../rust/examples/__next.!KGN1cnJlbnQp.docs.txt    |    31 +
 docs/sdk/rust/examples/__next._full.txt            |    86 +
 docs/sdk/rust/examples/__next._index.txt           |    20 +
 docs/sdk/rust/examples/__next._tree.txt            |     2 +
 docs/sdk/rust/examples/index.html                  |    65 +
 docs/sdk/rust/examples/index.txt                   |    86 +
 docs/sdk/rust/high-level-sdk.md                    |   197 +
 ...__next.!KGN1cnJlbnQp.docs.$oc$slug.__PAGE__.txt |    99 +
 .../high-level-sdk/__next.!KGN1cnJlbnQp.docs.txt   |    31 +
 docs/sdk/rust/high-level-sdk/__next._full.txt      |   127 +
 docs/sdk/rust/high-level-sdk/__next._index.txt     |    20 +
 docs/sdk/rust/high-level-sdk/__next._tree.txt      |     2 +
 docs/sdk/rust/high-level-sdk/index.html            |   102 +
 docs/sdk/rust/high-level-sdk/index.txt             |   127 +
 docs/sdk/rust/intro.md                             |   154 +
 ...__next.!KGN1cnJlbnQp.docs.$oc$slug.__PAGE__.txt |   126 +
 docs/sdk/rust/intro/__next.!KGN1cnJlbnQp.docs.txt  |    31 +
 docs/sdk/rust/intro/__next._full.txt               |   152 +
 docs/sdk/rust/intro/__next._index.txt              |    20 +
 docs/sdk/rust/intro/__next._tree.txt               |     2 +
 docs/sdk/rust/intro/index.html                     |   106 +
 docs/sdk/rust/intro/index.txt                      |   152 +
 docs/sdk/rust/stream-builder.md                    |   415 +
 ...__next.!KGN1cnJlbnQp.docs.$oc$slug.__PAGE__.txt |   284 +
 .../stream-builder/__next.!KGN1cnJlbnQp.docs.txt   |    31 +
 docs/sdk/rust/stream-builder/__next._full.txt      |   310 +
 docs/sdk/rust/stream-builder/__next._index.txt     |    20 +
 docs/sdk/rust/stream-builder/__next._tree.txt      |     2 +
 docs/sdk/rust/stream-builder/index.html            |   338 +
 docs/sdk/rust/stream-builder/index.txt             |   310 +
 docs/server/benchmarking.md                        |   141 +
 ...__next.!KGN1cnJlbnQp.docs.$oc$slug.__PAGE__.txt |    75 +
 .../benchmarking/__next.!KGN1cnJlbnQp.docs.txt     |    31 +
 docs/server/benchmarking/__next._full.txt          |   101 +
 docs/server/benchmarking/__next._index.txt         |    20 +
 docs/server/benchmarking/__next._tree.txt          |     2 +
 docs/server/benchmarking/index.html                |    72 +
 docs/server/benchmarking/index.txt                 |   101 +
 docs/server/configuration.md                       |   463 +
 ...__next.!KGN1cnJlbnQp.docs.$oc$slug.__PAGE__.txt |   153 +
 .../configuration/__next.!KGN1cnJlbnQp.docs.txt    |    31 +
 docs/server/configuration/__next._full.txt         |   182 +
 docs/server/configuration/__next._index.txt        |    20 +
 docs/server/configuration/__next._tree.txt         |     2 +
 docs/server/configuration/index.html               |   163 +
 docs/server/configuration/index.txt                |   182 +
 docs/server/docker.md                              |   183 +
 ...__next.!KGN1cnJlbnQp.docs.$oc$slug.__PAGE__.txt |   128 +
 docs/server/docker/__next.!KGN1cnJlbnQp.docs.txt   |    31 +
 docs/server/docker/__next._full.txt                |   155 +
 docs/server/docker/__next._index.txt               |    20 +
 docs/server/docker/__next._tree.txt                |     2 +
 docs/server/docker/index.html                      |   131 +
 docs/server/docker/index.txt                       |   155 +
 docs/server/durability.md                          |   155 +
 ...__next.!KGN1cnJlbnQp.docs.$oc$slug.__PAGE__.txt |    67 +
 .../durability/__next.!KGN1cnJlbnQp.docs.txt       |    31 +
 docs/server/durability/__next._full.txt            |    95 +
 docs/server/durability/__next._index.txt           |    20 +
 docs/server/durability/__next._tree.txt            |     2 +
 docs/server/durability/index.html                  |    96 +
 docs/server/durability/index.txt                   |    95 +
 docs/server/introduction.md                        |    65 +
 ...__next.!KGN1cnJlbnQp.docs.$oc$slug.__PAGE__.txt |    55 +
 .../introduction/__next.!KGN1cnJlbnQp.docs.txt     |    31 +
 docs/server/introduction/__next._full.txt          |    86 +
 docs/server/introduction/__next._index.txt         |    20 +
 docs/server/introduction/__next._tree.txt          |     2 +
 docs/server/introduction/index.html                |    30 +
 docs/server/introduction/index.txt                 |    86 +
 docs/server/linux-tuning.md                        |   149 +
 ...__next.!KGN1cnJlbnQp.docs.$oc$slug.__PAGE__.txt |    91 +
 .../linux-tuning/__next.!KGN1cnJlbnQp.docs.txt     |    31 +
 docs/server/linux-tuning/__next._full.txt          |   125 +
 docs/server/linux-tuning/__next._index.txt         |    20 +
 docs/server/linux-tuning/__next._tree.txt          |     2 +
 docs/server/linux-tuning/index.html                |    72 +
 docs/server/linux-tuning/index.txt                 |   125 +
 docs/server/networking.md                          |   126 +
 ...__next.!KGN1cnJlbnQp.docs.$oc$slug.__PAGE__.txt |    67 +
 .../networking/__next.!KGN1cnJlbnQp.docs.txt       |    31 +
 docs/server/networking/__next._full.txt            |    96 +
 docs/server/networking/__next._index.txt           |    20 +
 docs/server/networking/__next._tree.txt            |     2 +
 docs/server/networking/index.html                  |    73 +
 docs/server/networking/index.txt                   |    96 +
 docs/server/schema/index.html                      |    31 +
 docs/server/security.md                            |   146 +
 ...__next.!KGN1cnJlbnQp.docs.$oc$slug.__PAGE__.txt |    75 +
 docs/server/security/__next.!KGN1cnJlbnQp.docs.txt |    31 +
 docs/server/security/__next._full.txt              |   100 +
 docs/server/security/__next._index.txt             |    20 +
 docs/server/security/__next._tree.txt              |     2 +
 docs/server/security/index.html                    |    75 +
 docs/server/security/index.txt                     |   100 +
 docs/server/storage-engine.md                      |   218 +
 ...__next.!KGN1cnJlbnQp.docs.$oc$slug.__PAGE__.txt |   118 +
 .../storage-engine/__next.!KGN1cnJlbnQp.docs.txt   |    31 +
 docs/server/storage-engine/__next._full.txt        |   148 +
 docs/server/storage-engine/__next._index.txt       |    20 +
 docs/server/storage-engine/__next._tree.txt        |     2 +
 docs/server/storage-engine/index.html              |   142 +
 docs/server/storage-engine/index.txt               |   148 +
 docs/server/topic-options.md                       |    96 +
 ...__next.!KGN1cnJlbnQp.docs.$oc$slug.__PAGE__.txt |    69 +
 .../topic-options/__next.!KGN1cnJlbnQp.docs.txt    |    31 +
 docs/server/topic-options/__next._full.txt         |    92 +
 docs/server/topic-options/__next._index.txt        |    20 +
 docs/server/topic-options/__next._tree.txt         |     2 +
 docs/server/topic-options/index.html               |    44 +
 docs/server/topic-options/index.txt                |    92 +
 docs/web_ui/start.md                               |   169 +
 ...__next.!KGN1cnJlbnQp.docs.$oc$slug.__PAGE__.txt |   122 +
 docs/web_ui/start/__next.!KGN1cnJlbnQp.docs.txt    |    31 +
 docs/web_ui/start/__next._full.txt                 |   151 +
 docs/web_ui/start/__next._index.txt                |    20 +
 docs/web_ui/start/__next._tree.txt                 |     2 +
 docs/web_ui/start/index.html                       |   128 +
 docs/web_ui/start/index.txt                        |   151 +
 downloads/__next.!KHNpdGUp.downloads.__PAGE__.txt  |    41 +
 downloads/__next.!KHNpdGUp.txt                     |    30 +
 downloads/__next._full.txt                         |    66 +
 downloads/__next._index.txt                        |    20 +
 downloads/__next._tree.txt                         |     2 +
 downloads/index.html                               |    11 +
 downloads/index.txt                                |    66 +
 fonts/Inter-Medium.ttf                             |   Bin 0 -> 314712 bytes
 fonts/Inter-Regular.ttf                            |   Bin 0 -> 309828 bytes
 fonts/Inter-SemiBold.ttf                           |   Bin 0 -> 315756 bytes
 fonts/Montserrat-OFL.txt                           |    93 +
 fonts/Montserrat-Variable.ttf                      |   Bin 0 -> 744936 bytes
 fonts/OpenSans-OFL.txt                             |    92 +
 fonts/OpenSans-Variable.ttf                        |   Bin 0 -> 532636 bytes
 img/AdvancedFeatures.svg                           |    30 +
 img/Avatar-Placeholder.svg                         |     9 +
 img/ExtremelyEfficient.svg                         |     9 +
 img/FullyOpenSourced.svg                           |    16 +
 img/Image-Placeholder-1.svg                        |     4 +
 img/Image-Placeholder-2.svg                        |     4 +
 img/Image-Placeholder-3.svg                        |     4 +
 img/ManagementInterface.svg                        |    30 +
 img/MultipleTransports.svg                         |    72 +
 img/Sdk.svg                                        |    44 +
 img/Switch-Handle.svg                              |     3 +
 img/SystemFlow-Logo-White.svg                      |    11 +
 img/SystemFlow-Logo.svg                            |    11 +
 img/Video-Placeholder.svg                          |     4 +
 img/apache-iggy-color-darkbg0.5x.png               |   Bin 0 -> 96024 bytes
 img/apache-iggy-color-lightbg0.5x.png              |   Bin 0 -> 97130 bytes
 img/apache-iggy-light-bg0.5x.png                   |   Bin 0 -> 97156 bytes
 img/apache-iggy0.5x.png                            |   Bin 0 -> 96018 bytes
 img/architecture.png                               |   Bin 0 -> 760914 bytes
 img/asf_logo.svg                                   |    43 +
 img/authors/grzegorz.png                           |   Bin 0 -> 56998 bytes
 img/authors/hubert.png                             |   Bin 0 -> 3861 bytes
 img/authors/kranti.png                             |   Bin 0 -> 164024 bytes
 img/authors/krishna.png                            |   Bin 0 -> 496815 bytes
 img/authors/piotr.png                              |   Bin 0 -> 196111 bytes
 img/bench_cli.png                                  |   Bin 0 -> 380000 bytes
 img/bench_platform.png                             |   Bin 0 -> 326093 bytes
 img/check.svg                                      |     3 +
 img/cookies-1.svg                                  |    20 +
 img/copy-icon.svg                                  |     3 +
 img/dc-icon-p-130x130q80.png                       |   Bin 0 -> 1509 bytes
 img/dc-icon.png                                    |   Bin 0 -> 10623 bytes
 img/docusaurus-social-card.jpg                     |   Bin 0 -> 55746 bytes
 img/docusaurus.png                                 |   Bin 0 -> 5142 bytes
 img/favicon.ico                                    |   Bin 0 -> 15406 bytes
 img/favicon.png                                    |   Bin 0 -> 2612 bytes
 img/gh-icon-orange.svg                             |    14 +
 img/github-mark-white.svg                          |     1 +
 img/hero-main copy.webp                            |   Bin 0 -> 150984 bytes
 img/hero-main-p-1080 copy.webp                     |   Bin 0 -> 58010 bytes
 img/hero-main-p-1080.webp                          |   Bin 0 -> 58010 bytes
 img/hero-main-p-1600 copy.webp                     |   Bin 0 -> 103532 bytes
 img/hero-main-p-1600.webp                          |   Bin 0 -> 103532 bytes
 img/hero-main-p-500 copy.webp                      |   Bin 0 -> 18198 bytes
 img/hero-main-p-500.webp                           |   Bin 0 -> 18198 bytes
 img/hero-main-p-800 copy.webp                      |   Bin 0 -> 36490 bytes
 img/hero-main-p-800.webp                           |   Bin 0 -> 36490 bytes
 img/hero-main.webp                                 |   Bin 0 -> 150984 bytes
 img/iggy-apache-color-darkbg.svg                   |   112 +
 img/iggy-logo-1.png                                |   Bin 0 -> 76710 bytes
 img/iggy.png                                       |   Bin 0 -> 172679 bytes
 img/iggy_0_1_0.jpg                                 |   Bin 0 -> 82650 bytes
 img/iggy_bench_0_1_0.jpeg                          |   Bin 0 -> 1386983 bytes
 img/iggy_ci_0_1_0.jpeg                             |   Bin 0 -> 538032 bytes
 img/iggy_cli_0_1_0.jpeg                            |   Bin 0 -> 1049410 bytes
 img/iggy_server.png                                |   Bin 0 -> 1176428 bytes
 img/iggy_server_0_1_0.jpeg                         |   Bin 0 -> 1064181 bytes
 img/iggy_web_ui.png                                |   Bin 0 -> 49250 bytes
 img/iggy_web_ui_0_1_0.jpeg                         |   Bin 0 -> 215638 bytes
 img/logo.png                                       |   Bin 0 -> 5663 bytes
 img/logo.svg                                       |     1 +
 img/og-card.png                                    |   Bin 0 -> 93808 bytes
 img/organizations/aweber-dark.png                  |   Bin 0 -> 103533 bytes
 img/organizations/aweber.svg                       |    41 +
 img/organizations/camel.png                        |   Bin 0 -> 56902 bytes
 img/organizations/cocoindex-dark.svg               |    24 +
 img/organizations/cocoindex.svg                    |    24 +
 img/organizations/hotdata-dark.svg                 |    12 +
 img/organizations/hotdata.svg                      |    12 +
 img/organizations/lakesail-dark.svg                |     1 +
 img/organizations/lakesail.svg                     |     1 +
 img/organizations/laserdata-dark.png               |   Bin 0 -> 68797 bytes
 img/organizations/laserdata.png                    |   Bin 0 -> 7548 bytes
 img/organizations/measure-dark.svg                 |    16 +
 img/organizations/measure.svg                      |    16 +
 img/organizations/rocketride-dark.svg              |     1 +
 img/organizations/rocketride.svg                   |     1 +
 img/organizations/rustok.png                       |   Bin 0 -> 406917 bytes
 img/organizations/seaql.png                        |   Bin 0 -> 15634 bytes
 img/organizations/security-union.png               |   Bin 0 -> 1666 bytes
 img/organizations/serro-dark.svg                   |     1 +
 img/organizations/serro.svg                        |     1 +
 img/organizations/sockudo.svg                      |    32 +
 img/organizations/velodb-dark.svg                  |    12 +
 img/organizations/velodb.png                       |   Bin 0 -> 5662 bytes
 img/organizations/velodb.svg                       |    12 +
 img/organizations/videodb-dark.png                 |   Bin 0 -> 53502 bytes
 img/organizations/videodb.png                      |   Bin 0 -> 84108 bytes
 img/solidhash.png                                  |   Bin 0 -> 6571 bytes
 img/undraw_docusaurus_mountain.svg                 |   171 +
 img/undraw_docusaurus_react.svg                    |   170 +
 img/undraw_docusaurus_tree.svg                     |    40 +
 img/webclip.png                                    |   Bin 0 -> 26495 bytes
 index.html                                         |    41 +
 index.txt                                          |    56 +
 llms-full.txt                                      | 14133 +++++++++++++++++++
 llms-full/ai.txt                                   |   276 +
 llms-full/binary-protocol.txt                      |  1120 ++
 llms-full/cli.txt                                  |   582 +
 llms-full/clustering.txt                           |   721 +
 llms-full/connectors.txt                           |  4170 ++++++
 llms-full/faq.txt                                  |    61 +
 llms-full/introduction.txt                         |  1157 ++
 llms-full/sdk.txt                                  |  4045 ++++++
 llms-full/server.txt                               |  1775 +++
 llms-full/web_ui.txt                               |   175 +
 llms.txt                                           |   164 +
 .../iggy_bench.png                                 |   Bin 0 -> 111659 bytes
 .../iggy_cli.png                                   |   Bin 0 -> 90242 bytes
 .../iggy_cluster.png                               |   Bin 0 -> 872341 bytes
 .../iggy_perf.png                                  |   Bin 0 -> 68641 bytes
 .../iggy_rocket.png                                |   Bin 0 -> 225148 bytes
 .../iggy_stars.png                                 |   Bin 0 -> 35419 bytes
 .../iggy_tpc.png                                   |   Bin 0 -> 423184 bytes
 .../iggy_web.png                                   |   Bin 0 -> 109581 bytes
 .../__next.!KHNpdGUp.powered-by.__PAGE__.txt       |    71 +
 powered-by/__next.!KHNpdGUp.txt                    |    30 +
 powered-by/__next._full.txt                        |    97 +
 powered-by/__next._index.txt                       |    20 +
 powered-by/__next._tree.txt                        |    27 +
 powered-by/index.html                              |     1 +
 powered-by/index.txt                               |    97 +
 robots.txt                                         |     5 +
 sitemap.xml                                        |   608 +
 .../iggy_docker.png                                |   Bin 0 -> 721661 bytes
 .../iggy_technology_radar.png                      |   Bin 0 -> 406596 bytes
 technology-radar-and-currrent-goals/iggy_vsr.png   |   Bin 0 -> 3958317 bytes
 thread-per-core-io_uring/diagram_szpont.png        |   Bin 0 -> 271604 bytes
 thread-per-core-io_uring/ecs.png                   |   Bin 0 -> 154902 bytes
 thread-per-core-io_uring/pc_16_0.7.png             |   Bin 0 -> 842734 bytes
 thread-per-core-io_uring/pp_16_0.5_fsync.png       |   Bin 0 -> 607289 bytes
 thread-per-core-io_uring/pp_16_0.5_rl.png          |   Bin 0 -> 200013 bytes
 thread-per-core-io_uring/pp_16_0.6.png             |   Bin 0 -> 210659 bytes
 thread-per-core-io_uring/pp_16_0.6_fsync.png       |   Bin 0 -> 448910 bytes
 thread-per-core-io_uring/pp_16_0.7.png             |   Bin 0 -> 236428 bytes
 thread-per-core-io_uring/pp_16_0.7_fsync.png       |   Bin 0 -> 292373 bytes
 thread-per-core-io_uring/pp_32_0.5_fsync.png       |   Bin 0 -> 612916 bytes
 thread-per-core-io_uring/pp_32_0.5_rl.png          |   Bin 0 -> 212749 bytes
 thread-per-core-io_uring/pp_32_0.6.png             |   Bin 0 -> 156460 bytes
 thread-per-core-io_uring/pp_32_0.7.png             |   Bin 0 -> 167854 bytes
 thread-per-core-io_uring/pp_32_0.7_fsync.png       |   Bin 0 -> 432903 bytes
 thread-per-core-io_uring/pp_4_0.5_rl.png           |   Bin 0 -> 265914 bytes
 thread-per-core-io_uring/pp_64_0.6.png             |   Bin 0 -> 139175 bytes
 thread-per-core-io_uring/pp_8_0.5_rl.png           |   Bin 0 -> 156545 bytes
 thread-per-core-io_uring/pp_8_0.6_rl.png           |   Bin 0 -> 147937 bytes
 thread-per-core-io_uring/pp_8_0.7_rl.png           |   Bin 0 -> 245574 bytes
 thread-per-core-io_uring/sharding.png              |   Bin 0 -> 535868 bytes
 transparent-benchmarks/iggy_bench_cli.png          |   Bin 0 -> 515157 bytes
 transparent-benchmarks/iggy_bench_dashboard.png    |   Bin 0 -> 394188 bytes
 websocket-support-for-compio/pc_tcp.png            |   Bin 0 -> 197964 bytes
 websocket-support-for-compio/pc_ws.png             |   Bin 0 -> 184540 bytes
 websocket-support-for-compio/tcp-1234.png          |   Bin 0 -> 205593 bytes
 websocket-support-for-compio/ws-1234.png           |   Bin 0 -> 190067 bytes
 zero-copy-deserialization/iggy_batch_schema_1.png  |   Bin 0 -> 525799 bytes
 zero-copy-deserialization/iggy_batch_schema_2.png  |   Bin 0 -> 546950 bytes
 .../no_zero_copy_consumer.png                      |   Bin 0 -> 1490151 bytes
 .../no_zero_copy_producer.png                      |   Bin 0 -> 684901 bytes
 zero-copy-deserialization/zero_copy_consumer.png   |   Bin 0 -> 485344 bytes
 zero-copy-deserialization/zero_copy_producer.png   |   Bin 0 -> 602342 bytes
 1755 files changed, 146871 insertions(+)

diff --git a/.asf.yaml b/.asf.yaml
new file mode 100644
index 000000000..9b6ebc020
--- /dev/null
+++ b/.asf.yaml
@@ -0,0 +1,62 @@
+github:
+  description: "Apache Iggy Website"
+  homepage: https://iggy.apache.org/
+  features:
+    # Enable wiki for documentation
+    wiki: true
+    # Enable issue management
+    issues: true
+    # Enable discussions
+    discussions: true
+  labels:
+    - rust
+    - message-streaming
+    - iggy
+    - apache
+  enabled_merge_buttons:
+    squash: true
+    squash_commit_message: PR_TITLE_AND_DESC
+    merge: false
+    rebase: false
+
+  pull_requests:
+    del_branch_on_merge: true
+
+  collaborators:
+    - landingpro
+
+  rulesets:
+    - name: "Default Branch Protection"
+      type: branch
+      branches:
+        includes:
+          - "~DEFAULT_BRANCH"
+          - "release/*"
+          - "rel/*"
+        excludes: []
+      bypass_teams:
+        - root
+      restrict_deletion: true
+      restrict_force_push: true
+      required_conversation_resolution: true
+      required_pull_request_reviews:
+        dismiss_stale_reviews: true
+        require_last_push_approval: true
+        required_approving_review_count: 1
+      required_status_checks:
+        - name: "build"
+          app_slug: "github-actions"
+      required_status_checks_strict: true
+publish:
+  whoami: asf-site
+
+# Staging and publishing profile:
+staging:
+  profile:
+  whoami: asf-staging
+
+notifications:
+  commits: commits@iggy.apache.org
+  issues: commits@iggy.apache.org
+  pullrequests: commits@iggy.apache.org
+  discussions: dev@iggy.apache.org
diff --git a/.htaccess b/.htaccess
new file mode 100644
index 000000000..c2733fadd
--- /dev/null
+++ b/.htaccess
@@ -0,0 +1,23 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+# Served from the site root on iggy.apache.org (published to asf-site).
+#
+# Without this, the ASF web server answers unknown paths with its own bare
+# "Not Found" body and the 404.html produced by `next build` is never used.
+# The status code stays 404 either way; this only replaces the body.
+ErrorDocument 404 /404.html
diff --git a/.nojekyll b/.nojekyll
new file mode 100644
index 000000000..e69de29bb
diff --git a/404.html b/404.html
new file mode 100644
index 000000000..7e6ffae09
--- /dev/null
+++ b/404.html
@@ -0,0 +1 @@
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="/_next/static/chunks/1_55v0vlfews3.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/1qt6pht_u0de1.js"/><script src="/_next/static/chunks/1iye7dwhtxrnu.js" async=""></script><script src="/_next/static/chunks/1t7fq8t6712vg.js" async=""></script><script src="/_next/static/chunk [...]
\ No newline at end of file
diff --git a/404/index.html b/404/index.html
new file mode 100644
index 000000000..7e6ffae09
--- /dev/null
+++ b/404/index.html
@@ -0,0 +1 @@
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="/_next/static/chunks/1_55v0vlfews3.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/1qt6pht_u0de1.js"/><script src="/_next/static/chunks/1iye7dwhtxrnu.js" async=""></script><script src="/_next/static/chunks/1t7fq8t6712vg.js" async=""></script><script src="/_next/static/chunk [...]
\ No newline at end of file
diff --git a/__next.!KGhvbWUp.__PAGE__.txt b/__next.!KGhvbWUp.__PAGE__.txt
new file mode 100644
index 000000000..3692aaf51
--- /dev/null
+++ b/__next.!KGhvbWUp.__PAGE__.txt
@@ -0,0 +1,38 @@
+1:"$Sreact.fragment"
+2:I[22016,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/3nptizve4zde0.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/071bbedt711a2.js"],""]
+3:I[5500,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/3nptizve4zde0.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/071bbedt711a2.js"],"Image"]
+b:X
+0:{"buildId":"CEAllZE6ERPzzxzpa_n8G","data":[{"rsc":["$","$1","c",{"children":[[["$","section",null,{"className":"relative overflow-hidden px-6 pt-8 pb-20","style":{"backgroundImage":"url(/img/hero-main.webp), radial-gradient(circle closest-side at 35% 48%, #ff910314, #070c1700 60%), radial-gradient(circle closest-side at 68% 52%, #111d35, #070c1700 63%), radial-gradient(circle farthest-side at 20% 0%, #0e1f42, #070c17 21%)","backgroundPosition":"50% 29%, 0 0, 0 0, 0 0","backgroundRepeat [...]
+10:I[89626,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/3nptizve4zde0.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/071bbedt711a2.js"],"BenchmarkSection"]
+19:I[18870,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/3nptizve4zde0.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/071bbedt711a2.js"],"LandingCodeTabs"]
+1e:I[97367,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"OutletBoundary"]
+1f:"$Sreact.suspense"
+21:I[97367,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"ViewportBoundary"]
+22:I[97367,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"MetadataBoundary"]
+23:I[27201,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"IconMark"]
+4:["$","section",null,{"className":"overflow-hidden px-6 py-20","style":{"backgroundImage":"radial-gradient(circle farthest-side at 50% 10%, #0e1930, #070c17 65%)"},"children":["$","div",null,{"className":"mx-auto max-w-6xl","children":[["$","div",null,{"className":"mx-auto mb-14 max-w-3xl text-center","children":[["$","h2",null,{"className":"mb-5 text-3xl font-bold tracking-tight text-[#fffaeb] sm:text-4xl md:text-5xl","children":["Built for ",["$","span",null,{"className":"text-[#ff910 [...]
+5:["$","section",null,{"className":"px-6 py-20","style":{"backgroundImage":"radial-gradient(circle farthest-side at 30% 80%, #1a100820, #070c17 50%)"},"children":["$","div",null,{"className":"mx-auto max-w-6xl","children":[["$","div",null,{"className":"mx-auto mb-14 max-w-3xl text-center","children":[["$","h2",null,{"className":"mb-5 text-4xl font-bold tracking-tight text-[#fffaeb] md:text-5xl","children":["How it ",["$","span",null,{"className":"text-[#ff9103]","children":"works"}]]}],[ [...]
+6:["$","section",null,{"className":"px-6 py-20","style":{"backgroundImage":"radial-gradient(circle farthest-side at 50% 90%, #1a1008, #070c17 65%)"},"children":["$","div",null,{"className":"mx-auto max-w-6xl","children":[["$","div",null,{"className":"mx-auto mb-14 max-w-3xl text-center","children":[["$","h2",null,{"className":"mb-5 text-4xl font-bold tracking-tight text-[#fffaeb] md:text-5xl","children":["Complete ",["$","span",null,{"className":"text-[#ff9103]","children":"ecosystem"}]] [...]
+7:["$","footer",null,{"className":"border-t border-[#3d4450] px-6 py-14","style":{"backgroundColor":"#070c17"},"children":["$","div",null,{"className":"mx-auto max-w-6xl","children":[["$","div",null,{"className":"grid gap-10 sm:grid-cols-2 lg:grid-cols-4","children":[["$","div",null,{"children":[["$","h4",null,{"className":"mb-4 text-sm font-semibold tracking-wide text-[#ff9103] uppercase","children":"Docs"}],["$","ul",null,{"className":"space-y-2.5 text-sm","children":["$","li",null,{"c [...]
+8:["$","script","script-0",{"src":"/_next/static/chunks/071bbedt711a2.js","async":true}]
+9:["$","$L1e",null,{"children":["$","$1f",null,{"name":"Next.MetadataOutlet","children":"$@20"}]}]
+c:["$","$1","h",{"children":[null,["$","$L21",null,{"children":[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]}],["$","div",null,{"hidden":true,"children":["$","$L22",null,{"children":["$","$1f",null,{"name":"Next.Metadata","children":[["$","title","0",{"children":"Hyper-Efficient Message Streaming written in Rust | Apache Iggy"}],["$","meta","1",{"name":"description","content":"Apache Iggy is a high-performance, [...]
+f:true
+11:["$","p",null,{"className":"text-sm font-light leading-relaxed text-[#aeb5bd]","children":"Process millions of messages per second with predictable low latency thanks to Rust, combined with io_uring and thread-per-core, shared nothing architecture."}]
+12:["$","div","Zero-Copy Serialization",{"className":"group rounded-2xl border border-white/[0.08] bg-white/[0.02] p-6 transition-all duration-300 hover:border-[#ff9103]/30 hover:bg-[#18213a]/50","children":[["$","h3",null,{"className":"mb-3 text-lg font-semibold text-[#d6d7d7] transition-colors group-hover:text-[#fffaeb]","children":"Zero-Copy Serialization"}],["$","p",null,{"className":"text-sm font-light leading-relaxed text-[#aeb5bd]","children":"Custom zero-copy (de)serialization fo [...]
+13:["$","div","Multiple Transport Protocols",{"className":"group rounded-2xl border border-white/[0.08] bg-white/[0.02] p-6 transition-all duration-300 hover:border-[#ff9103]/30 hover:bg-[#18213a]/50","children":[["$","h3",null,{"className":"mb-3 text-lg font-semibold text-[#d6d7d7] transition-colors group-hover:text-[#fffaeb]","children":"Multiple Transport Protocols"}],["$","p",null,{"className":"text-sm font-light leading-relaxed text-[#aeb5bd]","children":"Support for QUIC, TCP, WebS [...]
+14:["$","div","Multi-Language SDKs",{"className":"group rounded-2xl border border-white/[0.08] bg-white/[0.02] p-6 transition-all duration-300 hover:border-[#ff9103]/30 hover:bg-[#18213a]/50","children":[["$","h3",null,{"className":"mb-3 text-lg font-semibold text-[#d6d7d7] transition-colors group-hover:text-[#fffaeb]","children":"Multi-Language SDKs"}],["$","p",null,{"className":"text-sm font-light leading-relaxed text-[#aeb5bd]","children":"Client libraries available for Rust, C#, C++, [...]
+15:["$","div","Consumer Groups & Partitioning",{"className":"group rounded-2xl border border-white/[0.08] bg-white/[0.02] p-6 transition-all duration-300 hover:border-[#ff9103]/30 hover:bg-[#18213a]/50","children":[["$","h3",null,{"className":"mb-3 text-lg font-semibold text-[#d6d7d7] transition-colors group-hover:text-[#fffaeb]","children":"Consumer Groups & Partitioning"}],["$","p",null,{"className":"text-sm font-light leading-relaxed text-[#aeb5bd]","children":"Built-in support for co [...]
+16:["$","div","Security & Access Control",{"className":"group rounded-2xl border border-white/[0.08] bg-white/[0.02] p-6 transition-all duration-300 hover:border-[#ff9103]/30 hover:bg-[#18213a]/50","children":[["$","h3",null,{"className":"mb-3 text-lg font-semibold text-[#d6d7d7] transition-colors group-hover:text-[#fffaeb]","children":"Security & Access Control"}],["$","p",null,{"className":"text-sm font-light leading-relaxed text-[#aeb5bd]","children":"TLS on all transports, per-stream [...]
+17:["$","div","Built-in Monitoring",{"className":"group rounded-2xl border border-white/[0.08] bg-white/[0.02] p-6 transition-all duration-300 hover:border-[#ff9103]/30 hover:bg-[#18213a]/50","children":[["$","h3",null,{"className":"mb-3 text-lg font-semibold text-[#d6d7d7] transition-colors group-hover:text-[#fffaeb]","children":"Built-in Monitoring"}],["$","p",null,{"className":"text-sm font-light leading-relaxed text-[#aeb5bd]","children":"OpenTelemetry logs & traces, Prometheus metri [...]
+18:["$","div","Multi-Tenant Support",{"className":"group rounded-2xl border border-white/[0.08] bg-white/[0.02] p-6 transition-all duration-300 hover:border-[#ff9103]/30 hover:bg-[#18213a]/50","children":[["$","h3",null,{"className":"mb-3 text-lg font-semibold text-[#d6d7d7] transition-colors group-hover:text-[#fffaeb]","children":"Multi-Tenant Support"}],["$","p",null,{"className":"text-sm font-light leading-relaxed text-[#aeb5bd]","children":"Stream abstraction for multi-tenancy, confi [...]
+1a:["$","span","HTTP",{"className":"px-2 py-0.5 rounded-full text-[10px] font-medium text-[#aaafb6] border border-white/[0.08]","children":"HTTP"}]
+1b:["$","$L2","Web UI",{"href":"/docs/web_ui/start","className":"group rounded-2xl border border-white/[0.08] bg-white/[0.02] p-6 transition-all duration-300 hover:border-[#ff9103]/30 hover:bg-[#18213a]/50 no-underline","children":[["$","div",null,{"className":"flex items-center gap-3 mb-3","children":[["$","div",null,{"className":"w-3 h-3 rounded-full","style":{"backgroundColor":"#a855f7"}}],["$","h3",null,{"className":"text-xl font-semibold text-[#fffaeb] m-0","children":"Web UI"}]]}], [...]
+1c:["$","$L2","CLI",{"href":"/docs/cli/start","className":"group rounded-2xl border border-white/[0.08] bg-white/[0.02] p-6 transition-all duration-300 hover:border-[#ff9103]/30 hover:bg-[#18213a]/50 no-underline","children":[["$","div",null,{"className":"flex items-center gap-3 mb-3","children":[["$","div",null,{"className":"w-3 h-3 rounded-full","style":{"backgroundColor":"#6366f1"}}],["$","h3",null,{"className":"text-xl font-semibold text-[#fffaeb] m-0","children":"CLI"}]]}],["$","p", [...]
+1d:["$","p",null,{"className":"mt-4","children":"Apache Iggy, Iggy, Apache, and the Apache Iggy logo are trademarks or registered trademarks of The Apache Software Foundation. All other marks mentioned may be trademarks or registered trademarks of their respective owners."}]
+20:null
+b:300
+b:C
+e:0
+d:"$undefined"
+a:"$undefined"
diff --git a/__next.!KGhvbWUp.txt b/__next.!KGhvbWUp.txt
new file mode 100644
index 000000000..fbe85f3bb
--- /dev/null
+++ b/__next.!KGhvbWUp.txt
@@ -0,0 +1,21 @@
+1:"$Sreact.fragment"
+2:I[22016,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/3nptizve4zde0.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/071bbedt711a2.js"],""]
+3:I[5014,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/3nptizve4zde0.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/3x8y3fmtn6lnc.js"],"default"]
+4:I[64345,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/3nptizve4zde0.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/3x8y3fmtn6lnc.js"],"HomeLayout"]
+5:I[5500,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/3nptizve4zde0.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/071bbedt711a2.js"],"Image"]
+6:I[15269,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/3nptizve4zde0.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/3x8y3fmtn6lnc.js"],"CommunityDropdown"]
+7:I[15269,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/3nptizve4zde0.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/3x8y3fmtn6lnc.js"],"communityLinks"]
+8:I[29966,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/3nptizve4zde0.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/3x8y3fmtn6lnc.js"],"ASFDropdown"]
+9:I[36330,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/3nptizve4zde0.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/3x8y3fmtn6lnc.js"],"ASFMobileLinks"]
+a:I[89589,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/3nptizve4zde0.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/3x8y3fmtn6lnc.js"],"ForceDarkTheme"]
+b:I[39756,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"default"]
+c:I[37457,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"default"]
+10:X
+0:{"buildId":"CEAllZE6ERPzzxzpa_n8G","data":[{"rsc":["$","$1","c",{"children":[[["$","script","script-0",{"src":"/_next/static/chunks/3nptizve4zde0.js","async":true}],["$","script","script-1",{"src":"/_next/static/chunks/241-fa32f9zay.js","async":true}],["$","script","script-2",{"src":"/_next/static/chunks/250gopd52txql.js","async":true}],["$","script","script-3",{"src":"/_next/static/chunks/0n3fueko2xquo.js","async":true}],["$","script","script-4",{"src":"/_next/static/chunks/3x8y3fmtn6 [...]
+d:["$","nav",null,{"aria-label":"Where to go next","className":"mt-6 flex flex-wrap items-center justify-center gap-x-6 gap-y-2 text-sm text-fd-muted-foreground","children":[["$","$L2","/",{"href":"/","className":"transition-colors hover:text-fd-primary","children":"Home"}],["$","$L2","/docs",{"href":"/docs","className":"transition-colors hover:text-fd-primary","children":"Documentation"}],["$","$L2","/blogs",{"href":"/blogs","className":"transition-colors hover:text-fd-primary","childre [...]
+e:["$","p",null,{"className":"mt-6 max-w-md text-xs text-fd-muted-foreground","children":["Every page on this site is listed in"," ",["$","a",null,{"href":"/sitemap.xml","className":"underline hover:text-fd-primary","children":"/sitemap.xml"}],", and"," ",["$","a",null,{"href":"/llms.txt","className":"underline hover:text-fd-primary","children":"/llms.txt"}]," ","summarises the documentation."]}]
+12:true
+10:300
+10:C
+11:0
+f:"$undefined"
diff --git a/__next._full.txt b/__next._full.txt
new file mode 100644
index 000000000..e6c5b11d9
--- /dev/null
+++ b/__next._full.txt
@@ -0,0 +1,56 @@
+1:"$Sreact.fragment"
+3:I[17751,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"RootProvider"]
+4:I[39756,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"default"]
+5:I[58298,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/3-_96y-evozm0.js"],"default"]
+6:I[37457,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"default"]
+7:I[22016,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/3nptizve4zde0.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/071bbedt711a2.js"],""]
+e:I[68027,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"default",1]
+:HL["/_next/static/chunks/1_55v0vlfews3.css","style"]
+2:T512,{"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://iggy.apache.org/#organization","name":"The Apache Software Foundation","url":"https://www.apache.org/","logo":"https://iggy.apache.org/img/asf_logo.svg","contactPoint":{"@type":"ContactPoint","contactType":"technical support","email":"dev@iggy.apache.org","url":"https://iggy.apache.org/community/"}},{"@type":"WebSite","@id":"https://iggy.apache.org/#website","name":"Apache Iggy","url":"https://iggy.a [...]
+10:I[79520,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],""]
+11:I[69877,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"Matomo"]
+12:I[5014,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/3nptizve4zde0.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/3x8y3fmtn6lnc.js"],"default"]
+13:I[64345,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/3nptizve4zde0.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/3x8y3fmtn6lnc.js"],"HomeLayout"]
+14:I[5500,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/3nptizve4zde0.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/071bbedt711a2.js"],"Image"]
+15:I[15269,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/3nptizve4zde0.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/3x8y3fmtn6lnc.js"],"CommunityDropdown"]
+16:I[15269,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/3nptizve4zde0.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/3x8y3fmtn6lnc.js"],"communityLinks"]
+17:I[29966,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/3nptizve4zde0.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/3x8y3fmtn6lnc.js"],"ASFDropdown"]
+18:I[36330,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/3nptizve4zde0.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/3x8y3fmtn6lnc.js"],"ASFMobileLinks"]
+19:I[89589,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/3nptizve4zde0.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/3x8y3fmtn6lnc.js"],"ForceDarkTheme"]
+22:I[97367,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"ViewportBoundary"]
+24:I[97367,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"MetadataBoundary"]
+25:"$Sreact.suspense"
+8:["$","p",null,{"className":"mt-6 max-w-md text-xs text-fd-muted-foreground","children":["Every page on this site is listed in"," ",["$","a",null,{"href":"/sitemap.xml","className":"underline hover:text-fd-primary","children":"/sitemap.xml"}],", and"," ",["$","a",null,{"href":"/llms.txt","className":"underline hover:text-fd-primary","children":"/llms.txt"}]," ","summarises the documentation."]}]
+9:["$","$L10",null,{"id":"matomo","strategy":"afterInteractive","children":"var _paq = window._paq = window._paq || [];\n_paq.push([\"setDoNotTrack\", true]);\n_paq.push([\"disableCookies\"]);\n_paq.push(['trackPageView']);\n_paq.push(['enableLinkTracking']);\n(function() {\n  var u=\"https://analytics.apache.org/\";\n  _paq.push(['setTrackerUrl', u+'matomo.php']);\n  _paq.push(['setSiteId', '80']);\n  var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];\n  [...]
+a:["$","$L11",null,{}]
+b:["$","$1","c",{"children":[[["$","script","script-0",{"src":"/_next/static/chunks/3nptizve4zde0.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/_next/static/chunks/241-fa32f9zay.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/_next/static/chunks/250gopd52txql.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/_next/static/chunks/0n3fueko2xquo.js","async":true,"nonce":"$undefined"}],["$","script","script-4",{"src [...]
+c:["$","$1","c",{"children":[[["$","section",null,{"className":"relative overflow-hidden px-6 pt-8 pb-20","style":{"backgroundImage":"url(/img/hero-main.webp), radial-gradient(circle closest-side at 35% 48%, #ff910314, #070c1700 60%), radial-gradient(circle closest-side at 68% 52%, #111d35, #070c1700 63%), radial-gradient(circle farthest-side at 20% 0%, #0e1f42, #070c17 21%)","backgroundPosition":"50% 29%, 0 0, 0 0, 0 0","backgroundRepeat":"no-repeat, repeat, repeat, repeat","backgroundS [...]
+d:["$","$1","h",{"children":[null,["$","$L22",null,{"children":"$L23"}],["$","div",null,{"hidden":true,"children":["$","$L24",null,{"children":["$","$25",null,{"name":"Next.Metadata","children":"$L26"}]}]}],null]}]
+f:["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/1_55v0vlfews3.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]
+27:I[89626,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/3nptizve4zde0.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/071bbedt711a2.js"],"BenchmarkSection"]
+30:I[18870,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/3nptizve4zde0.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/071bbedt711a2.js"],"LandingCodeTabs"]
+35:I[97367,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"OutletBoundary"]
+1a:["$","nav",null,{"aria-label":"Where to go next","className":"mt-6 flex flex-wrap items-center justify-center gap-x-6 gap-y-2 text-sm text-fd-muted-foreground","children":[["$","$L7","/",{"href":"/","className":"transition-colors hover:text-fd-primary","children":"Home"}],["$","$L7","/docs",{"href":"/docs","className":"transition-colors hover:text-fd-primary","children":"Documentation"}],["$","$L7","/blogs",{"href":"/blogs","className":"transition-colors hover:text-fd-primary","childr [...]
+1b:["$","p",null,{"className":"mt-6 max-w-md text-xs text-fd-muted-foreground","children":["Every page on this site is listed in"," ",["$","a",null,{"href":"/sitemap.xml","className":"underline hover:text-fd-primary","children":"/sitemap.xml"}],", and"," ",["$","a",null,{"href":"/llms.txt","className":"underline hover:text-fd-primary","children":"/llms.txt"}]," ","summarises the documentation."]}]
+1c:["$","section",null,{"className":"overflow-hidden px-6 py-20","style":{"backgroundImage":"radial-gradient(circle farthest-side at 50% 10%, #0e1930, #070c17 65%)"},"children":["$","div",null,{"className":"mx-auto max-w-6xl","children":[["$","div",null,{"className":"mx-auto mb-14 max-w-3xl text-center","children":[["$","h2",null,{"className":"mb-5 text-3xl font-bold tracking-tight text-[#fffaeb] sm:text-4xl md:text-5xl","children":["Built for ",["$","span",null,{"className":"text-[#ff91 [...]
+1d:["$","section",null,{"className":"px-6 py-20","style":{"backgroundImage":"radial-gradient(circle farthest-side at 30% 80%, #1a100820, #070c17 50%)"},"children":["$","div",null,{"className":"mx-auto max-w-6xl","children":[["$","div",null,{"className":"mx-auto mb-14 max-w-3xl text-center","children":[["$","h2",null,{"className":"mb-5 text-4xl font-bold tracking-tight text-[#fffaeb] md:text-5xl","children":["How it ",["$","span",null,{"className":"text-[#ff9103]","children":"works"}]]}], [...]
+1e:["$","section",null,{"className":"px-6 py-20","style":{"backgroundImage":"radial-gradient(circle farthest-side at 50% 90%, #1a1008, #070c17 65%)"},"children":["$","div",null,{"className":"mx-auto max-w-6xl","children":[["$","div",null,{"className":"mx-auto mb-14 max-w-3xl text-center","children":[["$","h2",null,{"className":"mb-5 text-4xl font-bold tracking-tight text-[#fffaeb] md:text-5xl","children":["Complete ",["$","span",null,{"className":"text-[#ff9103]","children":"ecosystem"}] [...]
+1f:["$","footer",null,{"className":"border-t border-[#3d4450] px-6 py-14","style":{"backgroundColor":"#070c17"},"children":["$","div",null,{"className":"mx-auto max-w-6xl","children":[["$","div",null,{"className":"grid gap-10 sm:grid-cols-2 lg:grid-cols-4","children":[["$","div",null,{"children":[["$","h4",null,{"className":"mb-4 text-sm font-semibold tracking-wide text-[#ff9103] uppercase","children":"Docs"}],["$","ul",null,{"className":"space-y-2.5 text-sm","children":["$","li",null,{" [...]
+20:["$","script","script-0",{"src":"/_next/static/chunks/071bbedt711a2.js","async":true,"nonce":"$undefined"}]
+21:["$","$L35",null,{"children":["$","$25",null,{"name":"Next.MetadataOutlet","children":"$@36"}]}]
+28:["$","p",null,{"className":"text-sm font-light leading-relaxed text-[#aeb5bd]","children":"Process millions of messages per second with predictable low latency thanks to Rust, combined with io_uring and thread-per-core, shared nothing architecture."}]
+29:["$","div","Zero-Copy Serialization",{"className":"group rounded-2xl border border-white/[0.08] bg-white/[0.02] p-6 transition-all duration-300 hover:border-[#ff9103]/30 hover:bg-[#18213a]/50","children":[["$","h3",null,{"className":"mb-3 text-lg font-semibold text-[#d6d7d7] transition-colors group-hover:text-[#fffaeb]","children":"Zero-Copy Serialization"}],["$","p",null,{"className":"text-sm font-light leading-relaxed text-[#aeb5bd]","children":"Custom zero-copy (de)serialization fo [...]
+2a:["$","div","Multiple Transport Protocols",{"className":"group rounded-2xl border border-white/[0.08] bg-white/[0.02] p-6 transition-all duration-300 hover:border-[#ff9103]/30 hover:bg-[#18213a]/50","children":[["$","h3",null,{"className":"mb-3 text-lg font-semibold text-[#d6d7d7] transition-colors group-hover:text-[#fffaeb]","children":"Multiple Transport Protocols"}],["$","p",null,{"className":"text-sm font-light leading-relaxed text-[#aeb5bd]","children":"Support for QUIC, TCP, WebS [...]
+2b:["$","div","Multi-Language SDKs",{"className":"group rounded-2xl border border-white/[0.08] bg-white/[0.02] p-6 transition-all duration-300 hover:border-[#ff9103]/30 hover:bg-[#18213a]/50","children":[["$","h3",null,{"className":"mb-3 text-lg font-semibold text-[#d6d7d7] transition-colors group-hover:text-[#fffaeb]","children":"Multi-Language SDKs"}],["$","p",null,{"className":"text-sm font-light leading-relaxed text-[#aeb5bd]","children":"Client libraries available for Rust, C#, C++, [...]
+2c:["$","div","Consumer Groups & Partitioning",{"className":"group rounded-2xl border border-white/[0.08] bg-white/[0.02] p-6 transition-all duration-300 hover:border-[#ff9103]/30 hover:bg-[#18213a]/50","children":[["$","h3",null,{"className":"mb-3 text-lg font-semibold text-[#d6d7d7] transition-colors group-hover:text-[#fffaeb]","children":"Consumer Groups & Partitioning"}],["$","p",null,{"className":"text-sm font-light leading-relaxed text-[#aeb5bd]","children":"Built-in support for co [...]
+2d:["$","div","Security & Access Control",{"className":"group rounded-2xl border border-white/[0.08] bg-white/[0.02] p-6 transition-all duration-300 hover:border-[#ff9103]/30 hover:bg-[#18213a]/50","children":[["$","h3",null,{"className":"mb-3 text-lg font-semibold text-[#d6d7d7] transition-colors group-hover:text-[#fffaeb]","children":"Security & Access Control"}],["$","p",null,{"className":"text-sm font-light leading-relaxed text-[#aeb5bd]","children":"TLS on all transports, per-stream [...]
+2e:["$","div","Built-in Monitoring",{"className":"group rounded-2xl border border-white/[0.08] bg-white/[0.02] p-6 transition-all duration-300 hover:border-[#ff9103]/30 hover:bg-[#18213a]/50","children":[["$","h3",null,{"className":"mb-3 text-lg font-semibold text-[#d6d7d7] transition-colors group-hover:text-[#fffaeb]","children":"Built-in Monitoring"}],["$","p",null,{"className":"text-sm font-light leading-relaxed text-[#aeb5bd]","children":"OpenTelemetry logs & traces, Prometheus metri [...]
+2f:["$","div","Multi-Tenant Support",{"className":"group rounded-2xl border border-white/[0.08] bg-white/[0.02] p-6 transition-all duration-300 hover:border-[#ff9103]/30 hover:bg-[#18213a]/50","children":[["$","h3",null,{"className":"mb-3 text-lg font-semibold text-[#d6d7d7] transition-colors group-hover:text-[#fffaeb]","children":"Multi-Tenant Support"}],["$","p",null,{"className":"text-sm font-light leading-relaxed text-[#aeb5bd]","children":"Stream abstraction for multi-tenancy, confi [...]
+31:["$","span","HTTP",{"className":"px-2 py-0.5 rounded-full text-[10px] font-medium text-[#aaafb6] border border-white/[0.08]","children":"HTTP"}]
+32:["$","$L7","Web UI",{"href":"/docs/web_ui/start","className":"group rounded-2xl border border-white/[0.08] bg-white/[0.02] p-6 transition-all duration-300 hover:border-[#ff9103]/30 hover:bg-[#18213a]/50 no-underline","children":[["$","div",null,{"className":"flex items-center gap-3 mb-3","children":[["$","div",null,{"className":"w-3 h-3 rounded-full","style":{"backgroundColor":"#a855f7"}}],["$","h3",null,{"className":"text-xl font-semibold text-[#fffaeb] m-0","children":"Web UI"}]]}], [...]
+33:["$","$L7","CLI",{"href":"/docs/cli/start","className":"group rounded-2xl border border-white/[0.08] bg-white/[0.02] p-6 transition-all duration-300 hover:border-[#ff9103]/30 hover:bg-[#18213a]/50 no-underline","children":[["$","div",null,{"className":"flex items-center gap-3 mb-3","children":[["$","div",null,{"className":"w-3 h-3 rounded-full","style":{"backgroundColor":"#6366f1"}}],["$","h3",null,{"className":"text-xl font-semibold text-[#fffaeb] m-0","children":"CLI"}]]}],["$","p", [...]
+34:["$","p",null,{"className":"mt-4","children":"Apache Iggy, Iggy, Apache, and the Apache Iggy logo are trademarks or registered trademarks of The Apache Software Foundation. All other marks mentioned may be trademarks or registered trademarks of their respective owners."}]
+23:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]
+37:I[27201,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"IconMark"]
+26:[["$","title","0",{"children":"Hyper-Efficient Message Streaming written in Rust | Apache Iggy"}],["$","meta","1",{"name":"description","content":"Apache Iggy is a high-performance, persistent message streaming platform written in Rust, capable of processing millions of messages per second with ultra-low latency."}],["$","link","2",{"rel":"canonical","href":"https://iggy.apache.org/"}],["$","meta","3",{"property":"og:title","content":"Hyper-Efficient Message Streaming written in Rust  [...]
+36:null
diff --git a/__next._index.txt b/__next._index.txt
new file mode 100644
index 000000000..6af524c3a
--- /dev/null
+++ b/__next._index.txt
@@ -0,0 +1,20 @@
+1:"$Sreact.fragment"
+3:I[17751,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"RootProvider"]
+4:I[39756,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"default"]
+5:I[58298,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/3-_96y-evozm0.js"],"default"]
+6:I[37457,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"default"]
+7:I[22016,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/3nptizve4zde0.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/071bbedt711a2.js"],""]
+:HL["/_next/static/chunks/1_55v0vlfews3.css","style"]
+2:T512,{"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://iggy.apache.org/#organization","name":"The Apache Software Foundation","url":"https://www.apache.org/","logo":"https://iggy.apache.org/img/asf_logo.svg","contactPoint":{"@type":"ContactPoint","contactType":"technical support","email":"dev@iggy.apache.org","url":"https://iggy.apache.org/community/"}},{"@type":"WebSite","@id":"https://iggy.apache.org/#website","name":"Apache Iggy","url":"https://iggy.a [...]
+0:{"buildId":"CEAllZE6ERPzzxzpa_n8G","data":[{"rsc":["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/1_55v0vlfews3.css","precedence":"next"}],["$","script","script-0",{"src":"/_next/static/chunks/05hk4ely-lns6.js","async":true}],["$","script","script-1",{"src":"/_next/static/chunks/2tvyahbdutabx.js","async":true}]],["$","html",null,{"lang":"en","suppressHydrationWarning":true,"children":["$","body",null,{"className":"flex min-h-screen flex-col  [...]
+10:I[79520,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],""]
+11:I[69877,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"Matomo"]
+8:["$","a",null,{"href":"/sitemap.xml","className":"underline hover:text-fd-primary","children":"/sitemap.xml"}]
+9:["$","a",null,{"href":"/llms.txt","className":"underline hover:text-fd-primary","children":"/llms.txt"}]
+a:["$","$L10",null,{"id":"matomo","strategy":"afterInteractive","children":"var _paq = window._paq = window._paq || [];\n_paq.push([\"setDoNotTrack\", true]);\n_paq.push([\"disableCookies\"]);\n_paq.push(['trackPageView']);\n_paq.push(['enableLinkTracking']);\n(function() {\n  var u=\"https://analytics.apache.org/\";\n  _paq.push(['setTrackerUrl', u+'matomo.php']);\n  _paq.push(['setSiteId', '80']);\n  var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];\n  [...]
+b:["$","$L11",null,{}]
+d:300
+f:true
+d:C
+e:0
+c:"$undefined"
diff --git a/__next._tree.txt b/__next._tree.txt
new file mode 100644
index 000000000..3868f7c55
--- /dev/null
+++ b/__next._tree.txt
@@ -0,0 +1,2 @@
+:HL["/_next/static/chunks/1_55v0vlfews3.css","style"]
+0:{"tree":{"name":"","param":null,"prefetchHints":4112,"slots":{"children":{"name":"(home)","param":null,"prefetchHints":4096,"slots":{"children":{"name":"__PAGE__","param":null,"prefetchHints":4224,"slots":null}}}}},"staleTime":300,"buildId":"CEAllZE6ERPzzxzpa_n8G"}
diff --git a/_next/static/CEAllZE6ERPzzxzpa_n8G/_buildManifest.js b/_next/static/CEAllZE6ERPzzxzpa_n8G/_buildManifest.js
new file mode 100644
index 000000000..94ca9144a
--- /dev/null
+++ b/_next/static/CEAllZE6ERPzzxzpa_n8G/_buildManifest.js
@@ -0,0 +1,11 @@
+self.__BUILD_MANIFEST = {
+  "__rewrites": {
+    "afterFiles": [],
+    "beforeFiles": [],
+    "fallback": []
+  },
+  "sortedPages": [
+    "/_app",
+    "/_error"
+  ]
+};self.__BUILD_MANIFEST_CB && self.__BUILD_MANIFEST_CB()
\ No newline at end of file
diff --git a/_next/static/CEAllZE6ERPzzxzpa_n8G/_clientMiddlewareManifest.js b/_next/static/CEAllZE6ERPzzxzpa_n8G/_clientMiddlewareManifest.js
new file mode 100644
index 000000000..a8acaffa3
--- /dev/null
+++ b/_next/static/CEAllZE6ERPzzxzpa_n8G/_clientMiddlewareManifest.js
@@ -0,0 +1 @@
+self.__MIDDLEWARE_MATCHERS = [];self.__MIDDLEWARE_MATCHERS_CB && self.__MIDDLEWARE_MATCHERS_CB()
\ No newline at end of file
diff --git a/_next/static/CEAllZE6ERPzzxzpa_n8G/_ssgManifest.js b/_next/static/CEAllZE6ERPzzxzpa_n8G/_ssgManifest.js
new file mode 100644
index 000000000..11b99a78d
--- /dev/null
+++ b/_next/static/CEAllZE6ERPzzxzpa_n8G/_ssgManifest.js
@@ -0,0 +1 @@
+self.__SSG_MANIFEST=new Set(["\u002Fblogs\u002F[...slug]","\u002Fdocs\u002F0.8\u002F[[...slug]]","\u002Fdocs\u002F[[...slug]]","\u002Fllms-full\u002F[section]"]);self.__SSG_MANIFEST_CB&&self.__SSG_MANIFEST_CB()
\ No newline at end of file
diff --git a/_next/static/chunks/05hk4ely-lns6.js b/_next/static/chunks/05hk4ely-lns6.js
new file mode 100644
index 000000000..83b5f2065
--- /dev/null
+++ b/_next/static/chunks/05hk4ely-lns6.js
@@ -0,0 +1 @@
+(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,74774,e=>{e.v(t=>Promise.all(["static/chunks/3zvry4l5_wb57.js","static/chunks/241-fa32f9zay.js","static/chunks/2yzsws2usue-b.js","static/chunks/16qqkei9469ey.js","static/chunks/250gopd52txql.js"].map(t=>e.l(t))).then(()=>t(28838)))},17751,e=>{"use strict";var t=e.i(9864),r=e.i(57061),n=e.i(18050),l=e.i(71645),a=e.i(63178),u=e.i(74080),o=e.i(86318);function i({hotKey:e}){let{set [...]
\ No newline at end of file
diff --git a/_next/static/chunks/071bbedt711a2.js b/_next/static/chunks/071bbedt711a2.js
new file mode 100644
index 000000000..7a0d9afb3
--- /dev/null
+++ b/_next/static/chunks/071bbedt711a2.js
@@ -0,0 +1,209 @@
+(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,89626,e=>{"use strict";var t=e.i(18050),n=e.i(22016),i=e.i(71645);let s={avg:.466,median:.349,p95:.886,p99:.976,p999:1.114},r={avg:.357,median:.351,p95:.446,p99:.495,p999:.566},a=[0,.2,.4,.6,.8,1],o=s.avg,l=r.avg,c=[{label:"Avg",key:"avg"},{label:"Median",key:"median"},{label:"P95",key:"p95"},{label:"P99",key:"p99"},{label:"P99.9",key:"p999"}].map(({label:e,key:t})=>({label:e,p [...]
+        @keyframes iggy-chart-reveal {
+          from { width: 0; }
+          to { width: 800px; }
+        }
+        @keyframes iggy-reference-in {
+          from { opacity: 0; }
+          to { opacity: 1; }
+        }
+        .iggy-chart-clip {
+          width: 0;
+        }
+        .iggy-chart-visible .iggy-chart-clip {
+          animation: iggy-chart-reveal 2.4s cubic-bezier(0.16, 1, 0.3, 1) forwards;
+        }
+        .iggy-chart-reference {
+          opacity: 0;
+        }
+        .iggy-chart-visible .iggy-chart-reference {
+          animation: iggy-reference-in 0.5s ease 2.1s forwards;
+        }
+      `}),(0,t.jsx)("div",{className:"mb-6 grid min-w-0 grid-cols-2 gap-4 md:grid-cols-5",children:d.map(e=>(0,t.jsxs)("div",{className:"min-w-0 rounded-lg border border-white/[0.08] bg-white/[0.035] px-4 py-5 sm:px-5",children:[(0,t.jsxs)("div",{className:"mb-1 flex items-baseline gap-1.5",children:[(0,t.jsx)("span",{className:"text-2xl font-extrabold text-white sm:text-3xl",children:e.value}),(0,t.jsx)("span",{className:"text-xs font-medium text-neutral-300 sm:text-sm",children:e.unit} [...]
+
+let client = IggyClient::from_connection_string(
+    "iggy://iggy:iggy@localhost:8090"
+)?;
+client.connect().await?;
+
+let producer = client
+    .producer("orders", "events")?
+    .direct(
+        DirectConfig::builder()
+            .batch_length(100)
+            .build()
+    )
+    .partitioning(Partitioning::balanced())
+    .build();
+producer.init().await?;
+
+let msg = IggyMessage::from_str("order-123")?;
+producer.send(vec![msg]).await?;`},{lang:"Python",file:"producer.py",href:"/docs/sdk/python/intro",code:`from apache_iggy import IggyClient, SendMessage
+
+client = IggyClient.from_connection_string(
+    "iggy://iggy:iggy@localhost:8090"
+)
+await client.connect()
+
+await client.create_stream(name="orders")
+await client.create_topic(
+    stream="orders",
+    name="events",
+    partitions_count=3,
+    replication_factor=1,
+)
+
+message = SendMessage("order-123")
+await client.send_messages(
+    stream="orders",
+    topic="events",
+    partitioning=1,
+    messages=[message],
+)`},{lang:"Java",file:"Producer.java",href:"/docs/sdk/java/intro",code:`var client = IggyTcpClient.builder()
+    .host("localhost")
+    .port(8090)
+    .credentials("iggy", "iggy")
+    .buildAndLogin();
+
+client.streams().createStream("orders");
+client.topics().createTopic(
+    StreamId.of("orders"), 1L,
+    CompressionAlgorithm.None,
+    BigInteger.ZERO, BigInteger.ZERO,
+    Optional.empty(), "events"
+);
+
+client.messages().sendMessages(
+    StreamId.of("orders"),
+    TopicId.of("events"),
+    Partitioning.partitionId(0L),
+    List.of(Message.of("order-123"))
+);
+
+client.close();`},{lang:"Go",file:"producer.go",href:"/docs/sdk/go/intro",code:`cli, _ := client.NewIggyClient(
+    client.WithTcp(
+        tcp.WithServerAddress(
+            "127.0.0.1:8090"),
+    ),
+)
+cli.LoginUser("iggy", "iggy")
+cli.CreateStream("orders")
+
+streamId, _ := iggcon.NewIdentifier(
+    uint32(1),
+)
+cli.CreateTopic(
+    streamId, "events", 3,
+    iggcon.CompressionAlgorithmNone,
+    iggcon.IggyExpiryNeverExpire,
+    0, nil,
+)
+
+msg, _ := iggcon.NewIggyMessage(
+    []byte("order-123"),
+)
+topicId, _ := iggcon.NewIdentifier(
+    uint32(1),
+)
+cli.SendMessages(
+    streamId, topicId,
+    iggcon.PartitionId(0),
+    []iggcon.IggyMessage{msg},
+)`},{lang:"Node.js",file:"producer.ts",href:"/docs/sdk/node/intro",code:`import { Client, Partitioning } from 'apache-iggy';
+
+const client = new Client({
+  transport: 'TCP',
+  options: { port: 8090, host: '127.0.0.1' },
+  credentials: {
+    username: 'iggy', password: 'iggy'
+  },
+});
+
+const stream = await client.stream.create({
+  name: 'orders'
+});
+const topic = await client.topic.create({
+  streamId: stream.id,
+  name: 'events',
+  partitionCount: 3,
+  compressionAlgorithm: 1,
+  replicationFactor: 1,
+});
+
+await client.message.send({
+  streamId: stream.id,
+  topicId: topic.id,
+  partition: Partitioning.PartitionId(1),
+  messages: [{ payload: 'order-123' }],
+});
+
+await client.destroy();`},{lang:"C#",file:"Producer.cs",href:"/docs/sdk/csharp/intro",code:`var client = IggyClientFactory.CreateClient(
+    new IggyClientConfigurator() {
+        BaseAddress = "127.0.0.1:8090",
+        Protocol = Protocol.Tcp,
+    }
+);
+await client.ConnectAsync();
+await client.LoginUser("iggy", "iggy");
+
+await client.CreateStreamAsync("orders");
+await client.CreateTopicAsync(
+    Identifier.String("orders"),
+    "events", 3,
+    CompressionAlgorithm.None
+);
+
+await client.SendMessagesAsync(
+    Identifier.String("orders"),
+    Identifier.String("events"),
+    Partitioning.PartitionId(1),
+    new[] {
+        new Message(Guid.NewGuid(),
+            Encoding.UTF8.GetBytes(
+                "order-123"))
+    }
+);`},{lang:"PHP",file:"producer.php",href:"https://github.com/apache/iggy/tree/master/foreign/php",code:`<?php
+
+$client = new \\Iggy\\Client(
+    '127.0.0.1:8090'
+);
+$client->connect();
+$client->loginUser('iggy', 'iggy');
+
+$client->createStream('orders');
+$client->createTopic(
+    'orders',
+    'events',
+    3,
+    null,
+    null,
+    null,
+    null
+);
+
+$client->sendMessages(
+    'orders',
+    'events',
+    0,
+    [new \\Iggy\\SendMessage('order-123')]
+);`},{lang:"C++",file:"producer.cpp",href:"/docs/sdk/cpp/intro",code:`#include "lib.rs.h"
+
+auto* client = iggy::ffi::new_connection(
+    "iggy://iggy:iggy@localhost:8090"
+);
+client->connect();
+client->login_user("iggy", "iggy");
+
+client->create_stream("orders");
+
+auto stream_id =
+    make_string_identifier("orders");
+
+client->create_topic(
+    stream_id, "events", 3,
+    "none", 0,
+    "server_default", 0,
+    "server_default"
+);
+
+iggy::ffi::delete_connection(client);`}];e.s(["LandingCodeTabs",0,function(){let[e,s]=(0,n.useState)(0),[r,a]=(0,n.useState)(!1),o=eX[e],l=eY[o.lang];return(0,t.jsxs)("div",{className:"min-w-0 max-w-full",children:[(0,t.jsxs)("div",{className:"min-w-0 max-w-full overflow-hidden rounded-2xl border border-white/[0.08] bg-[#0c1220]",children:[(0,t.jsx)("div",{className:"flex max-w-full items-center overflow-x-auto border-b border-white/[0.06]",children:eX.map((n,i)=>(0,t.jsx)("button",{onCl [...]
\ No newline at end of file
diff --git a/_next/static/chunks/08raq5rgljbqk.js b/_next/static/chunks/08raq5rgljbqk.js
new file mode 100644
index 000000000..8a71dcb05
--- /dev/null
+++ b/_next/static/chunks/08raq5rgljbqk.js
@@ -0,0 +1,3 @@
+(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,30942,e=>{"use strict";var t=Object.defineProperty;e.s(["__exportAll",0,(e,r)=>{let n={};for(var a in e)t(n,a,{get:e[a],enumerable:!0});return r||t(n,Symbol.toStringTag,{value:"Module"}),n}])},14072,57886,e=>{"use strict";var t=e.i(24110),r=e.i(18050),n=e.i(71645),a=e.i(88349),o=e.i(23060);function l(e,t){let r=(0,a.r)(t);return(0,o.r)(e,e=>"page"===e.type&&e.url===r)}e.s(["get [...]
+"sidebar sidebar toc-popover toc toc"
+"sidebar sidebar main toc toc" 1fr / minmax(min-content, 1fr) var(--fd-sidebar-col) minmax(0, calc(var(--fd-layout-width,97rem) - var(--fd-sidebar-width) - var(--fd-toc-width))) var(--fd-toc-width) minmax(min-content, 1fr)`,"--fd-docs-row-1":"var(--fd-banner-height, 0px)","--fd-docs-row-2":"calc(var(--fd-docs-row-1) + var(--fd-header-height))","--fd-docs-row-3":"calc(var(--fd-docs-row-2) + var(--fd-toc-popover-height))","--fd-sidebar-col":n?"0px":"var(--fd-sidebar-width)",...e.style},cla [...]
\ No newline at end of file
diff --git a/_next/static/chunks/0cz1d0mv5g_q7.js b/_next/static/chunks/0cz1d0mv5g_q7.js
new file mode 100644
index 000000000..ab422b94a
--- /dev/null
+++ b/_next/static/chunks/0cz1d0mv5g_q7.js
@@ -0,0 +1 @@
+!function(){var t="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{};function e(t){var e={exports:{}};return t(e,e.exports),e.exports}var r,n,o=function(t){return t&&t.Math===Math&&t},i=o("object"==typeof globalThis&&globalThis)||o("object"==typeof window&&window)||o("object"==typeof self&&self)||o("object"==typeof t&&t)||o("object"==typeof t&&t)||function(){return this}()||Function("return this") [...]
᠎"!=="​…᠎"[t]()||Op&&Mi[t].name!==t})},Rp=_i.start,Pp=xp("trimStart")?function(){return Rp(this)}:"".trimStart;Ce({target:"String",proto:!0,name:"trimStart",forced:"".trimLeft!==Pp},{trimLeft:Pp}),Ce({target:"String",proto:!0,name:"trimStart",forced:"".trimStart!==Pp},{trimStart:Pp}),Ze("String","trimLeft");var Ap=_i.end,jp=xp("trimEnd")?function(){return Ap(this)}:"".trimEnd;Ce({target:"String",proto:!0,name:"trimEnd",forced:"".trimRight!==jp},{trimRight:jp}),Ce({target:"String",proto:!0,name:"t [...]
diff --git a/_next/static/chunks/0n3fueko2xquo.js b/_next/static/chunks/0n3fueko2xquo.js
new file mode 100644
index 000000000..e22aff6e1
--- /dev/null
+++ b/_next/static/chunks/0n3fueko2xquo.js
@@ -0,0 +1 @@
+(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,23060,e=>{"use strict";Symbol("VisitBreak"),e.s(["r",0,function(e,t,n={}){let{includeSeparator:r=!0}=n;return function e(n){let o;for(let i of n){if(t(i)){let e=[];return o&&e.push(o),e.push(i),e}if("separator"===i.type&&r){o=i;continue}if("folder"===i.type){let n=i.index&&t(i.index)?[i.index]:e(i.children);if(n)return n.unshift(i),o&&n.unshift(o),n}}}(e)??null}])},74072,87302, [...]
\ No newline at end of file
diff --git a/_next/static/chunks/0oyn-8imgh6-q.js b/_next/static/chunks/0oyn-8imgh6-q.js
new file mode 100644
index 000000000..da12b399a
--- /dev/null
+++ b/_next/static/chunks/0oyn-8imgh6-q.js
@@ -0,0 +1 @@
+(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,9674,u=>{"use strict";let D,F,C;var E=Object.create,A=Object.defineProperty,e=Object.getOwnPropertyDescriptor,B=Object.getOwnPropertyNames,t=Object.getPrototypeOf,r=Object.prototype.hasOwnProperty,s=(D=(u,D)=>{D.exports=function(u,D){(D=D||{}).listUnicodeChar=!!D.hasOwnProperty("listUnicodeChar")&&D.listUnicodeChar,D.stripListLeaders=!D.hasOwnProperty("stripListLeaders")||D.str [...]
\ No newline at end of file
diff --git a/_next/static/chunks/16qqkei9469ey.js b/_next/static/chunks/16qqkei9469ey.js
new file mode 100644
index 000000000..6c55e706f
--- /dev/null
+++ b/_next/static/chunks/16qqkei9469ey.js
@@ -0,0 +1 @@
+(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,28838,e=>{"use strict";let t;var n,r,a,s,i,o,l,c,u,h,E,p,T,d,m,A,_,f,N,g,I,C,S,D,O,R,L,k,b,P,y,M=e.i(9864);e.i(16374);var B=e.i(28769),F=e.i(13548),U=e.i(24110),H=e.i(18050),x=e.i(67927);let v=(0,e.i(56420).default)("hash",[["line",{x1:"4",x2:"20",y1:"9",y2:"9",key:"4lhtct"}],["line",{x1:"4",x2:"20",y1:"15",y2:"15",key:"vyu0kd"}],["line",{x1:"10",x2:"8",y1:"3",y2:"21",key:"1ggp [...]
\ No newline at end of file
diff --git a/_next/static/chunks/17q0p_lwaje36.js b/_next/static/chunks/17q0p_lwaje36.js
new file mode 100644
index 000000000..8f8ad16ed
--- /dev/null
+++ b/_next/static/chunks/17q0p_lwaje36.js
@@ -0,0 +1 @@
+(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,28298,(e,t,r)=>{"use strict";e.i(47167),Object.defineProperty(r,"__esModule",{value:!0}),Object.defineProperty(r,"useRouterBFCache",{enumerable:!0,get:function(){return l}});let n=e.r(71645);function l(e,t,r){let[l,u]=(0,n.useState)(()=>({tree:e,cacheNode:t,stateKey:r,next:null}));if(l.tree===e)return l;let a={tree:e,cacheNode:t,stateKey:r,next:null},o=1,d=l,s=a;for(;null!==d&& [...]
\ No newline at end of file
diff --git a/_next/static/chunks/1_55v0vlfews3.css b/_next/static/chunks/1_55v0vlfews3.css
new file mode 100644
index 000000000..ccbd96024
--- /dev/null
+++ b/_next/static/chunks/1_55v0vlfews3.css
@@ -0,0 +1 @@
+@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-border-style:solid;--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-scale-x:1;--tw-scale-y:1;--tw-scale-z:1;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-space-y-reverse:0;--tw-divide-x-reverse:0;--tw-divide-y-reverse:0;--tw-gradie [...]
diff --git a/_next/static/chunks/1b4x7zdkhqilh.js b/_next/static/chunks/1b4x7zdkhqilh.js
new file mode 100644
index 000000000..5d5e84757
--- /dev/null
+++ b/_next/static/chunks/1b4x7zdkhqilh.js
@@ -0,0 +1 @@
+(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,98330,e=>{"use strict";e.s(["DocsBody",()=>eN,"DocsDescription",()=>e$,"DocsPage",()=>eC,"DocsTitle",()=>eL,"EditOnGitHub",()=>ek,"PageLastUpdate",()=>eM,"page_exports",()=>ew,"useDocsPage",()=>ey],7038);var t=e.i(30942);e.i(16374);var r=e.i(28769),n=e.i(13548),s=e.i(14804),o=e.i(18050),l=e.i(71645),a=e.i(26907),i=e.i(91909);let c=(0,l.createContext)(null),d=(0,l.createContext) [...]
\ No newline at end of file
diff --git a/_next/static/chunks/1gvwe0velnw6a.js b/_next/static/chunks/1gvwe0velnw6a.js
new file mode 100644
index 000000000..4c4c55eee
--- /dev/null
+++ b/_next/static/chunks/1gvwe0velnw6a.js
@@ -0,0 +1 @@
+(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,27318,t=>{"use strict";function e(t){if("object"!=typeof t||null===t)return!1;let e=Object.getPrototypeOf(t);return null===e||e===Object.prototype||null===Object.getPrototypeOf(e)}t.s(["t",0,function t(r,n=!1){for(let i in r){if(void 0===r[i]&&delete r[i],!n)continue;let l=r[i];if(e(l)){t(l,n);continue}if(Array.isArray(l))for(let r of l)e(r)&&t(r,n)}return r}])},97614,t=>{"use  [...]
\ No newline at end of file
diff --git a/_next/static/chunks/1iye7dwhtxrnu.js b/_next/static/chunks/1iye7dwhtxrnu.js
new file mode 100644
index 000000000..cbfe8b174
--- /dev/null
+++ b/_next/static/chunks/1iye7dwhtxrnu.js
@@ -0,0 +1 @@
+(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,55682,(e,t,r)=>{"use strict";r._=function(e){return e&&e.__esModule?e:{default:e}}},90809,(e,t,r)=>{"use strict";function n(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,r=new WeakMap;return(n=function(e){return e?r:t})(e)}r._=function(e,t){if(!t&&e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var r=n(t);if(r&&r [...]
\ No newline at end of file
diff --git a/_next/static/chunks/1k39uva2a578s.js b/_next/static/chunks/1k39uva2a578s.js
new file mode 100644
index 000000000..43677e0a9
--- /dev/null
+++ b/_next/static/chunks/1k39uva2a578s.js
@@ -0,0 +1 @@
+(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,20504,e=>{e.v(t=>Promise.all(["static/chunks/25tdu_vs69zb1.js"].map(t=>e.l(t))).then(()=>t(48795)))},44324,e=>{"use strict";e.i(16374);var t=e.i(28769),r=e.i(13548),n=e.i(37877),o=e.i(14804),a=e.i(18050),i=e.i(71645),s=e.i(81140),l=e.i(30030),c=e.i(75830),u=e.i(20783),d=e.i(10772),f=e.i(48425),m=e.i(30207),h=e.i(69340),p=e.i(86318),g=e.i(34620),v=Object.defineProperty,b=(e,t)=> [...]
\ No newline at end of file
diff --git a/_next/static/chunks/1l5oo27jquscq.js b/_next/static/chunks/1l5oo27jquscq.js
new file mode 100644
index 000000000..2d40d7ce5
--- /dev/null
+++ b/_next/static/chunks/1l5oo27jquscq.js
@@ -0,0 +1 @@
+(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,75830,e=>{"use strict";var t=e.i(71645),r=e.i(30030),n=e.i(20783),i=e.i(91918),o=e.i(18050),s=Object.defineProperty,l=(e,t)=>s(e,"name",{value:t,configurable:!0});function a(e){let s=e+"CollectionProvider",[a,u]=(0,r.createContextScope)(s),[c,f]=a(s,{collectionRef:{current:null},itemMap:new Map}),d=l(e=>{let{scope:r,children:n}=e,i=t.useRef(null),s=t.useRef(new Map).current;ret [...]
\ No newline at end of file
diff --git a/_next/static/chunks/1qt6pht_u0de1.js b/_next/static/chunks/1qt6pht_u0de1.js
new file mode 100644
index 000000000..d69cd6bb8
--- /dev/null
+++ b/_next/static/chunks/1qt6pht_u0de1.js
@@ -0,0 +1,31 @@
+(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,18576,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0});var o={WarningIcon:function(){return s},errorStyles:function(){return l},errorThemeCss:function(){return a}};for(var n in o)Object.defineProperty(r,n,{enumerable:!0,get:o[n]});e.r(55682);let i=e.r(18050);e.r(71645);let l={container:{fontFamily:'system-ui,"Segoe UI",Roboto,Helvetica,Arial,sans-serif,"A [...]
+:root {
+  --next-error-bg: #fff;
+  --next-error-text: #171717;
+  --next-error-title: #171717;
+  --next-error-message: #171717;
+  --next-error-digest: #666666;
+  --next-error-btn-text: #fff;
+  --next-error-btn-bg: #171717;
+  --next-error-btn-border: none;
+  --next-error-btn-secondary-text: #171717;
+  --next-error-btn-secondary-bg: transparent;
+  --next-error-btn-secondary-border: 1px solid rgba(0,0,0,0.08);
+}
+@media (prefers-color-scheme: dark) {
+  :root {
+    --next-error-bg: #0a0a0a;
+    --next-error-text: #ededed;
+    --next-error-title: #ededed;
+    --next-error-message: #ededed;
+    --next-error-digest: #a0a0a0;
+    --next-error-btn-text: #0a0a0a;
+    --next-error-btn-bg: #ededed;
+    --next-error-btn-border: none;
+    --next-error-btn-secondary-text: #ededed;
+    --next-error-btn-secondary-bg: transparent;
+    --next-error-btn-secondary-border: 1px solid rgba(255,255,255,0.14);
+  }
+}
+body { margin: 0; color: var(--next-error-text); background: var(--next-error-bg); }
+`.replace(/\n\s*/g,"");function s(){return(0,i.jsx)("svg",{width:"32",height:"32",viewBox:"-0.2 -1.5 32 32",fill:"none",style:l.icon,children:(0,i.jsx)("path",{d:"M16.9328 0C18.0839 0.000116771 19.1334 0.658832 19.634 1.69531L31.4299 26.1309C32.0708 27.4588 31.1036 28.9999 29.6291 29H2.00215C0.527541 29 -0.439628 27.4588 0.201371 26.1309L11.9973 1.69531C12.4979 0.658823 13.5474 7.75066e-05 14.6984 0H16.9328ZM3.59493 26H28.0363L16.9328 3H14.6984L3.59493 26ZM15.8156 19C16.9202 19.0001 17.8 [...]
\ No newline at end of file
diff --git a/_next/static/chunks/1t7fq8t6712vg.js b/_next/static/chunks/1t7fq8t6712vg.js
new file mode 100644
index 000000000..87693be39
--- /dev/null
+++ b/_next/static/chunks/1t7fq8t6712vg.js
@@ -0,0 +1 @@
+(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,66849,(e,t,n)=>{"trimStart"in String.prototype||(String.prototype.trimStart=String.prototype.trimLeft),"trimEnd"in String.prototype||(String.prototype.trimEnd=String.prototype.trimRight),"description"in Symbol.prototype||Object.defineProperty(Symbol.prototype,"description",{configurable:!0,get:function(){var e=/\((.*)\)/.exec(this.toString());return e?e[1]:void 0}}),Array.proto [...]
\ No newline at end of file
diff --git a/_next/static/chunks/1z2lpfq1lbp7g.js b/_next/static/chunks/1z2lpfq1lbp7g.js
new file mode 100644
index 000000000..055a71d76
--- /dev/null
+++ b/_next/static/chunks/1z2lpfq1lbp7g.js
@@ -0,0 +1,10 @@
+(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,39142,e=>{"use strict";let t,r;var n=e.i(88349),o=e.i(57587),i=e.i(27318);let s="fulltext",l="__vector",a={arabic:"ar",armenian:"hy",bulgarian:"bg",czech:"cs",danish:"da",dutch:"nl",english:"en",finnish:"fi",french:"fr",german:"de",greek:"el",hungarian:"hu",indian:"hi",indonesian:"id",irish:"ga",italian:"it",lithuanian:"lt",nepali:"ne",norwegian:"no",portuguese:"pt",romanian:"r [...]
+Supported languages are:
+ - ${U}`,INVALID_STEMMER_FUNCTION_TYPE:"config.stemmer property must be a function.",MISSING_STEMMER:'As of version 1.0.0 zbsearch does not ship non English stemmers by default. To solve this, please explicitly import and specify the "%s" stemmer from the package @zbsearch/stemmers. See https://docs.zbsearch.com/docs/zbsearch-js/text-analysis/stemming for more information.',CUSTOM_STOP_WORDS_MUST_BE_FUNCTION_OR_ARRAY:"Custom stop words array must only contain strings.",UNSUPPORTED_COMPON [...]
+Input vectors must be of the size declared in the schema, as calculating similarity between vectors of different sizes can lead to unexpected results.`,WRONG_SEARCH_PROPERTY_TYPE:'Property "%s" is not searchable. Only "string" properties are searchable.',FACET_NOT_SUPPORTED:'Facet doens\'t support the type "%s".',INVALID_DISTANCE_SUFFIX:'Invalid distance suffix "%s". Valid suffixes are: cm, m, km, mi, yd, ft.',INVALID_SEARCH_MODE:'Invalid search mode "%s". Valid modes are: "fulltext", "v [...]
+Please install it before proceeding with creating an answer session.
+Read more at https://docs.zbsearch.com/docs/zbsearch-js/plugins/plugin-secure-proxy#plugin-secure-proxy
+`,PLUGIN_SECURE_PROXY_MISSING_CHAT_MODEL:`Could not find a chat model defined in the secure proxy plugin configuration.
+Please provide a chat model before proceeding with creating an answer session.
+Read more at https://docs.zbsearch.com/docs/zbsearch-js/plugins/plugin-secure-proxy#plugin-secure-proxy
+`,ANSWER_SESSION_LAST_MESSAGE_IS_NOT_ASSISTANT:"The last message in the session is not an assistant message. Cannot regenerate non-assistant messages.",PLUGIN_COMPONENT_CONFLICT:'The component "%s" is already defined. The plugin "%s" is trying to redefine it.',IVF_INDEX_REQUIRES_FACTORY:'Vector index "%s" was serialized as IVF. Import ivf from "zbsearch/trees/vector-ivf" and pass indexes.%s at create().',RESERVED_SCHEMA_PROPERTY:'"%s" is a reserved property name and cannot be used in the [...]
\ No newline at end of file
diff --git a/_next/static/chunks/23ktdyx90z0v3.js b/_next/static/chunks/23ktdyx90z0v3.js
new file mode 100644
index 000000000..33c255d4d
--- /dev/null
+++ b/_next/static/chunks/23ktdyx90z0v3.js
@@ -0,0 +1,18 @@
+(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,92336,e=>{"use strict";var s=e.i(18050),r=e.i(71645),t=e.i(88760);e.s(["AppendOnlyLogViz",0,function(){let[e,t]=(0,r.useState)([0,1,2,3,4,5]),[a,d]=(0,r.useState)(2);return(0,r.useEffect)(()=>{let e=setInterval(()=>{t(e=>{let s=e[e.length-1]+1,r=[...e,s];return r.length>12?r.slice(1):r})},2500);return()=>clearInterval(e)},[]),(0,s.jsxs)("div",{className:"my-8 rounded-xl border  [...]
+                  relative flex-shrink-0 w-14 h-16 rounded-md border flex flex-col items-center justify-center transition-all duration-500
+                  ${o?"border-fd-primary/60 bg-fd-primary/15 shadow-lg shadow-fd-primary/20 animate-pulse":l?"border-emerald-500/60 bg-emerald-500/10":r<a?"border-fd-border/50 bg-fd-muted/20 opacity-50":"border-fd-border bg-fd-muted/30"}
+                `,children:[(0,s.jsx)("span",{className:"text-[10px] font-mono text-fd-muted-foreground",children:"msg"}),(0,s.jsx)("span",{className:"text-sm font-mono font-bold text-fd-foreground",children:r})]},r)}),(0,s.jsxs)("div",{className:"flex-shrink-0 w-14 h-16 rounded-md border-2 border-dashed border-fd-primary/40 flex flex-col items-center justify-center",children:[(0,s.jsxs)("span",{className:"relative flex h-3 w-3",children:[(0,s.jsx)("span",{className:"animate-ping absolut [...]
+              relative flex items-center gap-4 rounded-lg px-4 py-3 transition-all duration-500 cursor-pointer
+              ${a<=e?"bg-fd-primary/10 border border-fd-primary/30":"bg-fd-muted/30 border border-transparent"}
+              ${a===e?"ring-2 ring-fd-primary/50 shadow-lg shadow-fd-primary/10":""}
+            `,children:[(0,s.jsxs)("div",{className:`
+              relative flex items-center justify-center w-9 h-9 rounded-lg shrink-0 transition-all duration-500
+              ${a<=e?"bg-fd-primary text-fd-primary-foreground":"bg-fd-muted text-fd-muted-foreground"}
+            `,children:[(0,s.jsx)("svg",{width:"18",height:"18",viewBox:"0 0 24 24",fill:"currentColor",children:(0,s.jsx)("path",{d:r.icon})}),a===e&&(0,s.jsx)("span",{className:"absolute -top-1.5 -right-1.5 w-3 h-3 rounded-full bg-fd-primary animate-ping"})]}),(0,s.jsxs)("div",{className:"flex-1 min-w-0",children:[(0,s.jsx)("div",{className:"flex items-center gap-2",children:(0,s.jsxs)("span",{className:`text-sm font-mono font-bold transition-colors duration-500 ${a<=e?"text-fd-foregro [...]
+              w-full text-left rounded-lg border p-4 transition-all duration-300
+              ${"active"===r.status?"border-fd-primary/50 bg-fd-primary/5":"border-fd-border bg-fd-muted/20 hover:border-fd-muted-foreground/30"}
+              ${e===a?"shadow-lg":""}
+            `,children:[(0,s.jsxs)("div",{className:"flex items-center justify-between",children:[(0,s.jsxs)("div",{className:"flex items-center gap-3",children:[(0,s.jsx)("div",{className:"w-32 h-3 rounded-full bg-fd-muted/50 overflow-hidden",children:(0,s.jsx)("div",{className:`h-full rounded-full ${"active"===r.status?"bg-fd-primary segment-fill-active":"bg-fd-muted-foreground/40"}`,style:{width:"active"===r.status?"40%":"100%"}})}),(0,s.jsxs)("div",{children:[(0,s.jsx)("span",{classN [...]
+              relative rounded-xl border-2 p-4 text-left transition-all duration-300
+              ${e===r.id?"border-fd-primary bg-fd-primary/5 shadow-lg shadow-fd-primary/10":"border-fd-border bg-fd-card hover:border-fd-muted-foreground/30"}
+            `,children:[(0,s.jsxs)("div",{className:"flex items-center gap-2 mb-3",children:[(0,s.jsx)("div",{className:"w-3 h-3 rounded-full shard-pulse",style:{backgroundColor:r.color}}),(0,s.jsx)("span",{className:"text-xs font-mono font-bold text-fd-foreground",children:r.label})]}),(0,s.jsxs)("div",{className:"rounded-md bg-fd-muted/50 p-2 mb-2",children:[(0,s.jsx)("span",{className:"text-[10px] font-mono text-fd-muted-foreground block mb-1",children:"compio runtime"}),(0,s.jsxs)("d [...]
\ No newline at end of file
diff --git a/_next/static/chunks/241-fa32f9zay.js b/_next/static/chunks/241-fa32f9zay.js
new file mode 100644
index 000000000..5aaeaf22b
--- /dev/null
+++ b/_next/static/chunks/241-fa32f9zay.js
@@ -0,0 +1 @@
+(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,26330,e=>{"use strict";var t,n=e.i(71645),r=e.i(81140),o=e.i(48425),a=e.i(20783),i=e.i(30207),u=e.i(18050),c=Object.defineProperty,s=(e,t)=>c(e,"name",{value:t,configurable:!0}),l="dismissableLayer.update",d=n.createContext({layers:new Set,layersWithOutsidePointerEventsDisabled:new Set,branches:new Set,dismissableSurfaces:new Set}),f=n.forwardRef(s(function(e,c){let{disableOuts [...]
\ No newline at end of file
diff --git a/_next/static/chunks/250gopd52txql.js b/_next/static/chunks/250gopd52txql.js
new file mode 100644
index 000000000..090957a64
--- /dev/null
+++ b/_next/static/chunks/250gopd52txql.js
@@ -0,0 +1 @@
+(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,81140,e=>{"use strict";var t=Object.defineProperty,r=(e,r)=>t(e,"name",{value:r,configurable:!0}),o=!!("u">typeof window&&window.document&&window.document.createElement);function n(e,t,{checkForDefaultPrevented:o=!0}={}){return r(function(r){if(e?.(r),!1===o||!r||!r.defaultPrevented)return t?.(r)},"handleEvent")}function l(e){if(!o)throw Error("Cannot access document outside of [...]
\ No newline at end of file
diff --git a/_next/static/chunks/25tdu_vs69zb1.js b/_next/static/chunks/25tdu_vs69zb1.js
new file mode 100644
index 000000000..d177ff8bd
--- /dev/null
+++ b/_next/static/chunks/25tdu_vs69zb1.js
@@ -0,0 +1,79 @@
+(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,67034,(n,t,e)=>{var i={872:function(n,t){"use strict";t.byteLength=function(n){var t=u(n),e=t[0],i=t[1];return(e+i)*3/4-i},t.toByteArray=function(n){var t,e,a=u(n),c=a[0],o=a[1],s=new r((c+o)*3/4-o),h=0,f=o>0?c-4:c;for(e=0;e<f;e+=4)t=i[n.charCodeAt(e)]<<18|i[n.charCodeAt(e+1)]<<12|i[n.charCodeAt(e+2)]<<6|i[n.charCodeAt(e+3)],s[h++]=t>>16&255,s[h++]=t>>8&255,s[h++]=255&t;return  [...]
+    /* Derived from --bg and --fg (overridable via --line, --accent, etc.) */
+    --_text:          var(--fg);
+    --_text-sec:      var(--muted, color-mix(in srgb, var(--fg) 60%, var(--bg)));
+    --_text-muted:    var(--muted, color-mix(in srgb, var(--fg) 40%, var(--bg)));
+    --_text-faint:    color-mix(in srgb, var(--fg) 25%, var(--bg));
+    --_line:          var(--line, color-mix(in srgb, var(--fg) 50%, var(--bg)));
+    --_arrow:         var(--accent, color-mix(in srgb, var(--fg) 85%, var(--bg)));
+    --_node-fill:     var(--surface, color-mix(in srgb, var(--fg) 3%, var(--bg)));
+    --_node-stroke:   var(--border, color-mix(in srgb, var(--fg) 20%, var(--bg)));
+    --_group-fill:    var(--bg);
+    --_group-hdr:     color-mix(in srgb, var(--fg) 5%, var(--bg));
+    --_inner-stroke:  color-mix(in srgb, var(--fg) 12%, var(--bg));
+    --_key-badge:     color-mix(in srgb, var(--fg) 10%, var(--bg));`;return["<style>",`  ${e.join("\n  ")}`,`  text { font-family: '${n}', system-ui, sans-serif; }`,...t?["  .mono { font-family: 'JetBrains Mono', 'SF Mono', 'Fira Code', ui-monospace, monospace; }"]:[],`  svg {${i}`,"  }","</style>"].join("\n")}function $(n,t,e,i){let r=[`--bg:${e.bg}`,`--fg:${e.fg}`,e.line?`--line:${e.line}`:"",e.accent?`--accent:${e.accent}`:"",e.muted?`--muted:${e.muted}`:"",e.surface?`--surface:${e.su [...]
+    <polygon points="0 0, 8 ${2.5}, 0 5" fill="var(--_arrow)" />
+  </marker>
+  <marker id="seq-arrow-open" markerWidth="8" markerHeight="5" refX="8" refY="${2.5}" orient="auto-start-reverse">
+    <polyline points="0 0, 8 ${2.5}, 0 5" fill="none" stroke="var(--_arrow)" stroke-width="1" />
+  </marker>`),c.push("</defs>"),n.blocks))c.push(function(n){let t=[],e=n.label?` data-label="${nE(n.label)}"`:"";t.push(`<g class="block" data-type="${nE(n.type)}"${e}>`),t.push(`  <rect x="${n.x}" y="${n.y}" width="${n.width}" height="${n.height}" rx="0" ry="0" fill="none" stroke="var(--_node-stroke)" stroke-width="1" />`);let i=`${n.type}${n.label?` [${n.label}]`:""}`,r=S(i.split("\n")[0],11,600)+16;for(let e of(t.push(`  <rect x="${n.x}" y="${n.y}" width="${r}" height="18" fill="var( [...]
+  <polygon points="${o}" fill="var(--bg)" stroke="var(--_node-stroke)" stroke-width="0.75" />
+  <polygon points="${t+i-6},${e} ${t+i},${e+6} ${t+i-6},${e+6}" fill="var(--_inner-stroke)" stroke="var(--_node-stroke)" stroke-width="0.75" />
+  ${D(n.text,t+i/2,e+r/2,11,'font-size="11" text-anchor="middle" font-weight="400" fill="var(--_text-muted)"')}
+</g>`}(t));for(let t of n.actors)c.push(function(n){let{id:t,x:e,y:i,width:r,height:a,label:c,type:o}=n,u=[];if(u.push(`<g class="actor" data-id="${nE(t)}" data-label="${nE(c)}" data-type="${o}">`),"actor"===o){let n=a/24*.9,t=e-12*n,r=1/n,o="var(--_line)";u.push(`  <g transform="translate(${t},${i+(a-24*n)/2}) scale(${n})">
+    <path d="M21 12C21 16.9706 16.9706 21 12 21C7.02944 21 3 16.9706 3 12C3 7.02944 7.02944 3 12 3C16.9706 3 21 7.02944 21 12Z" fill="none" stroke="${o}" stroke-width="${r}" />
+    <path d="M15 10C15 11.6569 13.6569 13 12 13C10.3431 13 9 11.6569 9 10C9 8.34315 10.3431 7 12 7C13.6569 7 15 8.34315 15 10Z" fill="none" stroke="${o}" stroke-width="${r}" />
+    <path d="M5.62842 18.3563C7.08963 17.0398 9.39997 16 12 16C14.6 16 16.9104 17.0398 18.3716 18.3563" fill="none" stroke="${o}" stroke-width="${r}" />
+  </g>`),u.push("  "+D(c,e,i+a+14,13,'font-size="13" text-anchor="middle" font-weight="500" fill="var(--_text)"'))}else{let n=e-r/2;u.push(`  <rect x="${n}" y="${i}" width="${r}" height="${a}" rx="4" ry="4" fill="var(--_node-fill)" stroke="var(--_node-stroke)" stroke-width="1" />`),u.push("  "+D(c,e,i+a/2,13,'font-size="13" text-anchor="middle" font-weight="500" fill="var(--_text)"'))}return u.push("</g>"),u.join("\n")}(t));return c.push("</svg>"),c.join("\n")}(function(n,t={}){if(0===n. [...]
+    <polygon points="0 0, 12 5, 0 10" fill="var(--bg)" stroke="var(--_arrow)" stroke-width="1.5" />
+  </marker>
+  <marker id="cls-composition" markerWidth="12" markerHeight="10" refX="0" refY="5" orient="auto-start-reverse">
+    <polygon points="6 0, 12 5, 6 10, 0 5" fill="var(--_arrow)" stroke="var(--_arrow)" stroke-width="1" />
+  </marker>
+  <marker id="cls-aggregation" markerWidth="12" markerHeight="10" refX="0" refY="5" orient="auto-start-reverse">
+    <polygon points="6 0, 12 5, 6 10, 0 5" fill="var(--bg)" stroke="var(--_arrow)" stroke-width="1.5" />
+  </marker>
+  <marker id="cls-arrow" markerWidth="8" markerHeight="6" refX="8" refY="3" orient="auto-start-reverse">
+    <polyline points="0 0, 8 3, 0 6" fill="none" stroke="var(--_arrow)" stroke-width="1.5" />
+  </marker>`),r.push("</defs>"),n.relationships))r.push(function(n){if(n.points.length<2)return"";let t=n.points.map(n=>`${n.x},${n.y}`).join(" "),e="dependency"===n.type||"realization"===n.type,i=function(n,t){let e=function(n){switch(n){case"inheritance":case"realization":return"cls-inherit";case"composition":return"cls-composition";case"aggregation":return"cls-aggregation";case"association":case"dependency":return"cls-arrow";default:return null}}(n);return e?"from"===t?` marker-start= [...]
+${D(n.label,t.x,t.y,11,'text-anchor="middle" font-size="11" font-weight="400" fill="var(--_text-muted)"')}`}(t));return r.push("</svg>"),r.join("\n")}(function(n,t={}){if(0===n.entities.length)return{width:0,height:0,entities:[],relationships:[]};let{elkGraph:e,entitySizes:i}=function(n){let t=new Map;for(let e of n.entities){let n=S(e.label,13,500),i=0;for(let n of e.attributes){let t=nr(`${n.type}  ${n.name}${n.keys.length>0?"  "+n.keys.join(","):""}`,11);t>i&&(i=t)}let r=Math.max(140, [...]
+  .xychart-tip { opacity: 0; pointer-events: none; }
+  .xychart-tip-bg { fill: var(--_text); filter: drop-shadow(0 1px 3px color-mix(in srgb, var(--fg) 20%, transparent)); }
+  .xychart-tip-text { fill: var(--bg); font-size: 15px; font-weight: 500; }
+  .xychart-tip-ptr { fill: var(--_text); }
+  .xychart-bar-group:hover .xychart-tip,
+  .xychart-dot-group:hover .xychart-tip { opacity: 1; }`:"",s=c.length>0?`
+  svg {
+${c.join("\n")}
+  }`:"";return{style:`<style>
+  .xychart-grid { fill: var(--_inner-stroke); stroke: none; opacity: 0.65; }
+  .xychart-bar { stroke-width: 1.5; }
+  .xychart-line { fill: none; stroke-width: 2.5; stroke-linecap: round; stroke-linejoin: round; }
+  .xychart-line-shadow { fill: none; stroke-width: 5; stroke-linecap: round; stroke-linejoin: round; opacity: 0.12; }
+  .xychart-dot { stroke: var(--bg); stroke-width: 2; }
+  .xychart-label { fill: var(--_text-muted); }
+  .xychart-axis-title { fill: var(--_text-sec); }
+  .xychart-title { fill: var(--_text); }${s}
+${o.join("\n")}${u}
+</style>`,defs:""}}(n,r,t.accent,t.bg);a.push(h),f&&a.push(f);let{plotArea:l}=n,b=n.xAxis.ticks.map(n=>n.x),w=n.horizontal?n.yAxis.ticks.map(n=>n.y):n.gridLines.map(n=>n.y1),d=b.length>1?Math.abs(b[1]-b[0]):l.width/6,g=w.length>1?Math.abs(w[1]-w[0]):l.height/6,p=d/Math.max(1,Math.round(d/20)),m=g/Math.max(1,Math.round(g/20)),v=b[0]??l.x,y=w[0]??l.y,k=v-Math.ceil((v-l.x)/p)*p,E=y-Math.ceil((y-l.y)/m)*m;for(let n=E;n<=l.y+l.height+.5;n+=m)for(let t=k;t<=l.x+l.width+.5;t+=p)a.push(`<circle  [...]
+    <polygon points="0 0, 8 ${2.5}, 0 5" ${r} />
+  </marker>
+  <marker id="arrowhead-start" markerWidth="8" markerHeight="5" refX="1" refY="${2.5}" orient="auto-start-reverse">
+    <polygon points="8 0, 0 ${2.5}, 8 5" ${r} />
+  </marker>`));let c=new Set;for(let t of n.edges)t.inlineStyle?.stroke&&c.add(t.inlineStyle.stroke);for(let n of c)a.push(function(n){let t=nk(n),e=`fill="${t}" stroke="${t}" stroke-width="0.75" stroke-linejoin="round"`,i=nv(n);return`  <marker id="arrowhead-${i}" markerWidth="8" markerHeight="5" refX="${7}" refY="${2.5}" orient="auto">
+    <polygon points="0 0, 8 ${2.5}, 0 5" ${e} />
+  </marker>
+  <marker id="arrowhead-start-${i}" markerWidth="8" markerHeight="5" refX="1" refY="${2.5}" orient="auto-start-reverse">
+    <polygon points="8 0, 0 ${2.5}, 8 5" ${e} />
+  </marker>`}(n));for(let t of(a.push("</defs>"),n.groups))a.push(function n(t,e){let i=28,r=[];for(let a of(r.push(`<g class="subgraph" data-id="${nk(t.id)}" data-label="${nk(t.label)}">`),r.push(`  <rect x="${t.x}" y="${t.y}" width="${t.width}" height="${t.height}" rx="0" ry="0" fill="var(--_group-fill)" stroke="var(--_node-stroke)" stroke-width="1" />`),r.push(`  <rect x="${t.x}" y="${t.y}" width="${t.width}" height="${i}" rx="0" ry="0" fill="var(--_group-hdr)" stroke="var(--_node-str [...]
+${s}`);return`<g class="edge-label" data-from="${nk(n.source)}" data-to="${nk(n.target)}" data-label="${nk(f)}">
+  ${b.replace(/\n/g,"\n  ")}
+</g>`}(t));for(let t of n.nodes)a.push(function(n,t){let e=function(n){var t,e,i,r,a,c,o,u,s,h,f,l,b,w,d,g,p,m,v,y,k;let{x:E,y:M,width:$,height:T,shape:j,inlineStyle:x}=n,A=nk(x?.fill??"var(--_node-fill)"),I=nk(x?.stroke??"var(--_node-stroke)"),S=nk(x?.["stroke-width"]??String(.75));switch(j){case"diamond":return function(n,t,e,i,r,a,c){let o=n+e/2,u=t+i/2,s=e/2,h=i/2,f=`${o},${u-h} ${o+s},${u} ${o},${u+h} ${o-s},${u}`;return`<polygon points="${f}" fill="${r}" stroke="${a}" stroke-width= [...]
+<line x1="${u+8}" y1="${s}" x2="${u+8}" y2="${s+f}" stroke="${b}" stroke-width="${w}" />
+<line x1="${u+h-8}" y1="${s}" x2="${u+h-8}" y2="${s+f}" stroke="${b}" stroke-width="${w}" />`;case"doublecircle":return function(n,t,e,i,r,a,c){let o=n+e/2,u=t+i/2,s=Math.min(e,i)/2;return`<circle cx="${o}" cy="${u}" r="${s}" fill="${r}" stroke="${a}" stroke-width="${c}" />
+<circle cx="${o}" cy="${u}" r="${s-5}" fill="${r}" stroke="${a}" stroke-width="${c}" />`}(E,M,$,T,A,I,S);case"hexagon":return function(n,t,e,i,r,a,c){let o=i/4,u=`${n+o},${t} ${n+e-o},${t} ${n+e},${t+i/2} ${n+e-o},${t+i} ${n+o},${t+i} ${n},${t+i/2}`;return`<polygon points="${u}" fill="${r}" stroke="${a}" stroke-width="${c}" />`}(E,M,$,T,A,I,S);case"cylinder":return function(n,t,e,i,r,a,c){let o=n+e/2,u=t+7,s=i-14;return`<rect x="${n}" y="${u}" width="${e}" height="${s}" fill="${r}" strok [...]
+<line x1="${n}" y1="${u}" x2="${n}" y2="${u+s}" stroke="${a}" stroke-width="${c}" />
+<line x1="${n+e}" y1="${u}" x2="${n+e}" y2="${u+s}" stroke="${a}" stroke-width="${c}" />
+<ellipse cx="${o}" cy="${t+i-7}" rx="${e/2}" ry="7" fill="${r}" stroke="${a}" stroke-width="${c}" />
+<ellipse cx="${o}" cy="${u}" rx="${e/2}" ry="7" fill="${r}" stroke="${a}" stroke-width="${c}" />`}(E,M,$,T,A,I,S);case"asymmetric":return function(n,t,e,i,r,a,c){let o=`${n+12},${t} ${n+e},${t} ${n+e},${t+i} ${n+12},${t+i} ${n},${t+i/2}`;return`<polygon points="${o}" fill="${r}" stroke="${a}" stroke-width="${c}" />`}(E,M,$,T,A,I,S);case"trapezoid":return function(n,t,e,i,r,a,c){let o=.15*e,u=`${n+o},${t} ${n+e-o},${t} ${n+e},${t+i} ${n},${t+i}`;return`<polygon points="${u}" fill="${r}" s [...]
+<circle cx="${r}" cy="${a}" r="${c-4}" fill="var(--_text)" stroke="none" />`}(E,M,$,T);default:return d=E,g=M,p=$,m=T,v=A,y=I,k=S,`<rect x="${d}" y="${g}" width="${p}" height="${m}" rx="0" ry="0" fill="${v}" stroke="${y}" stroke-width="${k}" />`}}(n),i=function(n){if(("state-start"===n.shape||"state-end"===n.shape)&&!n.label)return"";let t=n.x+n.width/2,e=n.y+n.height/2,i=nk(n.inlineStyle?.color??"var(--_text)");return D(n.label,t,e,13,`text-anchor="middle" font-size="13" font-weight="50 [...]
\ No newline at end of file
diff --git a/_next/static/chunks/2acxnoy-pyob4.js b/_next/static/chunks/2acxnoy-pyob4.js
new file mode 100644
index 000000000..a34a62efb
--- /dev/null
+++ b/_next/static/chunks/2acxnoy-pyob4.js
@@ -0,0 +1,18 @@
+(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,83901,e=>{"use strict";var s=e.i(18050),r=e.i(71645),t=e.i(88760);e.s(["AppendOnlyLogViz",0,function(){let[e,t]=(0,r.useState)([0,1,2,3,4,5]),[d,a]=(0,r.useState)(2);return(0,r.useEffect)(()=>{let e=setInterval(()=>{t(e=>{let s=e[e.length-1]+1,r=[...e,s];return r.length>12?r.slice(1):r})},2500);return()=>clearInterval(e)},[]),(0,s.jsxs)("div",{className:"my-8 rounded-xl border  [...]
+                  relative flex-shrink-0 w-14 h-16 rounded-md border flex flex-col items-center justify-center transition-all duration-500
+                  ${o?"border-fd-primary/60 bg-fd-primary/15 shadow-lg shadow-fd-primary/20 animate-pulse":l?"border-emerald-500/60 bg-emerald-500/10":r<d?"border-fd-border/50 bg-fd-muted/20 opacity-50":"border-fd-border bg-fd-muted/30"}
+                `,children:[(0,s.jsx)("span",{className:"text-[10px] font-mono text-fd-muted-foreground",children:"msg"}),(0,s.jsx)("span",{className:"text-sm font-mono font-bold text-fd-foreground",children:r})]},r)}),(0,s.jsxs)("div",{className:"flex-shrink-0 w-14 h-16 rounded-md border-2 border-dashed border-fd-primary/40 flex flex-col items-center justify-center",children:[(0,s.jsxs)("span",{className:"relative flex h-3 w-3",children:[(0,s.jsx)("span",{className:"animate-ping absolut [...]
+              relative flex items-center gap-4 rounded-lg px-4 py-3 transition-all duration-500 cursor-pointer
+              ${d<=e?"bg-fd-primary/10 border border-fd-primary/30":"bg-fd-muted/30 border border-transparent"}
+              ${d===e?"ring-2 ring-fd-primary/50 shadow-lg shadow-fd-primary/10":""}
+            `,children:[(0,s.jsxs)("div",{className:`
+              relative flex items-center justify-center w-9 h-9 rounded-lg shrink-0 transition-all duration-500
+              ${d<=e?"bg-fd-primary text-fd-primary-foreground":"bg-fd-muted text-fd-muted-foreground"}
+            `,children:[(0,s.jsx)("svg",{width:"18",height:"18",viewBox:"0 0 24 24",fill:"currentColor",children:(0,s.jsx)("path",{d:r.icon})}),d===e&&(0,s.jsx)("span",{className:"absolute -top-1.5 -right-1.5 w-3 h-3 rounded-full bg-fd-primary animate-ping"})]}),(0,s.jsxs)("div",{className:"flex-1 min-w-0",children:[(0,s.jsx)("div",{className:"flex items-center gap-2",children:(0,s.jsxs)("span",{className:`text-sm font-mono font-bold transition-colors duration-500 ${d<=e?"text-fd-foregro [...]
+              w-full text-left rounded-lg border p-4 transition-all duration-300
+              ${"active"===r.status?"border-fd-primary/50 bg-fd-primary/5":"border-fd-border bg-fd-muted/20 hover:border-fd-muted-foreground/30"}
+              ${e===d?"shadow-lg":""}
+            `,children:[(0,s.jsxs)("div",{className:"flex items-center justify-between",children:[(0,s.jsxs)("div",{className:"flex items-center gap-3",children:[(0,s.jsx)("div",{className:"w-32 h-3 rounded-full bg-fd-muted/50 overflow-hidden",children:(0,s.jsx)("div",{className:`h-full rounded-full ${"active"===r.status?"bg-fd-primary segment-fill-active":"bg-fd-muted-foreground/40"}`,style:{width:"active"===r.status?"40%":"100%"}})}),(0,s.jsxs)("div",{children:[(0,s.jsx)("span",{classN [...]
+              relative rounded-xl border-2 p-4 text-left transition-all duration-300
+              ${e===r.id?"border-fd-primary bg-fd-primary/5 shadow-lg shadow-fd-primary/10":"border-fd-border bg-fd-card hover:border-fd-muted-foreground/30"}
+            `,children:[(0,s.jsxs)("div",{className:"flex items-center gap-2 mb-3",children:[(0,s.jsx)("div",{className:"w-3 h-3 rounded-full shard-pulse",style:{backgroundColor:r.color}}),(0,s.jsx)("span",{className:"text-xs font-mono font-bold text-fd-foreground",children:r.label})]}),(0,s.jsxs)("div",{className:"rounded-md bg-fd-muted/50 p-2 mb-2",children:[(0,s.jsx)("span",{className:"text-[10px] font-mono text-fd-muted-foreground block mb-1",children:"compio runtime"}),(0,s.jsxs)("d [...]
\ No newline at end of file
diff --git a/_next/static/chunks/2pq32ykmh9rrm.js b/_next/static/chunks/2pq32ykmh9rrm.js
new file mode 100644
index 000000000..870b85be7
--- /dev/null
+++ b/_next/static/chunks/2pq32ykmh9rrm.js
@@ -0,0 +1 @@
+(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,85480,t=>{"use strict";var e=t.i(57587);t.s(["algoliaClient",0,function(t){let{indexName:n,onSearch:r,client:i,locale:l,tag:u}=t;return{deps:[n,i,l,u],async search(t){if(0===t.trim().length)return[];let s=r?await r(t,u,l):await i.searchForHits({requests:[{type:"default",indexName:n,query:t,distinct:5,hitsPerPage:10,filters:u?`tag:${u}`:void 0}]}),o=(0,e.createContentHighlighter [...]
\ No newline at end of file
diff --git a/_next/static/chunks/2t6t05zi_39zz.js b/_next/static/chunks/2t6t05zi_39zz.js
new file mode 100644
index 000000000..3281b929c
--- /dev/null
+++ b/_next/static/chunks/2t6t05zi_39zz.js
@@ -0,0 +1 @@
+(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,27318,t=>{"use strict";function e(t){if("object"!=typeof t||null===t)return!1;let e=Object.getPrototypeOf(t);return null===e||e===Object.prototype||null===Object.getPrototypeOf(e)}t.s(["t",0,function t(n,r=!1){for(let i in n){if(void 0===n[i]&&delete n[i],!r)continue;let l=n[i];if(e(l)){t(l,r);continue}if(Array.isArray(l))for(let n of l)e(n)&&t(n,r)}return n}])},57587,t=>{"use  [...]
\ No newline at end of file
diff --git a/_next/static/chunks/2tvyahbdutabx.js b/_next/static/chunks/2tvyahbdutabx.js
new file mode 100644
index 000000000..77e98605e
--- /dev/null
+++ b/_next/static/chunks/2tvyahbdutabx.js
@@ -0,0 +1,3 @@
+(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,32257,e=>{"use strict";var t=e.i(71645),r=e.i(18050);let n=(0,t.createContext)({}),i=/\\?\{([^}]+)\}/g;function o(e,{note:t}={}){let r=(r,n={})=>{let{note:o,variables:l}=n,s=[];t&&s.push(t),o&&s.push(o);let u=e[a(r,s)]??r;return l&&(u=u.replaceAll(i,(e,t)=>"\\"===e[0]?e.slice(1):t in l?l[t]:e)),u};return r.jsx=(r,n={})=>{let{note:i,variables:o,tags:d}=n,f=[];t&&f.push(t),i&&f.p [...]
+Read more: https://nextjs.org/docs/messages/next-image-missing-loader`),"__NEXT_ERROR_CODE",{value:"E252",enumerable:!1,configurable:!0})}else{let e=B;B=t=>{let{config:r,...n}=t;return e(n)}}if(j){"fill"===j&&(y=!0);let e={intrinsic:{maxWidth:"100%",height:"auto"},responsive:{width:"100%",height:"auto"}}[j];e&&(v={...v,...e});let r={responsive:"100vw",fill:"100vw"}[j];r&&!t&&(t=r)}let K="",q=s(h),V=s(g);if((I=e)&&"object"==typeof I&&(l(I)||void 0!==I.src)){let t=l(e)?e.default:e;if(!t.sr [...]
+Read more: https://nextjs.org/docs/messages/next-image-unconfigured-localpatterns`),"__NEXT_ERROR_CODE",{value:"E871",enumerable:!1,configurable:!0});let s=(0,n.findClosestQuality)(a,e);return`${e.path}?url=${encodeURIComponent(t)}&w=${r}&q=${s}${t.startsWith("/")&&l?`&dpl=${l}`:""}`}o.__next_img_default=!0;let a=o},73668,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0}),Object.defineProperty(r,"isLocalURL",{enumerable:!0,get:function(){return o}});let n=e.r(18967), [...]
\ No newline at end of file
diff --git a/_next/static/chunks/2wome6lnndfqk.js b/_next/static/chunks/2wome6lnndfqk.js
new file mode 100644
index 000000000..0393cf65a
--- /dev/null
+++ b/_next/static/chunks/2wome6lnndfqk.js
@@ -0,0 +1,22 @@
+(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,32120,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0}),Object.defineProperty(r,"callServer",{enumerable:!0,get:function(){return u}});let n=e.r(71645),a=e.r(88540),l=e.r(41538);async function u(e,t){return new Promise((r,u)=>{(0,n.startTransition)(()=>{(0,l.dispatchAppRouterAction)({type:a.ACTION_SERVER_ACTION,actionId:e,actionArgs:t,resolve:r,reject:u})} [...]
+Read more: https://nextjs.org/docs/messages/failed-to-find-server-action`),"__NEXT_ERROR_CODE",{value:"E715",enumerable:!1,configurable:!0});let j=s.headers.get("x-action-redirect"),[I,F]=j?.split(";")||[];switch(F){case"push":d="push";break;case"replace":d="replace";break;default:d=void 0}let D=!!s.headers.get(u.NEXT_IS_PRERENDER_HEADER),U=O.ActionDidNotRevalidate;try{let e=s.headers.get("x-action-revalidated");if(e){let t=JSON.parse(e);(t===O.ActionDidRevalidateStaticAndDynamic||t===O. [...]
+
+This segment was dropped from rendering. Issues that would prevent instant navigation will go undetected.
+
+${e}:
+${t.map(e=>`  ${e}`).join("\n")}
+
+Ways to fix this:
+  - [render] Render the dropped segment
+  - [ignore] Set \`export const instant = false\` to opt the dropped segment out of instant-navigation validation
+
+Learn more: https://nextjs.org/docs/messages/instant-unrendered-segment`}return Object.defineProperty(Error(r),"__NEXT_ERROR_CODE",{value:"E1286",enumerable:!1,configurable:!0})}function u(e){return Object.defineProperty(Error(`Next.js encountered dynamic data during prefetching for "${e}".
+
+This will lead to slower, more expensive prefetches.
+
+Ways to fix this:
+  - [upgrade] Opt into Partial Prefetching by exporting \`const prefetch = 'partial'\` from the page or layout, or by setting \`partialPrefetching: true\` in next.config to opt the whole app in
+  - [disable] Remove \`prefetch={true}\` from the <Link> to use the default prefetch
+  - [ignore] Set \`export const instant = false\` to opt the route out of instant-navigation validation
+
+Learn more: https://nextjs.org/docs/messages/instant-link-prefetch-partial`),"__NEXT_ERROR_CODE",{value:"E1435",enumerable:!1,configurable:!0})}},12718,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0}),Object.defineProperty(r,"InvariantError",{enumerable:!0,get:function(){return n}});class n extends Error{constructor(e,t){super(`Invariant: ${e.endsWith(".")?e:e+"."} This is a bug in Next.js.`,t),Object.defineProperty(this,"__NEXT_ERROR_CODE",{value:"E1179",enumerabl [...]
\ No newline at end of file
diff --git a/_next/static/chunks/2wp8u1d1wdfez.js b/_next/static/chunks/2wp8u1d1wdfez.js
new file mode 100644
index 000000000..636b3f6dd
--- /dev/null
+++ b/_next/static/chunks/2wp8u1d1wdfez.js
@@ -0,0 +1 @@
+(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,26907,t=>{"use strict";t.s(["t",0,function t(e,r){return e===r||!!(Array.isArray(e)&&Array.isArray(r))&&r.length===e.length&&e.every((e,o)=>t(e,r[o]))}])},47873,t=>{"use strict";var e=t.i(24110),r=t.i(18050);function o({ref:t,href:n="#",external:i=!!(n.match(/^\w+:/)||n.startsWith("//")),prefetch:l,children:s,...a}){return i?(0,r.jsx)("a",{ref:t,href:n,rel:"noreferrer noopener" [...]
\ No newline at end of file
diff --git a/_next/static/chunks/2yzsws2usue-b.js b/_next/static/chunks/2yzsws2usue-b.js
new file mode 100644
index 000000000..9990c4c85
--- /dev/null
+++ b/_next/static/chunks/2yzsws2usue-b.js
@@ -0,0 +1 @@
+(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,4100,(e,t,n)=>{"use strict";var r=Object.prototype.hasOwnProperty,i=Object.prototype.toString,o=Object.defineProperty,c=Object.getOwnPropertyDescriptor,s=function(e){return"function"==typeof Array.isArray?Array.isArray(e):"[object Array]"===i.call(e)},u=function(e){if(!e||"[object Object]"!==i.call(e))return!1;var t,n=r.call(e,"constructor"),o=e.constructor&&e.constructor.proto [...]
\ No newline at end of file
diff --git a/_next/static/chunks/3-_96y-evozm0.js b/_next/static/chunks/3-_96y-evozm0.js
new file mode 100644
index 000000000..3bbf269c1
--- /dev/null
+++ b/_next/static/chunks/3-_96y-evozm0.js
@@ -0,0 +1 @@
+(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,58298,e=>{"use strict";var t=e.i(18050);e.s(["default",0,function({reset:e}){return(0,t.jsxs)("div",{className:"flex min-h-[50vh] flex-col items-center justify-center gap-4 p-8",children:[(0,t.jsx)("h2",{className:"text-xl font-semibold",children:"Something went wrong"}),(0,t.jsx)("button",{onClick:e,className:"rounded-lg bg-fd-primary px-4 py-2 text-sm font-medium text-fd-prim [...]
\ No newline at end of file
diff --git a/_next/static/chunks/3nptizve4zde0.js b/_next/static/chunks/3nptizve4zde0.js
new file mode 100644
index 000000000..36b2cb449
--- /dev/null
+++ b/_next/static/chunks/3nptizve4zde0.js
@@ -0,0 +1 @@
+(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,89589,e=>{"use strict";var t=e.i(71645);e.s(["ForceDarkTheme",0,function(){return(0,t.useEffect)(()=>{let e=document.documentElement,t=e.getAttribute("data-theme"),r=e.style.colorScheme;return e.setAttribute("data-theme","dark"),e.style.colorScheme="dark",()=>{t?e.setAttribute("data-theme",t):e.removeAttribute("data-theme"),e.style.colorScheme=r||""}},[]),null}])}]);
\ No newline at end of file
diff --git a/_next/static/chunks/3x8y3fmtn6lnc.js b/_next/static/chunks/3x8y3fmtn6lnc.js
new file mode 100644
index 000000000..5e839712b
--- /dev/null
+++ b/_next/static/chunks/3x8y3fmtn6lnc.js
@@ -0,0 +1 @@
+(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,75830,e=>{"use strict";var t=e.i(71645),n=e.i(30030),r=e.i(20783),o=e.i(91918),i=e.i(18050),s=Object.defineProperty,a=(e,t)=>s(e,"name",{value:t,configurable:!0});function l(e){let s=e+"CollectionProvider",[l,u]=(0,n.createContextScope)(s),[c,d]=l(s,{collectionRef:{current:null},itemMap:new Map}),f=a(e=>{let{scope:n,children:r}=e,o=t.useRef(null),s=t.useRef(new Map).current;ret [...]
\ No newline at end of file
diff --git a/_next/static/chunks/3zvry4l5_wb57.js b/_next/static/chunks/3zvry4l5_wb57.js
new file mode 100644
index 000000000..476fb787f
--- /dev/null
+++ b/_next/static/chunks/3zvry4l5_wb57.js
@@ -0,0 +1 @@
+(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,26907,t=>{"use strict";t.s(["t",0,function t(e,r){return e===r||!!(Array.isArray(e)&&Array.isArray(r))&&r.length===e.length&&e.every((e,o)=>t(e,r[o]))}])},45954,t=>{t.v(e=>Promise.all(["static/chunks/2pq32ykmh9rrm.js"].map(e=>t.l(e))).then(()=>e(85480)))},58547,t=>{"use strict";var e=t.i(88349);let r=new Map;t.s(["fetchClient",0,function({api:t=(0,e.n)(e.t,"/api/search"),locale [...]
\ No newline at end of file
diff --git a/_next/static/chunks/43wd2so83e0g5.js b/_next/static/chunks/43wd2so83e0g5.js
new file mode 100644
index 000000000..61090be9c
--- /dev/null
+++ b/_next/static/chunks/43wd2so83e0g5.js
@@ -0,0 +1 @@
+(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,27318,t=>{"use strict";function e(t){if("object"!=typeof t||null===t)return!1;let e=Object.getPrototypeOf(t);return null===e||e===Object.prototype||null===Object.getPrototypeOf(e)}t.s(["t",0,function t(r,i=!1){for(let n in r){if(void 0===r[n]&&delete r[n],!i)continue;let l=r[n];if(e(l)){t(l,i);continue}if(Array.isArray(l))for(let r of l)e(r)&&t(r,i)}return r}])},20787,t=>{"use  [...]
\ No newline at end of file
diff --git a/_next/static/chunks/turbopack-1wnby4lbl7v2_.js b/_next/static/chunks/turbopack-1wnby4lbl7v2_.js
new file mode 100644
index 000000000..60d701a0b
--- /dev/null
+++ b/_next/static/chunks/turbopack-1wnby4lbl7v2_.js
@@ -0,0 +1 @@
+(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,{otherChunks:["static/chunks/1qt6pht_u0de1.js","static/chunks/1iye7dwhtxrnu.js","static/chunks/1t7fq8t6712vg.js","static/chunks/2wome6lnndfqk.js"],runtimeModuleIds:[94553]}]),(()=>{let e;if(!Array.isArray(globalThis.TURBOPACK))return;var t,r=function(){if(null!=self.TURBOPACK_ASSET_SUFFIX)return self.TURBOPACK_ASSET_SUFFIX;let e=document?.currentScript?.getAttribute?.("src")??" [...]
\ No newline at end of file
diff --git a/_next/static/media/bench_cli.1-fhqrov-qp4v.png b/_next/static/media/bench_cli.1-fhqrov-qp4v.png
new file mode 100644
index 000000000..5bf0eacc2
Binary files /dev/null and b/_next/static/media/bench_cli.1-fhqrov-qp4v.png differ
diff --git a/_next/static/media/bench_platform.0bo2yyz7dwbml.png b/_next/static/media/bench_platform.0bo2yyz7dwbml.png
new file mode 100644
index 000000000..8e56cd1dd
Binary files /dev/null and b/_next/static/media/bench_platform.0bo2yyz7dwbml.png differ
diff --git a/_next/static/media/diagram_szpont.41ta8ztt55657.png b/_next/static/media/diagram_szpont.41ta8ztt55657.png
new file mode 100644
index 000000000..a6727e1a6
Binary files /dev/null and b/_next/static/media/diagram_szpont.41ta8ztt55657.png differ
diff --git a/_next/static/media/ecs.1sn17ptlulrjo.png b/_next/static/media/ecs.1sn17ptlulrjo.png
new file mode 100644
index 000000000..cd5e7c97e
Binary files /dev/null and b/_next/static/media/ecs.1sn17ptlulrjo.png differ
diff --git a/_next/static/media/gh_trending.2y416vr29a0r9.jpeg b/_next/static/media/gh_trending.2y416vr29a0r9.jpeg
new file mode 100644
index 000000000..117b7e77f
Binary files /dev/null and b/_next/static/media/gh_trending.2y416vr29a0r9.jpeg differ
diff --git a/_next/static/media/iggy-tlp-stats.0p3givpkjrraq.png b/_next/static/media/iggy-tlp-stats.0p3givpkjrraq.png
new file mode 100644
index 000000000..c2fc1917b
Binary files /dev/null and b/_next/static/media/iggy-tlp-stats.0p3givpkjrraq.png differ
diff --git a/_next/static/media/iggy_0_1_0.0clj9t7ympyk_.jpg b/_next/static/media/iggy_0_1_0.0clj9t7ympyk_.jpg
new file mode 100644
index 000000000..8b7383373
Binary files /dev/null and b/_next/static/media/iggy_0_1_0.0clj9t7ympyk_.jpg differ
diff --git a/_next/static/media/iggy_batch_schema_1.3cagdlc-o0vo6.png b/_next/static/media/iggy_batch_schema_1.3cagdlc-o0vo6.png
new file mode 100644
index 000000000..bdba41657
Binary files /dev/null and b/_next/static/media/iggy_batch_schema_1.3cagdlc-o0vo6.png differ
diff --git a/_next/static/media/iggy_batch_schema_2.26b3k0h57ovv9.png b/_next/static/media/iggy_batch_schema_2.26b3k0h57ovv9.png
new file mode 100644
index 000000000..a3ed870e3
Binary files /dev/null and b/_next/static/media/iggy_batch_schema_2.26b3k0h57ovv9.png differ
diff --git a/_next/static/media/iggy_bench.0ojommldlm3ph.png b/_next/static/media/iggy_bench.0ojommldlm3ph.png
new file mode 100644
index 000000000..0bc290f94
Binary files /dev/null and b/_next/static/media/iggy_bench.0ojommldlm3ph.png differ
diff --git a/_next/static/media/iggy_bench.2bpvdoykamynj.jpeg b/_next/static/media/iggy_bench.2bpvdoykamynj.jpeg
new file mode 100644
index 000000000..a3de266b7
Binary files /dev/null and b/_next/static/media/iggy_bench.2bpvdoykamynj.jpeg differ
diff --git a/_next/static/media/iggy_bench_0_1_0.3bn66g2gq5-sr.jpeg b/_next/static/media/iggy_bench_0_1_0.3bn66g2gq5-sr.jpeg
new file mode 100644
index 000000000..36aeca376
Binary files /dev/null and b/_next/static/media/iggy_bench_0_1_0.3bn66g2gq5-sr.jpeg differ
diff --git a/_next/static/media/iggy_bench_cli.1dvlsqwuveg77.png b/_next/static/media/iggy_bench_cli.1dvlsqwuveg77.png
new file mode 100644
index 000000000..cfd278069
Binary files /dev/null and b/_next/static/media/iggy_bench_cli.1dvlsqwuveg77.png differ
diff --git a/_next/static/media/iggy_bench_dashboard.00i6b1efz5g4z.png b/_next/static/media/iggy_bench_dashboard.00i6b1efz5g4z.png
new file mode 100644
index 000000000..67847f4c5
Binary files /dev/null and b/_next/static/media/iggy_bench_dashboard.00i6b1efz5g4z.png differ
diff --git a/_next/static/media/iggy_ci_0_1_0.0-oxzxtnw-dza.jpeg b/_next/static/media/iggy_ci_0_1_0.0-oxzxtnw-dza.jpeg
new file mode 100644
index 000000000..2a597fb35
Binary files /dev/null and b/_next/static/media/iggy_ci_0_1_0.0-oxzxtnw-dza.jpeg differ
diff --git a/_next/static/media/iggy_ci_cd.0753t43uxufyj.jpeg b/_next/static/media/iggy_ci_cd.0753t43uxufyj.jpeg
new file mode 100644
index 000000000..0f7caf01a
Binary files /dev/null and b/_next/static/media/iggy_ci_cd.0753t43uxufyj.jpeg differ
diff --git a/_next/static/media/iggy_cli.3s80q2olm9gpf.png b/_next/static/media/iggy_cli.3s80q2olm9gpf.png
new file mode 100644
index 000000000..364882633
Binary files /dev/null and b/_next/static/media/iggy_cli.3s80q2olm9gpf.png differ
diff --git a/_next/static/media/iggy_cli.3v4qrbskenyj6.jpeg b/_next/static/media/iggy_cli.3v4qrbskenyj6.jpeg
new file mode 100644
index 000000000..8520661a3
Binary files /dev/null and b/_next/static/media/iggy_cli.3v4qrbskenyj6.jpeg differ
diff --git a/_next/static/media/iggy_cli_0_1_0.20dihcl7p1g24.jpeg b/_next/static/media/iggy_cli_0_1_0.20dihcl7p1g24.jpeg
new file mode 100644
index 000000000..1853b130f
Binary files /dev/null and b/_next/static/media/iggy_cli_0_1_0.20dihcl7p1g24.jpeg differ
diff --git a/_next/static/media/iggy_cluster.0vh8hf-jnuy59.png b/_next/static/media/iggy_cluster.0vh8hf-jnuy59.png
new file mode 100644
index 000000000..dc2462104
Binary files /dev/null and b/_next/static/media/iggy_cluster.0vh8hf-jnuy59.png differ
diff --git a/_next/static/media/iggy_docker.3vqu9xi5n6lif.png b/_next/static/media/iggy_docker.3vqu9xi5n6lif.png
new file mode 100644
index 000000000..41e3a6070
Binary files /dev/null and b/_next/static/media/iggy_docker.3vqu9xi5n6lif.png differ
diff --git a/_next/static/media/iggy_logo.0ms27-mgvvn9p.png b/_next/static/media/iggy_logo.0ms27-mgvvn9p.png
new file mode 100644
index 000000000..33c3e2c28
Binary files /dev/null and b/_next/static/media/iggy_logo.0ms27-mgvvn9p.png differ
diff --git a/_next/static/media/iggy_perf.0gkt2u6iax1h_.png b/_next/static/media/iggy_perf.0gkt2u6iax1h_.png
new file mode 100644
index 000000000..1b91cdd38
Binary files /dev/null and b/_next/static/media/iggy_perf.0gkt2u6iax1h_.png differ
diff --git a/_next/static/media/iggy_rocket.15h9qw3pw3uoh.png b/_next/static/media/iggy_rocket.15h9qw3pw3uoh.png
new file mode 100644
index 000000000..ec60dffdd
Binary files /dev/null and b/_next/static/media/iggy_rocket.15h9qw3pw3uoh.png differ
diff --git a/_next/static/media/iggy_sample.1qqv2qiduvn6g.jpeg b/_next/static/media/iggy_sample.1qqv2qiduvn6g.jpeg
new file mode 100644
index 000000000..67cb96a67
Binary files /dev/null and b/_next/static/media/iggy_sample.1qqv2qiduvn6g.jpeg differ
diff --git a/_next/static/media/iggy_server.0vu5l6z-4fqzl.png b/_next/static/media/iggy_server.0vu5l6z-4fqzl.png
new file mode 100644
index 000000000..02e27e0e7
Binary files /dev/null and b/_next/static/media/iggy_server.0vu5l6z-4fqzl.png differ
diff --git a/_next/static/media/iggy_server.3f5vl0n4vscs5.jpeg b/_next/static/media/iggy_server.3f5vl0n4vscs5.jpeg
new file mode 100644
index 000000000..eaa7b7628
Binary files /dev/null and b/_next/static/media/iggy_server.3f5vl0n4vscs5.jpeg differ
diff --git a/_next/static/media/iggy_server_0_1_0.14n_edtclen0g.jpeg b/_next/static/media/iggy_server_0_1_0.14n_edtclen0g.jpeg
new file mode 100644
index 000000000..2f6b74adb
Binary files /dev/null and b/_next/static/media/iggy_server_0_1_0.14n_edtclen0g.jpeg differ
diff --git a/_next/static/media/iggy_stars.39e41437tycxn.png b/_next/static/media/iggy_stars.39e41437tycxn.png
new file mode 100644
index 000000000..4af17ca75
Binary files /dev/null and b/_next/static/media/iggy_stars.39e41437tycxn.png differ
diff --git a/_next/static/media/iggy_technology_radar.0t-pti5rv_g38.png b/_next/static/media/iggy_technology_radar.0t-pti5rv_g38.png
new file mode 100644
index 000000000..ed08158ae
Binary files /dev/null and b/_next/static/media/iggy_technology_radar.0t-pti5rv_g38.png differ
diff --git a/_next/static/media/iggy_tpc.0ejc62k9xqcu6.png b/_next/static/media/iggy_tpc.0ejc62k9xqcu6.png
new file mode 100644
index 000000000..a8ae7b19f
Binary files /dev/null and b/_next/static/media/iggy_tpc.0ejc62k9xqcu6.png differ
diff --git a/_next/static/media/iggy_vsr.0o7op9bm15129.png b/_next/static/media/iggy_vsr.0o7op9bm15129.png
new file mode 100644
index 000000000..1615725e7
Binary files /dev/null and b/_next/static/media/iggy_vsr.0o7op9bm15129.png differ
diff --git a/_next/static/media/iggy_web.1g9_wep0g51yk.png b/_next/static/media/iggy_web.1g9_wep0g51yk.png
new file mode 100644
index 000000000..492ad4b82
Binary files /dev/null and b/_next/static/media/iggy_web.1g9_wep0g51yk.png differ
diff --git a/_next/static/media/iggy_web_ui.10pkflbhh3k76.jpeg b/_next/static/media/iggy_web_ui.10pkflbhh3k76.jpeg
new file mode 100644
index 000000000..168eeda49
Binary files /dev/null and b/_next/static/media/iggy_web_ui.10pkflbhh3k76.jpeg differ
diff --git a/_next/static/media/iggy_web_ui.3b5h_z5hpnm9g.png b/_next/static/media/iggy_web_ui.3b5h_z5hpnm9g.png
new file mode 100644
index 000000000..39350b737
Binary files /dev/null and b/_next/static/media/iggy_web_ui.3b5h_z5hpnm9g.png differ
diff --git a/_next/static/media/iggy_web_ui_0_1_0.10pkflbhh3k76.jpeg b/_next/static/media/iggy_web_ui_0_1_0.10pkflbhh3k76.jpeg
new file mode 100644
index 000000000..168eeda49
Binary files /dev/null and b/_next/static/media/iggy_web_ui_0_1_0.10pkflbhh3k76.jpeg differ
diff --git a/_next/static/media/iggys.26-hz1yki2g5f.jpeg b/_next/static/media/iggys.26-hz1yki2g5f.jpeg
new file mode 100644
index 000000000..cd593d6ff
Binary files /dev/null and b/_next/static/media/iggys.26-hz1yki2g5f.jpeg differ
diff --git a/_next/static/media/leader_elections.0q2g_7a47wdz8.jpeg b/_next/static/media/leader_elections.0q2g_7a47wdz8.jpeg
new file mode 100644
index 000000000..352e9412c
Binary files /dev/null and b/_next/static/media/leader_elections.0q2g_7a47wdz8.jpeg differ
diff --git a/_next/static/media/no_zero_copy_consumer.2e08e0hkhbnym.png b/_next/static/media/no_zero_copy_consumer.2e08e0hkhbnym.png
new file mode 100644
index 000000000..7252a706f
Binary files /dev/null and b/_next/static/media/no_zero_copy_consumer.2e08e0hkhbnym.png differ
diff --git a/_next/static/media/no_zero_copy_producer.0g-czjxs_73qh.png b/_next/static/media/no_zero_copy_producer.0g-czjxs_73qh.png
new file mode 100644
index 000000000..c352f6903
Binary files /dev/null and b/_next/static/media/no_zero_copy_producer.0g-czjxs_73qh.png differ
diff --git a/_next/static/media/pc_16_0.7.3r9jfjtjotb9e.png b/_next/static/media/pc_16_0.7.3r9jfjtjotb9e.png
new file mode 100644
index 000000000..09dddb112
Binary files /dev/null and b/_next/static/media/pc_16_0.7.3r9jfjtjotb9e.png differ
diff --git a/_next/static/media/pc_tcp.2xzly9hsjf0ya.png b/_next/static/media/pc_tcp.2xzly9hsjf0ya.png
new file mode 100644
index 000000000..f8f455117
Binary files /dev/null and b/_next/static/media/pc_tcp.2xzly9hsjf0ya.png differ
diff --git a/_next/static/media/pc_ws.3b_64fo_99_os.png b/_next/static/media/pc_ws.3b_64fo_99_os.png
new file mode 100644
index 000000000..253699b78
Binary files /dev/null and b/_next/static/media/pc_ws.3b_64fo_99_os.png differ
diff --git a/_next/static/media/pp_16_0.5_fsync.3cgj8iv8w-7xp.png b/_next/static/media/pp_16_0.5_fsync.3cgj8iv8w-7xp.png
new file mode 100644
index 000000000..d59d4e78c
Binary files /dev/null and b/_next/static/media/pp_16_0.5_fsync.3cgj8iv8w-7xp.png differ
diff --git a/_next/static/media/pp_16_0.5_rl.1ruo0gqariwpr.png b/_next/static/media/pp_16_0.5_rl.1ruo0gqariwpr.png
new file mode 100644
index 000000000..486070cf0
Binary files /dev/null and b/_next/static/media/pp_16_0.5_rl.1ruo0gqariwpr.png differ
diff --git a/_next/static/media/pp_16_0.6.433c3ldpfo7-w.png b/_next/static/media/pp_16_0.6.433c3ldpfo7-w.png
new file mode 100644
index 000000000..3de231649
Binary files /dev/null and b/_next/static/media/pp_16_0.6.433c3ldpfo7-w.png differ
diff --git a/_next/static/media/pp_16_0.7.0blplnkk1xx8w.png b/_next/static/media/pp_16_0.7.0blplnkk1xx8w.png
new file mode 100644
index 000000000..81a19b649
Binary files /dev/null and b/_next/static/media/pp_16_0.7.0blplnkk1xx8w.png differ
diff --git a/_next/static/media/pp_16_0.7_fsync.3thi297vhw56p.png b/_next/static/media/pp_16_0.7_fsync.3thi297vhw56p.png
new file mode 100644
index 000000000..d8b285ab7
Binary files /dev/null and b/_next/static/media/pp_16_0.7_fsync.3thi297vhw56p.png differ
diff --git a/_next/static/media/pp_32_0.5_fsync.3ct9t4ac6yxi4.png b/_next/static/media/pp_32_0.5_fsync.3ct9t4ac6yxi4.png
new file mode 100644
index 000000000..d55178b50
Binary files /dev/null and b/_next/static/media/pp_32_0.5_fsync.3ct9t4ac6yxi4.png differ
diff --git a/_next/static/media/pp_32_0.5_rl.0jb0wodod5fo0.png b/_next/static/media/pp_32_0.5_rl.0jb0wodod5fo0.png
new file mode 100644
index 000000000..7e88774b1
Binary files /dev/null and b/_next/static/media/pp_32_0.5_rl.0jb0wodod5fo0.png differ
diff --git a/_next/static/media/pp_32_0.6.3jtae11yef9e0.png b/_next/static/media/pp_32_0.6.3jtae11yef9e0.png
new file mode 100644
index 000000000..078525054
Binary files /dev/null and b/_next/static/media/pp_32_0.6.3jtae11yef9e0.png differ
diff --git a/_next/static/media/pp_32_0.7.2yr3xjrlg39yw.png b/_next/static/media/pp_32_0.7.2yr3xjrlg39yw.png
new file mode 100644
index 000000000..98bd6ed5c
Binary files /dev/null and b/_next/static/media/pp_32_0.7.2yr3xjrlg39yw.png differ
diff --git a/_next/static/media/pp_32_0.7_fsync.12f7_-vtpz6e_.png b/_next/static/media/pp_32_0.7_fsync.12f7_-vtpz6e_.png
new file mode 100644
index 000000000..48123150c
Binary files /dev/null and b/_next/static/media/pp_32_0.7_fsync.12f7_-vtpz6e_.png differ
diff --git a/_next/static/media/pp_8_0.5_rl.0mn9ddufidtyx.png b/_next/static/media/pp_8_0.5_rl.0mn9ddufidtyx.png
new file mode 100644
index 000000000..a3406c3b8
Binary files /dev/null and b/_next/static/media/pp_8_0.5_rl.0mn9ddufidtyx.png differ
diff --git a/_next/static/media/pp_8_0.6_rl.1x0d8tcn3ce5h.png b/_next/static/media/pp_8_0.6_rl.1x0d8tcn3ce5h.png
new file mode 100644
index 000000000..527d01a9e
Binary files /dev/null and b/_next/static/media/pp_8_0.6_rl.1x0d8tcn3ce5h.png differ
diff --git a/_next/static/media/pp_8_0.7_rl.2qajpsu4jk_m4.png b/_next/static/media/pp_8_0.7_rl.2qajpsu4jk_m4.png
new file mode 100644
index 000000000..351b7f241
Binary files /dev/null and b/_next/static/media/pp_8_0.7_rl.2qajpsu4jk_m4.png differ
diff --git a/_next/static/media/sharding.0ix4do1t7gg9_.png b/_next/static/media/sharding.0ix4do1t7gg9_.png
new file mode 100644
index 000000000..98db80666
Binary files /dev/null and b/_next/static/media/sharding.0ix4do1t7gg9_.png differ
diff --git a/_next/static/media/tcp-1234.0g9m0zu_8axr-.png b/_next/static/media/tcp-1234.0g9m0zu_8axr-.png
new file mode 100644
index 000000000..7b97f0a14
Binary files /dev/null and b/_next/static/media/tcp-1234.0g9m0zu_8axr-.png differ
diff --git a/_next/static/media/ws-1234.0wu96ov6rlbmx.png b/_next/static/media/ws-1234.0wu96ov6rlbmx.png
new file mode 100644
index 000000000..08de72e49
Binary files /dev/null and b/_next/static/media/ws-1234.0wu96ov6rlbmx.png differ
diff --git a/_next/static/media/zero_copy_consumer.2ht72ksqbdj46.png b/_next/static/media/zero_copy_consumer.2ht72ksqbdj46.png
new file mode 100644
index 000000000..cb2d31018
Binary files /dev/null and b/_next/static/media/zero_copy_consumer.2ht72ksqbdj46.png differ
diff --git a/_next/static/media/zero_copy_producer.41mwm63joq0ig.png b/_next/static/media/zero_copy_producer.41mwm63joq0ig.png
new file mode 100644
index 000000000..0239eee71
Binary files /dev/null and b/_next/static/media/zero_copy_producer.41mwm63joq0ig.png differ
diff --git a/_not-found/__next._full.txt b/_not-found/__next._full.txt
new file mode 100644
index 000000000..aaed12f17
--- /dev/null
+++ b/_not-found/__next._full.txt
@@ -0,0 +1,28 @@
+1:"$Sreact.fragment"
+3:I[17751,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"RootProvider"]
+4:I[39756,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"default"]
+5:I[58298,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/3-_96y-evozm0.js"],"default"]
+6:I[37457,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"default"]
+7:I[22016,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],""]
+f:I[68027,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"default",1]
+:HL["/_next/static/chunks/1_55v0vlfews3.css","style"]
+2:T512,{"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://iggy.apache.org/#organization","name":"The Apache Software Foundation","url":"https://www.apache.org/","logo":"https://iggy.apache.org/img/asf_logo.svg","contactPoint":{"@type":"ContactPoint","contactType":"technical support","email":"dev@iggy.apache.org","url":"https://iggy.apache.org/community/"}},{"@type":"WebSite","@id":"https://iggy.apache.org/#website","name":"Apache Iggy","url":"https://iggy.a [...]
+0:{"P":null,"c":["","_not-found",""],"q":"","i":false,"f":[[["",{"children":["/_not-found",{"children":["__PAGE__",{},"$undefined","$undefined",4608]},"$undefined","$undefined",4608]},"$undefined","$undefined",4624],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/1_55v0vlfews3.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/_next/static/chunks/05hk4ely-lns6.js","async":true,"nonce": [...]
+11:I[79520,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],""]
+12:I[69877,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"Matomo"]
+13:I[97367,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"OutletBoundary"]
+14:"$Sreact.suspense"
+16:I[97367,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"ViewportBoundary"]
+18:I[97367,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"MetadataBoundary"]
+8:["$","p",null,{"className":"mt-6 max-w-md text-xs text-fd-muted-foreground","children":["Every page on this site is listed in"," ",["$","a",null,{"href":"/sitemap.xml","className":"underline hover:text-fd-primary","children":"/sitemap.xml"}],", and"," ",["$","a",null,{"href":"/llms.txt","className":"underline hover:text-fd-primary","children":"/llms.txt"}]," ","summarises the documentation."]}]
+9:["$","$L11",null,{"id":"matomo","strategy":"afterInteractive","children":"var _paq = window._paq = window._paq || [];\n_paq.push([\"setDoNotTrack\", true]);\n_paq.push([\"disableCookies\"]);\n_paq.push(['trackPageView']);\n_paq.push(['enableLinkTracking']);\n(function() {\n  var u=\"https://analytics.apache.org/\";\n  _paq.push(['setTrackerUrl', u+'matomo.php']);\n  _paq.push(['setSiteId', '80']);\n  var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];\n  [...]
+a:["$","$L12",null,{}]
+b:["$","$1","c",{"children":[null,["$","$L4",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}]
+c:["$","$1","c",{"children":[["$","main",null,{"className":"flex min-h-screen flex-col items-center justify-center gap-4 px-6 text-center","children":[["$","p",null,{"className":"font-mono text-sm font-semibold uppercase tracking-widest text-[#ff9103]","children":"404"}],["$","h1",null,{"className":"text-3xl font-extrabold tracking-tight text-fd-foreground md:text-4xl","children":"This page could not be found"}],["$","p",null,{"className":"max-w-md text-fd-muted-foreground","children":"T [...]
+e:["$","$1","h",{"children":[["$","meta",null,{"name":"robots","content":"noindex"}],["$","$L16",null,{"children":"$L17"}],["$","div",null,{"hidden":true,"children":["$","$L18",null,{"children":["$","$14",null,{"name":"Next.Metadata","children":"$L19"}]}]}],null]}]
+10:["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/1_55v0vlfews3.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]
+d:C
+17:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]
+1a:I[27201,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"IconMark"]
+15:null
+19:[["$","title","0",{"children":"404: Page not found | Apache Iggy"}],["$","meta","1",{"name":"description","content":"Apache Iggy is a persistent message streaming platform written in Rust, supporting QUIC, TCP and HTTP transport protocols, capable of processing millions of messages per second."}],["$","link","2",{"rel":"canonical","href":"https://iggy.apache.org/_not-found/"}],["$","meta","3",{"property":"og:title","content":"404: Page not found | Apache Iggy"}],["$","meta","4",{"prop [...]
diff --git a/_not-found/__next._not-found.__PAGE__.txt b/_not-found/__next._not-found.__PAGE__.txt
new file mode 100644
index 000000000..49b863210
--- /dev/null
+++ b/_not-found/__next._not-found.__PAGE__.txt
@@ -0,0 +1,35 @@
+1:"$Sreact.fragment"
+2:I[22016,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],""]
+3:I[97367,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"OutletBoundary"]
+4:"$Sreact.suspense"
+8:I[97367,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"ViewportBoundary"]
+9:I[97367,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"MetadataBoundary"]
+7:X
+f:X
+f:C
+0:{"buildId":"CEAllZE6ERPzzxzpa_n8G","data":[{"rsc":["$","$1","c",{"children":[["$","main",null,{"className":"flex min-h-screen flex-col items-center justify-center gap-4 px-6 text-center","children":[["$","p",null,{"className":"font-mono text-sm font-semibold uppercase tracking-widest text-[#ff9103]","children":"404"}],["$","h1",null,{"className":"text-3xl font-extrabold tracking-tight text-fd-foreground md:text-4xl","children":"This page could not be found"}],["$","p",null,{"className" [...]
+14:I[27201,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"IconMark"]
+15:I[39756,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"default"]
+16:I[37457,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"default"]
+18:I[17751,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"RootProvider"]
+19:I[58298,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/3-_96y-evozm0.js"],"default"]
+:HL["/_next/static/chunks/1_55v0vlfews3.css","style"]
+5:null
+a:["$","link","16",{"rel":"icon","href":"/img/favicon.png"}]
+b:["$","$L14","17",{}]
+d:["$","$1","c",{"children":[null,["$","$L15",null,{"parallelRouterKey":"children","template":["$","$L16",null,{}]}]]}]
+17:T512,{"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://iggy.apache.org/#organization","name":"The Apache Software Foundation","url":"https://www.apache.org/","logo":"https://iggy.apache.org/img/asf_logo.svg","contactPoint":{"@type":"ContactPoint","contactType":"technical support","email":"dev@iggy.apache.org","url":"https://iggy.apache.org/community/"}},{"@type":"WebSite","@id":"https://iggy.apache.org/#website","name":"Apache Iggy","url":"https://iggy. [...]
+1e:I[79520,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],""]
+1f:I[69877,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"Matomo"]
+1a:["$","a",null,{"href":"/sitemap.xml","className":"underline hover:text-fd-primary","children":"/sitemap.xml"}]
+1b:["$","a",null,{"href":"/llms.txt","className":"underline hover:text-fd-primary","children":"/llms.txt"}]
+1c:["$","$L1e",null,{"id":"matomo","strategy":"afterInteractive","children":"var _paq = window._paq = window._paq || [];\n_paq.push([\"setDoNotTrack\", true]);\n_paq.push([\"disableCookies\"]);\n_paq.push(['trackPageView']);\n_paq.push(['enableLinkTracking']);\n(function() {\n  var u=\"https://analytics.apache.org/\";\n  _paq.push(['setTrackerUrl', u+'matomo.php']);\n  _paq.push(['setSiteId', '80']);\n  var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];\n [...]
+1d:["$","$L1f",null,{}]
+13:true
+7:300
+7:C
+12:0
+c:"$undefined"
+e:"$undefined"
+6:"$undefined"
+11:"$undefined"
diff --git a/_not-found/__next._tree.txt b/_not-found/__next._tree.txt
new file mode 100644
index 000000000..eab32c637
--- /dev/null
+++ b/_not-found/__next._tree.txt
@@ -0,0 +1,2 @@
+:HL["/_next/static/chunks/1_55v0vlfews3.css","style"]
+0:{"tree":{"name":"","param":null,"prefetchHints":4176,"slots":{"children":{"name":"/_not-found","param":null,"prefetchHints":4192,"slots":{"children":{"name":"__PAGE__","param":null,"prefetchHints":4256,"slots":null}}}}},"staleTime":300,"buildId":"CEAllZE6ERPzzxzpa_n8G"}
diff --git a/_not-found/index.html b/_not-found/index.html
new file mode 100644
index 000000000..7e6ffae09
--- /dev/null
+++ b/_not-found/index.html
@@ -0,0 +1 @@
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="/_next/static/chunks/1_55v0vlfews3.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/1qt6pht_u0de1.js"/><script src="/_next/static/chunks/1iye7dwhtxrnu.js" async=""></script><script src="/_next/static/chunks/1t7fq8t6712vg.js" async=""></script><script src="/_next/static/chunk [...]
\ No newline at end of file
diff --git a/_not-found/index.txt b/_not-found/index.txt
new file mode 100644
index 000000000..aaed12f17
--- /dev/null
+++ b/_not-found/index.txt
@@ -0,0 +1,28 @@
+1:"$Sreact.fragment"
+3:I[17751,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"RootProvider"]
+4:I[39756,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"default"]
+5:I[58298,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/3-_96y-evozm0.js"],"default"]
+6:I[37457,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"default"]
+7:I[22016,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],""]
+f:I[68027,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"default",1]
+:HL["/_next/static/chunks/1_55v0vlfews3.css","style"]
+2:T512,{"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://iggy.apache.org/#organization","name":"The Apache Software Foundation","url":"https://www.apache.org/","logo":"https://iggy.apache.org/img/asf_logo.svg","contactPoint":{"@type":"ContactPoint","contactType":"technical support","email":"dev@iggy.apache.org","url":"https://iggy.apache.org/community/"}},{"@type":"WebSite","@id":"https://iggy.apache.org/#website","name":"Apache Iggy","url":"https://iggy.a [...]
+0:{"P":null,"c":["","_not-found",""],"q":"","i":false,"f":[[["",{"children":["/_not-found",{"children":["__PAGE__",{},"$undefined","$undefined",4608]},"$undefined","$undefined",4608]},"$undefined","$undefined",4624],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/1_55v0vlfews3.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/_next/static/chunks/05hk4ely-lns6.js","async":true,"nonce": [...]
+11:I[79520,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],""]
+12:I[69877,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"Matomo"]
+13:I[97367,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"OutletBoundary"]
+14:"$Sreact.suspense"
+16:I[97367,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"ViewportBoundary"]
+18:I[97367,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"MetadataBoundary"]
+8:["$","p",null,{"className":"mt-6 max-w-md text-xs text-fd-muted-foreground","children":["Every page on this site is listed in"," ",["$","a",null,{"href":"/sitemap.xml","className":"underline hover:text-fd-primary","children":"/sitemap.xml"}],", and"," ",["$","a",null,{"href":"/llms.txt","className":"underline hover:text-fd-primary","children":"/llms.txt"}]," ","summarises the documentation."]}]
+9:["$","$L11",null,{"id":"matomo","strategy":"afterInteractive","children":"var _paq = window._paq = window._paq || [];\n_paq.push([\"setDoNotTrack\", true]);\n_paq.push([\"disableCookies\"]);\n_paq.push(['trackPageView']);\n_paq.push(['enableLinkTracking']);\n(function() {\n  var u=\"https://analytics.apache.org/\";\n  _paq.push(['setTrackerUrl', u+'matomo.php']);\n  _paq.push(['setSiteId', '80']);\n  var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];\n  [...]
+a:["$","$L12",null,{}]
+b:["$","$1","c",{"children":[null,["$","$L4",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}]
+c:["$","$1","c",{"children":[["$","main",null,{"className":"flex min-h-screen flex-col items-center justify-center gap-4 px-6 text-center","children":[["$","p",null,{"className":"font-mono text-sm font-semibold uppercase tracking-widest text-[#ff9103]","children":"404"}],["$","h1",null,{"className":"text-3xl font-extrabold tracking-tight text-fd-foreground md:text-4xl","children":"This page could not be found"}],["$","p",null,{"className":"max-w-md text-fd-muted-foreground","children":"T [...]
+e:["$","$1","h",{"children":[["$","meta",null,{"name":"robots","content":"noindex"}],["$","$L16",null,{"children":"$L17"}],["$","div",null,{"hidden":true,"children":["$","$L18",null,{"children":["$","$14",null,{"name":"Next.Metadata","children":"$L19"}]}]}],null]}]
+10:["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/1_55v0vlfews3.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]
+d:C
+17:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]
+1a:I[27201,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"IconMark"]
+15:null
+19:[["$","title","0",{"children":"404: Page not found | Apache Iggy"}],["$","meta","1",{"name":"description","content":"Apache Iggy is a persistent message streaming platform written in Rust, supporting QUIC, TCP and HTTP transport protocols, capable of processing millions of messages per second."}],["$","link","2",{"rel":"canonical","href":"https://iggy.apache.org/_not-found/"}],["$","meta","3",{"property":"og:title","content":"404: Page not found | Apache Iggy"}],["$","meta","4",{"prop [...]
diff --git a/apache-iggy-top-level-project-tlp-graduation/iggy-tlp-stats.png b/apache-iggy-top-level-project-tlp-graduation/iggy-tlp-stats.png
new file mode 100644
index 000000000..c2fc1917b
Binary files /dev/null and b/apache-iggy-top-level-project-tlp-graduation/iggy-tlp-stats.png differ
diff --git a/apache-incubator/iggy_logo.png b/apache-incubator/iggy_logo.png
new file mode 100644
index 000000000..33c3e2c28
Binary files /dev/null and b/apache-incubator/iggy_logo.png differ
diff --git a/api/search b/api/search
new file mode 100644
index 000000000..f8bfff5d3
--- /dev/null
+++ b/api/search
@@ -0,0 +1 @@
+{"type":"advanced","internalDocumentIDStore":{"internalIdToId":["/docs","/docs-0","/docs-1","/docs-2","/docs-3","/docs-4","/docs-5","/docs-6","/docs-7","/docs-8","/docs-9","/docs-10","/docs-11","/docs-12","/docs-13","/docs-14","/docs-15","/docs-16","/docs-17","/docs-18","/docs-19","/docs-20","/docs-21","/docs-22","/docs-23","/docs-24","/docs-25","/docs-26","/docs-27","/docs-28","/docs-29","/docs-30","/docs-31","/docs/ai/introduction","/docs/ai/introduction-0","/docs/ai/introduction-1","/ [...]
\ No newline at end of file
diff --git a/blogs/2023/08/16/welcome.md b/blogs/2023/08/16/welcome.md
new file mode 100644
index 000000000..dca838876
--- /dev/null
+++ b/blogs/2023/08/16/welcome.md
@@ -0,0 +1,14 @@
+# Welcome to the changelog
+
+Published: 2023-08-16
+
+Rendered page: https://iggy.apache.org/blogs/2023/08/16/welcome/
+
+Source: https://github.com/apache/iggy-website/blob/main/content/blog/welcome.mdx
+
+Welcome to the changelog, in which you will read about all the changes that we make to the project.
+
+
+For the time being, I haven't documented all the changes that I've made to the project, but since there's already a few of us working on the different parts of the project, I think it's a good idea to start documenting them, especially when there are some breaking changes or the new features being added to the server, that should be implemented in the client SDK as well :)
+
+Stay tuned for the updates and the upcoming features, such as optional message headers!
diff --git a/blogs/2023/08/16/welcome/__next.!KHNpdGUp.blogs.$c$slug.__PAGE__.txt b/blogs/2023/08/16/welcome/__next.!KHNpdGUp.blogs.$c$slug.__PAGE__.txt
new file mode 100644
index 000000000..b9cf02801
--- /dev/null
+++ b/blogs/2023/08/16/welcome/__next.!KHNpdGUp.blogs.$c$slug.__PAGE__.txt
@@ -0,0 +1,31 @@
+1:"$Sreact.fragment"
+2:I[22016,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],""]
+3:I[97367,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"OutletBoundary"]
+4:"$Sreact.suspense"
+8:I[97367,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"ViewportBoundary"]
+9:I[97367,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"MetadataBoundary"]
+:HL["/img/authors/piotr.png","image"]
+7:X
+13:X
+13:C
+0:{"buildId":"CEAllZE6ERPzzxzpa_n8G","data":[{"rsc":["$","$1","c",{"children":[["$","main",null,{"className":"min-h-screen px-6 py-16 md:px-12","children":["$","article",null,{"className":"mx-auto max-w-5xl","children":[["$","header",null,{"className":"mb-10","children":[["$","time",null,{"className":"text-sm font-medium text-fd-muted-foreground","children":"August 16, 2023"}],["$","h1",null,{"className":"mt-3 text-3xl font-extrabold tracking-tight text-fd-foreground md:text-5xl","childr [...]
+18:I[27201,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"IconMark"]
+19:I[39756,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"default"]
+1a:I[37457,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"default"]
+5:null
+a:["$","meta","10",{"property":"og:type","content":"website"}]
+b:["$","meta","11",{"name":"twitter:card","content":"summary_large_image"}]
+c:["$","meta","12",{"name":"twitter:title","content":"Welcome to the changelog | Apache Iggy"}]
+d:["$","meta","13",{"name":"twitter:image","content":"https://iggy.apache.org/img/og-card.png"}]
+e:["$","link","14",{"rel":"icon","href":"/img/favicon.png"}]
+f:["$","$L18","15",{}]
+11:["$","$1","c",{"children":[null,["$","$L19",null,{"parallelRouterKey":"children","template":["$","$L1a",null,{}]}]]}]
+14:["$","$1","c",{"children":[null,["$","$L19",null,{"parallelRouterKey":"children","template":["$","$L1a",null,{}]}]]}]
+17:true
+7:300
+7:C
+16:0
+10:"$undefined"
+12:"$undefined"
+15:"$undefined"
+6:"$undefined"
diff --git a/blogs/2023/08/16/welcome/__next.!KHNpdGUp.txt b/blogs/2023/08/16/welcome/__next.!KHNpdGUp.txt
new file mode 100644
index 000000000..940e917aa
--- /dev/null
+++ b/blogs/2023/08/16/welcome/__next.!KHNpdGUp.txt
@@ -0,0 +1,30 @@
+1:"$Sreact.fragment"
+2:I[22016,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],""]
+3:I[5014,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],"default"]
+4:I[64345,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js"],"HomeLayout"]
+5:I[88760,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js"],"Logo"]
+6:I[15269,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js"],"CommunityDropdown"]
+7:I[15269,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js"],"communityLinks"]
+8:I[29966,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js"],"ASFDropdown"]
+9:I[36330,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js"],"ASFMobileLinks"]
+a:I[39756,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"default"]
+b:I[37457,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"default"]
+14:X
+0:{"buildId":"CEAllZE6ERPzzxzpa_n8G","data":[{"rsc":["$","$1","c",{"children":[[["$","script","script-0",{"src":"/_next/static/chunks/241-fa32f9zay.js","async":true}],["$","script","script-1",{"src":"/_next/static/chunks/3x8y3fmtn6lnc.js","async":true}],["$","script","script-2",{"src":"/_next/static/chunks/250gopd52txql.js","async":true}],["$","script","script-3",{"src":"/_next/static/chunks/0n3fueko2xquo.js","async":true}]],[["$","div",null,{"className":"relative border-b border-white/[ [...]
+c:["$","$L2","/",{"href":"/","className":"transition-colors hover:text-fd-primary","children":"Home"}]
+d:["$","$L2","/docs",{"href":"/docs","className":"transition-colors hover:text-fd-primary","children":"Documentation"}]
+e:["$","$L2","/blogs",{"href":"/blogs","className":"transition-colors hover:text-fd-primary","children":"Blog"}]
+f:["$","$L2","/downloads",{"href":"/downloads","className":"transition-colors hover:text-fd-primary","children":"Downloads"}]
+10:["$","$L2","/community",{"href":"/community","className":"transition-colors hover:text-fd-primary","children":"Community"}]
+11:["$","p",null,{"className":"mt-6 max-w-md text-xs text-fd-muted-foreground","children":["Every page on this site is listed in"," ",["$","a",null,{"href":"/sitemap.xml","className":"underline hover:text-fd-primary","children":"/sitemap.xml"}],", and"," ",["$","a",null,{"href":"/llms.txt","className":"underline hover:text-fd-primary","children":"/llms.txt"}]," ","summarises the documentation."]}]
+12:["$","footer",null,{"className":"border-t border-fd-border bg-fd-background px-6 py-14 md:px-12","children":["$","div",null,{"className":"mx-auto max-w-6xl","children":[["$","div",null,{"className":"grid gap-10 sm:grid-cols-2 lg:grid-cols-4","children":[["$","div","Docs",{"children":[["$","h2",null,{"className":"mb-4 text-sm font-semibold uppercase tracking-wide text-fd-primary","children":"Docs"}],["$","ul",null,{"className":"space-y-2.5 text-sm","children":[["$","li","/docs",{"child [...]
+16:true
+17:["$","$L2",null,{"href":"https://www.apache.org/foundation/contributing.html","target":"_blank","rel":"noopener noreferrer","className":"text-fd-muted-foreground transition-colors hover:text-fd-foreground","children":"Donate"}]
+18:["$","li","https://www.apache.org/foundation/sponsorship.html",{"children":["$","$L2",null,{"href":"https://www.apache.org/foundation/sponsorship.html","target":"_blank","rel":"noopener noreferrer","className":"text-fd-muted-foreground transition-colors hover:text-fd-foreground","children":"Sponsors"}]}]
+19:["$","li","https://www.apache.org/security/",{"children":["$","$L2",null,{"href":"https://www.apache.org/security/","target":"_blank","rel":"noopener noreferrer","className":"text-fd-muted-foreground transition-colors hover:text-fd-foreground","children":"Security"}]}]
+1a:["$","li","https://privacy.apache.org/policies/privacy-policy-public.html",{"children":["$","$L2",null,{"href":"https://privacy.apache.org/policies/privacy-policy-public.html","target":"_blank","rel":"noopener noreferrer","className":"text-fd-muted-foreground transition-colors hover:text-fd-foreground","children":"Privacy"}]}]
+1b:["$","div",null,{"className":"mt-12 border-t border-fd-border pt-8 text-xs leading-relaxed text-fd-muted-foreground/70","children":[["$","p",null,{"className":"mt-4","children":["Copyright © ",2026," The Apache Software Foundation, Licensed under the Apache License, Version 2.0."]}],["$","p",null,{"className":"mt-4","children":"Apache Iggy, Iggy, Apache, and the Apache Iggy logo are trademarks or registered trademarks of The Apache Software Foundation. All other marks mentioned may be [...]
+14:300
+14:C
+15:0
+13:"$undefined"
diff --git a/blogs/2023/08/16/welcome/__next._full.txt b/blogs/2023/08/16/welcome/__next._full.txt
new file mode 100644
index 000000000..f827c748a
--- /dev/null
+++ b/blogs/2023/08/16/welcome/__next._full.txt
@@ -0,0 +1,52 @@
+1:"$Sreact.fragment"
+3:I[17751,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"RootProvider"]
+4:I[39756,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"default"]
+5:I[58298,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/3-_96y-evozm0.js"],"default"]
+6:I[37457,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"default"]
+7:I[22016,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],""]
+12:I[68027,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"default",1]
+:HL["/_next/static/chunks/1_55v0vlfews3.css","style"]
+2:T512,{"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://iggy.apache.org/#organization","name":"The Apache Software Foundation","url":"https://www.apache.org/","logo":"https://iggy.apache.org/img/asf_logo.svg","contactPoint":{"@type":"ContactPoint","contactType":"technical support","email":"dev@iggy.apache.org","url":"https://iggy.apache.org/community/"}},{"@type":"WebSite","@id":"https://iggy.apache.org/#website","name":"Apache Iggy","url":"https://iggy.a [...]
+0:{"P":null,"c":["","blogs","2023","08","16","welcome",""],"q":"","i":false,"f":[[["",{"children":["(site)",{"children":["blogs",{"children":[["slug","2023/08/16/welcome","c",[]],{"children":["__PAGE__",{},"$undefined","$undefined",4608]},"$undefined","$undefined",4608]},"$undefined","$undefined",4608]},"$undefined","$undefined",4608]},"$undefined","$undefined",4624],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/1_55v0vlfews3.css","preceden [...]
+14:I[79520,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],""]
+15:I[69877,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"Matomo"]
+16:I[5014,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],"default"]
+17:I[64345,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js"],"HomeLayout"]
+18:I[88760,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js"],"Logo"]
+19:I[15269,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js"],"CommunityDropdown"]
+1a:I[15269,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js"],"communityLinks"]
+1b:I[29966,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js"],"ASFDropdown"]
+1c:I[36330,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js"],"ASFMobileLinks"]
+25:I[97367,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"OutletBoundary"]
+26:"$Sreact.suspense"
+28:I[97367,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"ViewportBoundary"]
+2a:I[97367,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"MetadataBoundary"]
+8:["$","$L7","/community",{"href":"/community","className":"transition-colors hover:text-fd-primary","children":"Community"}]
+9:["$","p",null,{"className":"mt-6 max-w-md text-xs text-fd-muted-foreground","children":["Every page on this site is listed in"," ",["$","a",null,{"href":"/sitemap.xml","className":"underline hover:text-fd-primary","children":"/sitemap.xml"}],", and"," ",["$","a",null,{"href":"/llms.txt","className":"underline hover:text-fd-primary","children":"/llms.txt"}]," ","summarises the documentation."]}]
+a:["$","$L14",null,{"id":"matomo","strategy":"afterInteractive","children":"var _paq = window._paq = window._paq || [];\n_paq.push([\"setDoNotTrack\", true]);\n_paq.push([\"disableCookies\"]);\n_paq.push(['trackPageView']);\n_paq.push(['enableLinkTracking']);\n(function() {\n  var u=\"https://analytics.apache.org/\";\n  _paq.push(['setTrackerUrl', u+'matomo.php']);\n  _paq.push(['setSiteId', '80']);\n  var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];\n  [...]
+b:["$","$L15",null,{}]
+c:["$","$1","c",{"children":[[["$","script","script-0",{"src":"/_next/static/chunks/241-fa32f9zay.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/_next/static/chunks/3x8y3fmtn6lnc.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/_next/static/chunks/250gopd52txql.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/_next/static/chunks/0n3fueko2xquo.js","async":true,"nonce":"$undefined"}]],[["$","div",null,{"className" [...]
+d:["$","$1","c",{"children":[null,["$","$L4",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}]
+e:["$","$1","c",{"children":[null,["$","$L4",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}]
+f:["$","$1","c",{"children":["$L24",[["$","script","script-0",{"src":"/_next/static/chunks/1k39uva2a578s.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/_next/static/chunks/23ktdyx90z0v3.js","async":true,"nonce":"$undefined"}]],["$","$L25",null,{"children":["$","$26",null,{"name":"Next.MetadataOutlet","children":"$@27"}]}]]}]
+11:["$","$1","h",{"children":[null,["$","$L28",null,{"children":"$L29"}],["$","div",null,{"hidden":true,"children":["$","$L2a",null,{"children":["$","$26",null,{"name":"Next.Metadata","children":"$L2b"}]}]}],null]}]
+13:["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/1_55v0vlfews3.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]
+10:C
+1d:["$","$L7","/",{"href":"/","className":"transition-colors hover:text-fd-primary","children":"Home"}]
+1e:["$","$L7","/docs",{"href":"/docs","className":"transition-colors hover:text-fd-primary","children":"Documentation"}]
+1f:["$","$L7","/blogs",{"href":"/blogs","className":"transition-colors hover:text-fd-primary","children":"Blog"}]
+20:["$","$L7","/downloads",{"href":"/downloads","className":"transition-colors hover:text-fd-primary","children":"Downloads"}]
+21:["$","$L7","/community",{"href":"/community","className":"transition-colors hover:text-fd-primary","children":"Community"}]
+22:["$","p",null,{"className":"mt-6 max-w-md text-xs text-fd-muted-foreground","children":["Every page on this site is listed in"," ",["$","a",null,{"href":"/sitemap.xml","className":"underline hover:text-fd-primary","children":"/sitemap.xml"}],", and"," ",["$","a",null,{"href":"/llms.txt","className":"underline hover:text-fd-primary","children":"/llms.txt"}]," ","summarises the documentation."]}]
+23:["$","footer",null,{"className":"border-t border-fd-border bg-fd-background px-6 py-14 md:px-12","children":["$","div",null,{"className":"mx-auto max-w-6xl","children":[["$","div",null,{"className":"grid gap-10 sm:grid-cols-2 lg:grid-cols-4","children":[["$","div","Docs",{"children":[["$","h2",null,{"className":"mb-4 text-sm font-semibold uppercase tracking-wide text-fd-primary","children":"Docs"}],["$","ul",null,{"className":"space-y-2.5 text-sm","children":[["$","li","/docs",{"child [...]
+2c:["$","li","https://www.apache.org/foundation/contributing.html",{"children":["$","$L7",null,{"href":"https://www.apache.org/foundation/contributing.html","target":"_blank","rel":"noopener noreferrer","className":"text-fd-muted-foreground transition-colors hover:text-fd-foreground","children":"Donate"}]}]
+2d:["$","li","https://www.apache.org/foundation/sponsorship.html",{"children":["$","$L7",null,{"href":"https://www.apache.org/foundation/sponsorship.html","target":"_blank","rel":"noopener noreferrer","className":"text-fd-muted-foreground transition-colors hover:text-fd-foreground","children":"Sponsors"}]}]
+2e:["$","li","https://www.apache.org/security/",{"children":["$","$L7",null,{"href":"https://www.apache.org/security/","target":"_blank","rel":"noopener noreferrer","className":"text-fd-muted-foreground transition-colors hover:text-fd-foreground","children":"Security"}]}]
+2f:["$","li","https://privacy.apache.org/policies/privacy-policy-public.html",{"children":["$","$L7",null,{"href":"https://privacy.apache.org/policies/privacy-policy-public.html","target":"_blank","rel":"noopener noreferrer","className":"text-fd-muted-foreground transition-colors hover:text-fd-foreground","children":"Privacy"}]}]
+30:["$","div",null,{"className":"mt-12 border-t border-fd-border pt-8 text-xs leading-relaxed text-fd-muted-foreground/70","children":[["$","p",null,{"className":"mt-4","children":["Copyright © ",2026," The Apache Software Foundation, Licensed under the Apache License, Version 2.0."]}],["$","p",null,{"className":"mt-4","children":"Apache Iggy, Iggy, Apache, and the Apache Iggy logo are trademarks or registered trademarks of The Apache Software Foundation. All other marks mentioned may be [...]
+:HL["/img/authors/piotr.png","image"]
+24:["$","main",null,{"className":"min-h-screen px-6 py-16 md:px-12","children":["$","article",null,{"className":"mx-auto max-w-5xl","children":[["$","header",null,{"className":"mb-10","children":[["$","time",null,{"className":"text-sm font-medium text-fd-muted-foreground","children":"August 16, 2023"}],["$","h1",null,{"className":"mt-3 text-3xl font-extrabold tracking-tight text-fd-foreground md:text-5xl","children":"Welcome to the changelog"}],["$","div",null,{"className":"mt-6 flex fle [...]
+29:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]
+31:I[27201,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"IconMark"]
+27:null
+2b:[["$","title","0",{"children":"Welcome to the changelog | Apache Iggy"}],["$","link","1",{"rel":"canonical","href":"https://iggy.apache.org/blogs/2023/08/16/welcome/"}],["$","link","2",{"rel":"alternate","type":"text/markdown","href":"https://iggy.apache.org/blogs/2023/08/16/welcome.md"}],["$","meta","3",{"property":"og:title","content":"Welcome to the changelog | Apache Iggy"}],["$","meta","4",{"property":"og:url","content":"https://iggy.apache.org/blogs/2023/08/16/welcome/"}],["$"," [...]
diff --git a/blogs/2023/08/16/welcome/__next._index.txt b/blogs/2023/08/16/welcome/__next._index.txt
new file mode 100644
index 000000000..42b058136
--- /dev/null
+++ b/blogs/2023/08/16/welcome/__next._index.txt
@@ -0,0 +1,20 @@
+1:"$Sreact.fragment"
+3:I[17751,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"RootProvider"]
+4:I[39756,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"default"]
+5:I[58298,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/3-_96y-evozm0.js"],"default"]
+6:I[37457,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"default"]
+7:I[22016,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],""]
+:HL["/_next/static/chunks/1_55v0vlfews3.css","style"]
+2:T512,{"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://iggy.apache.org/#organization","name":"The Apache Software Foundation","url":"https://www.apache.org/","logo":"https://iggy.apache.org/img/asf_logo.svg","contactPoint":{"@type":"ContactPoint","contactType":"technical support","email":"dev@iggy.apache.org","url":"https://iggy.apache.org/community/"}},{"@type":"WebSite","@id":"https://iggy.apache.org/#website","name":"Apache Iggy","url":"https://iggy.a [...]
+0:{"buildId":"CEAllZE6ERPzzxzpa_n8G","data":[{"rsc":["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/1_55v0vlfews3.css","precedence":"next"}],["$","script","script-0",{"src":"/_next/static/chunks/05hk4ely-lns6.js","async":true}],["$","script","script-1",{"src":"/_next/static/chunks/2tvyahbdutabx.js","async":true}]],["$","html",null,{"lang":"en","suppressHydrationWarning":true,"children":["$","body",null,{"className":"flex min-h-screen flex-col  [...]
+10:I[79520,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],""]
+11:I[69877,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"Matomo"]
+8:["$","a",null,{"href":"/sitemap.xml","className":"underline hover:text-fd-primary","children":"/sitemap.xml"}]
+9:["$","a",null,{"href":"/llms.txt","className":"underline hover:text-fd-primary","children":"/llms.txt"}]
+a:["$","$L10",null,{"id":"matomo","strategy":"afterInteractive","children":"var _paq = window._paq = window._paq || [];\n_paq.push([\"setDoNotTrack\", true]);\n_paq.push([\"disableCookies\"]);\n_paq.push(['trackPageView']);\n_paq.push(['enableLinkTracking']);\n(function() {\n  var u=\"https://analytics.apache.org/\";\n  _paq.push(['setTrackerUrl', u+'matomo.php']);\n  _paq.push(['setSiteId', '80']);\n  var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];\n  [...]
+b:["$","$L11",null,{}]
+d:300
+f:true
+d:C
+e:0
+c:"$undefined"
diff --git a/blogs/2023/08/16/welcome/__next._tree.txt b/blogs/2023/08/16/welcome/__next._tree.txt
new file mode 100644
index 000000000..921b77902
--- /dev/null
+++ b/blogs/2023/08/16/welcome/__next._tree.txt
@@ -0,0 +1,3 @@
+:HL["/_next/static/chunks/1_55v0vlfews3.css","style"]
+:HL["/img/authors/piotr.png","image"]
+0:{"tree":{"name":"","param":null,"prefetchHints":4112,"slots":{"children":{"name":"(site)","param":null,"prefetchHints":4096,"slots":{"children":{"name":"blogs","param":null,"prefetchHints":4160,"slots":{"children":{"name":"slug","param":{"type":"c","key":"2023/08/16/welcome","siblings":[]},"prefetchHints":4192,"slots":{"children":{"name":"__PAGE__","param":null,"prefetchHints":4256,"slots":null}}}}}}}}},"staleTime":300,"buildId":"CEAllZE6ERPzzxzpa_n8G"}
diff --git a/blogs/2023/08/16/welcome/index.html b/blogs/2023/08/16/welcome/index.html
new file mode 100644
index 000000000..2e7265064
--- /dev/null
+++ b/blogs/2023/08/16/welcome/index.html
@@ -0,0 +1,3 @@
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" href="/img/authors/piotr.png" as="image"/><link rel="stylesheet" href="/_next/static/chunks/1_55v0vlfews3.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/1qt6pht_u0de1.js"/><script src="/_next/static/chunks/1iye7dwhtxrnu.js" async=""></script><script src="/_next/static/chunks/1t7fq8 [...]
+<p>For the time being, I haven&#x27;t documented all the changes that I&#x27;ve made to the project, but since there&#x27;s already a few of us working on the different parts of the project, I think it&#x27;s a good idea to start documenting them, especially when there are some breaking changes or the new features being added to the server, that should be implemented in the client SDK as well :)</p>
+<p>Stay tuned for the updates and the upcoming features, such as optional message headers!</p></div><footer class="mt-16 border-t border-fd-border pt-8"><a class="inline-flex items-center gap-2 text-sm font-medium text-fd-primary transition-colors hover:opacity-80" href="/blogs/">← Back to all posts</a></footer></article></main><!--$--><!--/$--><footer class="border-t border-fd-border bg-fd-background px-6 py-14 md:px-12"><div class="mx-auto max-w-6xl"><div class="grid gap-10 sm:grid-col [...]
\ No newline at end of file
diff --git a/blogs/2023/08/16/welcome/index.txt b/blogs/2023/08/16/welcome/index.txt
new file mode 100644
index 000000000..f827c748a
--- /dev/null
+++ b/blogs/2023/08/16/welcome/index.txt
@@ -0,0 +1,52 @@
+1:"$Sreact.fragment"
+3:I[17751,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"RootProvider"]
+4:I[39756,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"default"]
+5:I[58298,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/3-_96y-evozm0.js"],"default"]
+6:I[37457,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"default"]
+7:I[22016,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],""]
+12:I[68027,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"default",1]
+:HL["/_next/static/chunks/1_55v0vlfews3.css","style"]
+2:T512,{"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://iggy.apache.org/#organization","name":"The Apache Software Foundation","url":"https://www.apache.org/","logo":"https://iggy.apache.org/img/asf_logo.svg","contactPoint":{"@type":"ContactPoint","contactType":"technical support","email":"dev@iggy.apache.org","url":"https://iggy.apache.org/community/"}},{"@type":"WebSite","@id":"https://iggy.apache.org/#website","name":"Apache Iggy","url":"https://iggy.a [...]
+0:{"P":null,"c":["","blogs","2023","08","16","welcome",""],"q":"","i":false,"f":[[["",{"children":["(site)",{"children":["blogs",{"children":[["slug","2023/08/16/welcome","c",[]],{"children":["__PAGE__",{},"$undefined","$undefined",4608]},"$undefined","$undefined",4608]},"$undefined","$undefined",4608]},"$undefined","$undefined",4608]},"$undefined","$undefined",4624],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/1_55v0vlfews3.css","preceden [...]
+14:I[79520,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],""]
+15:I[69877,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"Matomo"]
+16:I[5014,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],"default"]
+17:I[64345,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js"],"HomeLayout"]
+18:I[88760,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js"],"Logo"]
+19:I[15269,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js"],"CommunityDropdown"]
+1a:I[15269,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js"],"communityLinks"]
+1b:I[29966,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js"],"ASFDropdown"]
+1c:I[36330,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js"],"ASFMobileLinks"]
+25:I[97367,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"OutletBoundary"]
+26:"$Sreact.suspense"
+28:I[97367,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"ViewportBoundary"]
+2a:I[97367,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"MetadataBoundary"]
+8:["$","$L7","/community",{"href":"/community","className":"transition-colors hover:text-fd-primary","children":"Community"}]
+9:["$","p",null,{"className":"mt-6 max-w-md text-xs text-fd-muted-foreground","children":["Every page on this site is listed in"," ",["$","a",null,{"href":"/sitemap.xml","className":"underline hover:text-fd-primary","children":"/sitemap.xml"}],", and"," ",["$","a",null,{"href":"/llms.txt","className":"underline hover:text-fd-primary","children":"/llms.txt"}]," ","summarises the documentation."]}]
+a:["$","$L14",null,{"id":"matomo","strategy":"afterInteractive","children":"var _paq = window._paq = window._paq || [];\n_paq.push([\"setDoNotTrack\", true]);\n_paq.push([\"disableCookies\"]);\n_paq.push(['trackPageView']);\n_paq.push(['enableLinkTracking']);\n(function() {\n  var u=\"https://analytics.apache.org/\";\n  _paq.push(['setTrackerUrl', u+'matomo.php']);\n  _paq.push(['setSiteId', '80']);\n  var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];\n  [...]
+b:["$","$L15",null,{}]
+c:["$","$1","c",{"children":[[["$","script","script-0",{"src":"/_next/static/chunks/241-fa32f9zay.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/_next/static/chunks/3x8y3fmtn6lnc.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/_next/static/chunks/250gopd52txql.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/_next/static/chunks/0n3fueko2xquo.js","async":true,"nonce":"$undefined"}]],[["$","div",null,{"className" [...]
+d:["$","$1","c",{"children":[null,["$","$L4",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}]
+e:["$","$1","c",{"children":[null,["$","$L4",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}]
+f:["$","$1","c",{"children":["$L24",[["$","script","script-0",{"src":"/_next/static/chunks/1k39uva2a578s.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/_next/static/chunks/23ktdyx90z0v3.js","async":true,"nonce":"$undefined"}]],["$","$L25",null,{"children":["$","$26",null,{"name":"Next.MetadataOutlet","children":"$@27"}]}]]}]
+11:["$","$1","h",{"children":[null,["$","$L28",null,{"children":"$L29"}],["$","div",null,{"hidden":true,"children":["$","$L2a",null,{"children":["$","$26",null,{"name":"Next.Metadata","children":"$L2b"}]}]}],null]}]
+13:["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/1_55v0vlfews3.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]
+10:C
+1d:["$","$L7","/",{"href":"/","className":"transition-colors hover:text-fd-primary","children":"Home"}]
+1e:["$","$L7","/docs",{"href":"/docs","className":"transition-colors hover:text-fd-primary","children":"Documentation"}]
+1f:["$","$L7","/blogs",{"href":"/blogs","className":"transition-colors hover:text-fd-primary","children":"Blog"}]
+20:["$","$L7","/downloads",{"href":"/downloads","className":"transition-colors hover:text-fd-primary","children":"Downloads"}]
+21:["$","$L7","/community",{"href":"/community","className":"transition-colors hover:text-fd-primary","children":"Community"}]
+22:["$","p",null,{"className":"mt-6 max-w-md text-xs text-fd-muted-foreground","children":["Every page on this site is listed in"," ",["$","a",null,{"href":"/sitemap.xml","className":"underline hover:text-fd-primary","children":"/sitemap.xml"}],", and"," ",["$","a",null,{"href":"/llms.txt","className":"underline hover:text-fd-primary","children":"/llms.txt"}]," ","summarises the documentation."]}]
+23:["$","footer",null,{"className":"border-t border-fd-border bg-fd-background px-6 py-14 md:px-12","children":["$","div",null,{"className":"mx-auto max-w-6xl","children":[["$","div",null,{"className":"grid gap-10 sm:grid-cols-2 lg:grid-cols-4","children":[["$","div","Docs",{"children":[["$","h2",null,{"className":"mb-4 text-sm font-semibold uppercase tracking-wide text-fd-primary","children":"Docs"}],["$","ul",null,{"className":"space-y-2.5 text-sm","children":[["$","li","/docs",{"child [...]
+2c:["$","li","https://www.apache.org/foundation/contributing.html",{"children":["$","$L7",null,{"href":"https://www.apache.org/foundation/contributing.html","target":"_blank","rel":"noopener noreferrer","className":"text-fd-muted-foreground transition-colors hover:text-fd-foreground","children":"Donate"}]}]
+2d:["$","li","https://www.apache.org/foundation/sponsorship.html",{"children":["$","$L7",null,{"href":"https://www.apache.org/foundation/sponsorship.html","target":"_blank","rel":"noopener noreferrer","className":"text-fd-muted-foreground transition-colors hover:text-fd-foreground","children":"Sponsors"}]}]
+2e:["$","li","https://www.apache.org/security/",{"children":["$","$L7",null,{"href":"https://www.apache.org/security/","target":"_blank","rel":"noopener noreferrer","className":"text-fd-muted-foreground transition-colors hover:text-fd-foreground","children":"Security"}]}]
+2f:["$","li","https://privacy.apache.org/policies/privacy-policy-public.html",{"children":["$","$L7",null,{"href":"https://privacy.apache.org/policies/privacy-policy-public.html","target":"_blank","rel":"noopener noreferrer","className":"text-fd-muted-foreground transition-colors hover:text-fd-foreground","children":"Privacy"}]}]
+30:["$","div",null,{"className":"mt-12 border-t border-fd-border pt-8 text-xs leading-relaxed text-fd-muted-foreground/70","children":[["$","p",null,{"className":"mt-4","children":["Copyright © ",2026," The Apache Software Foundation, Licensed under the Apache License, Version 2.0."]}],["$","p",null,{"className":"mt-4","children":"Apache Iggy, Iggy, Apache, and the Apache Iggy logo are trademarks or registered trademarks of The Apache Software Foundation. All other marks mentioned may be [...]
+:HL["/img/authors/piotr.png","image"]
+24:["$","main",null,{"className":"min-h-screen px-6 py-16 md:px-12","children":["$","article",null,{"className":"mx-auto max-w-5xl","children":[["$","header",null,{"className":"mb-10","children":[["$","time",null,{"className":"text-sm font-medium text-fd-muted-foreground","children":"August 16, 2023"}],["$","h1",null,{"className":"mt-3 text-3xl font-extrabold tracking-tight text-fd-foreground md:text-5xl","children":"Welcome to the changelog"}],["$","div",null,{"className":"mt-6 flex fle [...]
+29:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]
+31:I[27201,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"IconMark"]
+27:null
+2b:[["$","title","0",{"children":"Welcome to the changelog | Apache Iggy"}],["$","link","1",{"rel":"canonical","href":"https://iggy.apache.org/blogs/2023/08/16/welcome/"}],["$","link","2",{"rel":"alternate","type":"text/markdown","href":"https://iggy.apache.org/blogs/2023/08/16/welcome.md"}],["$","meta","3",{"property":"og:title","content":"Welcome to the changelog | Apache Iggy"}],["$","meta","4",{"property":"og:url","content":"https://iggy.apache.org/blogs/2023/08/16/welcome/"}],["$"," [...]
diff --git a/blogs/2023/08/19/message-headers.md b/blogs/2023/08/19/message-headers.md
new file mode 100644
index 000000000..0721fd9ab
--- /dev/null
+++ b/blogs/2023/08/19/message-headers.md
@@ -0,0 +1,249 @@
+# Message headers
+
+Published: 2023-08-19
+
+Rendered page: https://iggy.apache.org/blogs/2023/08/19/message-headers/
+
+Source: https://github.com/apache/iggy-website/blob/main/content/blog/message-headers.mdx
+
+The optional message headers which you can think of as an additional metadata for your messages have been recently implemented, Let's discover what these headers are, how to use them and more importantly, how to implement them in your own transport.
+
+
+## Breaking changes
+
+The first draft of the message headers implementation starts with the initial commit [#bc1d0b3](https://github.com/apache/iggy/commit/bc1d0b369a268783bd329436aba3f6920aae478e). The breaking change to the streaming server has been introduced in the commit [#7c73bd3](https://github.com/apache/iggy/commit/7c73bd3d9d59fb685cbaaca5901dec6cac43ddaf) - up until this point, the existing implementation of the `SendMessages`, `PollMessages` and the underlying file system messages' storage does wor [...]
+
+## Introduction
+
+Message headers are an **optional** part of the message which can be used to provide the additional metadata for the message (they are not a part of the message body. Similar to e.g. HTTP headers, you can think of them as a **key-value pairs**, or more precisely the dictionary or map. The headers consist of the key and the value, where the key is a string (**UTF-8 bytes**) and the value is a byte array.
+
+Since the headers are optional, you can send a message without any headers at all. There's no limit on the number of headers you can send, but the total size of the headers is currently limited to **100 KB**. The header key is **case-sensitive**, so it's best to send the **lowercase** keys. The maximum length of the key and the value is **255 bytes** (the maximum value of the `u8` type).
+
+For now, there are no reserved headers, so you can use any key you want. However, in the future, we might introduce some reserved headers used by the streaming server for the specific purposes such as the message compression, distributed tracing and so no.
+
+The **sample applications** using the message headers can be found [here](https://github.com/apache/iggy/tree/master/examples/rust/src/message-headers).
+
+## Implementation
+
+### Structures
+
+We will start with the sample Rust implementation of the headers. The headers are defined as a `HashMap` where the key is a `string` (wrapped with a custom `HeaderKey` struct to enforce the validation) and the value is a `HeaderValue` struct. The `HeaderValue` struct consists of the `HeaderKind` enum and the `Vec<u8>` value. The `HeaderKind` enum defines the type of the value, which can be either a raw byte array or one of the primitive types.
+
+The primitive types are defined as the enum variants, so you can easily match on them. The `HeaderKind` enum is used to validate the value and to serialize/deserialize it. The idea is that the value will always remain a byte array, but you can use the `HeaderKind` to convert it to the desired type.
+
+```rust
+pub struct HeaderKey(String);
+
+pub struct HeaderValue {
+    pub kind: HeaderKind,
+    pub value: Vec<u8>
+}
+
+pub enum HeaderKind {
+    Raw,
+    String,
+    Bool,
+    Int8,
+    Int16,
+    Int32,
+    Int64,
+    Int128,
+    Uint8,
+    Uint16,
+    Uint32,
+    Uint64,
+    Uint128,
+    Float32,
+    Float64
+}
+```
+
+Next, let's take a look at the `SendMessages` command, and in particular we will see what has changed in the underlying `Message` struct (keep in mind that headers are unique per message, so they are not a part of the `SendMessages` command). The `Message` struct now has an additional `headers` field, which is a `HashMap` of `HeaderKey` and `HeaderValue` structs:
+
+```rust
+pub struct SendMessages {
+    pub stream_id: Identifier,
+    pub topic_id: Identifier,
+    pub partitioning: Partitioning,
+    pub messages: Vec<Message>
+}
+
+pub struct Message {
+    pub id: u128,
+    pub length: u32,
+    pub payload: Bytes,
+    pub headers: Option<HashMap<HeaderKey, HeaderValue>>
+}
+```
+
+### JSON transport
+
+Headers are optional, so depending on the programming language, you can either use the `option` type, or the `null` value, or even instantiate an `empty` map - it's up to you. The important part is the serialization. For the JSON transport, it's very easy, as you can see in the following example:
+
+```json
+{
+  "partitioning": {
+    "kind": "partition_id",
+    "value": "{{partition_id_payload_base64}}"
+  },
+  "messages": [{
+    "id": 0,
+    "payload": "{{message_1_payload_base64}}"
+  }, {
+    "id": 0,
+    "payload": "{{message_2_payload_base64}}",
+    "headers": {
+      "key_1": {
+        "kind": "string",
+        "value": "{{header_1_payload_base_64}}"
+      }
+    }
+  }]
+}
+```
+
+Simply put, in order to include the headers in the message, you need to add the `headers` field to the message struct. The `headers` field is a map of the `String` keys and the `HeaderValue` values. The `HeaderValue` value is a JSON object which consists of the `kind` and the `value` fields. The `kind` field is a string which defines the type of the value, and the `value` field is a base64-encoded byte array.
+
+### Binary transport
+
+Now, we can move on to the more complex part, being the binary transport (as always, it's the same schema for both, TCP and QUIC protocol).
+
+We will begin with the headers serialization for the whole `HashMap`:
+
+```rust
+impl BytesSerializable for HashMap<HeaderKey, HeaderValue> {
+    fn as_bytes(&self) -> Vec<u8> {
+        if self.is_empty() {
+            return EMPTY_BYTES;
+        }
+
+        let mut bytes = vec![];
+        for (key, value) in self {
+            bytes.put_u32_le(key.0.len() as u32);
+            bytes.extend(key.0.as_bytes());
+            bytes.put_u8(value.kind.as_code());
+            bytes.put_u32_le(value.value.len() as u32);
+            bytes.extend(&value.value);
+        }
+
+        bytes
+    }
+}
+```
+
+If for some reason, there are no headers, we return an empty byte array. Otherwise, we iterate over the headers and serialize them one by one. The serialization shouldn't be too difficult as we start with the key length, then we add the key itself (**UTF-8 bytes**), then we add the value type (the `HeaderKind` enum variant), then we add the value length, and finally we add the value itself (**UTF-8 bytes**).
+
+The length of the single header is the following: `4 bytes` for the key length, `n bytes` (**1-255**) for the key, `1 byte` for the value kind, `4 bytes` for the value length and `n bytes` (**1-255**) for the value itself.
+
+The `HeaderKind` uses the following codes:
+
+```rust
+impl HeaderKind {
+    pub fn as_code(&self) -> u8 {
+        match self {
+            HeaderKind::Raw => 1,
+            HeaderKind::String => 2,
+            HeaderKind::Bool => 3,
+            HeaderKind::Int8 => 4,
+            HeaderKind::Int16 => 5,
+            HeaderKind::Int32 => 6,
+            HeaderKind::Int64 => 7,
+            HeaderKind::Int128 => 8,
+            HeaderKind::Uint8 => 9,
+            HeaderKind::Uint16 => 10,
+            HeaderKind::Uint32 => 11,
+            HeaderKind::Uint64 => 12,
+            HeaderKind::Uint128 => 13,
+            HeaderKind::Float32 => 14,
+            HeaderKind::Float64 => 15,
+        }
+    }
+}
+```
+
+### Sending the messages with headers
+
+Now, let's see how we can include the headers in a message serialization:
+
+```rust
+fn as_bytes(&self) -> Vec<u8> {
+    let mut bytes = Vec::with_capacity(self.get_size_bytes() as usize);
+    bytes.put_u128_le(self.id);
+    if let Some(headers) = &self.headers {
+        let headers_bytes = headers.as_bytes();
+        bytes.put_u32_le(headers_bytes.len() as u32);
+        bytes.extend(&headers_bytes);
+    } else {
+        bytes.put_u32_le(0);
+    }
+    bytes.put_u32_le(self.length);
+    bytes.extend(&self.payload);
+    bytes
+}
+```
+
+The important thing to notice, is that the **headers are being serialized right after the `ID` and before the actual message payload**. At first, we add the total length of the headers' payload, then we add the headers themselves, and finally we include the message payload (length + value) as before. If the headers are not provided at all (e.g. `none` or `null` or an `empty` array), we add the `0` value as the headers' length, and we skip the headers' serialization, since there are no he [...]
+
+
+### Polling the messages with headers
+
+Eventually, let's discuss the `PollMessages` command. Nothing has changed here, except of the extended `Message` struct, which now contains the optional headers. For the JSON transport it's the same as when sending the messages, and for the binary transport, we need to deserialize the headers in the same way as we did when sending the messages. Let's find out how it works.
+
+
+```rust
+pub fn map_message(&self, bytes: &mut Vec<u8>) {
+    bytes.put_u64_le(self.offset);
+    bytes.put_u64_le(self.timestamp);
+    bytes.put_u128_le(self.id);
+    if let Some(headers) = &self.headers {
+        let headers_bytes = headers.as_bytes();
+        bytes.put_u32_le(headers_bytes.len() as u32);
+        bytes.extend(&headers_bytes);
+    } else {
+        bytes.put_u32_le(0u32);
+    }
+    bytes.put_u32_le(self.length);
+    bytes.extend(&self.payload);
+}
+```
+
+As you can see, the headers are being serialized in the same way as when sending the messages. The only difference is that the `Message` struct also contains the `offset` and the `timestamp` fields, which are being serialized before the `ID` field. Besides that, nothing has changed, as we simply include the headers right after the `ID` field and before the actual message payload.
+
+### Sample usage
+
+The headers usage is pretty straightforward, as we simply need to create the new `HashMap`:
+
+```rust
+let mut headers = HashMap::new();
+headers.insert(HeaderKey::new("key 1")?, HeaderValue::from_str("value1")?);
+headers.insert(HeaderKey::new("key-2")?, HeaderValue::from_bool(true)?);
+headers.insert(HeaderKey::new("key_3")?, HeaderValue::from_uint64(123456)?);
+```
+
+You might also use the conversion based on the implemented traits:
+
+```rust
+headers.insert("key".try_into()?, HeaderValue::from_float64(123.45)?);
+let value = headers.get(&"key".try_into()?)?.as_float64()?;
+```
+
+Keep in mind, that the `HeaderKey` and the `HeaderValue` structs are being validated whenever you use one of the available methods to create them.
+
+And then, we can send the messages with the headers (first `none` argument is for the optional ID):
+
+```rust
+let send_messages = SendMessages {
+    stream_id: Identifier::numeric(1)?,
+    topic_id: Identifier::named("sample")?,
+    partitioning: Partitioning::balanced(),
+    messages: vec![Message::new(None, Bytes::from("hello-world") , Some(headers))]
+};
+```
+
+When you poll the messages and want to read the header value based on its kind, you can also use the existing helper methods, for example:
+
+```rust
+let value1 = headers.get(&HeaderKey::new("key 1")?)?.as_str()?;
+let value2 = headers.get(&HeaderKey::new("key-2")?)?.as_bool()?;
+let value3 = headers.get(&HeaderKey::new("key_3")?)?.as_uint64()?;
+```
diff --git a/blogs/2023/08/19/message-headers/__next.!KHNpdGUp.blogs.$c$slug.__PAGE__.txt b/blogs/2023/08/19/message-headers/__next.!KHNpdGUp.blogs.$c$slug.__PAGE__.txt
new file mode 100644
index 000000000..825e3ffe1
--- /dev/null
+++ b/blogs/2023/08/19/message-headers/__next.!KHNpdGUp.blogs.$c$slug.__PAGE__.txt
@@ -0,0 +1,182 @@
+1:"$Sreact.fragment"
+2:I[94157,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],"Heading"]
+3:I[47873,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],"default"]
+:HL["/img/authors/piotr.png","image"]
+33:X
+38:X
+38:C
+0:{"buildId":"CEAllZE6ERPzzxzpa_n8G","data":[{"rsc":["$","$1","c",{"children":[["$","main",null,{"className":"min-h-screen px-6 py-16 md:px-12","children":["$","article",null,{"className":"mx-auto max-w-5xl","children":[["$","header",null,{"className":"mb-10","children":[["$","time",null,{"className":"text-sm font-medium text-fd-muted-foreground","children":"August 19, 2023"}],["$","h1",null,{"className":"mt-3 text-3xl font-extrabold tracking-tight text-fd-foreground md:text-5xl","childr [...]
+3d:I[44324,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],"CodeBlock"]
+42:I[44324,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],"Pre"]
+5a:I[22016,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],""]
+5b:I[97367,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"OutletBoundary"]
+5c:"$Sreact.suspense"
+5e:I[97367,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"ViewportBoundary"]
+5f:I[97367,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"MetadataBoundary"]
+60:I[27201,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"IconMark"]
+61:I[39756,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"default"]
+62:I[37457,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"default"]
+4:["$","strong",null,{"children":"lowercase"}]
+5:["$","strong",null,{"children":"255 bytes"}]
+6:["$","code",null,{"children":"u8"}]
+7:["$","p",null,{"children":"For now, there are no reserved headers, so you can use any key you want. However, in the future, we might introduce some reserved headers used by the streaming server for the specific purposes such as the message compression, distributed tracing and so no."}]
+8:["$","p",null,{"children":["The ",["$","strong",null,{"children":"sample applications"}]," using the message headers can be found ",["$","$L3",null,{"href":"https://github.com/apache/iggy/tree/master/examples/rust/src/message-headers","children":"here"}],"."]}]
+9:["$","$L2",null,{"as":"h2","id":"implementation","children":"Implementation"}]
+a:["$","$L2",null,{"as":"h3","id":"structures","children":"Structures"}]
+b:["$","p",null,{"children":["We will start with the sample Rust implementation of the headers. The headers are defined as a ",["$","code",null,{"children":"HashMap"}]," where the key is a ",["$","code",null,{"children":"string"}]," (wrapped with a custom ",["$","code",null,{"children":"HeaderKey"}]," struct to enforce the validation) and the value is a ",["$","code",null,{"children":"HeaderValue"}]," struct. The ",["$","code",null,{"children":"HeaderValue"}]," struct consists of the ",[ [...]
+c:["$","p",null,{"children":["The primitive types are defined as the enum variants, so you can easily match on them. The ",["$","code",null,{"children":"HeaderKind"}]," enum is used to validate the value and to serialize/deserialize it. The idea is that the value will always remain a byte array, but you can use the ",["$","code",null,{"children":"HeaderKind"}]," to convert it to the desired type."]}]
+3e:T1068,<svg viewBox="0 0 24 24"><path d="M23.8346 11.7033l-1.0073-.6236a13.7268 13.7268 0 00-.0283-.2936l.8656-.8069a.3483.3483 0 00-.1154-.578l-1.1066-.414a8.4958 8.4958 0 00-.087-.2856l.6904-.9587a.3462.3462 0 00-.2257-.5446l-1.1663-.1894a9.3574 9.3574 0 00-.1407-.2622l.49-1.0761a.3437.3437 0 00-.0274-.3361.3486.3486 0 00-.3006-.154l-1.1845.0416a6.7444 6.7444 0 00-.1873-.2268l.2723-1.153a.3472.3472 0 00-.417-.4172l-1.1532.2724a14.0183 14.0183 0 00-.2278-.1873l.0415-1.1845a.3442.3442  [...]
+e:["$","p",null,{"children":["Next, let's take a look at the ",["$","code",null,{"children":"SendMessages"}]," command, and in particular we will see what has changed in the underlying ",["$","code",null,{"children":"Message"}]," struct (keep in mind that headers are unique per message, so they are not a part of the ",["$","code",null,{"children":"SendMessages"}]," command). The ",["$","code",null,{"children":"Message"}]," struct now has an additional ",["$","code",null,{"children":"head [...]
+40:T1068,<svg viewBox="0 0 24 24"><path d="M23.8346 11.7033l-1.0073-.6236a13.7268 13.7268 0 00-.0283-.2936l.8656-.8069a.3483.3483 0 00-.1154-.578l-1.1066-.414a8.4958 8.4958 0 00-.087-.2856l.6904-.9587a.3462.3462 0 00-.2257-.5446l-1.1663-.1894a9.3574 9.3574 0 00-.1407-.2622l.49-1.0761a.3437.3437 0 00-.0274-.3361.3486.3486 0 00-.3006-.154l-1.1845.0416a6.7444 6.7444 0 00-.1873-.2268l.2723-1.153a.3472.3472 0 00-.417-.4172l-1.1532.2724a14.0183 14.0183 0 00-.2278-.1873l.0415-1.1845a.3442.3442  [...]
+10:["$","$L2",null,{"as":"h3","id":"json-transport","children":"JSON transport"}]
+11:["$","p",null,{"children":["Headers are optional, so depending on the programming language, you can either use the ",["$","code",null,{"children":"option"}]," type, or the ",["$","code",null,{"children":"null"}]," value, or even instantiate an ",["$","code",null,{"children":"empty"}]," map - it's up to you. The important part is the serialization. For the JSON transport, it's very easy, as you can see in the following example:"]}]
+12:["$","$L3d",null,{"className":"shiki shiki-themes github-light github-dark","style":{"--shiki-light":"#24292e","--shiki-dark":"#e1e4e8","--shiki-light-bg":"#fff","--shiki-dark-bg":"#24292e"},"tabIndex":"0","icon":"<svg viewBox=\"0 0 24 24\"><path d=\"M 6,1 C 4.354992,1 3,2.354992 3,4 v 16 c 0,1.645008 1.354992,3 3,3 h 12 c 1.645008,0 3,-1.354992 3,-3 V 8 7 A 1.0001,1.0001 0 0 0 20.707031,6.2929687 l -5,-5 A 1.0001,1.0001 0 0 0 15,1 h -1 z m 0,2 h 7 v 3 c 0,1.645008 1.354992,3 3,3 h 3  [...]
+13:["$","p",null,{"children":["Simply put, in order to include the headers in the message, you need to add the ",["$","code",null,{"children":"headers"}]," field to the message struct. The ",["$","code",null,{"children":"headers"}]," field is a map of the ",["$","code",null,{"children":"String"}]," keys and the ",["$","code",null,{"children":"HeaderValue"}]," values. The ",["$","code",null,{"children":"HeaderValue"}]," value is a JSON object which consists of the ",["$","code",null,{"chi [...]
+14:["$","$L2",null,{"as":"h3","id":"binary-transport","children":"Binary transport"}]
+15:["$","p",null,{"children":"Now, we can move on to the more complex part, being the binary transport (as always, it's the same schema for both, TCP and QUIC protocol)."}]
+16:["$","p",null,{"children":["We will begin with the headers serialization for the whole ",["$","code",null,{"children":"HashMap"}],":"]}]
+4a:T1068,<svg viewBox="0 0 24 24"><path d="M23.8346 11.7033l-1.0073-.6236a13.7268 13.7268 0 00-.0283-.2936l.8656-.8069a.3483.3483 0 00-.1154-.578l-1.1066-.414a8.4958 8.4958 0 00-.087-.2856l.6904-.9587a.3462.3462 0 00-.2257-.5446l-1.1663-.1894a9.3574 9.3574 0 00-.1407-.2622l.49-1.0761a.3437.3437 0 00-.0274-.3361.3486.3486 0 00-.3006-.154l-1.1845.0416a6.7444 6.7444 0 00-.1873-.2268l.2723-1.153a.3472.3472 0 00-.417-.4172l-1.1532.2724a14.0183 14.0183 0 00-.2278-.1873l.0415-1.1845a.3442.3442  [...]
+18:["$","p",null,{"children":["If for some reason, there are no headers, we return an empty byte array. Otherwise, we iterate over the headers and serialize them one by one. The serialization shouldn't be too difficult as we start with the key length, then we add the key itself (",["$","strong",null,{"children":"UTF-8 bytes"}],"), then we add the value type (the ",["$","code",null,{"children":"HeaderKind"}]," enum variant), then we add the value length, and finally we add the value itsel [...]
+19:["$","p",null,{"children":["The length of the single header is the following: ",["$","code",null,{"children":"4 bytes"}]," for the key length, ",["$","code",null,{"children":"n bytes"}]," (",["$","strong",null,{"children":"1-255"}],") for the key, ",["$","code",null,{"children":"1 byte"}]," for the value kind, ",["$","code",null,{"children":"4 bytes"}]," for the value length and ",["$","code",null,{"children":"n bytes"}]," (",["$","strong",null,{"children":"1-255"}],") for the value i [...]
+1a:["$","p",null,{"children":["The ",["$","code",null,{"children":"HeaderKind"}]," uses the following codes:"]}]
+4c:T1068,<svg viewBox="0 0 24 24"><path d="M23.8346 11.7033l-1.0073-.6236a13.7268 13.7268 0 00-.0283-.2936l.8656-.8069a.3483.3483 0 00-.1154-.578l-1.1066-.414a8.4958 8.4958 0 00-.087-.2856l.6904-.9587a.3462.3462 0 00-.2257-.5446l-1.1663-.1894a9.3574 9.3574 0 00-.1407-.2622l.49-1.0761a.3437.3437 0 00-.0274-.3361.3486.3486 0 00-.3006-.154l-1.1845.0416a6.7444 6.7444 0 00-.1873-.2268l.2723-1.153a.3472.3472 0 00-.417-.4172l-1.1532.2724a14.0183 14.0183 0 00-.2278-.1873l.0415-1.1845a.3442.3442  [...]
+1c:["$","$L2",null,{"as":"h3","id":"sending-the-messages-with-headers","children":"Sending the messages with headers"}]
+1d:["$","p",null,{"children":"Now, let's see how we can include the headers in a message serialization:"}]
+4e:T1068,<svg viewBox="0 0 24 24"><path d="M23.8346 11.7033l-1.0073-.6236a13.7268 13.7268 0 00-.0283-.2936l.8656-.8069a.3483.3483 0 00-.1154-.578l-1.1066-.414a8.4958 8.4958 0 00-.087-.2856l.6904-.9587a.3462.3462 0 00-.2257-.5446l-1.1663-.1894a9.3574 9.3574 0 00-.1407-.2622l.49-1.0761a.3437.3437 0 00-.0274-.3361.3486.3486 0 00-.3006-.154l-1.1845.0416a6.7444 6.7444 0 00-.1873-.2268l.2723-1.153a.3472.3472 0 00-.417-.4172l-1.1532.2724a14.0183 14.0183 0 00-.2278-.1873l.0415-1.1845a.3442.3442  [...]
+1f:["$","p",null,{"children":["The important thing to notice, is that the ",["$","strong",null,{"children":["headers are being serialized right after the ",["$","code",null,{"children":"ID"}]," and before the actual message payload"]}],". At first, we add the total length of the headers' payload, then we add the headers themselves, and finally we include the message payload (length + value) as before. If the headers are not provided at all (e.g. ",["$","code",null,{"children":"none"}],"  [...]
+20:["$","$L2",null,{"as":"h3","id":"polling-the-messages-with-headers","children":"Polling the messages with headers"}]
+21:["$","p",null,{"children":["Eventually, let's discuss the ",["$","code",null,{"children":"PollMessages"}]," command. Nothing has changed here, except of the extended ",["$","code",null,{"children":"Message"}]," struct, which now contains the optional headers. For the JSON transport it's the same as when sending the messages, and for the binary transport, we need to deserialize the headers in the same way as we did when sending the messages. Let's find out how it works."]}]
+50:T1068,<svg viewBox="0 0 24 24"><path d="M23.8346 11.7033l-1.0073-.6236a13.7268 13.7268 0 00-.0283-.2936l.8656-.8069a.3483.3483 0 00-.1154-.578l-1.1066-.414a8.4958 8.4958 0 00-.087-.2856l.6904-.9587a.3462.3462 0 00-.2257-.5446l-1.1663-.1894a9.3574 9.3574 0 00-.1407-.2622l.49-1.0761a.3437.3437 0 00-.0274-.3361.3486.3486 0 00-.3006-.154l-1.1845.0416a6.7444 6.7444 0 00-.1873-.2268l.2723-1.153a.3472.3472 0 00-.417-.4172l-1.1532.2724a14.0183 14.0183 0 00-.2278-.1873l.0415-1.1845a.3442.3442  [...]
+23:["$","p",null,{"children":["As you can see, the headers are being serialized in the same way as when sending the messages. The only difference is that the ",["$","code",null,{"children":"Message"}]," struct also contains the ",["$","code",null,{"children":"offset"}]," and the ",["$","code",null,{"children":"timestamp"}]," fields, which are being serialized before the ",["$","code",null,{"children":"ID"}]," field. Besides that, nothing has changed, as we simply include the headers righ [...]
+24:["$","$L2",null,{"as":"h3","id":"sample-usage","children":"Sample usage"}]
+25:["$","p",null,{"children":["The headers usage is pretty straightforward, as we simply need to create the new ",["$","code",null,{"children":"HashMap"}],":"]}]
+52:T1068,<svg viewBox="0 0 24 24"><path d="M23.8346 11.7033l-1.0073-.6236a13.7268 13.7268 0 00-.0283-.2936l.8656-.8069a.3483.3483 0 00-.1154-.578l-1.1066-.414a8.4958 8.4958 0 00-.087-.2856l.6904-.9587a.3462.3462 0 00-.2257-.5446l-1.1663-.1894a9.3574 9.3574 0 00-.1407-.2622l.49-1.0761a.3437.3437 0 00-.0274-.3361.3486.3486 0 00-.3006-.154l-1.1845.0416a6.7444 6.7444 0 00-.1873-.2268l.2723-1.153a.3472.3472 0 00-.417-.4172l-1.1532.2724a14.0183 14.0183 0 00-.2278-.1873l.0415-1.1845a.3442.3442  [...]
+27:["$","p",null,{"children":"You might also use the conversion based on the implemented traits:"}]
+54:T1068,<svg viewBox="0 0 24 24"><path d="M23.8346 11.7033l-1.0073-.6236a13.7268 13.7268 0 00-.0283-.2936l.8656-.8069a.3483.3483 0 00-.1154-.578l-1.1066-.414a8.4958 8.4958 0 00-.087-.2856l.6904-.9587a.3462.3462 0 00-.2257-.5446l-1.1663-.1894a9.3574 9.3574 0 00-.1407-.2622l.49-1.0761a.3437.3437 0 00-.0274-.3361.3486.3486 0 00-.3006-.154l-1.1845.0416a6.7444 6.7444 0 00-.1873-.2268l.2723-1.153a.3472.3472 0 00-.417-.4172l-1.1532.2724a14.0183 14.0183 0 00-.2278-.1873l.0415-1.1845a.3442.3442  [...]
+29:["$","p",null,{"children":["Keep in mind, that the ",["$","code",null,{"children":"HeaderKey"}]," and the ",["$","code",null,{"children":"HeaderValue"}]," structs are being validated whenever you use one of the available methods to create them."]}]
+2a:["$","p",null,{"children":["And then, we can send the messages with the headers (first ",["$","code",null,{"children":"none"}]," argument is for the optional ID):"]}]
+56:T1068,<svg viewBox="0 0 24 24"><path d="M23.8346 11.7033l-1.0073-.6236a13.7268 13.7268 0 00-.0283-.2936l.8656-.8069a.3483.3483 0 00-.1154-.578l-1.1066-.414a8.4958 8.4958 0 00-.087-.2856l.6904-.9587a.3462.3462 0 00-.2257-.5446l-1.1663-.1894a9.3574 9.3574 0 00-.1407-.2622l.49-1.0761a.3437.3437 0 00-.0274-.3361.3486.3486 0 00-.3006-.154l-1.1845.0416a6.7444 6.7444 0 00-.1873-.2268l.2723-1.153a.3472.3472 0 00-.417-.4172l-1.1532.2724a14.0183 14.0183 0 00-.2278-.1873l.0415-1.1845a.3442.3442  [...]
+2c:["$","p",null,{"children":"When you poll the messages and want to read the header value based on its kind, you can also use the existing helper methods, for example:"}]
+58:T1068,<svg viewBox="0 0 24 24"><path d="M23.8346 11.7033l-1.0073-.6236a13.7268 13.7268 0 00-.0283-.2936l.8656-.8069a.3483.3483 0 00-.1154-.578l-1.1066-.414a8.4958 8.4958 0 00-.087-.2856l.6904-.9587a.3462.3462 0 00-.2257-.5446l-1.1663-.1894a9.3574 9.3574 0 00-.1407-.2622l.49-1.0761a.3437.3437 0 00-.0274-.3361.3486.3486 0 00-.3006-.154l-1.1845.0416a6.7444 6.7444 0 00-.1873-.2268l.2723-1.153a.3472.3472 0 00-.417-.4172l-1.1532.2724a14.0183 14.0183 0 00-.2278-.1873l.0415-1.1845a.3442.3442  [...]
+2e:["$","footer",null,{"className":"mt-16 border-t border-fd-border pt-8","children":["$","$L5a",null,{"href":"/blogs","className":"inline-flex items-center gap-2 text-sm font-medium text-fd-primary transition-colors hover:opacity-80","children":"← Back to all posts"}]}]
+2f:["$","script","script-0",{"src":"/_next/static/chunks/1k39uva2a578s.js","async":true}]
+30:["$","script","script-1",{"src":"/_next/static/chunks/23ktdyx90z0v3.js","async":true}]
+31:["$","$L5b",null,{"children":["$","$5c",null,{"name":"Next.MetadataOutlet","children":"$@5d"}]}]
+34:["$","$1","h",{"children":[null,["$","$L5e",null,{"children":[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]}],["$","div",null,{"hidden":true,"children":["$","$L5f",null,{"children":["$","$5c",null,{"name":"Next.Metadata","children":[["$","title","0",{"children":"Message headers | Apache Iggy"}],["$","link","1",{"rel":"canonical","href":"https://iggy.apache.org/blogs/2023/08/19/message-headers/"}],["$","link", [...]
+36:["$","$1","c",{"children":[null,["$","$L61",null,{"parallelRouterKey":"children","template":["$","$L62",null,{}]}]]}]
+39:["$","$1","c",{"children":[null,["$","$L61",null,{"parallelRouterKey":"children","template":["$","$L62",null,{}]}]]}]
+3c:true
+3f:["$","$L42",null,{"children":["$","code",null,{"children":[["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"pub"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":" struct"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" HeaderKey"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8 [...]
+41:["$","$L42",null,{"children":["$","code",null,{"children":[["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"pub"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":" struct"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" SendMessages"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E [...]
+43:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":"      \"key_1\""}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":": {"}]]}]
+44:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":"        \"kind\""}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":": "}],["$","span",null,{"style":{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"},"children":"\"string\""}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":","}]]}]
+45:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":"        \"value\""}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":": "}],["$","span",null,{"style":{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"},"children":"\"{{header_1_payload_base_64}}\""}]]}]
+46:["$","span",null,{"className":"line","children":["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"      }"}]}]
+47:["$","span",null,{"className":"line","children":["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"    }"}]}]
+48:["$","span",null,{"className":"line","children":["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"  }]"}]}]
+49:["$","span",null,{"className":"line","children":["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"}"}]}]
+4b:["$","$L42",null,{"children":["$","code",null,{"children":[["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"impl"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" BytesSerializable"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":" for"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"# [...]
+4d:["$","$L42",null,{"children":["$","code",null,{"children":[["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"impl"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" HeaderKind"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":" {"}]]}],"\n",["$","span",null,{"className":"line","children":[["$","span",null,{"sty [...]
+4f:["$","$L42",null,{"children":["$","code",null,{"children":[["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"fn"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" as_bytes"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"("}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"chil [...]
+51:["$","$L42",null,{"children":["$","code",null,{"children":[["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"pub"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":" fn"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" map_message"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"} [...]
+53:["$","$L42",null,{"children":["$","code",null,{"children":[["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"let"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":" mut"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":" headers "}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"}," [...]
+55:["$","$L42",null,{"children":["$","code",null,{"children":[["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"headers"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"."}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"insert"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"ch [...]
+57:["$","$L42",null,{"children":["$","code",null,{"children":[["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"let"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":" send_messages "}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"="}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0" [...]
+59:["$","$L42",null,{"children":["$","code",null,{"children":[["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"let"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":" value1 "}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"="}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"chil [...]
+5d:null
+33:300
+63:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"    Int128"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":","}]]}]
+64:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"    Uint8"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":","}]]}]
+65:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"    Uint16"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":","}]]}]
+66:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"    Uint32"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":","}]]}]
+67:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"    Uint64"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":","}]]}]
+68:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"    Uint128"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":","}]]}]
+69:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"    Float32"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":","}]]}]
+6a:["$","span",null,{"className":"line","children":["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"    Float64"}]}]
+6b:["$","span",null,{"className":"line","children":["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"}"}]}]
+6c:["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":":"}]
+6d:["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" Bytes"}]
+6e:["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":","}]
+6f:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"    pub"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":" headers"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":":"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" Option"}],["$","span",null,{"style":{"--shiki-l [...]
+70:["$","span",null,{"className":"line","children":["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"}"}]}]
+71:["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"."}]
+72:["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":"0."}]
+73:["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"len"}]
+74:["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"() "}]
+75:["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"as"}]
+76:["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" u32"}]
+77:["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":");"}]
+78:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"            bytes"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"."}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"extend"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"(key"}],["$","span",null,{"style":{"--sh [...]
+79:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"            bytes"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"."}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"put_u8"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"(value"}],["$","span",null,{"style":{"-- [...]
+7a:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"            bytes"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"."}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"put_u32_le"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"(value"}],["$","span",null,{"style": [...]
+7b:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"            bytes"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"."}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"extend"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"("}],["$","span",null,{"style":{"--shiki [...]
+7c:["$","span",null,{"className":"line","children":["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"        }"}]}]
+7d:["$","span",null,{"className":"line"}]
+7e:["$","span",null,{"className":"line","children":["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"        bytes"}]}]
+7f:["$","span",null,{"className":"line","children":["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"    }"}]}]
+80:["$","span",null,{"className":"line","children":["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"}"}]}]
+81:["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":" 5"}]
+82:["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":","}]
+83:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"            HeaderKind"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"::"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"Int32"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":" =>"}],["$","span",null,{"style":{" [...]
+84:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"            HeaderKind"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"::"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"Int64"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":" =>"}],["$","span",null,{"style":{" [...]
+85:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"            HeaderKind"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"::"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"Int128"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":" =>"}],["$","span",null,{"style":{ [...]
+86:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"            HeaderKind"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"::"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"Uint8"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":" =>"}],["$","span",null,{"style":{" [...]
+87:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"            HeaderKind"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"::"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"Uint16"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":" =>"}],["$","span",null,{"style":{ [...]
+88:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"            HeaderKind"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"::"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"Uint32"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":" =>"}],["$","span",null,{"style":{ [...]
+89:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"            HeaderKind"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"::"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"Uint64"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":" =>"}],["$","span",null,{"style":{ [...]
+8a:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"            HeaderKind"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"::"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"Uint128"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":" =>"}],["$","span",null,{"style": [...]
+8b:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"            HeaderKind"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"::"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"Float32"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":" =>"}],["$","span",null,{"style": [...]
+8c:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"            HeaderKind"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"::"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"Float64"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":" =>"}],["$","span",null,{"style": [...]
+8d:["$","span",null,{"className":"line","children":["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"        }"}]}]
+8e:["$","span",null,{"className":"line","children":["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"    }"}]}]
+8f:["$","span",null,{"className":"line","children":["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"}"}]}]
+90:["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"."}]
+91:["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"as_bytes"}]
+92:["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"();"}]
+93:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"        bytes"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"."}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"put_u32_le"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"(headers_bytes"}],["$","span",null,{"sty [...]
+94:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"        bytes"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"."}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"extend"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"("}],["$","span",null,{"style":{"--shiki-lig [...]
+95:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"    } "}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"else"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":" {"}]]}]
+96:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"        bytes"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"."}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"put_u32_le"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"("}],["$","span",null,{"style":{"--shiki [...]
+97:["$","span",null,{"className":"line","children":["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"    }"}]}]
+98:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"    bytes"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"."}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"put_u32_le"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"("}],["$","span",null,{"style":{"--shiki-lig [...]
+99:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"    bytes"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"."}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"extend"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"("}],["$","span",null,{"style":{"--shiki-light": [...]
+9a:["$","span",null,{"className":"line","children":["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"    bytes"}]}]
+9b:["$","span",null,{"className":"line","children":["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"}"}]}]
+9c:["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":" headers"}]
+9d:["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"."}]
+9e:["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"as_bytes"}]
+9f:["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"();"}]
+a0:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"        bytes"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"."}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"put_u32_le"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"(headers_bytes"}],["$","span",null,{"sty [...]
+a1:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"        bytes"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"."}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"extend"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"("}],["$","span",null,{"style":{"--shiki-lig [...]
+a2:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"    } "}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"else"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":" {"}]]}]
+a3:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"        bytes"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"."}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"put_u32_le"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"("}],["$","span",null,{"style":{"--shiki [...]
+a4:["$","span",null,{"className":"line","children":["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"    }"}]}]
+a5:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"    bytes"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"."}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"put_u32_le"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"("}],["$","span",null,{"style":{"--shiki-lig [...]
+a6:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"    bytes"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"."}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"extend"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"("}],["$","span",null,{"style":{"--shiki-light": [...]
+a7:["$","span",null,{"className":"line","children":["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"}"}]}]
+a8:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"headers"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"."}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"insert"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"("}],["$","span",null,{"style":{"--shiki-light":"# [...]
+a9:["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":") , "}]
+aa:["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"Some"}]
+ab:["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"(headers))]"}]
+ac:["$","span",null,{"className":"line","children":["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"};"}]}]
+ad:["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"("}]
+ae:["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"&"}]
+af:["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"HeaderKey"}]
+b0:["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"::"}]
+b1:["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"new"}]
+b2:["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"("}]
+b3:["$","span",null,{"style":{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"},"children":"\"key_3\""}]
+b4:["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":")"}]
+b5:["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"?"}]
+b6:["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":")"}]
+b7:["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"?."}]
+b8:["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"as_uint64"}]
+b9:["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"()"}]
+ba:["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"?"}]
+bb:["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":";"}]
+33:C
+3b:0
+35:"$undefined"
+37:"$undefined"
+3a:"$undefined"
+32:"$undefined"
diff --git a/blogs/2023/08/19/message-headers/__next.!KHNpdGUp.txt b/blogs/2023/08/19/message-headers/__next.!KHNpdGUp.txt
new file mode 100644
index 000000000..940e917aa
--- /dev/null
+++ b/blogs/2023/08/19/message-headers/__next.!KHNpdGUp.txt
@@ -0,0 +1,30 @@
+1:"$Sreact.fragment"
+2:I[22016,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],""]
+3:I[5014,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],"default"]
+4:I[64345,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js"],"HomeLayout"]
+5:I[88760,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js"],"Logo"]
+6:I[15269,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js"],"CommunityDropdown"]
+7:I[15269,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js"],"communityLinks"]
+8:I[29966,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js"],"ASFDropdown"]
+9:I[36330,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js"],"ASFMobileLinks"]
+a:I[39756,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"default"]
+b:I[37457,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"default"]
+14:X
+0:{"buildId":"CEAllZE6ERPzzxzpa_n8G","data":[{"rsc":["$","$1","c",{"children":[[["$","script","script-0",{"src":"/_next/static/chunks/241-fa32f9zay.js","async":true}],["$","script","script-1",{"src":"/_next/static/chunks/3x8y3fmtn6lnc.js","async":true}],["$","script","script-2",{"src":"/_next/static/chunks/250gopd52txql.js","async":true}],["$","script","script-3",{"src":"/_next/static/chunks/0n3fueko2xquo.js","async":true}]],[["$","div",null,{"className":"relative border-b border-white/[ [...]
+c:["$","$L2","/",{"href":"/","className":"transition-colors hover:text-fd-primary","children":"Home"}]
+d:["$","$L2","/docs",{"href":"/docs","className":"transition-colors hover:text-fd-primary","children":"Documentation"}]
+e:["$","$L2","/blogs",{"href":"/blogs","className":"transition-colors hover:text-fd-primary","children":"Blog"}]
+f:["$","$L2","/downloads",{"href":"/downloads","className":"transition-colors hover:text-fd-primary","children":"Downloads"}]
+10:["$","$L2","/community",{"href":"/community","className":"transition-colors hover:text-fd-primary","children":"Community"}]
+11:["$","p",null,{"className":"mt-6 max-w-md text-xs text-fd-muted-foreground","children":["Every page on this site is listed in"," ",["$","a",null,{"href":"/sitemap.xml","className":"underline hover:text-fd-primary","children":"/sitemap.xml"}],", and"," ",["$","a",null,{"href":"/llms.txt","className":"underline hover:text-fd-primary","children":"/llms.txt"}]," ","summarises the documentation."]}]
+12:["$","footer",null,{"className":"border-t border-fd-border bg-fd-background px-6 py-14 md:px-12","children":["$","div",null,{"className":"mx-auto max-w-6xl","children":[["$","div",null,{"className":"grid gap-10 sm:grid-cols-2 lg:grid-cols-4","children":[["$","div","Docs",{"children":[["$","h2",null,{"className":"mb-4 text-sm font-semibold uppercase tracking-wide text-fd-primary","children":"Docs"}],["$","ul",null,{"className":"space-y-2.5 text-sm","children":[["$","li","/docs",{"child [...]
+16:true
+17:["$","$L2",null,{"href":"https://www.apache.org/foundation/contributing.html","target":"_blank","rel":"noopener noreferrer","className":"text-fd-muted-foreground transition-colors hover:text-fd-foreground","children":"Donate"}]
+18:["$","li","https://www.apache.org/foundation/sponsorship.html",{"children":["$","$L2",null,{"href":"https://www.apache.org/foundation/sponsorship.html","target":"_blank","rel":"noopener noreferrer","className":"text-fd-muted-foreground transition-colors hover:text-fd-foreground","children":"Sponsors"}]}]
+19:["$","li","https://www.apache.org/security/",{"children":["$","$L2",null,{"href":"https://www.apache.org/security/","target":"_blank","rel":"noopener noreferrer","className":"text-fd-muted-foreground transition-colors hover:text-fd-foreground","children":"Security"}]}]
+1a:["$","li","https://privacy.apache.org/policies/privacy-policy-public.html",{"children":["$","$L2",null,{"href":"https://privacy.apache.org/policies/privacy-policy-public.html","target":"_blank","rel":"noopener noreferrer","className":"text-fd-muted-foreground transition-colors hover:text-fd-foreground","children":"Privacy"}]}]
+1b:["$","div",null,{"className":"mt-12 border-t border-fd-border pt-8 text-xs leading-relaxed text-fd-muted-foreground/70","children":[["$","p",null,{"className":"mt-4","children":["Copyright © ",2026," The Apache Software Foundation, Licensed under the Apache License, Version 2.0."]}],["$","p",null,{"className":"mt-4","children":"Apache Iggy, Iggy, Apache, and the Apache Iggy logo are trademarks or registered trademarks of The Apache Software Foundation. All other marks mentioned may be [...]
+14:300
+14:C
+15:0
+13:"$undefined"
diff --git a/blogs/2023/08/19/message-headers/__next._full.txt b/blogs/2023/08/19/message-headers/__next._full.txt
new file mode 100644
index 000000000..763649886
--- /dev/null
+++ b/blogs/2023/08/19/message-headers/__next._full.txt
@@ -0,0 +1,205 @@
+1:"$Sreact.fragment"
+3:I[17751,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"RootProvider"]
+4:I[39756,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"default"]
+5:I[58298,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/3-_96y-evozm0.js"],"default"]
+6:I[37457,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"default"]
+7:I[22016,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],""]
+12:I[68027,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"default",1]
+:HL["/_next/static/chunks/1_55v0vlfews3.css","style"]
+2:T512,{"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://iggy.apache.org/#organization","name":"The Apache Software Foundation","url":"https://www.apache.org/","logo":"https://iggy.apache.org/img/asf_logo.svg","contactPoint":{"@type":"ContactPoint","contactType":"technical support","email":"dev@iggy.apache.org","url":"https://iggy.apache.org/community/"}},{"@type":"WebSite","@id":"https://iggy.apache.org/#website","name":"Apache Iggy","url":"https://iggy.a [...]
+0:{"P":null,"c":["","blogs","2023","08","19","message-headers",""],"q":"","i":false,"f":[[["",{"children":["(site)",{"children":["blogs",{"children":[["slug","2023/08/19/message-headers","c",[]],{"children":["__PAGE__",{},"$undefined","$undefined",4608]},"$undefined","$undefined",4608]},"$undefined","$undefined",4608]},"$undefined","$undefined",4608]},"$undefined","$undefined",4624],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/1_55v0vlfews [...]
+14:I[79520,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],""]
+15:I[69877,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"Matomo"]
+16:I[5014,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],"default"]
+17:I[64345,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js"],"HomeLayout"]
+18:I[88760,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js"],"Logo"]
+19:I[15269,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js"],"CommunityDropdown"]
+1a:I[15269,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js"],"communityLinks"]
+1b:I[29966,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js"],"ASFDropdown"]
+1c:I[36330,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js"],"ASFMobileLinks"]
+25:I[97367,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"OutletBoundary"]
+26:"$Sreact.suspense"
+28:I[97367,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"ViewportBoundary"]
+2a:I[97367,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"MetadataBoundary"]
+8:["$","$L7","/community",{"href":"/community","className":"transition-colors hover:text-fd-primary","children":"Community"}]
+9:["$","p",null,{"className":"mt-6 max-w-md text-xs text-fd-muted-foreground","children":["Every page on this site is listed in"," ",["$","a",null,{"href":"/sitemap.xml","className":"underline hover:text-fd-primary","children":"/sitemap.xml"}],", and"," ",["$","a",null,{"href":"/llms.txt","className":"underline hover:text-fd-primary","children":"/llms.txt"}]," ","summarises the documentation."]}]
+a:["$","$L14",null,{"id":"matomo","strategy":"afterInteractive","children":"var _paq = window._paq = window._paq || [];\n_paq.push([\"setDoNotTrack\", true]);\n_paq.push([\"disableCookies\"]);\n_paq.push(['trackPageView']);\n_paq.push(['enableLinkTracking']);\n(function() {\n  var u=\"https://analytics.apache.org/\";\n  _paq.push(['setTrackerUrl', u+'matomo.php']);\n  _paq.push(['setSiteId', '80']);\n  var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];\n  [...]
+b:["$","$L15",null,{}]
+c:["$","$1","c",{"children":[[["$","script","script-0",{"src":"/_next/static/chunks/241-fa32f9zay.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/_next/static/chunks/3x8y3fmtn6lnc.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/_next/static/chunks/250gopd52txql.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/_next/static/chunks/0n3fueko2xquo.js","async":true,"nonce":"$undefined"}]],[["$","div",null,{"className" [...]
+d:["$","$1","c",{"children":[null,["$","$L4",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}]
+e:["$","$1","c",{"children":[null,["$","$L4",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}]
+f:["$","$1","c",{"children":["$L24",[["$","script","script-0",{"src":"/_next/static/chunks/1k39uva2a578s.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/_next/static/chunks/23ktdyx90z0v3.js","async":true,"nonce":"$undefined"}]],["$","$L25",null,{"children":["$","$26",null,{"name":"Next.MetadataOutlet","children":"$@27"}]}]]}]
+11:["$","$1","h",{"children":[null,["$","$L28",null,{"children":"$L29"}],["$","div",null,{"hidden":true,"children":["$","$L2a",null,{"children":["$","$26",null,{"name":"Next.Metadata","children":"$L2b"}]}]}],null]}]
+13:["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/1_55v0vlfews3.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]
+10:C
+1d:["$","$L7","/",{"href":"/","className":"transition-colors hover:text-fd-primary","children":"Home"}]
+1e:["$","$L7","/docs",{"href":"/docs","className":"transition-colors hover:text-fd-primary","children":"Documentation"}]
+1f:["$","$L7","/blogs",{"href":"/blogs","className":"transition-colors hover:text-fd-primary","children":"Blog"}]
+20:["$","$L7","/downloads",{"href":"/downloads","className":"transition-colors hover:text-fd-primary","children":"Downloads"}]
+21:["$","$L7","/community",{"href":"/community","className":"transition-colors hover:text-fd-primary","children":"Community"}]
+22:["$","p",null,{"className":"mt-6 max-w-md text-xs text-fd-muted-foreground","children":["Every page on this site is listed in"," ",["$","a",null,{"href":"/sitemap.xml","className":"underline hover:text-fd-primary","children":"/sitemap.xml"}],", and"," ",["$","a",null,{"href":"/llms.txt","className":"underline hover:text-fd-primary","children":"/llms.txt"}]," ","summarises the documentation."]}]
+23:["$","footer",null,{"className":"border-t border-fd-border bg-fd-background px-6 py-14 md:px-12","children":["$","div",null,{"className":"mx-auto max-w-6xl","children":[["$","div",null,{"className":"grid gap-10 sm:grid-cols-2 lg:grid-cols-4","children":[["$","div","Docs",{"children":[["$","h2",null,{"className":"mb-4 text-sm font-semibold uppercase tracking-wide text-fd-primary","children":"Docs"}],["$","ul",null,{"className":"space-y-2.5 text-sm","children":[["$","li","/docs",{"child [...]
+2c:["$","li","https://www.apache.org/foundation/contributing.html",{"children":["$","$L7",null,{"href":"https://www.apache.org/foundation/contributing.html","target":"_blank","rel":"noopener noreferrer","className":"text-fd-muted-foreground transition-colors hover:text-fd-foreground","children":"Donate"}]}]
+2d:["$","li","https://www.apache.org/foundation/sponsorship.html",{"children":["$","$L7",null,{"href":"https://www.apache.org/foundation/sponsorship.html","target":"_blank","rel":"noopener noreferrer","className":"text-fd-muted-foreground transition-colors hover:text-fd-foreground","children":"Sponsors"}]}]
+2e:["$","li","https://www.apache.org/security/",{"children":["$","$L7",null,{"href":"https://www.apache.org/security/","target":"_blank","rel":"noopener noreferrer","className":"text-fd-muted-foreground transition-colors hover:text-fd-foreground","children":"Security"}]}]
+2f:["$","li","https://privacy.apache.org/policies/privacy-policy-public.html",{"children":["$","$L7",null,{"href":"https://privacy.apache.org/policies/privacy-policy-public.html","target":"_blank","rel":"noopener noreferrer","className":"text-fd-muted-foreground transition-colors hover:text-fd-foreground","children":"Privacy"}]}]
+30:["$","div",null,{"className":"mt-12 border-t border-fd-border pt-8 text-xs leading-relaxed text-fd-muted-foreground/70","children":[["$","p",null,{"className":"mt-4","children":["Copyright © ",2026," The Apache Software Foundation, Licensed under the Apache License, Version 2.0."]}],["$","p",null,{"className":"mt-4","children":"Apache Iggy, Iggy, Apache, and the Apache Iggy logo are trademarks or registered trademarks of The Apache Software Foundation. All other marks mentioned may be [...]
+31:I[94157,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],"Heading"]
+32:I[47873,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],"default"]
+:HL["/img/authors/piotr.png","image"]
+24:["$","main",null,{"className":"min-h-screen px-6 py-16 md:px-12","children":["$","article",null,{"className":"mx-auto max-w-5xl","children":[["$","header",null,{"className":"mb-10","children":[["$","time",null,{"className":"text-sm font-medium text-fd-muted-foreground","children":"August 19, 2023"}],["$","h1",null,{"className":"mt-3 text-3xl font-extrabold tracking-tight text-fd-foreground md:text-5xl","children":"Message headers"}],["$","div",null,{"className":"mt-6 flex flex-wrap ga [...]
+5e:I[44324,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],"CodeBlock"]
+63:I[44324,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],"Pre"]
+33:["$","strong",null,{"children":"lowercase"}]
+34:["$","strong",null,{"children":"255 bytes"}]
+35:["$","code",null,{"children":"u8"}]
+36:["$","p",null,{"children":"For now, there are no reserved headers, so you can use any key you want. However, in the future, we might introduce some reserved headers used by the streaming server for the specific purposes such as the message compression, distributed tracing and so no."}]
+37:["$","p",null,{"children":["The ",["$","strong",null,{"children":"sample applications"}]," using the message headers can be found ",["$","$L32",null,{"href":"https://github.com/apache/iggy/tree/master/examples/rust/src/message-headers","children":"here"}],"."]}]
+38:["$","$L31",null,{"as":"h2","id":"implementation","children":"Implementation"}]
+39:["$","$L31",null,{"as":"h3","id":"structures","children":"Structures"}]
+3a:["$","p",null,{"children":["We will start with the sample Rust implementation of the headers. The headers are defined as a ",["$","code",null,{"children":"HashMap"}]," where the key is a ",["$","code",null,{"children":"string"}]," (wrapped with a custom ",["$","code",null,{"children":"HeaderKey"}]," struct to enforce the validation) and the value is a ",["$","code",null,{"children":"HeaderValue"}]," struct. The ",["$","code",null,{"children":"HeaderValue"}]," struct consists of the ", [...]
+3b:["$","p",null,{"children":["The primitive types are defined as the enum variants, so you can easily match on them. The ",["$","code",null,{"children":"HeaderKind"}]," enum is used to validate the value and to serialize/deserialize it. The idea is that the value will always remain a byte array, but you can use the ",["$","code",null,{"children":"HeaderKind"}]," to convert it to the desired type."]}]
+5f:T1068,<svg viewBox="0 0 24 24"><path d="M23.8346 11.7033l-1.0073-.6236a13.7268 13.7268 0 00-.0283-.2936l.8656-.8069a.3483.3483 0 00-.1154-.578l-1.1066-.414a8.4958 8.4958 0 00-.087-.2856l.6904-.9587a.3462.3462 0 00-.2257-.5446l-1.1663-.1894a9.3574 9.3574 0 00-.1407-.2622l.49-1.0761a.3437.3437 0 00-.0274-.3361.3486.3486 0 00-.3006-.154l-1.1845.0416a6.7444 6.7444 0 00-.1873-.2268l.2723-1.153a.3472.3472 0 00-.417-.4172l-1.1532.2724a14.0183 14.0183 0 00-.2278-.1873l.0415-1.1845a.3442.3442  [...]
+3d:["$","p",null,{"children":["Next, let's take a look at the ",["$","code",null,{"children":"SendMessages"}]," command, and in particular we will see what has changed in the underlying ",["$","code",null,{"children":"Message"}]," struct (keep in mind that headers are unique per message, so they are not a part of the ",["$","code",null,{"children":"SendMessages"}]," command). The ",["$","code",null,{"children":"Message"}]," struct now has an additional ",["$","code",null,{"children":"hea [...]
+61:T1068,<svg viewBox="0 0 24 24"><path d="M23.8346 11.7033l-1.0073-.6236a13.7268 13.7268 0 00-.0283-.2936l.8656-.8069a.3483.3483 0 00-.1154-.578l-1.1066-.414a8.4958 8.4958 0 00-.087-.2856l.6904-.9587a.3462.3462 0 00-.2257-.5446l-1.1663-.1894a9.3574 9.3574 0 00-.1407-.2622l.49-1.0761a.3437.3437 0 00-.0274-.3361.3486.3486 0 00-.3006-.154l-1.1845.0416a6.7444 6.7444 0 00-.1873-.2268l.2723-1.153a.3472.3472 0 00-.417-.4172l-1.1532.2724a14.0183 14.0183 0 00-.2278-.1873l.0415-1.1845a.3442.3442  [...]
+3f:["$","$L31",null,{"as":"h3","id":"json-transport","children":"JSON transport"}]
+40:["$","p",null,{"children":["Headers are optional, so depending on the programming language, you can either use the ",["$","code",null,{"children":"option"}]," type, or the ",["$","code",null,{"children":"null"}]," value, or even instantiate an ",["$","code",null,{"children":"empty"}]," map - it's up to you. The important part is the serialization. For the JSON transport, it's very easy, as you can see in the following example:"]}]
+41:["$","$L5e",null,{"className":"shiki shiki-themes github-light github-dark","style":{"--shiki-light":"#24292e","--shiki-dark":"#e1e4e8","--shiki-light-bg":"#fff","--shiki-dark-bg":"#24292e"},"tabIndex":"0","icon":"<svg viewBox=\"0 0 24 24\"><path d=\"M 6,1 C 4.354992,1 3,2.354992 3,4 v 16 c 0,1.645008 1.354992,3 3,3 h 12 c 1.645008,0 3,-1.354992 3,-3 V 8 7 A 1.0001,1.0001 0 0 0 20.707031,6.2929687 l -5,-5 A 1.0001,1.0001 0 0 0 15,1 h -1 z m 0,2 h 7 v 3 c 0,1.645008 1.354992,3 3,3 h 3  [...]
+42:["$","p",null,{"children":["Simply put, in order to include the headers in the message, you need to add the ",["$","code",null,{"children":"headers"}]," field to the message struct. The ",["$","code",null,{"children":"headers"}]," field is a map of the ",["$","code",null,{"children":"String"}]," keys and the ",["$","code",null,{"children":"HeaderValue"}]," values. The ",["$","code",null,{"children":"HeaderValue"}]," value is a JSON object which consists of the ",["$","code",null,{"chi [...]
+43:["$","$L31",null,{"as":"h3","id":"binary-transport","children":"Binary transport"}]
+44:["$","p",null,{"children":"Now, we can move on to the more complex part, being the binary transport (as always, it's the same schema for both, TCP and QUIC protocol)."}]
+45:["$","p",null,{"children":["We will begin with the headers serialization for the whole ",["$","code",null,{"children":"HashMap"}],":"]}]
+6b:T1068,<svg viewBox="0 0 24 24"><path d="M23.8346 11.7033l-1.0073-.6236a13.7268 13.7268 0 00-.0283-.2936l.8656-.8069a.3483.3483 0 00-.1154-.578l-1.1066-.414a8.4958 8.4958 0 00-.087-.2856l.6904-.9587a.3462.3462 0 00-.2257-.5446l-1.1663-.1894a9.3574 9.3574 0 00-.1407-.2622l.49-1.0761a.3437.3437 0 00-.0274-.3361.3486.3486 0 00-.3006-.154l-1.1845.0416a6.7444 6.7444 0 00-.1873-.2268l.2723-1.153a.3472.3472 0 00-.417-.4172l-1.1532.2724a14.0183 14.0183 0 00-.2278-.1873l.0415-1.1845a.3442.3442  [...]
+47:["$","p",null,{"children":["If for some reason, there are no headers, we return an empty byte array. Otherwise, we iterate over the headers and serialize them one by one. The serialization shouldn't be too difficult as we start with the key length, then we add the key itself (",["$","strong",null,{"children":"UTF-8 bytes"}],"), then we add the value type (the ",["$","code",null,{"children":"HeaderKind"}]," enum variant), then we add the value length, and finally we add the value itsel [...]
+48:["$","p",null,{"children":["The length of the single header is the following: ",["$","code",null,{"children":"4 bytes"}]," for the key length, ",["$","code",null,{"children":"n bytes"}]," (",["$","strong",null,{"children":"1-255"}],") for the key, ",["$","code",null,{"children":"1 byte"}]," for the value kind, ",["$","code",null,{"children":"4 bytes"}]," for the value length and ",["$","code",null,{"children":"n bytes"}]," (",["$","strong",null,{"children":"1-255"}],") for the value i [...]
+49:["$","p",null,{"children":["The ",["$","code",null,{"children":"HeaderKind"}]," uses the following codes:"]}]
+6d:T1068,<svg viewBox="0 0 24 24"><path d="M23.8346 11.7033l-1.0073-.6236a13.7268 13.7268 0 00-.0283-.2936l.8656-.8069a.3483.3483 0 00-.1154-.578l-1.1066-.414a8.4958 8.4958 0 00-.087-.2856l.6904-.9587a.3462.3462 0 00-.2257-.5446l-1.1663-.1894a9.3574 9.3574 0 00-.1407-.2622l.49-1.0761a.3437.3437 0 00-.0274-.3361.3486.3486 0 00-.3006-.154l-1.1845.0416a6.7444 6.7444 0 00-.1873-.2268l.2723-1.153a.3472.3472 0 00-.417-.4172l-1.1532.2724a14.0183 14.0183 0 00-.2278-.1873l.0415-1.1845a.3442.3442  [...]
+4b:["$","$L31",null,{"as":"h3","id":"sending-the-messages-with-headers","children":"Sending the messages with headers"}]
+4c:["$","p",null,{"children":"Now, let's see how we can include the headers in a message serialization:"}]
+6f:T1068,<svg viewBox="0 0 24 24"><path d="M23.8346 11.7033l-1.0073-.6236a13.7268 13.7268 0 00-.0283-.2936l.8656-.8069a.3483.3483 0 00-.1154-.578l-1.1066-.414a8.4958 8.4958 0 00-.087-.2856l.6904-.9587a.3462.3462 0 00-.2257-.5446l-1.1663-.1894a9.3574 9.3574 0 00-.1407-.2622l.49-1.0761a.3437.3437 0 00-.0274-.3361.3486.3486 0 00-.3006-.154l-1.1845.0416a6.7444 6.7444 0 00-.1873-.2268l.2723-1.153a.3472.3472 0 00-.417-.4172l-1.1532.2724a14.0183 14.0183 0 00-.2278-.1873l.0415-1.1845a.3442.3442  [...]
+4e:["$","p",null,{"children":["The important thing to notice, is that the ",["$","strong",null,{"children":["headers are being serialized right after the ",["$","code",null,{"children":"ID"}]," and before the actual message payload"]}],". At first, we add the total length of the headers' payload, then we add the headers themselves, and finally we include the message payload (length + value) as before. If the headers are not provided at all (e.g. ",["$","code",null,{"children":"none"}],"  [...]
+4f:["$","$L31",null,{"as":"h3","id":"polling-the-messages-with-headers","children":"Polling the messages with headers"}]
+50:["$","p",null,{"children":["Eventually, let's discuss the ",["$","code",null,{"children":"PollMessages"}]," command. Nothing has changed here, except of the extended ",["$","code",null,{"children":"Message"}]," struct, which now contains the optional headers. For the JSON transport it's the same as when sending the messages, and for the binary transport, we need to deserialize the headers in the same way as we did when sending the messages. Let's find out how it works."]}]
+71:T1068,<svg viewBox="0 0 24 24"><path d="M23.8346 11.7033l-1.0073-.6236a13.7268 13.7268 0 00-.0283-.2936l.8656-.8069a.3483.3483 0 00-.1154-.578l-1.1066-.414a8.4958 8.4958 0 00-.087-.2856l.6904-.9587a.3462.3462 0 00-.2257-.5446l-1.1663-.1894a9.3574 9.3574 0 00-.1407-.2622l.49-1.0761a.3437.3437 0 00-.0274-.3361.3486.3486 0 00-.3006-.154l-1.1845.0416a6.7444 6.7444 0 00-.1873-.2268l.2723-1.153a.3472.3472 0 00-.417-.4172l-1.1532.2724a14.0183 14.0183 0 00-.2278-.1873l.0415-1.1845a.3442.3442  [...]
+52:["$","p",null,{"children":["As you can see, the headers are being serialized in the same way as when sending the messages. The only difference is that the ",["$","code",null,{"children":"Message"}]," struct also contains the ",["$","code",null,{"children":"offset"}]," and the ",["$","code",null,{"children":"timestamp"}]," fields, which are being serialized before the ",["$","code",null,{"children":"ID"}]," field. Besides that, nothing has changed, as we simply include the headers righ [...]
+53:["$","$L31",null,{"as":"h3","id":"sample-usage","children":"Sample usage"}]
+54:["$","p",null,{"children":["The headers usage is pretty straightforward, as we simply need to create the new ",["$","code",null,{"children":"HashMap"}],":"]}]
+73:T1068,<svg viewBox="0 0 24 24"><path d="M23.8346 11.7033l-1.0073-.6236a13.7268 13.7268 0 00-.0283-.2936l.8656-.8069a.3483.3483 0 00-.1154-.578l-1.1066-.414a8.4958 8.4958 0 00-.087-.2856l.6904-.9587a.3462.3462 0 00-.2257-.5446l-1.1663-.1894a9.3574 9.3574 0 00-.1407-.2622l.49-1.0761a.3437.3437 0 00-.0274-.3361.3486.3486 0 00-.3006-.154l-1.1845.0416a6.7444 6.7444 0 00-.1873-.2268l.2723-1.153a.3472.3472 0 00-.417-.4172l-1.1532.2724a14.0183 14.0183 0 00-.2278-.1873l.0415-1.1845a.3442.3442  [...]
+56:["$","p",null,{"children":"You might also use the conversion based on the implemented traits:"}]
+75:T1068,<svg viewBox="0 0 24 24"><path d="M23.8346 11.7033l-1.0073-.6236a13.7268 13.7268 0 00-.0283-.2936l.8656-.8069a.3483.3483 0 00-.1154-.578l-1.1066-.414a8.4958 8.4958 0 00-.087-.2856l.6904-.9587a.3462.3462 0 00-.2257-.5446l-1.1663-.1894a9.3574 9.3574 0 00-.1407-.2622l.49-1.0761a.3437.3437 0 00-.0274-.3361.3486.3486 0 00-.3006-.154l-1.1845.0416a6.7444 6.7444 0 00-.1873-.2268l.2723-1.153a.3472.3472 0 00-.417-.4172l-1.1532.2724a14.0183 14.0183 0 00-.2278-.1873l.0415-1.1845a.3442.3442  [...]
+58:["$","p",null,{"children":["Keep in mind, that the ",["$","code",null,{"children":"HeaderKey"}]," and the ",["$","code",null,{"children":"HeaderValue"}]," structs are being validated whenever you use one of the available methods to create them."]}]
+59:["$","p",null,{"children":["And then, we can send the messages with the headers (first ",["$","code",null,{"children":"none"}]," argument is for the optional ID):"]}]
+77:T1068,<svg viewBox="0 0 24 24"><path d="M23.8346 11.7033l-1.0073-.6236a13.7268 13.7268 0 00-.0283-.2936l.8656-.8069a.3483.3483 0 00-.1154-.578l-1.1066-.414a8.4958 8.4958 0 00-.087-.2856l.6904-.9587a.3462.3462 0 00-.2257-.5446l-1.1663-.1894a9.3574 9.3574 0 00-.1407-.2622l.49-1.0761a.3437.3437 0 00-.0274-.3361.3486.3486 0 00-.3006-.154l-1.1845.0416a6.7444 6.7444 0 00-.1873-.2268l.2723-1.153a.3472.3472 0 00-.417-.4172l-1.1532.2724a14.0183 14.0183 0 00-.2278-.1873l.0415-1.1845a.3442.3442  [...]
+5b:["$","p",null,{"children":"When you poll the messages and want to read the header value based on its kind, you can also use the existing helper methods, for example:"}]
+79:T1068,<svg viewBox="0 0 24 24"><path d="M23.8346 11.7033l-1.0073-.6236a13.7268 13.7268 0 00-.0283-.2936l.8656-.8069a.3483.3483 0 00-.1154-.578l-1.1066-.414a8.4958 8.4958 0 00-.087-.2856l.6904-.9587a.3462.3462 0 00-.2257-.5446l-1.1663-.1894a9.3574 9.3574 0 00-.1407-.2622l.49-1.0761a.3437.3437 0 00-.0274-.3361.3486.3486 0 00-.3006-.154l-1.1845.0416a6.7444 6.7444 0 00-.1873-.2268l.2723-1.153a.3472.3472 0 00-.417-.4172l-1.1532.2724a14.0183 14.0183 0 00-.2278-.1873l.0415-1.1845a.3442.3442  [...]
+5d:["$","footer",null,{"className":"mt-16 border-t border-fd-border pt-8","children":["$","$L7",null,{"href":"/blogs","className":"inline-flex items-center gap-2 text-sm font-medium text-fd-primary transition-colors hover:opacity-80","children":"← Back to all posts"}]}]
+60:["$","$L63",null,{"children":["$","code",null,{"children":[["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"pub"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":" struct"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" HeaderKey"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8 [...]
+62:["$","$L63",null,{"children":["$","code",null,{"children":[["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"pub"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":" struct"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" SendMessages"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E [...]
+64:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":"      \"key_1\""}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":": {"}]]}]
+65:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":"        \"kind\""}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":": "}],["$","span",null,{"style":{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"},"children":"\"string\""}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":","}]]}]
+66:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":"        \"value\""}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":": "}],["$","span",null,{"style":{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"},"children":"\"{{header_1_payload_base_64}}\""}]]}]
+67:["$","span",null,{"className":"line","children":["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"      }"}]}]
+68:["$","span",null,{"className":"line","children":["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"    }"}]}]
+69:["$","span",null,{"className":"line","children":["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"  }]"}]}]
+6a:["$","span",null,{"className":"line","children":["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"}"}]}]
+6c:["$","$L63",null,{"children":["$","code",null,{"children":[["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"impl"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" BytesSerializable"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":" for"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"# [...]
+6e:["$","$L63",null,{"children":["$","code",null,{"children":[["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"impl"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" HeaderKind"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":" {"}]]}],"\n",["$","span",null,{"className":"line","children":[["$","span",null,{"sty [...]
+70:["$","$L63",null,{"children":["$","code",null,{"children":[["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"fn"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" as_bytes"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"("}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"chil [...]
+72:["$","$L63",null,{"children":["$","code",null,{"children":[["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"pub"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":" fn"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" map_message"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"} [...]
+74:["$","$L63",null,{"children":["$","code",null,{"children":[["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"let"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":" mut"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":" headers "}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"}," [...]
+76:["$","$L63",null,{"children":["$","code",null,{"children":[["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"headers"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"."}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"insert"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"ch [...]
+78:["$","$L63",null,{"children":["$","code",null,{"children":[["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"let"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":" send_messages "}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"="}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0" [...]
+d4:I[27201,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"IconMark"]
+7a:["$","$L63",null,{"children":["$","code",null,{"children":[["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"let"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":" value1 "}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"="}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"chil [...]
+7b:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"    Int128"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":","}]]}]
+7c:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"    Uint8"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":","}]]}]
+7d:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"    Uint16"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":","}]]}]
+7e:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"    Uint32"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":","}]]}]
+7f:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"    Uint64"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":","}]]}]
+80:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"    Uint128"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":","}]]}]
+81:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"    Float32"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":","}]]}]
+82:["$","span",null,{"className":"line","children":["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"    Float64"}]}]
+83:["$","span",null,{"className":"line","children":["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"}"}]}]
+84:["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":":"}]
+85:["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" Bytes"}]
+86:["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":","}]
+87:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"    pub"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":" headers"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":":"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" Option"}],["$","span",null,{"style":{"--shiki-l [...]
+88:["$","span",null,{"className":"line","children":["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"}"}]}]
+89:["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"."}]
+8a:["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":"0."}]
+8b:["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"len"}]
+8c:["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"() "}]
+8d:["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"as"}]
+8e:["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" u32"}]
+8f:["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":");"}]
+90:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"            bytes"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"."}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"extend"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"(key"}],["$","span",null,{"style":{"--sh [...]
+91:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"            bytes"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"."}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"put_u8"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"(value"}],["$","span",null,{"style":{"-- [...]
+92:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"            bytes"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"."}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"put_u32_le"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"(value"}],["$","span",null,{"style": [...]
+93:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"            bytes"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"."}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"extend"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"("}],["$","span",null,{"style":{"--shiki [...]
+94:["$","span",null,{"className":"line","children":["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"        }"}]}]
+95:["$","span",null,{"className":"line"}]
+96:["$","span",null,{"className":"line","children":["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"        bytes"}]}]
+97:["$","span",null,{"className":"line","children":["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"    }"}]}]
+98:["$","span",null,{"className":"line","children":["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"}"}]}]
+99:["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":" 5"}]
+9a:["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":","}]
+9b:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"            HeaderKind"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"::"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"Int32"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":" =>"}],["$","span",null,{"style":{" [...]
+9c:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"            HeaderKind"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"::"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"Int64"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":" =>"}],["$","span",null,{"style":{" [...]
+9d:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"            HeaderKind"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"::"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"Int128"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":" =>"}],["$","span",null,{"style":{ [...]
+9e:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"            HeaderKind"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"::"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"Uint8"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":" =>"}],["$","span",null,{"style":{" [...]
+9f:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"            HeaderKind"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"::"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"Uint16"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":" =>"}],["$","span",null,{"style":{ [...]
+a0:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"            HeaderKind"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"::"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"Uint32"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":" =>"}],["$","span",null,{"style":{ [...]
+a1:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"            HeaderKind"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"::"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"Uint64"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":" =>"}],["$","span",null,{"style":{ [...]
+a2:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"            HeaderKind"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"::"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"Uint128"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":" =>"}],["$","span",null,{"style": [...]
+a3:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"            HeaderKind"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"::"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"Float32"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":" =>"}],["$","span",null,{"style": [...]
+a4:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"            HeaderKind"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"::"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"Float64"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":" =>"}],["$","span",null,{"style": [...]
+a5:["$","span",null,{"className":"line","children":["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"        }"}]}]
+a6:["$","span",null,{"className":"line","children":["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"    }"}]}]
+a7:["$","span",null,{"className":"line","children":["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"}"}]}]
+a8:["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"."}]
+a9:["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"as_bytes"}]
+aa:["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"();"}]
+ab:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"        bytes"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"."}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"put_u32_le"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"(headers_bytes"}],["$","span",null,{"sty [...]
+ac:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"        bytes"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"."}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"extend"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"("}],["$","span",null,{"style":{"--shiki-lig [...]
+ad:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"    } "}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"else"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":" {"}]]}]
+ae:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"        bytes"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"."}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"put_u32_le"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"("}],["$","span",null,{"style":{"--shiki [...]
+af:["$","span",null,{"className":"line","children":["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"    }"}]}]
+b0:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"    bytes"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"."}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"put_u32_le"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"("}],["$","span",null,{"style":{"--shiki-lig [...]
+b1:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"    bytes"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"."}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"extend"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"("}],["$","span",null,{"style":{"--shiki-light": [...]
+b2:["$","span",null,{"className":"line","children":["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"    bytes"}]}]
+b3:["$","span",null,{"className":"line","children":["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"}"}]}]
+b4:["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":" headers"}]
+b5:["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"."}]
+b6:["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"as_bytes"}]
+b7:["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"();"}]
+b8:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"        bytes"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"."}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"put_u32_le"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"(headers_bytes"}],["$","span",null,{"sty [...]
+b9:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"        bytes"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"."}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"extend"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"("}],["$","span",null,{"style":{"--shiki-lig [...]
+ba:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"    } "}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"else"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":" {"}]]}]
+bb:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"        bytes"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"."}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"put_u32_le"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"("}],["$","span",null,{"style":{"--shiki [...]
+bc:["$","span",null,{"className":"line","children":["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"    }"}]}]
+bd:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"    bytes"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"."}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"put_u32_le"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"("}],["$","span",null,{"style":{"--shiki-lig [...]
+be:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"    bytes"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"."}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"extend"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"("}],["$","span",null,{"style":{"--shiki-light": [...]
+bf:["$","span",null,{"className":"line","children":["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"}"}]}]
+c0:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"headers"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"."}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"insert"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"("}],["$","span",null,{"style":{"--shiki-light":"# [...]
+c1:["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":") , "}]
+c2:["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"Some"}]
+c3:["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"(headers))]"}]
+c4:["$","span",null,{"className":"line","children":["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"};"}]}]
+c5:["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"("}]
+c6:["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"&"}]
+c7:["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"HeaderKey"}]
+c8:["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"::"}]
+c9:["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"new"}]
+ca:["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"("}]
+cb:["$","span",null,{"style":{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"},"children":"\"key_3\""}]
+cc:["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":")"}]
+cd:["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"?"}]
+ce:["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":")"}]
+cf:["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"?."}]
+d0:["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"as_uint64"}]
+d1:["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"()"}]
+d2:["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"?"}]
+d3:["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":";"}]
+29:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]
+27:null
+2b:[["$","title","0",{"children":"Message headers | Apache Iggy"}],["$","link","1",{"rel":"canonical","href":"https://iggy.apache.org/blogs/2023/08/19/message-headers/"}],["$","link","2",{"rel":"alternate","type":"text/markdown","href":"https://iggy.apache.org/blogs/2023/08/19/message-headers.md"}],["$","meta","3",{"property":"og:title","content":"Message headers | Apache Iggy"}],["$","meta","4",{"property":"og:url","content":"https://iggy.apache.org/blogs/2023/08/19/message-headers/"}], [...]
diff --git a/blogs/2023/08/19/message-headers/__next._index.txt b/blogs/2023/08/19/message-headers/__next._index.txt
new file mode 100644
index 000000000..42b058136
--- /dev/null
+++ b/blogs/2023/08/19/message-headers/__next._index.txt
@@ -0,0 +1,20 @@
+1:"$Sreact.fragment"
+3:I[17751,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"RootProvider"]
+4:I[39756,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"default"]
+5:I[58298,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/3-_96y-evozm0.js"],"default"]
+6:I[37457,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"default"]
+7:I[22016,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],""]
+:HL["/_next/static/chunks/1_55v0vlfews3.css","style"]
+2:T512,{"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://iggy.apache.org/#organization","name":"The Apache Software Foundation","url":"https://www.apache.org/","logo":"https://iggy.apache.org/img/asf_logo.svg","contactPoint":{"@type":"ContactPoint","contactType":"technical support","email":"dev@iggy.apache.org","url":"https://iggy.apache.org/community/"}},{"@type":"WebSite","@id":"https://iggy.apache.org/#website","name":"Apache Iggy","url":"https://iggy.a [...]
+0:{"buildId":"CEAllZE6ERPzzxzpa_n8G","data":[{"rsc":["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/1_55v0vlfews3.css","precedence":"next"}],["$","script","script-0",{"src":"/_next/static/chunks/05hk4ely-lns6.js","async":true}],["$","script","script-1",{"src":"/_next/static/chunks/2tvyahbdutabx.js","async":true}]],["$","html",null,{"lang":"en","suppressHydrationWarning":true,"children":["$","body",null,{"className":"flex min-h-screen flex-col  [...]
+10:I[79520,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],""]
+11:I[69877,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"Matomo"]
+8:["$","a",null,{"href":"/sitemap.xml","className":"underline hover:text-fd-primary","children":"/sitemap.xml"}]
+9:["$","a",null,{"href":"/llms.txt","className":"underline hover:text-fd-primary","children":"/llms.txt"}]
+a:["$","$L10",null,{"id":"matomo","strategy":"afterInteractive","children":"var _paq = window._paq = window._paq || [];\n_paq.push([\"setDoNotTrack\", true]);\n_paq.push([\"disableCookies\"]);\n_paq.push(['trackPageView']);\n_paq.push(['enableLinkTracking']);\n(function() {\n  var u=\"https://analytics.apache.org/\";\n  _paq.push(['setTrackerUrl', u+'matomo.php']);\n  _paq.push(['setSiteId', '80']);\n  var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];\n  [...]
+b:["$","$L11",null,{}]
+d:300
+f:true
+d:C
+e:0
+c:"$undefined"
diff --git a/blogs/2023/08/19/message-headers/__next._tree.txt b/blogs/2023/08/19/message-headers/__next._tree.txt
new file mode 100644
index 000000000..7a531fe24
--- /dev/null
+++ b/blogs/2023/08/19/message-headers/__next._tree.txt
@@ -0,0 +1,3 @@
+:HL["/_next/static/chunks/1_55v0vlfews3.css","style"]
+:HL["/img/authors/piotr.png","image"]
+0:{"tree":{"name":"","param":null,"prefetchHints":4112,"slots":{"children":{"name":"(site)","param":null,"prefetchHints":4096,"slots":{"children":{"name":"blogs","param":null,"prefetchHints":4160,"slots":{"children":{"name":"slug","param":{"type":"c","key":"2023/08/19/message-headers","siblings":[]},"prefetchHints":4192,"slots":{"children":{"name":"__PAGE__","param":null,"prefetchHints":4256,"slots":null}}}}}}}}},"staleTime":300,"buildId":"CEAllZE6ERPzzxzpa_n8G"}
diff --git a/blogs/2023/08/19/message-headers/index.html b/blogs/2023/08/19/message-headers/index.html
new file mode 100644
index 000000000..4d15b3a34
--- /dev/null
+++ b/blogs/2023/08/19/message-headers/index.html
@@ -0,0 +1,172 @@
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" href="/img/authors/piotr.png" as="image"/><link rel="stylesheet" href="/_next/static/chunks/1_55v0vlfews3.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/1qt6pht_u0de1.js"/><script src="/_next/static/chunks/1iye7dwhtxrnu.js" async=""></script><script src="/_next/static/chunks/1t7fq8 [...]
+<h2 id="breaking-changes" class="group/heading flex scroll-m-28 flex-row items-center gap-1"><a data-card="" href="#breaking-changes">Breaking changes</a><button aria-label="Copy Anchor Link" class="inline-flex items-center justify-center rounded-md text-sm font-medium duration-100 disabled:pointer-events-none disabled:opacity-50 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-fd-ring hover:bg-fd-accent hover:text-fd-accent-foreground p-1 [&amp;_svg]:size-4 not-prose s [...]
+<p>The first draft of the message headers implementation starts with the initial commit <a href="https://github.com/apache/iggy/commit/bc1d0b369a268783bd329436aba3f6920aae478e" rel="noreferrer noopener" target="_blank">#bc1d0b3</a>. The breaking change to the streaming server has been introduced in the commit <a href="https://github.com/apache/iggy/commit/7c73bd3d9d59fb685cbaaca5901dec6cac43ddaf" rel="noreferrer noopener" target="_blank">#7c73bd3</a> - up until this point, the existing i [...]
+<h2 id="introduction" class="group/heading flex scroll-m-28 flex-row items-center gap-1"><a data-card="" href="#introduction">Introduction</a><button aria-label="Copy Anchor Link" class="inline-flex items-center justify-center rounded-md text-sm font-medium duration-100 disabled:pointer-events-none disabled:opacity-50 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-fd-ring hover:bg-fd-accent hover:text-fd-accent-foreground p-1 [&amp;_svg]:size-4 not-prose shrink-0 text [...]
+<p>Message headers are an <strong>optional</strong> part of the message which can be used to provide the additional metadata for the message (they are not a part of the message body. Similar to e.g. HTTP headers, you can think of them as a <strong>key-value pairs</strong>, or more precisely the dictionary or map. The headers consist of the key and the value, where the key is a string (<strong>UTF-8 bytes</strong>) and the value is a byte array.</p>
+<p>Since the headers are optional, you can send a message without any headers at all. There&#x27;s no limit on the number of headers you can send, but the total size of the headers is currently limited to <strong>100 KB</strong>. The header key is <strong>case-sensitive</strong>, so it&#x27;s best to send the <strong>lowercase</strong> keys. The maximum length of the key and the value is <strong>255 bytes</strong> (the maximum value of the <code>u8</code> type).</p>
+<p>For now, there are no reserved headers, so you can use any key you want. However, in the future, we might introduce some reserved headers used by the streaming server for the specific purposes such as the message compression, distributed tracing and so no.</p>
+<p>The <strong>sample applications</strong> using the message headers can be found <a href="https://github.com/apache/iggy/tree/master/examples/rust/src/message-headers" rel="noreferrer noopener" target="_blank">here</a>.</p>
+<h2 id="implementation" class="group/heading flex scroll-m-28 flex-row items-center gap-1"><a data-card="" href="#implementation">Implementation</a><button aria-label="Copy Anchor Link" class="inline-flex items-center justify-center rounded-md text-sm font-medium duration-100 disabled:pointer-events-none disabled:opacity-50 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-fd-ring hover:bg-fd-accent hover:text-fd-accent-foreground p-1 [&amp;_svg]:size-4 not-prose shrink- [...]
+<h3 id="structures" class="group/heading flex scroll-m-28 flex-row items-center gap-1"><a data-card="" href="#structures">Structures</a><button aria-label="Copy Anchor Link" class="inline-flex items-center justify-center rounded-md text-sm font-medium duration-100 disabled:pointer-events-none disabled:opacity-50 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-fd-ring hover:bg-fd-accent hover:text-fd-accent-foreground p-1 [&amp;_svg]:size-4 not-prose shrink-0 text-fd-mu [...]
+<p>We will start with the sample Rust implementation of the headers. The headers are defined as a <code>HashMap</code> where the key is a <code>string</code> (wrapped with a custom <code>HeaderKey</code> struct to enforce the validation) and the value is a <code>HeaderValue</code> struct. The <code>HeaderValue</code> struct consists of the <code>HeaderKind</code> enum and the <code>Vec&lt;u8&gt;</code> value. The <code>HeaderKind</code> enum defines the type of the value, which can be ei [...]
+<p>The primitive types are defined as the enum variants, so you can easily match on them. The <code>HeaderKind</code> enum is used to validate the value and to serialize/deserialize it. The idea is that the value will always remain a byte array, but you can use the <code>HeaderKind</code> to convert it to the desired type.</p>
+<figure dir="ltr" class="my-4 bg-fd-card rounded-xl shiki relative border shadow-sm not-prose overflow-hidden text-sm shiki shiki-themes github-light github-dark" style="--shiki-light:#24292e;--shiki-dark:#e1e4e8;--shiki-light-bg:#fff;--shiki-dark-bg:#24292e" tabindex="-1"><div class="empty:hidden absolute top-3 right-2 z-2 backdrop-blur-lg rounded-lg text-fd-muted-foreground"><button type="button" class="inline-flex items-center justify-center rounded-md text-sm font-medium transition-c [...]
+<span class="line"></span>
+<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">pub</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583"> struct</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> HeaderValue</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> {</span></span>
+<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    pub</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> kind</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">:</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> HeaderKind</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
+<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    pub</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> value</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">:</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> Vec</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">&lt;</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">u8</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">&gt;</sp [...]
+<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">}</span></span>
+<span class="line"></span>
+<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">pub</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583"> enum</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> HeaderKind</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> {</span></span>
+<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">    Raw</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
+<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">    String</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
+<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">    Bool</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
+<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">    Int8</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
+<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">    Int16</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
+<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">    Int32</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
+<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">    Int64</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
+<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">    Int128</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
+<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">    Uint8</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
+<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">    Uint16</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
+<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">    Uint32</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
+<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">    Uint64</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
+<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">    Uint128</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
+<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">    Float32</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
+<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">    Float64</span></span>
+<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">}</span></span></code></pre></div></figure>
+<p>Next, let&#x27;s take a look at the <code>SendMessages</code> command, and in particular we will see what has changed in the underlying <code>Message</code> struct (keep in mind that headers are unique per message, so they are not a part of the <code>SendMessages</code> command). The <code>Message</code> struct now has an additional <code>headers</code> field, which is a <code>HashMap</code> of <code>HeaderKey</code> and <code>HeaderValue</code> structs:</p>
+<figure dir="ltr" class="my-4 bg-fd-card rounded-xl shiki relative border shadow-sm not-prose overflow-hidden text-sm shiki shiki-themes github-light github-dark" style="--shiki-light:#24292e;--shiki-dark:#e1e4e8;--shiki-light-bg:#fff;--shiki-dark-bg:#24292e" tabindex="-1"><div class="empty:hidden absolute top-3 right-2 z-2 backdrop-blur-lg rounded-lg text-fd-muted-foreground"><button type="button" class="inline-flex items-center justify-center rounded-md text-sm font-medium transition-c [...]
+<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    pub</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> stream_id</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">:</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> Identifier</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
+<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    pub</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> topic_id</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">:</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> Identifier</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
+<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    pub</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> partitioning</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">:</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> Partitioning</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
+<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    pub</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> messages</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">:</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> Vec</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">&lt;</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">Message</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> [...]
+<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">}</span></span>
+<span class="line"></span>
+<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">pub</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583"> struct</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> Message</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> {</span></span>
+<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    pub</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> id</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">:</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> u128</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
+<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    pub</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> length</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">:</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> u32</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
+<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    pub</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> payload</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">:</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> Bytes</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
+<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    pub</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> headers</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">:</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> Option</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">&lt;</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">HashMap</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8 [...]
+<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">}</span></span></code></pre></div></figure>
+<h3 id="json-transport" class="group/heading flex scroll-m-28 flex-row items-center gap-1"><a data-card="" href="#json-transport">JSON transport</a><button aria-label="Copy Anchor Link" class="inline-flex items-center justify-center rounded-md text-sm font-medium duration-100 disabled:pointer-events-none disabled:opacity-50 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-fd-ring hover:bg-fd-accent hover:text-fd-accent-foreground p-1 [&amp;_svg]:size-4 not-prose shrink- [...]
+<p>Headers are optional, so depending on the programming language, you can either use the <code>option</code> type, or the <code>null</code> value, or even instantiate an <code>empty</code> map - it&#x27;s up to you. The important part is the serialization. For the JSON transport, it&#x27;s very easy, as you can see in the following example:</p>
+<figure dir="ltr" class="my-4 bg-fd-card rounded-xl shiki relative border shadow-sm not-prose overflow-hidden text-sm shiki shiki-themes github-light github-dark" style="--shiki-light:#24292e;--shiki-dark:#e1e4e8;--shiki-light-bg:#fff;--shiki-dark-bg:#24292e" tabindex="-1"><div class="empty:hidden absolute top-3 right-2 z-2 backdrop-blur-lg rounded-lg text-fd-muted-foreground"><button type="button" class="inline-flex items-center justify-center rounded-md text-sm font-medium transition-c [...]
+<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">  &quot;partitioning&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">: {</span></span>
+<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">    &quot;kind&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">&quot;partition_id&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
+<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">    &quot;value&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">&quot;{{partition_id_payload_base64}}&quot;</span></span>
+<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">  },</span></span>
+<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">  &quot;messages&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">: [{</span></span>
+<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">    &quot;id&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">0</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
+<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">    &quot;payload&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">&quot;{{message_1_payload_base64}}&quot;</span></span>
+<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">  }, {</span></span>
+<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">    &quot;id&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">0</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
+<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">    &quot;payload&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">&quot;{{message_2_payload_base64}}&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
+<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">    &quot;headers&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">: {</span></span>
+<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">      &quot;key_1&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">: {</span></span>
+<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">        &quot;kind&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">&quot;string&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
+<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">        &quot;value&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">&quot;{{header_1_payload_base_64}}&quot;</span></span>
+<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">      }</span></span>
+<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">    }</span></span>
+<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">  }]</span></span>
+<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">}</span></span></code></pre></div></figure>
+<p>Simply put, in order to include the headers in the message, you need to add the <code>headers</code> field to the message struct. The <code>headers</code> field is a map of the <code>String</code> keys and the <code>HeaderValue</code> values. The <code>HeaderValue</code> value is a JSON object which consists of the <code>kind</code> and the <code>value</code> fields. The <code>kind</code> field is a string which defines the type of the value, and the <code>value</code> field is a base [...]
+<h3 id="binary-transport" class="group/heading flex scroll-m-28 flex-row items-center gap-1"><a data-card="" href="#binary-transport">Binary transport</a><button aria-label="Copy Anchor Link" class="inline-flex items-center justify-center rounded-md text-sm font-medium duration-100 disabled:pointer-events-none disabled:opacity-50 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-fd-ring hover:bg-fd-accent hover:text-fd-accent-foreground p-1 [&amp;_svg]:size-4 not-prose s [...]
+<p>Now, we can move on to the more complex part, being the binary transport (as always, it&#x27;s the same schema for both, TCP and QUIC protocol).</p>
+<p>We will begin with the headers serialization for the whole <code>HashMap</code>:</p>
+<figure dir="ltr" class="my-4 bg-fd-card rounded-xl shiki relative border shadow-sm not-prose overflow-hidden text-sm shiki shiki-themes github-light github-dark" style="--shiki-light:#24292e;--shiki-dark:#e1e4e8;--shiki-light-bg:#fff;--shiki-dark-bg:#24292e" tabindex="-1"><div class="empty:hidden absolute top-3 right-2 z-2 backdrop-blur-lg rounded-lg text-fd-muted-foreground"><button type="button" class="inline-flex items-center justify-center rounded-md text-sm font-medium transition-c [...]
+<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    fn</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> as_bytes</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">&amp;</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">self</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">) </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">-&gt; [...]
+<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">        if</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> self</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">is_empty</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">() {</span></span>
+<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">            return</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> EMPTY_BYTES</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">;</span></span>
+<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">        }</span></span>
+<span class="line"></span>
+<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">        let</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583"> mut</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> bytes </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">=</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> vec!</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">[];</span></span>
+<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">        for</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> (key, value) </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">in</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> self</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> {</span></span>
+<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">            bytes</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">put_u32_le</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(key</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">.</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">0.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F [...]
+<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">            bytes</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">extend</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(key</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">.</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">0.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">a [...]
+<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">            bytes</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">put_u8</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(value</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">.</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">kind</span><span style="--shiki-light:#D73A49;--shiki-dark:#F9758 [...]
+<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">            bytes</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">put_u32_le</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(value</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">.</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">value</span><span style="--shiki-light:#D73A49;--shiki-dark:# [...]
+<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">            bytes</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">extend</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">&amp;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">value</span><span style="--shiki-light:#D73A49;--shiki-dark:#F9758 [...]
+<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">        }</span></span>
+<span class="line"></span>
+<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">        bytes</span></span>
+<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">    }</span></span>
+<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">}</span></span></code></pre></div></figure>
+<p>If for some reason, there are no headers, we return an empty byte array. Otherwise, we iterate over the headers and serialize them one by one. The serialization shouldn&#x27;t be too difficult as we start with the key length, then we add the key itself (<strong>UTF-8 bytes</strong>), then we add the value type (the <code>HeaderKind</code> enum variant), then we add the value length, and finally we add the value itself (<strong>UTF-8 bytes</strong>).</p>
+<p>The length of the single header is the following: <code>4 bytes</code> for the key length, <code>n bytes</code> (<strong>1-255</strong>) for the key, <code>1 byte</code> for the value kind, <code>4 bytes</code> for the value length and <code>n bytes</code> (<strong>1-255</strong>) for the value itself.</p>
+<p>The <code>HeaderKind</code> uses the following codes:</p>
+<figure dir="ltr" class="my-4 bg-fd-card rounded-xl shiki relative border shadow-sm not-prose overflow-hidden text-sm shiki shiki-themes github-light github-dark" style="--shiki-light:#24292e;--shiki-dark:#e1e4e8;--shiki-light-bg:#fff;--shiki-dark-bg:#24292e" tabindex="-1"><div class="empty:hidden absolute top-3 right-2 z-2 backdrop-blur-lg rounded-lg text-fd-muted-foreground"><button type="button" class="inline-flex items-center justify-center rounded-md text-sm font-medium transition-c [...]
+<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    pub</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583"> fn</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> as_code</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">&amp;</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">self</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">) </ [...]
+<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">        match</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> self</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> {</span></span>
+<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">            HeaderKind</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">::</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">Raw</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583"> =&gt;</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> 1</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
+<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">            HeaderKind</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">::</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">String</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583"> =&gt;</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> 2</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
+<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">            HeaderKind</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">::</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">Bool</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583"> =&gt;</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> 3</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
+<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">            HeaderKind</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">::</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">Int8</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583"> =&gt;</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> 4</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
+<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">            HeaderKind</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">::</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">Int16</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583"> =&gt;</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> 5</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
+<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">            HeaderKind</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">::</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">Int32</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583"> =&gt;</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> 6</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
+<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">            HeaderKind</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">::</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">Int64</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583"> =&gt;</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> 7</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
+<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">            HeaderKind</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">::</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">Int128</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583"> =&gt;</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> 8</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
+<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">            HeaderKind</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">::</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">Uint8</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583"> =&gt;</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> 9</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
+<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">            HeaderKind</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">::</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">Uint16</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583"> =&gt;</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> 10</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
+<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">            HeaderKind</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">::</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">Uint32</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583"> =&gt;</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> 11</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
+<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">            HeaderKind</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">::</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">Uint64</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583"> =&gt;</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> 12</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
+<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">            HeaderKind</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">::</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">Uint128</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583"> =&gt;</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> 13</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
+<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">            HeaderKind</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">::</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">Float32</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583"> =&gt;</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> 14</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
+<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">            HeaderKind</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">::</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">Float64</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583"> =&gt;</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> 15</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
+<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">        }</span></span>
+<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">    }</span></span>
+<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">}</span></span></code></pre></div></figure>
+<h3 id="sending-the-messages-with-headers" class="group/heading flex scroll-m-28 flex-row items-center gap-1"><a data-card="" href="#sending-the-messages-with-headers">Sending the messages with headers</a><button aria-label="Copy Anchor Link" class="inline-flex items-center justify-center rounded-md text-sm font-medium duration-100 disabled:pointer-events-none disabled:opacity-50 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-fd-ring hover:bg-fd-accent hover:text-fd-a [...]
+<p>Now, let&#x27;s see how we can include the headers in a message serialization:</p>
+<figure dir="ltr" class="my-4 bg-fd-card rounded-xl shiki relative border shadow-sm not-prose overflow-hidden text-sm shiki shiki-themes github-light github-dark" style="--shiki-light:#24292e;--shiki-dark:#e1e4e8;--shiki-light-bg:#fff;--shiki-dark-bg:#24292e" tabindex="-1"><div class="empty:hidden absolute top-3 right-2 z-2 backdrop-blur-lg rounded-lg text-fd-muted-foreground"><button type="button" class="inline-flex items-center justify-center rounded-md text-sm font-medium transition-c [...]
+<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    let</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583"> mut</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> bytes </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">=</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> Vec</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">::</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">with_ca [...]
+<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">    bytes</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">put_u128_le</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">self</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">.</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">id);< [...]
+<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    if</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583"> let</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> Some</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(headers) </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">=</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583"> &amp;</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> [...]
+<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">        let</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> headers_bytes </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> headers</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">as_bytes</span><span style="--shiki-light:#24292E;--shiki-da [...]
+<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">        bytes</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">put_u32_le</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(headers_bytes</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">len</span><span style="--shiki-light:#24292E;--shiki-dark [...]
+<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">        bytes</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">extend</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">&amp;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">headers_bytes);</span></span>
+<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">    } </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">else</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> {</span></span>
+<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">        bytes</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">put_u32_le</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">0</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">);</span></span>
+<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">    }</span></span>
+<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">    bytes</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">put_u32_le</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">self</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">.</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">length [...]
+<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">    bytes</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">extend</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">&amp;</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">self</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">.</spa [...]
+<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">    bytes</span></span>
+<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">}</span></span></code></pre></div></figure>
+<p>The important thing to notice, is that the <strong>headers are being serialized right after the <code>ID</code> and before the actual message payload</strong>. At first, we add the total length of the headers&#x27; payload, then we add the headers themselves, and finally we include the message payload (length + value) as before. If the headers are not provided at all (e.g. <code>none</code> or <code>null</code> or an <code>empty</code> array), we add the <code>0</code> value as the he [...]
+<h3 id="polling-the-messages-with-headers" class="group/heading flex scroll-m-28 flex-row items-center gap-1"><a data-card="" href="#polling-the-messages-with-headers">Polling the messages with headers</a><button aria-label="Copy Anchor Link" class="inline-flex items-center justify-center rounded-md text-sm font-medium duration-100 disabled:pointer-events-none disabled:opacity-50 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-fd-ring hover:bg-fd-accent hover:text-fd-a [...]
+<p>Eventually, let&#x27;s discuss the <code>PollMessages</code> command. Nothing has changed here, except of the extended <code>Message</code> struct, which now contains the optional headers. For the JSON transport it&#x27;s the same as when sending the messages, and for the binary transport, we need to deserialize the headers in the same way as we did when sending the messages. Let&#x27;s find out how it works.</p>
+<figure dir="ltr" class="my-4 bg-fd-card rounded-xl shiki relative border shadow-sm not-prose overflow-hidden text-sm shiki shiki-themes github-light github-dark" style="--shiki-light:#24292e;--shiki-dark:#e1e4e8;--shiki-light-bg:#fff;--shiki-dark-bg:#24292e" tabindex="-1"><div class="empty:hidden absolute top-3 right-2 z-2 backdrop-blur-lg rounded-lg text-fd-muted-foreground"><button type="button" class="inline-flex items-center justify-center rounded-md text-sm font-medium transition-c [...]
+<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">    bytes</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">put_u64_le</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">self</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">.</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">offset [...]
+<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">    bytes</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">put_u64_le</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">self</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">.</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">timest [...]
+<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">    bytes</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">put_u128_le</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">self</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">.</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">id);< [...]
+<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    if</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583"> let</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> Some</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(headers) </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">=</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583"> &amp;</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> [...]
+<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">        let</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> headers_bytes </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> headers</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">as_bytes</span><span style="--shiki-light:#24292E;--shiki-da [...]
+<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">        bytes</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">put_u32_le</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(headers_bytes</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">len</span><span style="--shiki-light:#24292E;--shiki-dark [...]
+<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">        bytes</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">extend</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">&amp;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">headers_bytes);</span></span>
+<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">    } </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">else</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> {</span></span>
+<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">        bytes</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">put_u32_le</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">0</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">u32</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">);< [...]
+<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">    }</span></span>
+<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">    bytes</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">put_u32_le</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">self</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">.</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">length [...]
+<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">    bytes</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">extend</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">&amp;</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">self</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">.</spa [...]
+<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">}</span></span></code></pre></div></figure>
+<p>As you can see, the headers are being serialized in the same way as when sending the messages. The only difference is that the <code>Message</code> struct also contains the <code>offset</code> and the <code>timestamp</code> fields, which are being serialized before the <code>ID</code> field. Besides that, nothing has changed, as we simply include the headers right after the <code>ID</code> field and before the actual message payload.</p>
+<h3 id="sample-usage" class="group/heading flex scroll-m-28 flex-row items-center gap-1"><a data-card="" href="#sample-usage">Sample usage</a><button aria-label="Copy Anchor Link" class="inline-flex items-center justify-center rounded-md text-sm font-medium duration-100 disabled:pointer-events-none disabled:opacity-50 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-fd-ring hover:bg-fd-accent hover:text-fd-accent-foreground p-1 [&amp;_svg]:size-4 not-prose shrink-0 text [...]
+<p>The headers usage is pretty straightforward, as we simply need to create the new <code>HashMap</code>:</p>
+<figure dir="ltr" class="my-4 bg-fd-card rounded-xl shiki relative border shadow-sm not-prose overflow-hidden text-sm shiki shiki-themes github-light github-dark" style="--shiki-light:#24292e;--shiki-dark:#e1e4e8;--shiki-light-bg:#fff;--shiki-dark-bg:#24292e" tabindex="-1"><div class="empty:hidden absolute top-3 right-2 z-2 backdrop-blur-lg rounded-lg text-fd-muted-foreground"><button type="button" class="inline-flex items-center justify-center rounded-md text-sm font-medium transition-c [...]
+<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">headers</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">insert</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">HeaderKey</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">::</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">new</s [...]
+<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">headers</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">insert</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">HeaderKey</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">::</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">new</s [...]
+<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">headers</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">insert</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">HeaderKey</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">::</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">new</s [...]
+<p>You might also use the conversion based on the implemented traits:</p>
+<figure dir="ltr" class="my-4 bg-fd-card rounded-xl shiki relative border shadow-sm not-prose overflow-hidden text-sm shiki shiki-themes github-light github-dark" style="--shiki-light:#24292e;--shiki-dark:#e1e4e8;--shiki-light-bg:#fff;--shiki-dark-bg:#24292e" tabindex="-1"><div class="empty:hidden absolute top-3 right-2 z-2 backdrop-blur-lg rounded-lg text-fd-muted-foreground"><button type="button" class="inline-flex items-center justify-center rounded-md text-sm font-medium transition-c [...]
+<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">let</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> value </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> headers</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">get</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(</span>< [...]
+<p>Keep in mind, that the <code>HeaderKey</code> and the <code>HeaderValue</code> structs are being validated whenever you use one of the available methods to create them.</p>
+<p>And then, we can send the messages with the headers (first <code>none</code> argument is for the optional ID):</p>
+<figure dir="ltr" class="my-4 bg-fd-card rounded-xl shiki relative border shadow-sm not-prose overflow-hidden text-sm shiki shiki-themes github-light github-dark" style="--shiki-light:#24292e;--shiki-dark:#e1e4e8;--shiki-light-bg:#fff;--shiki-dark-bg:#24292e" tabindex="-1"><div class="empty:hidden absolute top-3 right-2 z-2 backdrop-blur-lg rounded-lg text-fd-muted-foreground"><button type="button" class="inline-flex items-center justify-center rounded-md text-sm font-medium transition-c [...]
+<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">    stream_id</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">:</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> Identifier</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">::</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">numeric</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8F [...]
+<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">    topic_id</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">:</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> Identifier</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">::</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">named</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> [...]
+<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">    partitioning</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">:</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> Partitioning</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">::</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">balanced</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(),</span></span>
+<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">    messages</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">:</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> vec!</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">[</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">Message</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">::</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">new< [...]
+<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">};</span></span></code></pre></div></figure>
+<p>When you poll the messages and want to read the header value based on its kind, you can also use the existing helper methods, for example:</p>
+<figure dir="ltr" class="my-4 bg-fd-card rounded-xl shiki relative border shadow-sm not-prose overflow-hidden text-sm shiki shiki-themes github-light github-dark" style="--shiki-light:#24292e;--shiki-dark:#e1e4e8;--shiki-light-bg:#fff;--shiki-dark-bg:#24292e" tabindex="-1"><div class="empty:hidden absolute top-3 right-2 z-2 backdrop-blur-lg rounded-lg text-fd-muted-foreground"><button type="button" class="inline-flex items-center justify-center rounded-md text-sm font-medium transition-c [...]
+<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">let</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> value2 </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> headers</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">get</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(</span> [...]
+<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">let</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> value3 </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> headers</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">get</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(</span> [...]
\ No newline at end of file
diff --git a/blogs/2023/08/19/message-headers/index.txt b/blogs/2023/08/19/message-headers/index.txt
new file mode 100644
index 000000000..763649886
--- /dev/null
+++ b/blogs/2023/08/19/message-headers/index.txt
@@ -0,0 +1,205 @@
+1:"$Sreact.fragment"
+3:I[17751,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"RootProvider"]
+4:I[39756,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"default"]
+5:I[58298,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/3-_96y-evozm0.js"],"default"]
+6:I[37457,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"default"]
+7:I[22016,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],""]
+12:I[68027,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"default",1]
+:HL["/_next/static/chunks/1_55v0vlfews3.css","style"]
+2:T512,{"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://iggy.apache.org/#organization","name":"The Apache Software Foundation","url":"https://www.apache.org/","logo":"https://iggy.apache.org/img/asf_logo.svg","contactPoint":{"@type":"ContactPoint","contactType":"technical support","email":"dev@iggy.apache.org","url":"https://iggy.apache.org/community/"}},{"@type":"WebSite","@id":"https://iggy.apache.org/#website","name":"Apache Iggy","url":"https://iggy.a [...]
+0:{"P":null,"c":["","blogs","2023","08","19","message-headers",""],"q":"","i":false,"f":[[["",{"children":["(site)",{"children":["blogs",{"children":[["slug","2023/08/19/message-headers","c",[]],{"children":["__PAGE__",{},"$undefined","$undefined",4608]},"$undefined","$undefined",4608]},"$undefined","$undefined",4608]},"$undefined","$undefined",4608]},"$undefined","$undefined",4624],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/1_55v0vlfews [...]
+14:I[79520,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],""]
+15:I[69877,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"Matomo"]
+16:I[5014,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],"default"]
+17:I[64345,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js"],"HomeLayout"]
+18:I[88760,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js"],"Logo"]
+19:I[15269,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js"],"CommunityDropdown"]
+1a:I[15269,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js"],"communityLinks"]
+1b:I[29966,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js"],"ASFDropdown"]
+1c:I[36330,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js"],"ASFMobileLinks"]
+25:I[97367,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"OutletBoundary"]
+26:"$Sreact.suspense"
+28:I[97367,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"ViewportBoundary"]
+2a:I[97367,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"MetadataBoundary"]
+8:["$","$L7","/community",{"href":"/community","className":"transition-colors hover:text-fd-primary","children":"Community"}]
+9:["$","p",null,{"className":"mt-6 max-w-md text-xs text-fd-muted-foreground","children":["Every page on this site is listed in"," ",["$","a",null,{"href":"/sitemap.xml","className":"underline hover:text-fd-primary","children":"/sitemap.xml"}],", and"," ",["$","a",null,{"href":"/llms.txt","className":"underline hover:text-fd-primary","children":"/llms.txt"}]," ","summarises the documentation."]}]
+a:["$","$L14",null,{"id":"matomo","strategy":"afterInteractive","children":"var _paq = window._paq = window._paq || [];\n_paq.push([\"setDoNotTrack\", true]);\n_paq.push([\"disableCookies\"]);\n_paq.push(['trackPageView']);\n_paq.push(['enableLinkTracking']);\n(function() {\n  var u=\"https://analytics.apache.org/\";\n  _paq.push(['setTrackerUrl', u+'matomo.php']);\n  _paq.push(['setSiteId', '80']);\n  var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];\n  [...]
+b:["$","$L15",null,{}]
+c:["$","$1","c",{"children":[[["$","script","script-0",{"src":"/_next/static/chunks/241-fa32f9zay.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/_next/static/chunks/3x8y3fmtn6lnc.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/_next/static/chunks/250gopd52txql.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/_next/static/chunks/0n3fueko2xquo.js","async":true,"nonce":"$undefined"}]],[["$","div",null,{"className" [...]
+d:["$","$1","c",{"children":[null,["$","$L4",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}]
+e:["$","$1","c",{"children":[null,["$","$L4",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}]
+f:["$","$1","c",{"children":["$L24",[["$","script","script-0",{"src":"/_next/static/chunks/1k39uva2a578s.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/_next/static/chunks/23ktdyx90z0v3.js","async":true,"nonce":"$undefined"}]],["$","$L25",null,{"children":["$","$26",null,{"name":"Next.MetadataOutlet","children":"$@27"}]}]]}]
+11:["$","$1","h",{"children":[null,["$","$L28",null,{"children":"$L29"}],["$","div",null,{"hidden":true,"children":["$","$L2a",null,{"children":["$","$26",null,{"name":"Next.Metadata","children":"$L2b"}]}]}],null]}]
+13:["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/1_55v0vlfews3.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]
+10:C
+1d:["$","$L7","/",{"href":"/","className":"transition-colors hover:text-fd-primary","children":"Home"}]
+1e:["$","$L7","/docs",{"href":"/docs","className":"transition-colors hover:text-fd-primary","children":"Documentation"}]
+1f:["$","$L7","/blogs",{"href":"/blogs","className":"transition-colors hover:text-fd-primary","children":"Blog"}]
+20:["$","$L7","/downloads",{"href":"/downloads","className":"transition-colors hover:text-fd-primary","children":"Downloads"}]
+21:["$","$L7","/community",{"href":"/community","className":"transition-colors hover:text-fd-primary","children":"Community"}]
+22:["$","p",null,{"className":"mt-6 max-w-md text-xs text-fd-muted-foreground","children":["Every page on this site is listed in"," ",["$","a",null,{"href":"/sitemap.xml","className":"underline hover:text-fd-primary","children":"/sitemap.xml"}],", and"," ",["$","a",null,{"href":"/llms.txt","className":"underline hover:text-fd-primary","children":"/llms.txt"}]," ","summarises the documentation."]}]
+23:["$","footer",null,{"className":"border-t border-fd-border bg-fd-background px-6 py-14 md:px-12","children":["$","div",null,{"className":"mx-auto max-w-6xl","children":[["$","div",null,{"className":"grid gap-10 sm:grid-cols-2 lg:grid-cols-4","children":[["$","div","Docs",{"children":[["$","h2",null,{"className":"mb-4 text-sm font-semibold uppercase tracking-wide text-fd-primary","children":"Docs"}],["$","ul",null,{"className":"space-y-2.5 text-sm","children":[["$","li","/docs",{"child [...]
+2c:["$","li","https://www.apache.org/foundation/contributing.html",{"children":["$","$L7",null,{"href":"https://www.apache.org/foundation/contributing.html","target":"_blank","rel":"noopener noreferrer","className":"text-fd-muted-foreground transition-colors hover:text-fd-foreground","children":"Donate"}]}]
+2d:["$","li","https://www.apache.org/foundation/sponsorship.html",{"children":["$","$L7",null,{"href":"https://www.apache.org/foundation/sponsorship.html","target":"_blank","rel":"noopener noreferrer","className":"text-fd-muted-foreground transition-colors hover:text-fd-foreground","children":"Sponsors"}]}]
+2e:["$","li","https://www.apache.org/security/",{"children":["$","$L7",null,{"href":"https://www.apache.org/security/","target":"_blank","rel":"noopener noreferrer","className":"text-fd-muted-foreground transition-colors hover:text-fd-foreground","children":"Security"}]}]
+2f:["$","li","https://privacy.apache.org/policies/privacy-policy-public.html",{"children":["$","$L7",null,{"href":"https://privacy.apache.org/policies/privacy-policy-public.html","target":"_blank","rel":"noopener noreferrer","className":"text-fd-muted-foreground transition-colors hover:text-fd-foreground","children":"Privacy"}]}]
+30:["$","div",null,{"className":"mt-12 border-t border-fd-border pt-8 text-xs leading-relaxed text-fd-muted-foreground/70","children":[["$","p",null,{"className":"mt-4","children":["Copyright © ",2026," The Apache Software Foundation, Licensed under the Apache License, Version 2.0."]}],["$","p",null,{"className":"mt-4","children":"Apache Iggy, Iggy, Apache, and the Apache Iggy logo are trademarks or registered trademarks of The Apache Software Foundation. All other marks mentioned may be [...]
+31:I[94157,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],"Heading"]
+32:I[47873,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],"default"]
+:HL["/img/authors/piotr.png","image"]
+24:["$","main",null,{"className":"min-h-screen px-6 py-16 md:px-12","children":["$","article",null,{"className":"mx-auto max-w-5xl","children":[["$","header",null,{"className":"mb-10","children":[["$","time",null,{"className":"text-sm font-medium text-fd-muted-foreground","children":"August 19, 2023"}],["$","h1",null,{"className":"mt-3 text-3xl font-extrabold tracking-tight text-fd-foreground md:text-5xl","children":"Message headers"}],["$","div",null,{"className":"mt-6 flex flex-wrap ga [...]
+5e:I[44324,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],"CodeBlock"]
+63:I[44324,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],"Pre"]
+33:["$","strong",null,{"children":"lowercase"}]
+34:["$","strong",null,{"children":"255 bytes"}]
+35:["$","code",null,{"children":"u8"}]
+36:["$","p",null,{"children":"For now, there are no reserved headers, so you can use any key you want. However, in the future, we might introduce some reserved headers used by the streaming server for the specific purposes such as the message compression, distributed tracing and so no."}]
+37:["$","p",null,{"children":["The ",["$","strong",null,{"children":"sample applications"}]," using the message headers can be found ",["$","$L32",null,{"href":"https://github.com/apache/iggy/tree/master/examples/rust/src/message-headers","children":"here"}],"."]}]
+38:["$","$L31",null,{"as":"h2","id":"implementation","children":"Implementation"}]
+39:["$","$L31",null,{"as":"h3","id":"structures","children":"Structures"}]
+3a:["$","p",null,{"children":["We will start with the sample Rust implementation of the headers. The headers are defined as a ",["$","code",null,{"children":"HashMap"}]," where the key is a ",["$","code",null,{"children":"string"}]," (wrapped with a custom ",["$","code",null,{"children":"HeaderKey"}]," struct to enforce the validation) and the value is a ",["$","code",null,{"children":"HeaderValue"}]," struct. The ",["$","code",null,{"children":"HeaderValue"}]," struct consists of the ", [...]
+3b:["$","p",null,{"children":["The primitive types are defined as the enum variants, so you can easily match on them. The ",["$","code",null,{"children":"HeaderKind"}]," enum is used to validate the value and to serialize/deserialize it. The idea is that the value will always remain a byte array, but you can use the ",["$","code",null,{"children":"HeaderKind"}]," to convert it to the desired type."]}]
+5f:T1068,<svg viewBox="0 0 24 24"><path d="M23.8346 11.7033l-1.0073-.6236a13.7268 13.7268 0 00-.0283-.2936l.8656-.8069a.3483.3483 0 00-.1154-.578l-1.1066-.414a8.4958 8.4958 0 00-.087-.2856l.6904-.9587a.3462.3462 0 00-.2257-.5446l-1.1663-.1894a9.3574 9.3574 0 00-.1407-.2622l.49-1.0761a.3437.3437 0 00-.0274-.3361.3486.3486 0 00-.3006-.154l-1.1845.0416a6.7444 6.7444 0 00-.1873-.2268l.2723-1.153a.3472.3472 0 00-.417-.4172l-1.1532.2724a14.0183 14.0183 0 00-.2278-.1873l.0415-1.1845a.3442.3442  [...]
+3d:["$","p",null,{"children":["Next, let's take a look at the ",["$","code",null,{"children":"SendMessages"}]," command, and in particular we will see what has changed in the underlying ",["$","code",null,{"children":"Message"}]," struct (keep in mind that headers are unique per message, so they are not a part of the ",["$","code",null,{"children":"SendMessages"}]," command). The ",["$","code",null,{"children":"Message"}]," struct now has an additional ",["$","code",null,{"children":"hea [...]
+61:T1068,<svg viewBox="0 0 24 24"><path d="M23.8346 11.7033l-1.0073-.6236a13.7268 13.7268 0 00-.0283-.2936l.8656-.8069a.3483.3483 0 00-.1154-.578l-1.1066-.414a8.4958 8.4958 0 00-.087-.2856l.6904-.9587a.3462.3462 0 00-.2257-.5446l-1.1663-.1894a9.3574 9.3574 0 00-.1407-.2622l.49-1.0761a.3437.3437 0 00-.0274-.3361.3486.3486 0 00-.3006-.154l-1.1845.0416a6.7444 6.7444 0 00-.1873-.2268l.2723-1.153a.3472.3472 0 00-.417-.4172l-1.1532.2724a14.0183 14.0183 0 00-.2278-.1873l.0415-1.1845a.3442.3442  [...]
+3f:["$","$L31",null,{"as":"h3","id":"json-transport","children":"JSON transport"}]
+40:["$","p",null,{"children":["Headers are optional, so depending on the programming language, you can either use the ",["$","code",null,{"children":"option"}]," type, or the ",["$","code",null,{"children":"null"}]," value, or even instantiate an ",["$","code",null,{"children":"empty"}]," map - it's up to you. The important part is the serialization. For the JSON transport, it's very easy, as you can see in the following example:"]}]
+41:["$","$L5e",null,{"className":"shiki shiki-themes github-light github-dark","style":{"--shiki-light":"#24292e","--shiki-dark":"#e1e4e8","--shiki-light-bg":"#fff","--shiki-dark-bg":"#24292e"},"tabIndex":"0","icon":"<svg viewBox=\"0 0 24 24\"><path d=\"M 6,1 C 4.354992,1 3,2.354992 3,4 v 16 c 0,1.645008 1.354992,3 3,3 h 12 c 1.645008,0 3,-1.354992 3,-3 V 8 7 A 1.0001,1.0001 0 0 0 20.707031,6.2929687 l -5,-5 A 1.0001,1.0001 0 0 0 15,1 h -1 z m 0,2 h 7 v 3 c 0,1.645008 1.354992,3 3,3 h 3  [...]
+42:["$","p",null,{"children":["Simply put, in order to include the headers in the message, you need to add the ",["$","code",null,{"children":"headers"}]," field to the message struct. The ",["$","code",null,{"children":"headers"}]," field is a map of the ",["$","code",null,{"children":"String"}]," keys and the ",["$","code",null,{"children":"HeaderValue"}]," values. The ",["$","code",null,{"children":"HeaderValue"}]," value is a JSON object which consists of the ",["$","code",null,{"chi [...]
+43:["$","$L31",null,{"as":"h3","id":"binary-transport","children":"Binary transport"}]
+44:["$","p",null,{"children":"Now, we can move on to the more complex part, being the binary transport (as always, it's the same schema for both, TCP and QUIC protocol)."}]
+45:["$","p",null,{"children":["We will begin with the headers serialization for the whole ",["$","code",null,{"children":"HashMap"}],":"]}]
+6b:T1068,<svg viewBox="0 0 24 24"><path d="M23.8346 11.7033l-1.0073-.6236a13.7268 13.7268 0 00-.0283-.2936l.8656-.8069a.3483.3483 0 00-.1154-.578l-1.1066-.414a8.4958 8.4958 0 00-.087-.2856l.6904-.9587a.3462.3462 0 00-.2257-.5446l-1.1663-.1894a9.3574 9.3574 0 00-.1407-.2622l.49-1.0761a.3437.3437 0 00-.0274-.3361.3486.3486 0 00-.3006-.154l-1.1845.0416a6.7444 6.7444 0 00-.1873-.2268l.2723-1.153a.3472.3472 0 00-.417-.4172l-1.1532.2724a14.0183 14.0183 0 00-.2278-.1873l.0415-1.1845a.3442.3442  [...]
+47:["$","p",null,{"children":["If for some reason, there are no headers, we return an empty byte array. Otherwise, we iterate over the headers and serialize them one by one. The serialization shouldn't be too difficult as we start with the key length, then we add the key itself (",["$","strong",null,{"children":"UTF-8 bytes"}],"), then we add the value type (the ",["$","code",null,{"children":"HeaderKind"}]," enum variant), then we add the value length, and finally we add the value itsel [...]
+48:["$","p",null,{"children":["The length of the single header is the following: ",["$","code",null,{"children":"4 bytes"}]," for the key length, ",["$","code",null,{"children":"n bytes"}]," (",["$","strong",null,{"children":"1-255"}],") for the key, ",["$","code",null,{"children":"1 byte"}]," for the value kind, ",["$","code",null,{"children":"4 bytes"}]," for the value length and ",["$","code",null,{"children":"n bytes"}]," (",["$","strong",null,{"children":"1-255"}],") for the value i [...]
+49:["$","p",null,{"children":["The ",["$","code",null,{"children":"HeaderKind"}]," uses the following codes:"]}]
+6d:T1068,<svg viewBox="0 0 24 24"><path d="M23.8346 11.7033l-1.0073-.6236a13.7268 13.7268 0 00-.0283-.2936l.8656-.8069a.3483.3483 0 00-.1154-.578l-1.1066-.414a8.4958 8.4958 0 00-.087-.2856l.6904-.9587a.3462.3462 0 00-.2257-.5446l-1.1663-.1894a9.3574 9.3574 0 00-.1407-.2622l.49-1.0761a.3437.3437 0 00-.0274-.3361.3486.3486 0 00-.3006-.154l-1.1845.0416a6.7444 6.7444 0 00-.1873-.2268l.2723-1.153a.3472.3472 0 00-.417-.4172l-1.1532.2724a14.0183 14.0183 0 00-.2278-.1873l.0415-1.1845a.3442.3442  [...]
+4b:["$","$L31",null,{"as":"h3","id":"sending-the-messages-with-headers","children":"Sending the messages with headers"}]
+4c:["$","p",null,{"children":"Now, let's see how we can include the headers in a message serialization:"}]
+6f:T1068,<svg viewBox="0 0 24 24"><path d="M23.8346 11.7033l-1.0073-.6236a13.7268 13.7268 0 00-.0283-.2936l.8656-.8069a.3483.3483 0 00-.1154-.578l-1.1066-.414a8.4958 8.4958 0 00-.087-.2856l.6904-.9587a.3462.3462 0 00-.2257-.5446l-1.1663-.1894a9.3574 9.3574 0 00-.1407-.2622l.49-1.0761a.3437.3437 0 00-.0274-.3361.3486.3486 0 00-.3006-.154l-1.1845.0416a6.7444 6.7444 0 00-.1873-.2268l.2723-1.153a.3472.3472 0 00-.417-.4172l-1.1532.2724a14.0183 14.0183 0 00-.2278-.1873l.0415-1.1845a.3442.3442  [...]
+4e:["$","p",null,{"children":["The important thing to notice, is that the ",["$","strong",null,{"children":["headers are being serialized right after the ",["$","code",null,{"children":"ID"}]," and before the actual message payload"]}],". At first, we add the total length of the headers' payload, then we add the headers themselves, and finally we include the message payload (length + value) as before. If the headers are not provided at all (e.g. ",["$","code",null,{"children":"none"}],"  [...]
+4f:["$","$L31",null,{"as":"h3","id":"polling-the-messages-with-headers","children":"Polling the messages with headers"}]
+50:["$","p",null,{"children":["Eventually, let's discuss the ",["$","code",null,{"children":"PollMessages"}]," command. Nothing has changed here, except of the extended ",["$","code",null,{"children":"Message"}]," struct, which now contains the optional headers. For the JSON transport it's the same as when sending the messages, and for the binary transport, we need to deserialize the headers in the same way as we did when sending the messages. Let's find out how it works."]}]
+71:T1068,<svg viewBox="0 0 24 24"><path d="M23.8346 11.7033l-1.0073-.6236a13.7268 13.7268 0 00-.0283-.2936l.8656-.8069a.3483.3483 0 00-.1154-.578l-1.1066-.414a8.4958 8.4958 0 00-.087-.2856l.6904-.9587a.3462.3462 0 00-.2257-.5446l-1.1663-.1894a9.3574 9.3574 0 00-.1407-.2622l.49-1.0761a.3437.3437 0 00-.0274-.3361.3486.3486 0 00-.3006-.154l-1.1845.0416a6.7444 6.7444 0 00-.1873-.2268l.2723-1.153a.3472.3472 0 00-.417-.4172l-1.1532.2724a14.0183 14.0183 0 00-.2278-.1873l.0415-1.1845a.3442.3442  [...]
+52:["$","p",null,{"children":["As you can see, the headers are being serialized in the same way as when sending the messages. The only difference is that the ",["$","code",null,{"children":"Message"}]," struct also contains the ",["$","code",null,{"children":"offset"}]," and the ",["$","code",null,{"children":"timestamp"}]," fields, which are being serialized before the ",["$","code",null,{"children":"ID"}]," field. Besides that, nothing has changed, as we simply include the headers righ [...]
+53:["$","$L31",null,{"as":"h3","id":"sample-usage","children":"Sample usage"}]
+54:["$","p",null,{"children":["The headers usage is pretty straightforward, as we simply need to create the new ",["$","code",null,{"children":"HashMap"}],":"]}]
+73:T1068,<svg viewBox="0 0 24 24"><path d="M23.8346 11.7033l-1.0073-.6236a13.7268 13.7268 0 00-.0283-.2936l.8656-.8069a.3483.3483 0 00-.1154-.578l-1.1066-.414a8.4958 8.4958 0 00-.087-.2856l.6904-.9587a.3462.3462 0 00-.2257-.5446l-1.1663-.1894a9.3574 9.3574 0 00-.1407-.2622l.49-1.0761a.3437.3437 0 00-.0274-.3361.3486.3486 0 00-.3006-.154l-1.1845.0416a6.7444 6.7444 0 00-.1873-.2268l.2723-1.153a.3472.3472 0 00-.417-.4172l-1.1532.2724a14.0183 14.0183 0 00-.2278-.1873l.0415-1.1845a.3442.3442  [...]
+56:["$","p",null,{"children":"You might also use the conversion based on the implemented traits:"}]
+75:T1068,<svg viewBox="0 0 24 24"><path d="M23.8346 11.7033l-1.0073-.6236a13.7268 13.7268 0 00-.0283-.2936l.8656-.8069a.3483.3483 0 00-.1154-.578l-1.1066-.414a8.4958 8.4958 0 00-.087-.2856l.6904-.9587a.3462.3462 0 00-.2257-.5446l-1.1663-.1894a9.3574 9.3574 0 00-.1407-.2622l.49-1.0761a.3437.3437 0 00-.0274-.3361.3486.3486 0 00-.3006-.154l-1.1845.0416a6.7444 6.7444 0 00-.1873-.2268l.2723-1.153a.3472.3472 0 00-.417-.4172l-1.1532.2724a14.0183 14.0183 0 00-.2278-.1873l.0415-1.1845a.3442.3442  [...]
+58:["$","p",null,{"children":["Keep in mind, that the ",["$","code",null,{"children":"HeaderKey"}]," and the ",["$","code",null,{"children":"HeaderValue"}]," structs are being validated whenever you use one of the available methods to create them."]}]
+59:["$","p",null,{"children":["And then, we can send the messages with the headers (first ",["$","code",null,{"children":"none"}]," argument is for the optional ID):"]}]
+77:T1068,<svg viewBox="0 0 24 24"><path d="M23.8346 11.7033l-1.0073-.6236a13.7268 13.7268 0 00-.0283-.2936l.8656-.8069a.3483.3483 0 00-.1154-.578l-1.1066-.414a8.4958 8.4958 0 00-.087-.2856l.6904-.9587a.3462.3462 0 00-.2257-.5446l-1.1663-.1894a9.3574 9.3574 0 00-.1407-.2622l.49-1.0761a.3437.3437 0 00-.0274-.3361.3486.3486 0 00-.3006-.154l-1.1845.0416a6.7444 6.7444 0 00-.1873-.2268l.2723-1.153a.3472.3472 0 00-.417-.4172l-1.1532.2724a14.0183 14.0183 0 00-.2278-.1873l.0415-1.1845a.3442.3442  [...]
+5b:["$","p",null,{"children":"When you poll the messages and want to read the header value based on its kind, you can also use the existing helper methods, for example:"}]
+79:T1068,<svg viewBox="0 0 24 24"><path d="M23.8346 11.7033l-1.0073-.6236a13.7268 13.7268 0 00-.0283-.2936l.8656-.8069a.3483.3483 0 00-.1154-.578l-1.1066-.414a8.4958 8.4958 0 00-.087-.2856l.6904-.9587a.3462.3462 0 00-.2257-.5446l-1.1663-.1894a9.3574 9.3574 0 00-.1407-.2622l.49-1.0761a.3437.3437 0 00-.0274-.3361.3486.3486 0 00-.3006-.154l-1.1845.0416a6.7444 6.7444 0 00-.1873-.2268l.2723-1.153a.3472.3472 0 00-.417-.4172l-1.1532.2724a14.0183 14.0183 0 00-.2278-.1873l.0415-1.1845a.3442.3442  [...]
+5d:["$","footer",null,{"className":"mt-16 border-t border-fd-border pt-8","children":["$","$L7",null,{"href":"/blogs","className":"inline-flex items-center gap-2 text-sm font-medium text-fd-primary transition-colors hover:opacity-80","children":"← Back to all posts"}]}]
+60:["$","$L63",null,{"children":["$","code",null,{"children":[["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"pub"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":" struct"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" HeaderKey"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8 [...]
+62:["$","$L63",null,{"children":["$","code",null,{"children":[["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"pub"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":" struct"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" SendMessages"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E [...]
+64:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":"      \"key_1\""}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":": {"}]]}]
+65:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":"        \"kind\""}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":": "}],["$","span",null,{"style":{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"},"children":"\"string\""}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":","}]]}]
+66:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":"        \"value\""}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":": "}],["$","span",null,{"style":{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"},"children":"\"{{header_1_payload_base_64}}\""}]]}]
+67:["$","span",null,{"className":"line","children":["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"      }"}]}]
+68:["$","span",null,{"className":"line","children":["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"    }"}]}]
+69:["$","span",null,{"className":"line","children":["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"  }]"}]}]
+6a:["$","span",null,{"className":"line","children":["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"}"}]}]
+6c:["$","$L63",null,{"children":["$","code",null,{"children":[["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"impl"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" BytesSerializable"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":" for"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"# [...]
+6e:["$","$L63",null,{"children":["$","code",null,{"children":[["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"impl"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" HeaderKind"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":" {"}]]}],"\n",["$","span",null,{"className":"line","children":[["$","span",null,{"sty [...]
+70:["$","$L63",null,{"children":["$","code",null,{"children":[["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"fn"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" as_bytes"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"("}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"chil [...]
+72:["$","$L63",null,{"children":["$","code",null,{"children":[["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"pub"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":" fn"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" map_message"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"} [...]
+74:["$","$L63",null,{"children":["$","code",null,{"children":[["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"let"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":" mut"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":" headers "}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"}," [...]
+76:["$","$L63",null,{"children":["$","code",null,{"children":[["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"headers"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"."}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"insert"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"ch [...]
+78:["$","$L63",null,{"children":["$","code",null,{"children":[["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"let"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":" send_messages "}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"="}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0" [...]
+d4:I[27201,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"IconMark"]
+7a:["$","$L63",null,{"children":["$","code",null,{"children":[["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"let"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":" value1 "}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"="}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"chil [...]
+7b:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"    Int128"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":","}]]}]
+7c:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"    Uint8"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":","}]]}]
+7d:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"    Uint16"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":","}]]}]
+7e:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"    Uint32"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":","}]]}]
+7f:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"    Uint64"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":","}]]}]
+80:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"    Uint128"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":","}]]}]
+81:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"    Float32"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":","}]]}]
+82:["$","span",null,{"className":"line","children":["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"    Float64"}]}]
+83:["$","span",null,{"className":"line","children":["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"}"}]}]
+84:["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":":"}]
+85:["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" Bytes"}]
+86:["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":","}]
+87:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"    pub"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":" headers"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":":"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" Option"}],["$","span",null,{"style":{"--shiki-l [...]
+88:["$","span",null,{"className":"line","children":["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"}"}]}]
+89:["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"."}]
+8a:["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":"0."}]
+8b:["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"len"}]
+8c:["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"() "}]
+8d:["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"as"}]
+8e:["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" u32"}]
+8f:["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":");"}]
+90:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"            bytes"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"."}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"extend"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"(key"}],["$","span",null,{"style":{"--sh [...]
+91:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"            bytes"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"."}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"put_u8"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"(value"}],["$","span",null,{"style":{"-- [...]
+92:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"            bytes"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"."}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"put_u32_le"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"(value"}],["$","span",null,{"style": [...]
+93:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"            bytes"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"."}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"extend"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"("}],["$","span",null,{"style":{"--shiki [...]
+94:["$","span",null,{"className":"line","children":["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"        }"}]}]
+95:["$","span",null,{"className":"line"}]
+96:["$","span",null,{"className":"line","children":["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"        bytes"}]}]
+97:["$","span",null,{"className":"line","children":["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"    }"}]}]
+98:["$","span",null,{"className":"line","children":["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"}"}]}]
+99:["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":" 5"}]
+9a:["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":","}]
+9b:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"            HeaderKind"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"::"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"Int32"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":" =>"}],["$","span",null,{"style":{" [...]
+9c:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"            HeaderKind"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"::"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"Int64"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":" =>"}],["$","span",null,{"style":{" [...]
+9d:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"            HeaderKind"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"::"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"Int128"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":" =>"}],["$","span",null,{"style":{ [...]
+9e:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"            HeaderKind"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"::"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"Uint8"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":" =>"}],["$","span",null,{"style":{" [...]
+9f:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"            HeaderKind"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"::"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"Uint16"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":" =>"}],["$","span",null,{"style":{ [...]
+a0:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"            HeaderKind"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"::"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"Uint32"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":" =>"}],["$","span",null,{"style":{ [...]
+a1:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"            HeaderKind"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"::"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"Uint64"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":" =>"}],["$","span",null,{"style":{ [...]
+a2:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"            HeaderKind"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"::"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"Uint128"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":" =>"}],["$","span",null,{"style": [...]
+a3:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"            HeaderKind"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"::"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"Float32"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":" =>"}],["$","span",null,{"style": [...]
+a4:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"            HeaderKind"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"::"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"Float64"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":" =>"}],["$","span",null,{"style": [...]
+a5:["$","span",null,{"className":"line","children":["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"        }"}]}]
+a6:["$","span",null,{"className":"line","children":["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"    }"}]}]
+a7:["$","span",null,{"className":"line","children":["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"}"}]}]
+a8:["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"."}]
+a9:["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"as_bytes"}]
+aa:["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"();"}]
+ab:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"        bytes"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"."}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"put_u32_le"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"(headers_bytes"}],["$","span",null,{"sty [...]
+ac:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"        bytes"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"."}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"extend"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"("}],["$","span",null,{"style":{"--shiki-lig [...]
+ad:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"    } "}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"else"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":" {"}]]}]
+ae:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"        bytes"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"."}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"put_u32_le"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"("}],["$","span",null,{"style":{"--shiki [...]
+af:["$","span",null,{"className":"line","children":["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"    }"}]}]
+b0:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"    bytes"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"."}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"put_u32_le"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"("}],["$","span",null,{"style":{"--shiki-lig [...]
+b1:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"    bytes"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"."}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"extend"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"("}],["$","span",null,{"style":{"--shiki-light": [...]
+b2:["$","span",null,{"className":"line","children":["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"    bytes"}]}]
+b3:["$","span",null,{"className":"line","children":["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"}"}]}]
+b4:["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":" headers"}]
+b5:["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"."}]
+b6:["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"as_bytes"}]
+b7:["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"();"}]
+b8:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"        bytes"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"."}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"put_u32_le"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"(headers_bytes"}],["$","span",null,{"sty [...]
+b9:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"        bytes"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"."}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"extend"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"("}],["$","span",null,{"style":{"--shiki-lig [...]
+ba:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"    } "}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"else"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":" {"}]]}]
+bb:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"        bytes"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"."}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"put_u32_le"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"("}],["$","span",null,{"style":{"--shiki [...]
+bc:["$","span",null,{"className":"line","children":["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"    }"}]}]
+bd:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"    bytes"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"."}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"put_u32_le"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"("}],["$","span",null,{"style":{"--shiki-lig [...]
+be:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"    bytes"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"."}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"extend"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"("}],["$","span",null,{"style":{"--shiki-light": [...]
+bf:["$","span",null,{"className":"line","children":["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"}"}]}]
+c0:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"headers"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"."}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"insert"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"("}],["$","span",null,{"style":{"--shiki-light":"# [...]
+c1:["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":") , "}]
+c2:["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"Some"}]
+c3:["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"(headers))]"}]
+c4:["$","span",null,{"className":"line","children":["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"};"}]}]
+c5:["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"("}]
+c6:["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"&"}]
+c7:["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"HeaderKey"}]
+c8:["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"::"}]
+c9:["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"new"}]
+ca:["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"("}]
+cb:["$","span",null,{"style":{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"},"children":"\"key_3\""}]
+cc:["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":")"}]
+cd:["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"?"}]
+ce:["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":")"}]
+cf:["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"?."}]
+d0:["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"as_uint64"}]
+d1:["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"()"}]
+d2:["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"?"}]
+d3:["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":";"}]
+29:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]
+27:null
+2b:[["$","title","0",{"children":"Message headers | Apache Iggy"}],["$","link","1",{"rel":"canonical","href":"https://iggy.apache.org/blogs/2023/08/19/message-headers/"}],["$","link","2",{"rel":"alternate","type":"text/markdown","href":"https://iggy.apache.org/blogs/2023/08/19/message-headers.md"}],["$","meta","3",{"property":"og:title","content":"Message headers | Apache Iggy"}],["$","meta","4",{"property":"og:url","content":"https://iggy.apache.org/blogs/2023/08/19/message-headers/"}], [...]
diff --git a/blogs/2023/08/22/message-state.md b/blogs/2023/08/22/message-state.md
new file mode 100644
index 000000000..a5d6c937c
--- /dev/null
+++ b/blogs/2023/08/22/message-state.md
@@ -0,0 +1,143 @@
+# Message state
+
+Published: 2023-08-22
+
+Rendered page: https://iggy.apache.org/blogs/2023/08/22/message-state/
+
+Source: https://github.com/apache/iggy-website/blob/main/content/blog/message-state.mdx
+
+The message state is a simple field which extends the existing `message` and provides a way to define whether the particular message might be consumed by the client or not, depending on its value. Let's briefly discuss the motivation behind this feature, the implementation details and the breaking changes introduced by this release.
+
+
+## Breaking changes
+
+Starting with the commit [#b07f23d](https://github.com/apache/iggy/commit/b07f23db798ffcda7c39650f34547f20137ff725) the breaking changes related to polling the messages by the client have been introduced. The `Message` struct used when invoking `PollMessage` command has been extended with new fields, which results in updated binary schema. The available [iggy crate](https://crates.io/crates/iggy) supports these changes since version 0.0.40.
+
+## Introduction
+
+The `state` is an additional field added to the `message` struct stored on the server-side, as well as polled by the client, which describes the current state of the message. By default, the message state is set to `available` (`code = 1``, see the possible codes below), meaning that the message is available to be consumed by the client.
+
+However, the state might have a different value, for example `marked_for_deletion` (to be used by the upcoming retention policy feature), `poisoned` (to be used by the upcoming dead-letter queue feature) etc. In the future releases, the server will also provide a way to change the state of the message (for example to mark it as `poisoned` by the client), as well as filtering the messages by the state.
+
+## Implementation
+
+### Structures
+
+The new `MessageState` is an enum which defines the possible states of the message. The `Message` struct has been extended with the `state` field, which is an instance of the `MessageState` enum. The `MessageState` enum also provides a method to convert the enum variant to the `u8` value, which is used by the binary schema.
+
+Additionally, the `Message` struct has been extended with the `checksum` field, which is a `u32` value calculated (**CRC-32** algorithm) from the `payload` field. The checksum is used to verify the integrity of the message, and it's calculated on the server-side when the message is being stored. The client can use the checksum to verify the integrity of the message, and if the checksum doesn't match, the client can request the message again. This property has been there for a long time n [...]
+
+The server and the client now **share the same `Message` struct**, meaning that the same type is being stored on the disk, as well as returned to the client when polling the messages. The motivation behind this approach, was not only to reduce the amount of code, but more importantly to make it easier to implement the extremely important feature being **zero-copy** (copy data from disk directly to the network buffer with bypassing the kernel space). This feature is planned to be implemen [...]
+
+```rust
+pub struct Message {
+    pub offset: u64,
+    pub state: MessageState,
+    pub timestamp: u64,
+    pub id: u128,
+    pub checksum: u32,
+    pub headers: Option<HashMap<HeaderKey, HeaderValue>>,
+    pub length: u32,
+    pub payload: Bytes
+}
+
+pub enum MessageState {
+    Available,
+    Unavailable,
+    Poisoned,
+    MarkedForDeletion
+}
+
+impl MessageState {
+    pub fn as_code(&self) -> u8 {
+        match self {
+            MessageState::Available => 1,
+            MessageState::Unavailable => 10,
+            MessageState::Poisoned => 20,
+            MessageState::MarkedForDeletion => 30
+        }
+    }
+}
+```
+
+### JSON transport
+
+As usual, the JSON transport should be rather easy to implement, as it's just a matter of adding the `state` and `checksum` fields to the `message` object being returned when polling the messages. The `state` returns the underscored string value.
+
+```json
+  {
+    "offset": 0,
+    "state": "available",
+    "timestamp": 1692643862990111,
+    "id": 232071677777564499402827199894559175028,
+    "checksum": 2144931076,
+    "headers": null,
+    "payload": "b3JkZXJzX2RhdGFfMg=="
+  },
+  {
+    "offset": 1,
+    "state": "available",
+    "timestamp": 1692643862990112,
+    "id": 44069423551493178892268378627901876657,
+    "checksum": 148782482,
+    "headers": {
+      "key_3": {
+        "kind": "uint64",
+        "value": "QOIBAAAAAAA="
+      },
+      "key 1": {
+        "kind": "string",
+        "value": "dmFsdWUx"
+      },
+      "key-2": {
+        "kind": "bool",
+        "value": "AQ=="
+      }
+    },
+    "payload": "b3JkZXJzX2RhdGFfMw=="
+  }
+```
+
+### Binary transport
+
+Next, let's take a look at the binary transport. The `Message` struct has been extended with the `state` and `checksum` fields, which results in the updated binary schema. Previously, the `message` struct was defined as follows:
+
+```rust
+pub struct Message {
+    pub offset: u64,
+    pub timestamp: u64,
+    pub id: u128,
+    pub headers: Option<HashMap<HeaderKey, HeaderValue>>,
+    pub length: u32,
+    pub payload: Bytes
+}
+```
+
+And the serialization was:
+
+```
+Offset (8 bytes) + Timestamp (8 bytes) + ID (16 bytes) + Headers (N bytes) + Length (4 bytes) + Payload (`Length` bytes)
+```
+
+Now, the `message` looks like this:
+
+```rust
+pub struct Message {
+    pub offset: u64,
+    pub state: MessageState,
+    pub timestamp: u64,
+    pub id: u128,
+    pub checksum: u32,
+    pub headers: Option<HashMap<HeaderKey, HeaderValue>>,
+    pub length: u32,
+    pub payload: Bytes
+}
+```
+
+And the serialization has changed to:
+
+```
+Offset (8 bytes) + State (1 byte) + Timestamp (8 bytes) + ID (16 bytes) + Checksum (4 bytes) + Headers (N bytes) + Length (4 bytes) + Payload (`Length` bytes)
+```
+
+And that's it - simply (de)serialize the `state` field right after the `offset` field, and the `checksum` field right after the `id` field.
diff --git a/blogs/2023/08/22/message-state/__next.!KHNpdGUp.blogs.$c$slug.__PAGE__.txt b/blogs/2023/08/22/message-state/__next.!KHNpdGUp.blogs.$c$slug.__PAGE__.txt
new file mode 100644
index 000000000..951059947
--- /dev/null
+++ b/blogs/2023/08/22/message-state/__next.!KHNpdGUp.blogs.$c$slug.__PAGE__.txt
@@ -0,0 +1,100 @@
+1:"$Sreact.fragment"
+2:I[94157,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],"Heading"]
+3:I[47873,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],"default"]
+:HL["/img/authors/piotr.png","image"]
+1c:X
+21:X
+21:C
+0:{"buildId":"CEAllZE6ERPzzxzpa_n8G","data":[{"rsc":["$","$1","c",{"children":[["$","main",null,{"className":"min-h-screen px-6 py-16 md:px-12","children":["$","article",null,{"className":"mx-auto max-w-5xl","children":[["$","header",null,{"className":"mb-10","children":[["$","time",null,{"className":"text-sm font-medium text-fd-muted-foreground","children":"August 22, 2023"}],["$","h1",null,{"className":"mt-3 text-3xl font-extrabold tracking-tight text-fd-foreground md:text-5xl","childr [...]
+26:I[44324,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],"CodeBlock"]
+29:I[44324,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],"Pre"]
+44:I[22016,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],""]
+45:I[97367,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"OutletBoundary"]
+46:"$Sreact.suspense"
+48:I[97367,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"ViewportBoundary"]
+49:I[97367,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"MetadataBoundary"]
+4a:I[27201,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"IconMark"]
+4b:I[39756,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"default"]
+4c:I[37457,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"default"]
+4:["$","$L2",null,{"as":"h2","id":"implementation","children":"Implementation"}]
+5:["$","$L2",null,{"as":"h3","id":"structures","children":"Structures"}]
+6:["$","p",null,{"children":["The new ",["$","code",null,{"children":"MessageState"}]," is an enum which defines the possible states of the message. The ",["$","code",null,{"children":"Message"}]," struct has been extended with the ",["$","code",null,{"children":"state"}]," field, which is an instance of the ",["$","code",null,{"children":"MessageState"}]," enum. The ",["$","code",null,{"children":"MessageState"}]," enum also provides a method to convert the enum variant to the ",["$","c [...]
+7:["$","p",null,{"children":["Additionally, the ",["$","code",null,{"children":"Message"}]," struct has been extended with the ",["$","code",null,{"children":"checksum"}]," field, which is a ",["$","code",null,{"children":"u32"}]," value calculated (",["$","strong",null,{"children":"CRC-32"}]," algorithm) from the ",["$","code",null,{"children":"payload"}]," field. The checksum is used to verify the integrity of the message, and it's calculated on the server-side when the message is bein [...]
+8:["$","p",null,{"children":["The server and the client now ",["$","strong",null,{"children":["share the same ",["$","code",null,{"children":"Message"}]," struct"]}],", meaning that the same type is being stored on the disk, as well as returned to the client when polling the messages. The motivation behind this approach, was not only to reduce the amount of code, but more importantly to make it easier to implement the extremely important feature being ",["$","strong",null,{"children":"ze [...]
+27:T1068,<svg viewBox="0 0 24 24"><path d="M23.8346 11.7033l-1.0073-.6236a13.7268 13.7268 0 00-.0283-.2936l.8656-.8069a.3483.3483 0 00-.1154-.578l-1.1066-.414a8.4958 8.4958 0 00-.087-.2856l.6904-.9587a.3462.3462 0 00-.2257-.5446l-1.1663-.1894a9.3574 9.3574 0 00-.1407-.2622l.49-1.0761a.3437.3437 0 00-.0274-.3361.3486.3486 0 00-.3006-.154l-1.1845.0416a6.7444 6.7444 0 00-.1873-.2268l.2723-1.153a.3472.3472 0 00-.417-.4172l-1.1532.2724a14.0183 14.0183 0 00-.2278-.1873l.0415-1.1845a.3442.3442  [...]
+a:["$","$L2",null,{"as":"h3","id":"json-transport","children":"JSON transport"}]
+b:["$","p",null,{"children":["As usual, the JSON transport should be rather easy to implement, as it's just a matter of adding the ",["$","code",null,{"children":"state"}]," and ",["$","code",null,{"children":"checksum"}]," fields to the ",["$","code",null,{"children":"message"}]," object being returned when polling the messages. The ",["$","code",null,{"children":"state"}]," returns the underscored string value."]}]
+c:["$","$L26",null,{"className":"shiki shiki-themes github-light github-dark","style":{"--shiki-light":"#24292e","--shiki-dark":"#e1e4e8","--shiki-light-bg":"#fff","--shiki-dark-bg":"#24292e"},"tabIndex":"0","icon":"<svg viewBox=\"0 0 24 24\"><path d=\"M 6,1 C 4.354992,1 3,2.354992 3,4 v 16 c 0,1.645008 1.354992,3 3,3 h 12 c 1.645008,0 3,-1.354992 3,-3 V 8 7 A 1.0001,1.0001 0 0 0 20.707031,6.2929687 l -5,-5 A 1.0001,1.0001 0 0 0 15,1 h -1 z m 0,2 h 7 v 3 c 0,1.645008 1.354992,3 3,3 h 3 v [...]
+d:["$","$L2",null,{"as":"h3","id":"binary-transport","children":"Binary transport"}]
+e:["$","p",null,{"children":["Next, let's take a look at the binary transport. The ",["$","code",null,{"children":"Message"}]," struct has been extended with the ",["$","code",null,{"children":"state"}]," and ",["$","code",null,{"children":"checksum"}]," fields, which results in the updated binary schema. Previously, the ",["$","code",null,{"children":"message"}]," struct was defined as follows:"]}]
+40:T1068,<svg viewBox="0 0 24 24"><path d="M23.8346 11.7033l-1.0073-.6236a13.7268 13.7268 0 00-.0283-.2936l.8656-.8069a.3483.3483 0 00-.1154-.578l-1.1066-.414a8.4958 8.4958 0 00-.087-.2856l.6904-.9587a.3462.3462 0 00-.2257-.5446l-1.1663-.1894a9.3574 9.3574 0 00-.1407-.2622l.49-1.0761a.3437.3437 0 00-.0274-.3361.3486.3486 0 00-.3006-.154l-1.1845.0416a6.7444 6.7444 0 00-.1873-.2268l.2723-1.153a.3472.3472 0 00-.417-.4172l-1.1532.2724a14.0183 14.0183 0 00-.2278-.1873l.0415-1.1845a.3442.3442  [...]
+10:["$","p",null,{"children":"And the serialization was:"}]
+11:["$","$L26",null,{"className":"shiki shiki-themes github-light github-dark","style":{"--shiki-light":"#24292e","--shiki-dark":"#e1e4e8","--shiki-light-bg":"#fff","--shiki-dark-bg":"#24292e"},"tabIndex":"0","icon":"<svg viewBox=\"0 0 24 24\"><path d=\"M 6,1 C 4.354992,1 3,2.354992 3,4 v 16 c 0,1.645008 1.354992,3 3,3 h 12 c 1.645008,0 3,-1.354992 3,-3 V 8 7 A 1.0001,1.0001 0 0 0 20.707031,6.2929687 l -5,-5 A 1.0001,1.0001 0 0 0 15,1 h -1 z m 0,2 h 7 v 3 c 0,1.645008 1.354992,3 3,3 h 3  [...]
+12:["$","p",null,{"children":["Now, the ",["$","code",null,{"children":"message"}]," looks like this:"]}]
+42:T1068,<svg viewBox="0 0 24 24"><path d="M23.8346 11.7033l-1.0073-.6236a13.7268 13.7268 0 00-.0283-.2936l.8656-.8069a.3483.3483 0 00-.1154-.578l-1.1066-.414a8.4958 8.4958 0 00-.087-.2856l.6904-.9587a.3462.3462 0 00-.2257-.5446l-1.1663-.1894a9.3574 9.3574 0 00-.1407-.2622l.49-1.0761a.3437.3437 0 00-.0274-.3361.3486.3486 0 00-.3006-.154l-1.1845.0416a6.7444 6.7444 0 00-.1873-.2268l.2723-1.153a.3472.3472 0 00-.417-.4172l-1.1532.2724a14.0183 14.0183 0 00-.2278-.1873l.0415-1.1845a.3442.3442  [...]
+14:["$","p",null,{"children":"And the serialization has changed to:"}]
+15:["$","$L26",null,{"className":"shiki shiki-themes github-light github-dark","style":{"--shiki-light":"#24292e","--shiki-dark":"#e1e4e8","--shiki-light-bg":"#fff","--shiki-dark-bg":"#24292e"},"tabIndex":"0","icon":"<svg viewBox=\"0 0 24 24\"><path d=\"M 6,1 C 4.354992,1 3,2.354992 3,4 v 16 c 0,1.645008 1.354992,3 3,3 h 12 c 1.645008,0 3,-1.354992 3,-3 V 8 7 A 1.0001,1.0001 0 0 0 20.707031,6.2929687 l -5,-5 A 1.0001,1.0001 0 0 0 15,1 h -1 z m 0,2 h 7 v 3 c 0,1.645008 1.354992,3 3,3 h 3  [...]
+16:["$","p",null,{"children":["And that's it - simply (de)serialize the ",["$","code",null,{"children":"state"}]," field right after the ",["$","code",null,{"children":"offset"}]," field, and the ",["$","code",null,{"children":"checksum"}]," field right after the ",["$","code",null,{"children":"id"}]," field."]}]
+17:["$","footer",null,{"className":"mt-16 border-t border-fd-border pt-8","children":["$","$L44",null,{"href":"/blogs","className":"inline-flex items-center gap-2 text-sm font-medium text-fd-primary transition-colors hover:opacity-80","children":"← Back to all posts"}]}]
+18:["$","script","script-0",{"src":"/_next/static/chunks/1k39uva2a578s.js","async":true}]
+19:["$","script","script-1",{"src":"/_next/static/chunks/23ktdyx90z0v3.js","async":true}]
+1a:["$","$L45",null,{"children":["$","$46",null,{"name":"Next.MetadataOutlet","children":"$@47"}]}]
+1d:["$","$1","h",{"children":[null,["$","$L48",null,{"children":[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]}],["$","div",null,{"hidden":true,"children":["$","$L49",null,{"children":["$","$46",null,{"name":"Next.Metadata","children":[["$","title","0",{"children":"Message state | Apache Iggy"}],["$","link","1",{"rel":"canonical","href":"https://iggy.apache.org/blogs/2023/08/22/message-state/"}],["$","link","2", [...]
+1f:["$","$1","c",{"children":[null,["$","$L4b",null,{"parallelRouterKey":"children","template":["$","$L4c",null,{}]}]]}]
+22:["$","$1","c",{"children":[null,["$","$L4b",null,{"parallelRouterKey":"children","template":["$","$L4c",null,{}]}]]}]
+25:true
+28:["$","$L29",null,{"children":["$","code",null,{"children":[["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"pub"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":" struct"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" Message"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"} [...]
+2a:["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":"1"}]
+2b:["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":","}]
+2c:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":"    \"state\""}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":": "}],["$","span",null,{"style":{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"},"children":"\"available\""}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":","}]]}]
+2d:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":"    \"timestamp\""}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":": "}],["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":"1692643862990112"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":","}]]}]
+2e:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":"    \"id\""}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":": "}],["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":"44069423551493178892268378627901876657"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":","}]]}]
+2f:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":"    \"checksum\""}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":": "}],["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":"148782482"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":","}]]}]
+30:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":"    \"headers\""}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":": {"}]]}]
+31:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":"      \"key_3\""}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":": {"}]]}]
+32:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":"        \"kind\""}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":": "}],["$","span",null,{"style":{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"},"children":"\"uint64\""}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":","}]]}]
+33:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":"        \"value\""}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":": "}],["$","span",null,{"style":{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"},"children":"\"QOIBAAAAAAA=\""}]]}]
+34:["$","span",null,{"className":"line","children":["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"      },"}]}]
+35:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":"      \"key 1\""}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":": {"}]]}]
+36:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":"        \"kind\""}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":": "}],["$","span",null,{"style":{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"},"children":"\"string\""}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":","}]]}]
+37:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":"        \"value\""}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":": "}],["$","span",null,{"style":{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"},"children":"\"dmFsdWUx\""}]]}]
+38:["$","span",null,{"className":"line","children":["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"      },"}]}]
+39:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":"      \"key-2\""}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":": {"}]]}]
+3a:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":"        \"kind\""}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":": "}],["$","span",null,{"style":{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"},"children":"\"bool\""}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":","}]]}]
+3b:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":"        \"value\""}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":": "}],["$","span",null,{"style":{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"},"children":"\"AQ==\""}]]}]
+3c:["$","span",null,{"className":"line","children":["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"      }"}]}]
+3d:["$","span",null,{"className":"line","children":["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"    },"}]}]
+3e:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":"    \"payload\""}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":": "}],["$","span",null,{"style":{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"},"children":"\"b3JkZXJzX2RhdGFfMw==\""}]]}]
+3f:["$","span",null,{"className":"line","children":["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"  }"}]}]
+41:["$","$L29",null,{"children":["$","code",null,{"children":[["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"pub"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":" struct"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" Message"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"} [...]
+43:["$","$L29",null,{"children":["$","code",null,{"children":[["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"pub"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":" struct"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" Message"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"} [...]
+47:null
+1c:300
+4d:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"    pub"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":" payload"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":":"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" Bytes"}]]}]
+4e:["$","span",null,{"className":"line","children":["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"}"}]}]
+4f:["$","span",null,{"className":"line"}]
+50:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"pub"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":" enum"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" MessageState"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":" {"}]]}]
+51:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"    Available"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":","}]]}]
+52:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"    Unavailable"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":","}]]}]
+53:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"    Poisoned"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":","}]]}]
+54:["$","span",null,{"className":"line","children":["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"    MarkedForDeletion"}]}]
+55:["$","span",null,{"className":"line","children":["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"}"}]}]
+56:["$","span",null,{"className":"line"}]
+57:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"impl"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" MessageState"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":" {"}]]}]
+58:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"    pub"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":" fn"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" as_code"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"("}],["$","span",null,{"style":{"--shiki-light [...]
+59:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"        match"}],["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":" self"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":" {"}]]}]
+5a:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"            MessageState"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"::"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"Available"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":" =>"}],["$","span",null,{"sty [...]
+5b:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"            MessageState"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"::"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"Unavailable"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":" =>"}],["$","span",null,{"s [...]
+5c:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"            MessageState"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"::"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"Poisoned"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":" =>"}],["$","span",null,{"styl [...]
+5d:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"            MessageState"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"::"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"MarkedForDeletion"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":" =>"}],["$","span",nu [...]
+5e:["$","span",null,{"className":"line","children":["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"        }"}]}]
+5f:["$","span",null,{"className":"line","children":["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"    }"}]}]
+60:["$","span",null,{"className":"line","children":["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"}"}]}]
+61:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"    pub"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":" payload"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":":"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" Bytes"}]]}]
+62:["$","span",null,{"className":"line","children":["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"}"}]}]
+1c:C
+24:0
+1e:"$undefined"
+20:"$undefined"
+23:"$undefined"
+1b:"$undefined"
diff --git a/blogs/2023/08/22/message-state/__next.!KHNpdGUp.txt b/blogs/2023/08/22/message-state/__next.!KHNpdGUp.txt
new file mode 100644
index 000000000..940e917aa
--- /dev/null
+++ b/blogs/2023/08/22/message-state/__next.!KHNpdGUp.txt
@@ -0,0 +1,30 @@
+1:"$Sreact.fragment"
+2:I[22016,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],""]
+3:I[5014,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],"default"]
+4:I[64345,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js"],"HomeLayout"]
+5:I[88760,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js"],"Logo"]
+6:I[15269,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js"],"CommunityDropdown"]
+7:I[15269,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js"],"communityLinks"]
+8:I[29966,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js"],"ASFDropdown"]
+9:I[36330,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js"],"ASFMobileLinks"]
+a:I[39756,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"default"]
+b:I[37457,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"default"]
+14:X
+0:{"buildId":"CEAllZE6ERPzzxzpa_n8G","data":[{"rsc":["$","$1","c",{"children":[[["$","script","script-0",{"src":"/_next/static/chunks/241-fa32f9zay.js","async":true}],["$","script","script-1",{"src":"/_next/static/chunks/3x8y3fmtn6lnc.js","async":true}],["$","script","script-2",{"src":"/_next/static/chunks/250gopd52txql.js","async":true}],["$","script","script-3",{"src":"/_next/static/chunks/0n3fueko2xquo.js","async":true}]],[["$","div",null,{"className":"relative border-b border-white/[ [...]
+c:["$","$L2","/",{"href":"/","className":"transition-colors hover:text-fd-primary","children":"Home"}]
+d:["$","$L2","/docs",{"href":"/docs","className":"transition-colors hover:text-fd-primary","children":"Documentation"}]
+e:["$","$L2","/blogs",{"href":"/blogs","className":"transition-colors hover:text-fd-primary","children":"Blog"}]
+f:["$","$L2","/downloads",{"href":"/downloads","className":"transition-colors hover:text-fd-primary","children":"Downloads"}]
+10:["$","$L2","/community",{"href":"/community","className":"transition-colors hover:text-fd-primary","children":"Community"}]
+11:["$","p",null,{"className":"mt-6 max-w-md text-xs text-fd-muted-foreground","children":["Every page on this site is listed in"," ",["$","a",null,{"href":"/sitemap.xml","className":"underline hover:text-fd-primary","children":"/sitemap.xml"}],", and"," ",["$","a",null,{"href":"/llms.txt","className":"underline hover:text-fd-primary","children":"/llms.txt"}]," ","summarises the documentation."]}]
+12:["$","footer",null,{"className":"border-t border-fd-border bg-fd-background px-6 py-14 md:px-12","children":["$","div",null,{"className":"mx-auto max-w-6xl","children":[["$","div",null,{"className":"grid gap-10 sm:grid-cols-2 lg:grid-cols-4","children":[["$","div","Docs",{"children":[["$","h2",null,{"className":"mb-4 text-sm font-semibold uppercase tracking-wide text-fd-primary","children":"Docs"}],["$","ul",null,{"className":"space-y-2.5 text-sm","children":[["$","li","/docs",{"child [...]
+16:true
+17:["$","$L2",null,{"href":"https://www.apache.org/foundation/contributing.html","target":"_blank","rel":"noopener noreferrer","className":"text-fd-muted-foreground transition-colors hover:text-fd-foreground","children":"Donate"}]
+18:["$","li","https://www.apache.org/foundation/sponsorship.html",{"children":["$","$L2",null,{"href":"https://www.apache.org/foundation/sponsorship.html","target":"_blank","rel":"noopener noreferrer","className":"text-fd-muted-foreground transition-colors hover:text-fd-foreground","children":"Sponsors"}]}]
+19:["$","li","https://www.apache.org/security/",{"children":["$","$L2",null,{"href":"https://www.apache.org/security/","target":"_blank","rel":"noopener noreferrer","className":"text-fd-muted-foreground transition-colors hover:text-fd-foreground","children":"Security"}]}]
+1a:["$","li","https://privacy.apache.org/policies/privacy-policy-public.html",{"children":["$","$L2",null,{"href":"https://privacy.apache.org/policies/privacy-policy-public.html","target":"_blank","rel":"noopener noreferrer","className":"text-fd-muted-foreground transition-colors hover:text-fd-foreground","children":"Privacy"}]}]
+1b:["$","div",null,{"className":"mt-12 border-t border-fd-border pt-8 text-xs leading-relaxed text-fd-muted-foreground/70","children":[["$","p",null,{"className":"mt-4","children":["Copyright © ",2026," The Apache Software Foundation, Licensed under the Apache License, Version 2.0."]}],["$","p",null,{"className":"mt-4","children":"Apache Iggy, Iggy, Apache, and the Apache Iggy logo are trademarks or registered trademarks of The Apache Software Foundation. All other marks mentioned may be [...]
+14:300
+14:C
+15:0
+13:"$undefined"
diff --git a/blogs/2023/08/22/message-state/__next._full.txt b/blogs/2023/08/22/message-state/__next._full.txt
new file mode 100644
index 000000000..1e0b94a17
--- /dev/null
+++ b/blogs/2023/08/22/message-state/__next._full.txt
@@ -0,0 +1,122 @@
+1:"$Sreact.fragment"
+3:I[17751,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"RootProvider"]
+4:I[39756,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"default"]
+5:I[58298,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/3-_96y-evozm0.js"],"default"]
+6:I[37457,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"default"]
+7:I[22016,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],""]
+12:I[68027,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"default",1]
+:HL["/_next/static/chunks/1_55v0vlfews3.css","style"]
+2:T512,{"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://iggy.apache.org/#organization","name":"The Apache Software Foundation","url":"https://www.apache.org/","logo":"https://iggy.apache.org/img/asf_logo.svg","contactPoint":{"@type":"ContactPoint","contactType":"technical support","email":"dev@iggy.apache.org","url":"https://iggy.apache.org/community/"}},{"@type":"WebSite","@id":"https://iggy.apache.org/#website","name":"Apache Iggy","url":"https://iggy.a [...]
+0:{"P":null,"c":["","blogs","2023","08","22","message-state",""],"q":"","i":false,"f":[[["",{"children":["(site)",{"children":["blogs",{"children":[["slug","2023/08/22/message-state","c",[]],{"children":["__PAGE__",{},"$undefined","$undefined",4608]},"$undefined","$undefined",4608]},"$undefined","$undefined",4608]},"$undefined","$undefined",4608]},"$undefined","$undefined",4624],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/1_55v0vlfews3.cs [...]
+14:I[79520,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],""]
+15:I[69877,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"Matomo"]
+16:I[5014,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],"default"]
+17:I[64345,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js"],"HomeLayout"]
+18:I[88760,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js"],"Logo"]
+19:I[15269,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js"],"CommunityDropdown"]
+1a:I[15269,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js"],"communityLinks"]
+1b:I[29966,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js"],"ASFDropdown"]
+1c:I[36330,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js"],"ASFMobileLinks"]
+25:I[97367,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"OutletBoundary"]
+26:"$Sreact.suspense"
+28:I[97367,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"ViewportBoundary"]
+2a:I[97367,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"MetadataBoundary"]
+8:["$","$L7","/community",{"href":"/community","className":"transition-colors hover:text-fd-primary","children":"Community"}]
+9:["$","p",null,{"className":"mt-6 max-w-md text-xs text-fd-muted-foreground","children":["Every page on this site is listed in"," ",["$","a",null,{"href":"/sitemap.xml","className":"underline hover:text-fd-primary","children":"/sitemap.xml"}],", and"," ",["$","a",null,{"href":"/llms.txt","className":"underline hover:text-fd-primary","children":"/llms.txt"}]," ","summarises the documentation."]}]
+a:["$","$L14",null,{"id":"matomo","strategy":"afterInteractive","children":"var _paq = window._paq = window._paq || [];\n_paq.push([\"setDoNotTrack\", true]);\n_paq.push([\"disableCookies\"]);\n_paq.push(['trackPageView']);\n_paq.push(['enableLinkTracking']);\n(function() {\n  var u=\"https://analytics.apache.org/\";\n  _paq.push(['setTrackerUrl', u+'matomo.php']);\n  _paq.push(['setSiteId', '80']);\n  var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];\n  [...]
+b:["$","$L15",null,{}]
+c:["$","$1","c",{"children":[[["$","script","script-0",{"src":"/_next/static/chunks/241-fa32f9zay.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/_next/static/chunks/3x8y3fmtn6lnc.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/_next/static/chunks/250gopd52txql.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/_next/static/chunks/0n3fueko2xquo.js","async":true,"nonce":"$undefined"}]],[["$","div",null,{"className" [...]
+d:["$","$1","c",{"children":[null,["$","$L4",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}]
+e:["$","$1","c",{"children":[null,["$","$L4",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}]
+f:["$","$1","c",{"children":["$L24",[["$","script","script-0",{"src":"/_next/static/chunks/1k39uva2a578s.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/_next/static/chunks/23ktdyx90z0v3.js","async":true,"nonce":"$undefined"}]],["$","$L25",null,{"children":["$","$26",null,{"name":"Next.MetadataOutlet","children":"$@27"}]}]]}]
+11:["$","$1","h",{"children":[null,["$","$L28",null,{"children":"$L29"}],["$","div",null,{"hidden":true,"children":["$","$L2a",null,{"children":["$","$26",null,{"name":"Next.Metadata","children":"$L2b"}]}]}],null]}]
+13:["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/1_55v0vlfews3.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]
+10:C
+1d:["$","$L7","/",{"href":"/","className":"transition-colors hover:text-fd-primary","children":"Home"}]
+1e:["$","$L7","/docs",{"href":"/docs","className":"transition-colors hover:text-fd-primary","children":"Documentation"}]
+1f:["$","$L7","/blogs",{"href":"/blogs","className":"transition-colors hover:text-fd-primary","children":"Blog"}]
+20:["$","$L7","/downloads",{"href":"/downloads","className":"transition-colors hover:text-fd-primary","children":"Downloads"}]
+21:["$","$L7","/community",{"href":"/community","className":"transition-colors hover:text-fd-primary","children":"Community"}]
+22:["$","p",null,{"className":"mt-6 max-w-md text-xs text-fd-muted-foreground","children":["Every page on this site is listed in"," ",["$","a",null,{"href":"/sitemap.xml","className":"underline hover:text-fd-primary","children":"/sitemap.xml"}],", and"," ",["$","a",null,{"href":"/llms.txt","className":"underline hover:text-fd-primary","children":"/llms.txt"}]," ","summarises the documentation."]}]
+23:["$","footer",null,{"className":"border-t border-fd-border bg-fd-background px-6 py-14 md:px-12","children":["$","div",null,{"className":"mx-auto max-w-6xl","children":[["$","div",null,{"className":"grid gap-10 sm:grid-cols-2 lg:grid-cols-4","children":[["$","div","Docs",{"children":[["$","h2",null,{"className":"mb-4 text-sm font-semibold uppercase tracking-wide text-fd-primary","children":"Docs"}],["$","ul",null,{"className":"space-y-2.5 text-sm","children":[["$","li","/docs",{"child [...]
+2c:["$","li","https://www.apache.org/foundation/contributing.html",{"children":["$","$L7",null,{"href":"https://www.apache.org/foundation/contributing.html","target":"_blank","rel":"noopener noreferrer","className":"text-fd-muted-foreground transition-colors hover:text-fd-foreground","children":"Donate"}]}]
+2d:["$","li","https://www.apache.org/foundation/sponsorship.html",{"children":["$","$L7",null,{"href":"https://www.apache.org/foundation/sponsorship.html","target":"_blank","rel":"noopener noreferrer","className":"text-fd-muted-foreground transition-colors hover:text-fd-foreground","children":"Sponsors"}]}]
+2e:["$","li","https://www.apache.org/security/",{"children":["$","$L7",null,{"href":"https://www.apache.org/security/","target":"_blank","rel":"noopener noreferrer","className":"text-fd-muted-foreground transition-colors hover:text-fd-foreground","children":"Security"}]}]
+2f:["$","li","https://privacy.apache.org/policies/privacy-policy-public.html",{"children":["$","$L7",null,{"href":"https://privacy.apache.org/policies/privacy-policy-public.html","target":"_blank","rel":"noopener noreferrer","className":"text-fd-muted-foreground transition-colors hover:text-fd-foreground","children":"Privacy"}]}]
+30:["$","div",null,{"className":"mt-12 border-t border-fd-border pt-8 text-xs leading-relaxed text-fd-muted-foreground/70","children":[["$","p",null,{"className":"mt-4","children":["Copyright © ",2026," The Apache Software Foundation, Licensed under the Apache License, Version 2.0."]}],["$","p",null,{"className":"mt-4","children":"Apache Iggy, Iggy, Apache, and the Apache Iggy logo are trademarks or registered trademarks of The Apache Software Foundation. All other marks mentioned may be [...]
+31:I[94157,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],"Heading"]
+32:I[47873,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],"default"]
+:HL["/img/authors/piotr.png","image"]
+24:["$","main",null,{"className":"min-h-screen px-6 py-16 md:px-12","children":["$","article",null,{"className":"mx-auto max-w-5xl","children":[["$","header",null,{"className":"mb-10","children":[["$","time",null,{"className":"text-sm font-medium text-fd-muted-foreground","children":"August 22, 2023"}],["$","h1",null,{"className":"mt-3 text-3xl font-extrabold tracking-tight text-fd-foreground md:text-5xl","children":"Message state"}],["$","div",null,{"className":"mt-6 flex flex-wrap gap- [...]
+46:I[44324,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],"CodeBlock"]
+49:I[44324,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],"Pre"]
+33:["$","$L31",null,{"as":"h3","id":"structures","children":"Structures"}]
+34:["$","p",null,{"children":["The new ",["$","code",null,{"children":"MessageState"}]," is an enum which defines the possible states of the message. The ",["$","code",null,{"children":"Message"}]," struct has been extended with the ",["$","code",null,{"children":"state"}]," field, which is an instance of the ",["$","code",null,{"children":"MessageState"}]," enum. The ",["$","code",null,{"children":"MessageState"}]," enum also provides a method to convert the enum variant to the ",["$"," [...]
+35:["$","p",null,{"children":["Additionally, the ",["$","code",null,{"children":"Message"}]," struct has been extended with the ",["$","code",null,{"children":"checksum"}]," field, which is a ",["$","code",null,{"children":"u32"}]," value calculated (",["$","strong",null,{"children":"CRC-32"}]," algorithm) from the ",["$","code",null,{"children":"payload"}]," field. The checksum is used to verify the integrity of the message, and it's calculated on the server-side when the message is bei [...]
+36:["$","p",null,{"children":["The server and the client now ",["$","strong",null,{"children":["share the same ",["$","code",null,{"children":"Message"}]," struct"]}],", meaning that the same type is being stored on the disk, as well as returned to the client when polling the messages. The motivation behind this approach, was not only to reduce the amount of code, but more importantly to make it easier to implement the extremely important feature being ",["$","strong",null,{"children":"z [...]
+47:T1068,<svg viewBox="0 0 24 24"><path d="M23.8346 11.7033l-1.0073-.6236a13.7268 13.7268 0 00-.0283-.2936l.8656-.8069a.3483.3483 0 00-.1154-.578l-1.1066-.414a8.4958 8.4958 0 00-.087-.2856l.6904-.9587a.3462.3462 0 00-.2257-.5446l-1.1663-.1894a9.3574 9.3574 0 00-.1407-.2622l.49-1.0761a.3437.3437 0 00-.0274-.3361.3486.3486 0 00-.3006-.154l-1.1845.0416a6.7444 6.7444 0 00-.1873-.2268l.2723-1.153a.3472.3472 0 00-.417-.4172l-1.1532.2724a14.0183 14.0183 0 00-.2278-.1873l.0415-1.1845a.3442.3442  [...]
+38:["$","$L31",null,{"as":"h3","id":"json-transport","children":"JSON transport"}]
+39:["$","p",null,{"children":["As usual, the JSON transport should be rather easy to implement, as it's just a matter of adding the ",["$","code",null,{"children":"state"}]," and ",["$","code",null,{"children":"checksum"}]," fields to the ",["$","code",null,{"children":"message"}]," object being returned when polling the messages. The ",["$","code",null,{"children":"state"}]," returns the underscored string value."]}]
+3a:["$","$L46",null,{"className":"shiki shiki-themes github-light github-dark","style":{"--shiki-light":"#24292e","--shiki-dark":"#e1e4e8","--shiki-light-bg":"#fff","--shiki-dark-bg":"#24292e"},"tabIndex":"0","icon":"<svg viewBox=\"0 0 24 24\"><path d=\"M 6,1 C 4.354992,1 3,2.354992 3,4 v 16 c 0,1.645008 1.354992,3 3,3 h 12 c 1.645008,0 3,-1.354992 3,-3 V 8 7 A 1.0001,1.0001 0 0 0 20.707031,6.2929687 l -5,-5 A 1.0001,1.0001 0 0 0 15,1 h -1 z m 0,2 h 7 v 3 c 0,1.645008 1.354992,3 3,3 h 3  [...]
+3b:["$","$L31",null,{"as":"h3","id":"binary-transport","children":"Binary transport"}]
+3c:["$","p",null,{"children":["Next, let's take a look at the binary transport. The ",["$","code",null,{"children":"Message"}]," struct has been extended with the ",["$","code",null,{"children":"state"}]," and ",["$","code",null,{"children":"checksum"}]," fields, which results in the updated binary schema. Previously, the ",["$","code",null,{"children":"message"}]," struct was defined as follows:"]}]
+60:T1068,<svg viewBox="0 0 24 24"><path d="M23.8346 11.7033l-1.0073-.6236a13.7268 13.7268 0 00-.0283-.2936l.8656-.8069a.3483.3483 0 00-.1154-.578l-1.1066-.414a8.4958 8.4958 0 00-.087-.2856l.6904-.9587a.3462.3462 0 00-.2257-.5446l-1.1663-.1894a9.3574 9.3574 0 00-.1407-.2622l.49-1.0761a.3437.3437 0 00-.0274-.3361.3486.3486 0 00-.3006-.154l-1.1845.0416a6.7444 6.7444 0 00-.1873-.2268l.2723-1.153a.3472.3472 0 00-.417-.4172l-1.1532.2724a14.0183 14.0183 0 00-.2278-.1873l.0415-1.1845a.3442.3442  [...]
+3e:["$","p",null,{"children":"And the serialization was:"}]
+3f:["$","$L46",null,{"className":"shiki shiki-themes github-light github-dark","style":{"--shiki-light":"#24292e","--shiki-dark":"#e1e4e8","--shiki-light-bg":"#fff","--shiki-dark-bg":"#24292e"},"tabIndex":"0","icon":"<svg viewBox=\"0 0 24 24\"><path d=\"M 6,1 C 4.354992,1 3,2.354992 3,4 v 16 c 0,1.645008 1.354992,3 3,3 h 12 c 1.645008,0 3,-1.354992 3,-3 V 8 7 A 1.0001,1.0001 0 0 0 20.707031,6.2929687 l -5,-5 A 1.0001,1.0001 0 0 0 15,1 h -1 z m 0,2 h 7 v 3 c 0,1.645008 1.354992,3 3,3 h 3  [...]
+40:["$","p",null,{"children":["Now, the ",["$","code",null,{"children":"message"}]," looks like this:"]}]
+62:T1068,<svg viewBox="0 0 24 24"><path d="M23.8346 11.7033l-1.0073-.6236a13.7268 13.7268 0 00-.0283-.2936l.8656-.8069a.3483.3483 0 00-.1154-.578l-1.1066-.414a8.4958 8.4958 0 00-.087-.2856l.6904-.9587a.3462.3462 0 00-.2257-.5446l-1.1663-.1894a9.3574 9.3574 0 00-.1407-.2622l.49-1.0761a.3437.3437 0 00-.0274-.3361.3486.3486 0 00-.3006-.154l-1.1845.0416a6.7444 6.7444 0 00-.1873-.2268l.2723-1.153a.3472.3472 0 00-.417-.4172l-1.1532.2724a14.0183 14.0183 0 00-.2278-.1873l.0415-1.1845a.3442.3442  [...]
+42:["$","p",null,{"children":"And the serialization has changed to:"}]
+43:["$","$L46",null,{"className":"shiki shiki-themes github-light github-dark","style":{"--shiki-light":"#24292e","--shiki-dark":"#e1e4e8","--shiki-light-bg":"#fff","--shiki-dark-bg":"#24292e"},"tabIndex":"0","icon":"<svg viewBox=\"0 0 24 24\"><path d=\"M 6,1 C 4.354992,1 3,2.354992 3,4 v 16 c 0,1.645008 1.354992,3 3,3 h 12 c 1.645008,0 3,-1.354992 3,-3 V 8 7 A 1.0001,1.0001 0 0 0 20.707031,6.2929687 l -5,-5 A 1.0001,1.0001 0 0 0 15,1 h -1 z m 0,2 h 7 v 3 c 0,1.645008 1.354992,3 3,3 h 3  [...]
+44:["$","p",null,{"children":["And that's it - simply (de)serialize the ",["$","code",null,{"children":"state"}]," field right after the ",["$","code",null,{"children":"offset"}]," field, and the ",["$","code",null,{"children":"checksum"}]," field right after the ",["$","code",null,{"children":"id"}]," field."]}]
+45:["$","footer",null,{"className":"mt-16 border-t border-fd-border pt-8","children":["$","$L7",null,{"href":"/blogs","className":"inline-flex items-center gap-2 text-sm font-medium text-fd-primary transition-colors hover:opacity-80","children":"← Back to all posts"}]}]
+48:["$","$L49",null,{"children":["$","code",null,{"children":[["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"pub"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":" struct"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" Message"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"} [...]
+4a:["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":"1"}]
+4b:["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":","}]
+4c:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":"    \"state\""}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":": "}],["$","span",null,{"style":{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"},"children":"\"available\""}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":","}]]}]
+4d:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":"    \"timestamp\""}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":": "}],["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":"1692643862990112"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":","}]]}]
+4e:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":"    \"id\""}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":": "}],["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":"44069423551493178892268378627901876657"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":","}]]}]
+4f:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":"    \"checksum\""}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":": "}],["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":"148782482"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":","}]]}]
+50:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":"    \"headers\""}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":": {"}]]}]
+51:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":"      \"key_3\""}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":": {"}]]}]
+52:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":"        \"kind\""}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":": "}],["$","span",null,{"style":{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"},"children":"\"uint64\""}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":","}]]}]
+53:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":"        \"value\""}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":": "}],["$","span",null,{"style":{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"},"children":"\"QOIBAAAAAAA=\""}]]}]
+54:["$","span",null,{"className":"line","children":["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"      },"}]}]
+55:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":"      \"key 1\""}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":": {"}]]}]
+56:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":"        \"kind\""}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":": "}],["$","span",null,{"style":{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"},"children":"\"string\""}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":","}]]}]
+57:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":"        \"value\""}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":": "}],["$","span",null,{"style":{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"},"children":"\"dmFsdWUx\""}]]}]
+58:["$","span",null,{"className":"line","children":["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"      },"}]}]
+59:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":"      \"key-2\""}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":": {"}]]}]
+5a:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":"        \"kind\""}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":": "}],["$","span",null,{"style":{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"},"children":"\"bool\""}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":","}]]}]
+5b:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":"        \"value\""}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":": "}],["$","span",null,{"style":{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"},"children":"\"AQ==\""}]]}]
+5c:["$","span",null,{"className":"line","children":["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"      }"}]}]
+5d:["$","span",null,{"className":"line","children":["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"    },"}]}]
+5e:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":"    \"payload\""}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":": "}],["$","span",null,{"style":{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"},"children":"\"b3JkZXJzX2RhdGFfMw==\""}]]}]
+5f:["$","span",null,{"className":"line","children":["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"  }"}]}]
+61:["$","$L49",null,{"children":["$","code",null,{"children":[["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"pub"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":" struct"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" Message"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"} [...]
+63:["$","$L49",null,{"children":["$","code",null,{"children":[["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"pub"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":" struct"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" Message"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"} [...]
+64:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"    pub"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":" payload"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":":"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" Bytes"}]]}]
+65:["$","span",null,{"className":"line","children":["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"}"}]}]
+66:["$","span",null,{"className":"line"}]
+67:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"pub"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":" enum"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" MessageState"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":" {"}]]}]
+68:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"    Available"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":","}]]}]
+69:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"    Unavailable"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":","}]]}]
+6a:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"    Poisoned"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":","}]]}]
+6b:["$","span",null,{"className":"line","children":["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"    MarkedForDeletion"}]}]
+6c:["$","span",null,{"className":"line","children":["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"}"}]}]
+6d:["$","span",null,{"className":"line"}]
+6e:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"impl"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" MessageState"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":" {"}]]}]
+6f:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"    pub"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":" fn"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" as_code"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"("}],["$","span",null,{"style":{"--shiki-light [...]
+70:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"        match"}],["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":" self"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":" {"}]]}]
+71:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"            MessageState"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"::"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"Available"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":" =>"}],["$","span",null,{"sty [...]
+72:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"            MessageState"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"::"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"Unavailable"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":" =>"}],["$","span",null,{"s [...]
+73:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"            MessageState"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"::"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"Poisoned"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":" =>"}],["$","span",null,{"styl [...]
+74:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"            MessageState"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"::"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"MarkedForDeletion"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":" =>"}],["$","span",nu [...]
+75:["$","span",null,{"className":"line","children":["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"        }"}]}]
+76:["$","span",null,{"className":"line","children":["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"    }"}]}]
+77:["$","span",null,{"className":"line","children":["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"}"}]}]
+78:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"    pub"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":" payload"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":":"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" Bytes"}]]}]
+79:["$","span",null,{"className":"line","children":["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"}"}]}]
+29:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]
+7a:I[27201,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"IconMark"]
+27:null
+2b:[["$","title","0",{"children":"Message state | Apache Iggy"}],["$","link","1",{"rel":"canonical","href":"https://iggy.apache.org/blogs/2023/08/22/message-state/"}],["$","link","2",{"rel":"alternate","type":"text/markdown","href":"https://iggy.apache.org/blogs/2023/08/22/message-state.md"}],["$","meta","3",{"property":"og:title","content":"Message state | Apache Iggy"}],["$","meta","4",{"property":"og:url","content":"https://iggy.apache.org/blogs/2023/08/22/message-state/"}],["$","meta [...]
diff --git a/blogs/2023/08/22/message-state/__next._index.txt b/blogs/2023/08/22/message-state/__next._index.txt
new file mode 100644
index 000000000..42b058136
--- /dev/null
+++ b/blogs/2023/08/22/message-state/__next._index.txt
@@ -0,0 +1,20 @@
+1:"$Sreact.fragment"
+3:I[17751,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"RootProvider"]
+4:I[39756,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"default"]
+5:I[58298,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/3-_96y-evozm0.js"],"default"]
+6:I[37457,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"default"]
+7:I[22016,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],""]
+:HL["/_next/static/chunks/1_55v0vlfews3.css","style"]
+2:T512,{"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://iggy.apache.org/#organization","name":"The Apache Software Foundation","url":"https://www.apache.org/","logo":"https://iggy.apache.org/img/asf_logo.svg","contactPoint":{"@type":"ContactPoint","contactType":"technical support","email":"dev@iggy.apache.org","url":"https://iggy.apache.org/community/"}},{"@type":"WebSite","@id":"https://iggy.apache.org/#website","name":"Apache Iggy","url":"https://iggy.a [...]
+0:{"buildId":"CEAllZE6ERPzzxzpa_n8G","data":[{"rsc":["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/1_55v0vlfews3.css","precedence":"next"}],["$","script","script-0",{"src":"/_next/static/chunks/05hk4ely-lns6.js","async":true}],["$","script","script-1",{"src":"/_next/static/chunks/2tvyahbdutabx.js","async":true}]],["$","html",null,{"lang":"en","suppressHydrationWarning":true,"children":["$","body",null,{"className":"flex min-h-screen flex-col  [...]
+10:I[79520,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],""]
+11:I[69877,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"Matomo"]
+8:["$","a",null,{"href":"/sitemap.xml","className":"underline hover:text-fd-primary","children":"/sitemap.xml"}]
+9:["$","a",null,{"href":"/llms.txt","className":"underline hover:text-fd-primary","children":"/llms.txt"}]
+a:["$","$L10",null,{"id":"matomo","strategy":"afterInteractive","children":"var _paq = window._paq = window._paq || [];\n_paq.push([\"setDoNotTrack\", true]);\n_paq.push([\"disableCookies\"]);\n_paq.push(['trackPageView']);\n_paq.push(['enableLinkTracking']);\n(function() {\n  var u=\"https://analytics.apache.org/\";\n  _paq.push(['setTrackerUrl', u+'matomo.php']);\n  _paq.push(['setSiteId', '80']);\n  var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];\n  [...]
+b:["$","$L11",null,{}]
+d:300
+f:true
+d:C
+e:0
+c:"$undefined"
diff --git a/blogs/2023/08/22/message-state/__next._tree.txt b/blogs/2023/08/22/message-state/__next._tree.txt
new file mode 100644
index 000000000..46869b909
--- /dev/null
+++ b/blogs/2023/08/22/message-state/__next._tree.txt
@@ -0,0 +1,3 @@
+:HL["/_next/static/chunks/1_55v0vlfews3.css","style"]
+:HL["/img/authors/piotr.png","image"]
+0:{"tree":{"name":"","param":null,"prefetchHints":4112,"slots":{"children":{"name":"(site)","param":null,"prefetchHints":4096,"slots":{"children":{"name":"blogs","param":null,"prefetchHints":4160,"slots":{"children":{"name":"slug","param":{"type":"c","key":"2023/08/22/message-state","siblings":[]},"prefetchHints":4192,"slots":{"children":{"name":"__PAGE__","param":null,"prefetchHints":4256,"slots":null}}}}}}}}},"staleTime":300,"buildId":"CEAllZE6ERPzzxzpa_n8G"}
diff --git a/blogs/2023/08/22/message-state/index.html b/blogs/2023/08/22/message-state/index.html
new file mode 100644
index 000000000..9cc32c415
--- /dev/null
+++ b/blogs/2023/08/22/message-state/index.html
@@ -0,0 +1,98 @@
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" href="/img/authors/piotr.png" as="image"/><link rel="stylesheet" href="/_next/static/chunks/1_55v0vlfews3.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/1qt6pht_u0de1.js"/><script src="/_next/static/chunks/1iye7dwhtxrnu.js" async=""></script><script src="/_next/static/chunks/1t7fq8 [...]
+<h2 id="breaking-changes" class="group/heading flex scroll-m-28 flex-row items-center gap-1"><a data-card="" href="#breaking-changes">Breaking changes</a><button aria-label="Copy Anchor Link" class="inline-flex items-center justify-center rounded-md text-sm font-medium duration-100 disabled:pointer-events-none disabled:opacity-50 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-fd-ring hover:bg-fd-accent hover:text-fd-accent-foreground p-1 [&amp;_svg]:size-4 not-prose s [...]
+<p>Starting with the commit <a href="https://github.com/apache/iggy/commit/b07f23db798ffcda7c39650f34547f20137ff725" rel="noreferrer noopener" target="_blank">#b07f23d</a> the breaking changes related to polling the messages by the client have been introduced. The <code>Message</code> struct used when invoking <code>PollMessage</code> command has been extended with new fields, which results in updated binary schema. The available <a href="https://crates.io/crates/iggy" rel="noreferrer no [...]
+<h2 id="introduction" class="group/heading flex scroll-m-28 flex-row items-center gap-1"><a data-card="" href="#introduction">Introduction</a><button aria-label="Copy Anchor Link" class="inline-flex items-center justify-center rounded-md text-sm font-medium duration-100 disabled:pointer-events-none disabled:opacity-50 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-fd-ring hover:bg-fd-accent hover:text-fd-accent-foreground p-1 [&amp;_svg]:size-4 not-prose shrink-0 text [...]
+<p>The <code>state</code> is an additional field added to the <code>message</code> struct stored on the server-side, as well as polled by the client, which describes the current state of the message. By default, the message state is set to <code>available</code> (`code = 1``, see the possible codes below), meaning that the message is available to be consumed by the client.</p>
+<p>However, the state might have a different value, for example <code>marked_for_deletion</code> (to be used by the upcoming retention policy feature), <code>poisoned</code> (to be used by the upcoming dead-letter queue feature) etc. In the future releases, the server will also provide a way to change the state of the message (for example to mark it as <code>poisoned</code> by the client), as well as filtering the messages by the state.</p>
+<h2 id="implementation" class="group/heading flex scroll-m-28 flex-row items-center gap-1"><a data-card="" href="#implementation">Implementation</a><button aria-label="Copy Anchor Link" class="inline-flex items-center justify-center rounded-md text-sm font-medium duration-100 disabled:pointer-events-none disabled:opacity-50 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-fd-ring hover:bg-fd-accent hover:text-fd-accent-foreground p-1 [&amp;_svg]:size-4 not-prose shrink- [...]
+<h3 id="structures" class="group/heading flex scroll-m-28 flex-row items-center gap-1"><a data-card="" href="#structures">Structures</a><button aria-label="Copy Anchor Link" class="inline-flex items-center justify-center rounded-md text-sm font-medium duration-100 disabled:pointer-events-none disabled:opacity-50 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-fd-ring hover:bg-fd-accent hover:text-fd-accent-foreground p-1 [&amp;_svg]:size-4 not-prose shrink-0 text-fd-mu [...]
+<p>The new <code>MessageState</code> is an enum which defines the possible states of the message. The <code>Message</code> struct has been extended with the <code>state</code> field, which is an instance of the <code>MessageState</code> enum. The <code>MessageState</code> enum also provides a method to convert the enum variant to the <code>u8</code> value, which is used by the binary schema.</p>
+<p>Additionally, the <code>Message</code> struct has been extended with the <code>checksum</code> field, which is a <code>u32</code> value calculated (<strong>CRC-32</strong> algorithm) from the <code>payload</code> field. The checksum is used to verify the integrity of the message, and it&#x27;s calculated on the server-side when the message is being stored. The client can use the checksum to verify the integrity of the message, and if the checksum doesn&#x27;t match, the client can req [...]
+<p>The server and the client now <strong>share the same <code>Message</code> struct</strong>, meaning that the same type is being stored on the disk, as well as returned to the client when polling the messages. The motivation behind this approach, was not only to reduce the amount of code, but more importantly to make it easier to implement the extremely important feature being <strong>zero-copy</strong> (copy data from disk directly to the network buffer with bypassing the kernel space) [...]
+<figure dir="ltr" class="my-4 bg-fd-card rounded-xl shiki relative border shadow-sm not-prose overflow-hidden text-sm shiki shiki-themes github-light github-dark" style="--shiki-light:#24292e;--shiki-dark:#e1e4e8;--shiki-light-bg:#fff;--shiki-dark-bg:#24292e" tabindex="-1"><div class="empty:hidden absolute top-3 right-2 z-2 backdrop-blur-lg rounded-lg text-fd-muted-foreground"><button type="button" class="inline-flex items-center justify-center rounded-md text-sm font-medium transition-c [...]
+<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    pub</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> offset</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">:</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> u64</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
+<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    pub</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> state</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">:</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> MessageState</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
+<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    pub</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> timestamp</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">:</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> u64</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
+<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    pub</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> id</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">:</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> u128</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
+<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    pub</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> checksum</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">:</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> u32</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
+<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    pub</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> headers</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">:</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> Option</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">&lt;</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">HashMap</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8 [...]
+<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    pub</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> length</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">:</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> u32</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
+<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    pub</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> payload</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">:</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> Bytes</span></span>
+<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">}</span></span>
+<span class="line"></span>
+<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">pub</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583"> enum</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> MessageState</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> {</span></span>
+<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">    Available</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
+<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">    Unavailable</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
+<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">    Poisoned</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
+<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">    MarkedForDeletion</span></span>
+<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">}</span></span>
+<span class="line"></span>
+<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">impl</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> MessageState</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> {</span></span>
+<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    pub</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583"> fn</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> as_code</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">&amp;</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">self</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">) </ [...]
+<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">        match</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> self</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> {</span></span>
+<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">            MessageState</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">::</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">Available</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583"> =&gt;</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> 1</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
+<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">            MessageState</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">::</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">Unavailable</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583"> =&gt;</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> 10</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
+<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">            MessageState</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">::</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">Poisoned</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583"> =&gt;</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> 20</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
+<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">            MessageState</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">::</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">MarkedForDeletion</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583"> =&gt;</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> 30</span></span>
+<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">        }</span></span>
+<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">    }</span></span>
+<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">}</span></span></code></pre></div></figure>
+<h3 id="json-transport" class="group/heading flex scroll-m-28 flex-row items-center gap-1"><a data-card="" href="#json-transport">JSON transport</a><button aria-label="Copy Anchor Link" class="inline-flex items-center justify-center rounded-md text-sm font-medium duration-100 disabled:pointer-events-none disabled:opacity-50 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-fd-ring hover:bg-fd-accent hover:text-fd-accent-foreground p-1 [&amp;_svg]:size-4 not-prose shrink- [...]
+<p>As usual, the JSON transport should be rather easy to implement, as it&#x27;s just a matter of adding the <code>state</code> and <code>checksum</code> fields to the <code>message</code> object being returned when polling the messages. The <code>state</code> returns the underscored string value.</p>
+<figure dir="ltr" class="my-4 bg-fd-card rounded-xl shiki relative border shadow-sm not-prose overflow-hidden text-sm shiki shiki-themes github-light github-dark" style="--shiki-light:#24292e;--shiki-dark:#e1e4e8;--shiki-light-bg:#fff;--shiki-dark-bg:#24292e" tabindex="-1"><div class="empty:hidden absolute top-3 right-2 z-2 backdrop-blur-lg rounded-lg text-fd-muted-foreground"><button type="button" class="inline-flex items-center justify-center rounded-md text-sm font-medium transition-c [...]
+<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">    &quot;offset&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">0</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
+<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">    &quot;state&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">&quot;available&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
+<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">    &quot;timestamp&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">1692643862990111</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
+<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">    &quot;id&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">232071677777564499402827199894559175028</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
+<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">    &quot;checksum&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">2144931076</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
+<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">    &quot;headers&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">null</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
+<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">    &quot;payload&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">&quot;b3JkZXJzX2RhdGFfMg==&quot;</span></span>
+<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">  },</span></span>
+<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">  {</span></span>
+<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">    &quot;offset&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">1</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
+<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">    &quot;state&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">&quot;available&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
+<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">    &quot;timestamp&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">1692643862990112</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
+<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">    &quot;id&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">44069423551493178892268378627901876657</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
+<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">    &quot;checksum&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">148782482</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
+<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">    &quot;headers&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">: {</span></span>
+<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">      &quot;key_3&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">: {</span></span>
+<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">        &quot;kind&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">&quot;uint64&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
+<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">        &quot;value&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">&quot;QOIBAAAAAAA=&quot;</span></span>
+<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">      },</span></span>
+<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">      &quot;key 1&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">: {</span></span>
+<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">        &quot;kind&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">&quot;string&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
+<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">        &quot;value&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">&quot;dmFsdWUx&quot;</span></span>
+<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">      },</span></span>
+<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">      &quot;key-2&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">: {</span></span>
+<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">        &quot;kind&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">&quot;bool&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
+<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">        &quot;value&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">&quot;AQ==&quot;</span></span>
+<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">      }</span></span>
+<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">    },</span></span>
+<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">    &quot;payload&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">&quot;b3JkZXJzX2RhdGFfMw==&quot;</span></span>
+<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">  }</span></span></code></pre></div></figure>
+<h3 id="binary-transport" class="group/heading flex scroll-m-28 flex-row items-center gap-1"><a data-card="" href="#binary-transport">Binary transport</a><button aria-label="Copy Anchor Link" class="inline-flex items-center justify-center rounded-md text-sm font-medium duration-100 disabled:pointer-events-none disabled:opacity-50 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-fd-ring hover:bg-fd-accent hover:text-fd-accent-foreground p-1 [&amp;_svg]:size-4 not-prose s [...]
+<p>Next, let&#x27;s take a look at the binary transport. The <code>Message</code> struct has been extended with the <code>state</code> and <code>checksum</code> fields, which results in the updated binary schema. Previously, the <code>message</code> struct was defined as follows:</p>
+<figure dir="ltr" class="my-4 bg-fd-card rounded-xl shiki relative border shadow-sm not-prose overflow-hidden text-sm shiki shiki-themes github-light github-dark" style="--shiki-light:#24292e;--shiki-dark:#e1e4e8;--shiki-light-bg:#fff;--shiki-dark-bg:#24292e" tabindex="-1"><div class="empty:hidden absolute top-3 right-2 z-2 backdrop-blur-lg rounded-lg text-fd-muted-foreground"><button type="button" class="inline-flex items-center justify-center rounded-md text-sm font-medium transition-c [...]
+<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    pub</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> offset</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">:</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> u64</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
+<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    pub</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> timestamp</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">:</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> u64</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
+<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    pub</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> id</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">:</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> u128</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
+<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    pub</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> headers</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">:</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> Option</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">&lt;</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">HashMap</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8 [...]
+<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    pub</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> length</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">:</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> u32</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
+<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    pub</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> payload</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">:</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> Bytes</span></span>
+<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">}</span></span></code></pre></div></figure>
+<p>And the serialization was:</p>
+<figure dir="ltr" class="my-4 bg-fd-card rounded-xl shiki relative border shadow-sm not-prose overflow-hidden text-sm shiki shiki-themes github-light github-dark" style="--shiki-light:#24292e;--shiki-dark:#e1e4e8;--shiki-light-bg:#fff;--shiki-dark-bg:#24292e" tabindex="-1"><div class="empty:hidden absolute top-3 right-2 z-2 backdrop-blur-lg rounded-lg text-fd-muted-foreground"><button type="button" class="inline-flex items-center justify-center rounded-md text-sm font-medium transition-c [...]
+<p>Now, the <code>message</code> looks like this:</p>
+<figure dir="ltr" class="my-4 bg-fd-card rounded-xl shiki relative border shadow-sm not-prose overflow-hidden text-sm shiki shiki-themes github-light github-dark" style="--shiki-light:#24292e;--shiki-dark:#e1e4e8;--shiki-light-bg:#fff;--shiki-dark-bg:#24292e" tabindex="-1"><div class="empty:hidden absolute top-3 right-2 z-2 backdrop-blur-lg rounded-lg text-fd-muted-foreground"><button type="button" class="inline-flex items-center justify-center rounded-md text-sm font-medium transition-c [...]
+<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    pub</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> offset</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">:</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> u64</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
+<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    pub</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> state</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">:</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> MessageState</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
+<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    pub</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> timestamp</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">:</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> u64</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
+<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    pub</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> id</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">:</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> u128</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
+<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    pub</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> checksum</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">:</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> u32</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
+<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    pub</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> headers</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">:</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> Option</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">&lt;</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">HashMap</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8 [...]
+<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    pub</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> length</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">:</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> u32</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
+<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    pub</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> payload</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">:</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> Bytes</span></span>
+<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">}</span></span></code></pre></div></figure>
+<p>And the serialization has changed to:</p>
+<figure dir="ltr" class="my-4 bg-fd-card rounded-xl shiki relative border shadow-sm not-prose overflow-hidden text-sm shiki shiki-themes github-light github-dark" style="--shiki-light:#24292e;--shiki-dark:#e1e4e8;--shiki-light-bg:#fff;--shiki-dark-bg:#24292e" tabindex="-1"><div class="empty:hidden absolute top-3 right-2 z-2 backdrop-blur-lg rounded-lg text-fd-muted-foreground"><button type="button" class="inline-flex items-center justify-center rounded-md text-sm font-medium transition-c [...]
+<p>And that&#x27;s it - simply (de)serialize the <code>state</code> field right after the <code>offset</code> field, and the <code>checksum</code> field right after the <code>id</code> field.</p></div><footer class="mt-16 border-t border-fd-border pt-8"><a class="inline-flex items-center gap-2 text-sm font-medium text-fd-primary transition-colors hover:opacity-80" href="/blogs/">← Back to all posts</a></footer></article></main><!--$--><!--/$--><footer class="border-t border-fd-border bg- [...]
\ No newline at end of file
diff --git a/blogs/2023/08/22/message-state/index.txt b/blogs/2023/08/22/message-state/index.txt
new file mode 100644
index 000000000..1e0b94a17
--- /dev/null
+++ b/blogs/2023/08/22/message-state/index.txt
@@ -0,0 +1,122 @@
+1:"$Sreact.fragment"
+3:I[17751,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"RootProvider"]
+4:I[39756,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"default"]
+5:I[58298,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/3-_96y-evozm0.js"],"default"]
+6:I[37457,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"default"]
+7:I[22016,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],""]
+12:I[68027,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"default",1]
+:HL["/_next/static/chunks/1_55v0vlfews3.css","style"]
+2:T512,{"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://iggy.apache.org/#organization","name":"The Apache Software Foundation","url":"https://www.apache.org/","logo":"https://iggy.apache.org/img/asf_logo.svg","contactPoint":{"@type":"ContactPoint","contactType":"technical support","email":"dev@iggy.apache.org","url":"https://iggy.apache.org/community/"}},{"@type":"WebSite","@id":"https://iggy.apache.org/#website","name":"Apache Iggy","url":"https://iggy.a [...]
+0:{"P":null,"c":["","blogs","2023","08","22","message-state",""],"q":"","i":false,"f":[[["",{"children":["(site)",{"children":["blogs",{"children":[["slug","2023/08/22/message-state","c",[]],{"children":["__PAGE__",{},"$undefined","$undefined",4608]},"$undefined","$undefined",4608]},"$undefined","$undefined",4608]},"$undefined","$undefined",4608]},"$undefined","$undefined",4624],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/1_55v0vlfews3.cs [...]
+14:I[79520,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],""]
+15:I[69877,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"Matomo"]
+16:I[5014,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],"default"]
+17:I[64345,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js"],"HomeLayout"]
+18:I[88760,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js"],"Logo"]
+19:I[15269,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js"],"CommunityDropdown"]
+1a:I[15269,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js"],"communityLinks"]
+1b:I[29966,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js"],"ASFDropdown"]
+1c:I[36330,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js"],"ASFMobileLinks"]
+25:I[97367,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"OutletBoundary"]
+26:"$Sreact.suspense"
+28:I[97367,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"ViewportBoundary"]
+2a:I[97367,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"MetadataBoundary"]
+8:["$","$L7","/community",{"href":"/community","className":"transition-colors hover:text-fd-primary","children":"Community"}]
+9:["$","p",null,{"className":"mt-6 max-w-md text-xs text-fd-muted-foreground","children":["Every page on this site is listed in"," ",["$","a",null,{"href":"/sitemap.xml","className":"underline hover:text-fd-primary","children":"/sitemap.xml"}],", and"," ",["$","a",null,{"href":"/llms.txt","className":"underline hover:text-fd-primary","children":"/llms.txt"}]," ","summarises the documentation."]}]
+a:["$","$L14",null,{"id":"matomo","strategy":"afterInteractive","children":"var _paq = window._paq = window._paq || [];\n_paq.push([\"setDoNotTrack\", true]);\n_paq.push([\"disableCookies\"]);\n_paq.push(['trackPageView']);\n_paq.push(['enableLinkTracking']);\n(function() {\n  var u=\"https://analytics.apache.org/\";\n  _paq.push(['setTrackerUrl', u+'matomo.php']);\n  _paq.push(['setSiteId', '80']);\n  var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];\n  [...]
+b:["$","$L15",null,{}]
+c:["$","$1","c",{"children":[[["$","script","script-0",{"src":"/_next/static/chunks/241-fa32f9zay.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/_next/static/chunks/3x8y3fmtn6lnc.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/_next/static/chunks/250gopd52txql.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/_next/static/chunks/0n3fueko2xquo.js","async":true,"nonce":"$undefined"}]],[["$","div",null,{"className" [...]
+d:["$","$1","c",{"children":[null,["$","$L4",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}]
+e:["$","$1","c",{"children":[null,["$","$L4",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}]
+f:["$","$1","c",{"children":["$L24",[["$","script","script-0",{"src":"/_next/static/chunks/1k39uva2a578s.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/_next/static/chunks/23ktdyx90z0v3.js","async":true,"nonce":"$undefined"}]],["$","$L25",null,{"children":["$","$26",null,{"name":"Next.MetadataOutlet","children":"$@27"}]}]]}]
+11:["$","$1","h",{"children":[null,["$","$L28",null,{"children":"$L29"}],["$","div",null,{"hidden":true,"children":["$","$L2a",null,{"children":["$","$26",null,{"name":"Next.Metadata","children":"$L2b"}]}]}],null]}]
+13:["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/1_55v0vlfews3.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]
+10:C
+1d:["$","$L7","/",{"href":"/","className":"transition-colors hover:text-fd-primary","children":"Home"}]
+1e:["$","$L7","/docs",{"href":"/docs","className":"transition-colors hover:text-fd-primary","children":"Documentation"}]
+1f:["$","$L7","/blogs",{"href":"/blogs","className":"transition-colors hover:text-fd-primary","children":"Blog"}]
+20:["$","$L7","/downloads",{"href":"/downloads","className":"transition-colors hover:text-fd-primary","children":"Downloads"}]
+21:["$","$L7","/community",{"href":"/community","className":"transition-colors hover:text-fd-primary","children":"Community"}]
+22:["$","p",null,{"className":"mt-6 max-w-md text-xs text-fd-muted-foreground","children":["Every page on this site is listed in"," ",["$","a",null,{"href":"/sitemap.xml","className":"underline hover:text-fd-primary","children":"/sitemap.xml"}],", and"," ",["$","a",null,{"href":"/llms.txt","className":"underline hover:text-fd-primary","children":"/llms.txt"}]," ","summarises the documentation."]}]
+23:["$","footer",null,{"className":"border-t border-fd-border bg-fd-background px-6 py-14 md:px-12","children":["$","div",null,{"className":"mx-auto max-w-6xl","children":[["$","div",null,{"className":"grid gap-10 sm:grid-cols-2 lg:grid-cols-4","children":[["$","div","Docs",{"children":[["$","h2",null,{"className":"mb-4 text-sm font-semibold uppercase tracking-wide text-fd-primary","children":"Docs"}],["$","ul",null,{"className":"space-y-2.5 text-sm","children":[["$","li","/docs",{"child [...]
+2c:["$","li","https://www.apache.org/foundation/contributing.html",{"children":["$","$L7",null,{"href":"https://www.apache.org/foundation/contributing.html","target":"_blank","rel":"noopener noreferrer","className":"text-fd-muted-foreground transition-colors hover:text-fd-foreground","children":"Donate"}]}]
+2d:["$","li","https://www.apache.org/foundation/sponsorship.html",{"children":["$","$L7",null,{"href":"https://www.apache.org/foundation/sponsorship.html","target":"_blank","rel":"noopener noreferrer","className":"text-fd-muted-foreground transition-colors hover:text-fd-foreground","children":"Sponsors"}]}]
+2e:["$","li","https://www.apache.org/security/",{"children":["$","$L7",null,{"href":"https://www.apache.org/security/","target":"_blank","rel":"noopener noreferrer","className":"text-fd-muted-foreground transition-colors hover:text-fd-foreground","children":"Security"}]}]
+2f:["$","li","https://privacy.apache.org/policies/privacy-policy-public.html",{"children":["$","$L7",null,{"href":"https://privacy.apache.org/policies/privacy-policy-public.html","target":"_blank","rel":"noopener noreferrer","className":"text-fd-muted-foreground transition-colors hover:text-fd-foreground","children":"Privacy"}]}]
+30:["$","div",null,{"className":"mt-12 border-t border-fd-border pt-8 text-xs leading-relaxed text-fd-muted-foreground/70","children":[["$","p",null,{"className":"mt-4","children":["Copyright © ",2026," The Apache Software Foundation, Licensed under the Apache License, Version 2.0."]}],["$","p",null,{"className":"mt-4","children":"Apache Iggy, Iggy, Apache, and the Apache Iggy logo are trademarks or registered trademarks of The Apache Software Foundation. All other marks mentioned may be [...]
+31:I[94157,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],"Heading"]
+32:I[47873,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],"default"]
+:HL["/img/authors/piotr.png","image"]
+24:["$","main",null,{"className":"min-h-screen px-6 py-16 md:px-12","children":["$","article",null,{"className":"mx-auto max-w-5xl","children":[["$","header",null,{"className":"mb-10","children":[["$","time",null,{"className":"text-sm font-medium text-fd-muted-foreground","children":"August 22, 2023"}],["$","h1",null,{"className":"mt-3 text-3xl font-extrabold tracking-tight text-fd-foreground md:text-5xl","children":"Message state"}],["$","div",null,{"className":"mt-6 flex flex-wrap gap- [...]
+46:I[44324,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],"CodeBlock"]
+49:I[44324,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],"Pre"]
+33:["$","$L31",null,{"as":"h3","id":"structures","children":"Structures"}]
+34:["$","p",null,{"children":["The new ",["$","code",null,{"children":"MessageState"}]," is an enum which defines the possible states of the message. The ",["$","code",null,{"children":"Message"}]," struct has been extended with the ",["$","code",null,{"children":"state"}]," field, which is an instance of the ",["$","code",null,{"children":"MessageState"}]," enum. The ",["$","code",null,{"children":"MessageState"}]," enum also provides a method to convert the enum variant to the ",["$"," [...]
+35:["$","p",null,{"children":["Additionally, the ",["$","code",null,{"children":"Message"}]," struct has been extended with the ",["$","code",null,{"children":"checksum"}]," field, which is a ",["$","code",null,{"children":"u32"}]," value calculated (",["$","strong",null,{"children":"CRC-32"}]," algorithm) from the ",["$","code",null,{"children":"payload"}]," field. The checksum is used to verify the integrity of the message, and it's calculated on the server-side when the message is bei [...]
+36:["$","p",null,{"children":["The server and the client now ",["$","strong",null,{"children":["share the same ",["$","code",null,{"children":"Message"}]," struct"]}],", meaning that the same type is being stored on the disk, as well as returned to the client when polling the messages. The motivation behind this approach, was not only to reduce the amount of code, but more importantly to make it easier to implement the extremely important feature being ",["$","strong",null,{"children":"z [...]
+47:T1068,<svg viewBox="0 0 24 24"><path d="M23.8346 11.7033l-1.0073-.6236a13.7268 13.7268 0 00-.0283-.2936l.8656-.8069a.3483.3483 0 00-.1154-.578l-1.1066-.414a8.4958 8.4958 0 00-.087-.2856l.6904-.9587a.3462.3462 0 00-.2257-.5446l-1.1663-.1894a9.3574 9.3574 0 00-.1407-.2622l.49-1.0761a.3437.3437 0 00-.0274-.3361.3486.3486 0 00-.3006-.154l-1.1845.0416a6.7444 6.7444 0 00-.1873-.2268l.2723-1.153a.3472.3472 0 00-.417-.4172l-1.1532.2724a14.0183 14.0183 0 00-.2278-.1873l.0415-1.1845a.3442.3442  [...]
+38:["$","$L31",null,{"as":"h3","id":"json-transport","children":"JSON transport"}]
+39:["$","p",null,{"children":["As usual, the JSON transport should be rather easy to implement, as it's just a matter of adding the ",["$","code",null,{"children":"state"}]," and ",["$","code",null,{"children":"checksum"}]," fields to the ",["$","code",null,{"children":"message"}]," object being returned when polling the messages. The ",["$","code",null,{"children":"state"}]," returns the underscored string value."]}]
+3a:["$","$L46",null,{"className":"shiki shiki-themes github-light github-dark","style":{"--shiki-light":"#24292e","--shiki-dark":"#e1e4e8","--shiki-light-bg":"#fff","--shiki-dark-bg":"#24292e"},"tabIndex":"0","icon":"<svg viewBox=\"0 0 24 24\"><path d=\"M 6,1 C 4.354992,1 3,2.354992 3,4 v 16 c 0,1.645008 1.354992,3 3,3 h 12 c 1.645008,0 3,-1.354992 3,-3 V 8 7 A 1.0001,1.0001 0 0 0 20.707031,6.2929687 l -5,-5 A 1.0001,1.0001 0 0 0 15,1 h -1 z m 0,2 h 7 v 3 c 0,1.645008 1.354992,3 3,3 h 3  [...]
+3b:["$","$L31",null,{"as":"h3","id":"binary-transport","children":"Binary transport"}]
+3c:["$","p",null,{"children":["Next, let's take a look at the binary transport. The ",["$","code",null,{"children":"Message"}]," struct has been extended with the ",["$","code",null,{"children":"state"}]," and ",["$","code",null,{"children":"checksum"}]," fields, which results in the updated binary schema. Previously, the ",["$","code",null,{"children":"message"}]," struct was defined as follows:"]}]
+60:T1068,<svg viewBox="0 0 24 24"><path d="M23.8346 11.7033l-1.0073-.6236a13.7268 13.7268 0 00-.0283-.2936l.8656-.8069a.3483.3483 0 00-.1154-.578l-1.1066-.414a8.4958 8.4958 0 00-.087-.2856l.6904-.9587a.3462.3462 0 00-.2257-.5446l-1.1663-.1894a9.3574 9.3574 0 00-.1407-.2622l.49-1.0761a.3437.3437 0 00-.0274-.3361.3486.3486 0 00-.3006-.154l-1.1845.0416a6.7444 6.7444 0 00-.1873-.2268l.2723-1.153a.3472.3472 0 00-.417-.4172l-1.1532.2724a14.0183 14.0183 0 00-.2278-.1873l.0415-1.1845a.3442.3442  [...]
+3e:["$","p",null,{"children":"And the serialization was:"}]
+3f:["$","$L46",null,{"className":"shiki shiki-themes github-light github-dark","style":{"--shiki-light":"#24292e","--shiki-dark":"#e1e4e8","--shiki-light-bg":"#fff","--shiki-dark-bg":"#24292e"},"tabIndex":"0","icon":"<svg viewBox=\"0 0 24 24\"><path d=\"M 6,1 C 4.354992,1 3,2.354992 3,4 v 16 c 0,1.645008 1.354992,3 3,3 h 12 c 1.645008,0 3,-1.354992 3,-3 V 8 7 A 1.0001,1.0001 0 0 0 20.707031,6.2929687 l -5,-5 A 1.0001,1.0001 0 0 0 15,1 h -1 z m 0,2 h 7 v 3 c 0,1.645008 1.354992,3 3,3 h 3  [...]
+40:["$","p",null,{"children":["Now, the ",["$","code",null,{"children":"message"}]," looks like this:"]}]
+62:T1068,<svg viewBox="0 0 24 24"><path d="M23.8346 11.7033l-1.0073-.6236a13.7268 13.7268 0 00-.0283-.2936l.8656-.8069a.3483.3483 0 00-.1154-.578l-1.1066-.414a8.4958 8.4958 0 00-.087-.2856l.6904-.9587a.3462.3462 0 00-.2257-.5446l-1.1663-.1894a9.3574 9.3574 0 00-.1407-.2622l.49-1.0761a.3437.3437 0 00-.0274-.3361.3486.3486 0 00-.3006-.154l-1.1845.0416a6.7444 6.7444 0 00-.1873-.2268l.2723-1.153a.3472.3472 0 00-.417-.4172l-1.1532.2724a14.0183 14.0183 0 00-.2278-.1873l.0415-1.1845a.3442.3442  [...]
+42:["$","p",null,{"children":"And the serialization has changed to:"}]
+43:["$","$L46",null,{"className":"shiki shiki-themes github-light github-dark","style":{"--shiki-light":"#24292e","--shiki-dark":"#e1e4e8","--shiki-light-bg":"#fff","--shiki-dark-bg":"#24292e"},"tabIndex":"0","icon":"<svg viewBox=\"0 0 24 24\"><path d=\"M 6,1 C 4.354992,1 3,2.354992 3,4 v 16 c 0,1.645008 1.354992,3 3,3 h 12 c 1.645008,0 3,-1.354992 3,-3 V 8 7 A 1.0001,1.0001 0 0 0 20.707031,6.2929687 l -5,-5 A 1.0001,1.0001 0 0 0 15,1 h -1 z m 0,2 h 7 v 3 c 0,1.645008 1.354992,3 3,3 h 3  [...]
+44:["$","p",null,{"children":["And that's it - simply (de)serialize the ",["$","code",null,{"children":"state"}]," field right after the ",["$","code",null,{"children":"offset"}]," field, and the ",["$","code",null,{"children":"checksum"}]," field right after the ",["$","code",null,{"children":"id"}]," field."]}]
+45:["$","footer",null,{"className":"mt-16 border-t border-fd-border pt-8","children":["$","$L7",null,{"href":"/blogs","className":"inline-flex items-center gap-2 text-sm font-medium text-fd-primary transition-colors hover:opacity-80","children":"← Back to all posts"}]}]
+48:["$","$L49",null,{"children":["$","code",null,{"children":[["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"pub"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":" struct"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" Message"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"} [...]
+4a:["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":"1"}]
+4b:["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":","}]
+4c:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":"    \"state\""}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":": "}],["$","span",null,{"style":{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"},"children":"\"available\""}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":","}]]}]
+4d:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":"    \"timestamp\""}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":": "}],["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":"1692643862990112"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":","}]]}]
+4e:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":"    \"id\""}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":": "}],["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":"44069423551493178892268378627901876657"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":","}]]}]
+4f:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":"    \"checksum\""}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":": "}],["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":"148782482"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":","}]]}]
+50:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":"    \"headers\""}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":": {"}]]}]
+51:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":"      \"key_3\""}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":": {"}]]}]
+52:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":"        \"kind\""}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":": "}],["$","span",null,{"style":{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"},"children":"\"uint64\""}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":","}]]}]
+53:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":"        \"value\""}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":": "}],["$","span",null,{"style":{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"},"children":"\"QOIBAAAAAAA=\""}]]}]
+54:["$","span",null,{"className":"line","children":["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"      },"}]}]
+55:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":"      \"key 1\""}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":": {"}]]}]
+56:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":"        \"kind\""}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":": "}],["$","span",null,{"style":{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"},"children":"\"string\""}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":","}]]}]
+57:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":"        \"value\""}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":": "}],["$","span",null,{"style":{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"},"children":"\"dmFsdWUx\""}]]}]
+58:["$","span",null,{"className":"line","children":["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"      },"}]}]
+59:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":"      \"key-2\""}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":": {"}]]}]
+5a:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":"        \"kind\""}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":": "}],["$","span",null,{"style":{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"},"children":"\"bool\""}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":","}]]}]
+5b:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":"        \"value\""}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":": "}],["$","span",null,{"style":{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"},"children":"\"AQ==\""}]]}]
+5c:["$","span",null,{"className":"line","children":["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"      }"}]}]
+5d:["$","span",null,{"className":"line","children":["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"    },"}]}]
+5e:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":"    \"payload\""}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":": "}],["$","span",null,{"style":{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"},"children":"\"b3JkZXJzX2RhdGFfMw==\""}]]}]
+5f:["$","span",null,{"className":"line","children":["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"  }"}]}]
+61:["$","$L49",null,{"children":["$","code",null,{"children":[["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"pub"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":" struct"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" Message"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"} [...]
+63:["$","$L49",null,{"children":["$","code",null,{"children":[["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"pub"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":" struct"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" Message"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"} [...]
+64:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"    pub"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":" payload"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":":"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" Bytes"}]]}]
+65:["$","span",null,{"className":"line","children":["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"}"}]}]
+66:["$","span",null,{"className":"line"}]
+67:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"pub"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":" enum"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" MessageState"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":" {"}]]}]
+68:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"    Available"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":","}]]}]
+69:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"    Unavailable"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":","}]]}]
+6a:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"    Poisoned"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":","}]]}]
+6b:["$","span",null,{"className":"line","children":["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"    MarkedForDeletion"}]}]
+6c:["$","span",null,{"className":"line","children":["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"}"}]}]
+6d:["$","span",null,{"className":"line"}]
+6e:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"impl"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" MessageState"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":" {"}]]}]
+6f:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"    pub"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":" fn"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" as_code"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"("}],["$","span",null,{"style":{"--shiki-light [...]
+70:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"        match"}],["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":" self"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":" {"}]]}]
+71:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"            MessageState"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"::"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"Available"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":" =>"}],["$","span",null,{"sty [...]
+72:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"            MessageState"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"::"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"Unavailable"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":" =>"}],["$","span",null,{"s [...]
+73:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"            MessageState"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"::"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"Poisoned"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":" =>"}],["$","span",null,{"styl [...]
+74:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"            MessageState"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"::"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"MarkedForDeletion"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":" =>"}],["$","span",nu [...]
+75:["$","span",null,{"className":"line","children":["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"        }"}]}]
+76:["$","span",null,{"className":"line","children":["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"    }"}]}]
+77:["$","span",null,{"className":"line","children":["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"}"}]}]
+78:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"    pub"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":" payload"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":":"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" Bytes"}]]}]
+79:["$","span",null,{"className":"line","children":["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"}"}]}]
+29:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]
+7a:I[27201,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"IconMark"]
+27:null
+2b:[["$","title","0",{"children":"Message state | Apache Iggy"}],["$","link","1",{"rel":"canonical","href":"https://iggy.apache.org/blogs/2023/08/22/message-state/"}],["$","link","2",{"rel":"alternate","type":"text/markdown","href":"https://iggy.apache.org/blogs/2023/08/22/message-state.md"}],["$","meta","3",{"property":"og:title","content":"Message state | Apache Iggy"}],["$","meta","4",{"property":"og:url","content":"https://iggy.apache.org/blogs/2023/08/22/message-state/"}],["$","meta [...]
diff --git a/blogs/2023/08/27/message-expiry.md b/blogs/2023/08/27/message-expiry.md
new file mode 100644
index 000000000..fc3c1ebd0
--- /dev/null
+++ b/blogs/2023/08/27/message-expiry.md
@@ -0,0 +1,96 @@
+# Message expiry
+
+Published: 2023-08-27
+
+Rendered page: https://iggy.apache.org/blogs/2023/08/27/message-expiry/
+
+Source: https://github.com/apache/iggy-website/blob/main/content/blog/message-expiry.mdx
+
+The message expiration is a server-side feature, allowing to automatically delete the old data (expired segment as a whole) depending on the provided configuration. By specifying the custom retention policy, the server can clean up no longer needed messages, which can help with the disk space management.
+
+
+## Breaking changes
+
+No breaking changes have been introduced with this feature. The only breaking changes are related to the updated `CreateTopic`, `CreateStream` commands and `Stream` + `Topic` responses, which have been introduced in the latest commit [#ea3bf9c](https://github.com/apache/iggy/commit/ea3bf9c16dd5f93e1c80c140e9e1d14cfa70f570). The available [iggy crate](https://crates.io/crates/iggy) supports these changes since version 0.0.50.
+
+## Introduction
+
+The expiration policy is defined per topic, and it's being set when creating the topic. The value can be either provided via server configuration file, or via `CreateTopic` command. If the expiration is set in the configuration, it will be used as a default value for all the topics, unless when explicitly set when creating the topic via available `message_expiry` field.
+
+The expiration policy is defined as `u32` value, which is the number of seconds after which the message should be marked as expired.
+
+For example, the value of 604800 represents 1 week (60 \* 60 \* 24 \* 7) - after this time, the messages will be marked as expired, and the whole segment will be deleted, as long as all the messages in this segment are expired.
+
+If there are still some messages which are not expired, the segment will be kept on the disk. By default, the new segment is automatically created when the previous one is full - either, it has reached the maximum size (defined by `size_bytes` property) or the currently stored messages have been expired, based on the current server timestamp and configured expiry value.
+
+Setting the `message_expiry` to 0 disables the message expiry feature, meaning that the data will be kept forever, unless deleted manually.
+
+## Configuration
+
+```toml
+[message_cleaner]
+enabled = true
+interval = 60
+
+[system.segment]
+message_expiry = 0
+```
+
+### Message cleaner
+
+The optional component, running in the background, responsible for validating and removing, the expired messages. The whole segment will be removed, when all the messages in this segment are expired. If the `enabled` is set to false, the message cleaner will be disabled, meaning that even if the `message_expiry` is set, the expired messages will not be removed.
+
+### Segment
+
+The `message_expiry` option in the `segment` section of the configuration file specifies the number of seconds after which the message will be marked as expired - this is the default value that will be applied to all the topics, unless overridden when creating the topic via API. If the `message_expiry` is set to 0, then the message expiry is disabled.
+
+
+## Commands
+
+```rust
+pub struct CreateTopic {
+    pub stream_id: Identifier,
+    pub topic_id: u32,
+    pub partitions_count: u32,
+    pub message_expiry: Option<u32>,
+    pub name: String
+}
+```
+
+The `message_expiry` field has been added to the `CreateTopic` command, which allows overriding the default value set in the configuration file. If the `message_expiry` is set to None (serialized as 0 value on the binary level), then the message expiry is disabled.
+
+```rust
+fn as_bytes(&self) -> Vec<u8> {
+    let stream_id_bytes = self.stream_id.as_bytes();
+    let mut bytes = Vec::with_capacity(13 + stream_id_bytes.len() + self.name.len());
+    bytes.extend(stream_id_bytes);
+    bytes.put_u32_le(self.topic_id);
+    bytes.put_u32_le(self.partitions_count);
+    match self.message_expiry {
+        Some(message_expiry) => bytes.put_u32_le(message_expiry),
+        None => bytes.put_u32_le(0),
+    }
+    bytes.put_u8(self.name.len() as u8);
+    bytes.extend(self.name.as_bytes());
+    bytes
+}
+```
+
+
+Additionally, the `name_length` field has been added to the binary serialization of the `CreateTopic` and `CreateStream` commands, which allows specifying the length of the name - it should be serialized as `u8` value, before the actual name, with a maximum length of 255 characters.
+
+The following **regex** is used to validate the topic and stream names: `^[\w\.\-\s]+$`. The name will always be lowercased, and the whitespace will be trimmed and then replaced with the `.` character. The following rule applies to all the resources that contain the name field.
+
+Also, the `Topic` and `TopicDetails` returned when fetching the topic(s), have been extended with the `message_expiry` field, and the `name_length` has changed value from `u32 to `u8` (1 byte instead of 4 bytes).
+
+Serialization:
+
+```
+Topic ID (4 bytes) + Partitions count (4 bytes) + Message expiry (4 bytes) + Size (8 bytes) + Messages count (8 bytes) + Name length (1 byte) + Name (`Name length` bytes)
+```
+
+The same changes (`name_length`) apply to the `Stream` and `StreamDetails` structs.
+
+```
+Stream ID (4 bytes) + Topics count (4 bytes) + Size (8 bytes) + Messages count (8 bytes) + Name length (1 byte) + Name (`Name length` bytes)
+```
diff --git a/blogs/2023/08/27/message-expiry/__next.!KHNpdGUp.blogs.$c$slug.__PAGE__.txt b/blogs/2023/08/27/message-expiry/__next.!KHNpdGUp.blogs.$c$slug.__PAGE__.txt
new file mode 100644
index 000000000..18435a8d1
--- /dev/null
+++ b/blogs/2023/08/27/message-expiry/__next.!KHNpdGUp.blogs.$c$slug.__PAGE__.txt
@@ -0,0 +1,70 @@
+1:"$Sreact.fragment"
+2:I[94157,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],"Heading"]
+3:I[47873,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],"default"]
+:HL["/img/authors/piotr.png","image"]
+1c:X
+21:X
+21:C
+0:{"buildId":"CEAllZE6ERPzzxzpa_n8G","data":[{"rsc":["$","$1","c",{"children":[["$","main",null,{"className":"min-h-screen px-6 py-16 md:px-12","children":["$","article",null,{"className":"mx-auto max-w-5xl","children":[["$","header",null,{"className":"mb-10","children":[["$","time",null,{"className":"text-sm font-medium text-fd-muted-foreground","children":"August 27, 2023"}],["$","h1",null,{"className":"mt-3 text-3xl font-extrabold tracking-tight text-fd-foreground md:text-5xl","childr [...]
+26:I[44324,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],"CodeBlock"]
+27:I[44324,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],"Pre"]
+2c:I[22016,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],""]
+2d:I[97367,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"OutletBoundary"]
+2e:"$Sreact.suspense"
+30:I[97367,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"ViewportBoundary"]
+31:I[97367,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"MetadataBoundary"]
+32:I[27201,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"IconMark"]
+33:I[39756,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"default"]
+34:I[37457,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"default"]
+4:["$","code",null,{"children":"size_bytes"}]
+5:["$","p",null,{"children":["Setting the ",["$","code",null,{"children":"message_expiry"}]," to 0 disables the message expiry feature, meaning that the data will be kept forever, unless deleted manually."]}]
+6:["$","$L2",null,{"as":"h2","id":"configuration","children":"Configuration"}]
+7:["$","$L26",null,{"className":"shiki shiki-themes github-light github-dark","style":{"--shiki-light":"#24292e","--shiki-dark":"#e1e4e8","--shiki-light-bg":"#fff","--shiki-dark-bg":"#24292e"},"tabIndex":"0","icon":"<svg viewBox=\"0 0 24 24\"><path d=\"M 6,1 C 4.354992,1 3,2.354992 3,4 v 16 c 0,1.645008 1.354992,3 3,3 h 12 c 1.645008,0 3,-1.354992 3,-3 V 8 7 A 1.0001,1.0001 0 0 0 20.707031,6.2929687 l -5,-5 A 1.0001,1.0001 0 0 0 15,1 h -1 z m 0,2 h 7 v 3 c 0,1.645008 1.354992,3 3,3 h 3 v [...]
+8:["$","$L2",null,{"as":"h3","id":"message-cleaner","children":"Message cleaner"}]
+9:["$","p",null,{"children":["The optional component, running in the background, responsible for validating and removing, the expired messages. The whole segment will be removed, when all the messages in this segment are expired. If the ",["$","code",null,{"children":"enabled"}]," is set to false, the message cleaner will be disabled, meaning that even if the ",["$","code",null,{"children":"message_expiry"}]," is set, the expired messages will not be removed."]}]
+a:["$","$L2",null,{"as":"h3","id":"segment","children":"Segment"}]
+b:["$","p",null,{"children":["The ",["$","code",null,{"children":"message_expiry"}]," option in the ",["$","code",null,{"children":"segment"}]," section of the configuration file specifies the number of seconds after which the message will be marked as expired - this is the default value that will be applied to all the topics, unless overridden when creating the topic via API. If the ",["$","code",null,{"children":"message_expiry"}]," is set to 0, then the message expiry is disabled."]}]
+c:["$","$L2",null,{"as":"h2","id":"commands","children":"Commands"}]
+28:T1068,<svg viewBox="0 0 24 24"><path d="M23.8346 11.7033l-1.0073-.6236a13.7268 13.7268 0 00-.0283-.2936l.8656-.8069a.3483.3483 0 00-.1154-.578l-1.1066-.414a8.4958 8.4958 0 00-.087-.2856l.6904-.9587a.3462.3462 0 00-.2257-.5446l-1.1663-.1894a9.3574 9.3574 0 00-.1407-.2622l.49-1.0761a.3437.3437 0 00-.0274-.3361.3486.3486 0 00-.3006-.154l-1.1845.0416a6.7444 6.7444 0 00-.1873-.2268l.2723-1.153a.3472.3472 0 00-.417-.4172l-1.1532.2724a14.0183 14.0183 0 00-.2278-.1873l.0415-1.1845a.3442.3442  [...]
+e:["$","p",null,{"children":["The ",["$","code",null,{"children":"message_expiry"}]," field has been added to the ",["$","code",null,{"children":"CreateTopic"}]," command, which allows overriding the default value set in the configuration file. If the ",["$","code",null,{"children":"message_expiry"}]," is set to None (serialized as 0 value on the binary level), then the message expiry is disabled."]}]
+2a:T1068,<svg viewBox="0 0 24 24"><path d="M23.8346 11.7033l-1.0073-.6236a13.7268 13.7268 0 00-.0283-.2936l.8656-.8069a.3483.3483 0 00-.1154-.578l-1.1066-.414a8.4958 8.4958 0 00-.087-.2856l.6904-.9587a.3462.3462 0 00-.2257-.5446l-1.1663-.1894a9.3574 9.3574 0 00-.1407-.2622l.49-1.0761a.3437.3437 0 00-.0274-.3361.3486.3486 0 00-.3006-.154l-1.1845.0416a6.7444 6.7444 0 00-.1873-.2268l.2723-1.153a.3472.3472 0 00-.417-.4172l-1.1532.2724a14.0183 14.0183 0 00-.2278-.1873l.0415-1.1845a.3442.3442  [...]
+10:["$","p",null,{"children":["Additionally, the ",["$","code",null,{"children":"name_length"}]," field has been added to the binary serialization of the ",["$","code",null,{"children":"CreateTopic"}]," and ",["$","code",null,{"children":"CreateStream"}]," commands, which allows specifying the length of the name - it should be serialized as ",["$","code",null,{"children":"u8"}]," value, before the actual name, with a maximum length of 255 characters."]}]
+11:["$","p",null,{"children":["The following ",["$","strong",null,{"children":"regex"}]," is used to validate the topic and stream names: ",["$","code",null,{"children":"^[\\w\\.\\-\\s]+$"}],". The name will always be lowercased, and the whitespace will be trimmed and then replaced with the ",["$","code",null,{"children":"."}]," character. The following rule applies to all the resources that contain the name field."]}]
+12:["$","p",null,{"children":["Also, the ",["$","code",null,{"children":"Topic"}]," and ",["$","code",null,{"children":"TopicDetails"}]," returned when fetching the topic(s), have been extended with the ",["$","code",null,{"children":"message_expiry"}]," field, and the ",["$","code",null,{"children":"name_length"}]," has changed value from ",["$","code",null,{"children":"u32 to "}],"u8` (1 byte instead of 4 bytes)."]}]
+13:["$","p",null,{"children":"Serialization:"}]
+14:["$","$L26",null,{"className":"shiki shiki-themes github-light github-dark","style":{"--shiki-light":"#24292e","--shiki-dark":"#e1e4e8","--shiki-light-bg":"#fff","--shiki-dark-bg":"#24292e"},"tabIndex":"0","icon":"<svg viewBox=\"0 0 24 24\"><path d=\"M 6,1 C 4.354992,1 3,2.354992 3,4 v 16 c 0,1.645008 1.354992,3 3,3 h 12 c 1.645008,0 3,-1.354992 3,-3 V 8 7 A 1.0001,1.0001 0 0 0 20.707031,6.2929687 l -5,-5 A 1.0001,1.0001 0 0 0 15,1 h -1 z m 0,2 h 7 v 3 c 0,1.645008 1.354992,3 3,3 h 3  [...]
+15:["$","p",null,{"children":["The same changes (",["$","code",null,{"children":"name_length"}],") apply to the ",["$","code",null,{"children":"Stream"}]," and ",["$","code",null,{"children":"StreamDetails"}]," structs."]}]
+16:["$","$L26",null,{"className":"shiki shiki-themes github-light github-dark","style":{"--shiki-light":"#24292e","--shiki-dark":"#e1e4e8","--shiki-light-bg":"#fff","--shiki-dark-bg":"#24292e"},"tabIndex":"0","icon":"<svg viewBox=\"0 0 24 24\"><path d=\"M 6,1 C 4.354992,1 3,2.354992 3,4 v 16 c 0,1.645008 1.354992,3 3,3 h 12 c 1.645008,0 3,-1.354992 3,-3 V 8 7 A 1.0001,1.0001 0 0 0 20.707031,6.2929687 l -5,-5 A 1.0001,1.0001 0 0 0 15,1 h -1 z m 0,2 h 7 v 3 c 0,1.645008 1.354992,3 3,3 h 3  [...]
+17:["$","footer",null,{"className":"mt-16 border-t border-fd-border pt-8","children":["$","$L2c",null,{"href":"/blogs","className":"inline-flex items-center gap-2 text-sm font-medium text-fd-primary transition-colors hover:opacity-80","children":"← Back to all posts"}]}]
+18:["$","script","script-0",{"src":"/_next/static/chunks/1k39uva2a578s.js","async":true}]
+19:["$","script","script-1",{"src":"/_next/static/chunks/23ktdyx90z0v3.js","async":true}]
+1a:["$","$L2d",null,{"children":["$","$2e",null,{"name":"Next.MetadataOutlet","children":"$@2f"}]}]
+1d:["$","$1","h",{"children":[null,["$","$L30",null,{"children":[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]}],["$","div",null,{"hidden":true,"children":["$","$L31",null,{"children":["$","$2e",null,{"name":"Next.Metadata","children":[["$","title","0",{"children":"Message expiry | Apache Iggy"}],["$","link","1",{"rel":"canonical","href":"https://iggy.apache.org/blogs/2023/08/27/message-expiry/"}],["$","link","2 [...]
+1f:["$","$1","c",{"children":[null,["$","$L33",null,{"parallelRouterKey":"children","template":["$","$L34",null,{}]}]]}]
+22:["$","$1","c",{"children":[null,["$","$L33",null,{"parallelRouterKey":"children","template":["$","$L34",null,{}]}]]}]
+25:true
+29:["$","$L27",null,{"children":["$","code",null,{"children":[["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"pub"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":" struct"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" CreateTopic"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4 [...]
+2b:["$","$L27",null,{"children":["$","code",null,{"children":[["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"fn"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" as_bytes"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"("}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"chil [...]
+2f:null
+1c:300
+35:["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"."}]
+36:["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"put_u32_le"}]
+37:["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"("}]
+38:["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":"self"}]
+39:["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"."}]
+3a:["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"topic_id);"}]
+3b:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"    bytes"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"."}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"put_u32_le"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"("}],["$","span",null,{"style":{"--shiki-lig [...]
+3c:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"    match"}],["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":" self"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"."}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"message_expiry {"}]]}]
+3d:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"        Some"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"(message_expiry) "}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"=>"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":" bytes"}],["$","span",null,{"styl [...]
+3e:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"        None"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":" =>"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":" bytes"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"."}],["$","span",null,{"style":{"--shiki-li [...]
+3f:["$","span",null,{"className":"line","children":["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"    }"}]}]
+40:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"    bytes"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"."}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"put_u8"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"("}],["$","span",null,{"style":{"--shiki-light": [...]
+41:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"    bytes"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"."}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"extend"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"("}],["$","span",null,{"style":{"--shiki-light": [...]
+42:["$","span",null,{"className":"line","children":["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"    bytes"}]}]
+43:["$","span",null,{"className":"line","children":["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"}"}]}]
+1c:C
+24:0
+1e:"$undefined"
+20:"$undefined"
+23:"$undefined"
+1b:"$undefined"
diff --git a/blogs/2023/08/27/message-expiry/__next.!KHNpdGUp.txt b/blogs/2023/08/27/message-expiry/__next.!KHNpdGUp.txt
new file mode 100644
index 000000000..940e917aa
--- /dev/null
+++ b/blogs/2023/08/27/message-expiry/__next.!KHNpdGUp.txt
@@ -0,0 +1,30 @@
+1:"$Sreact.fragment"
+2:I[22016,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],""]
+3:I[5014,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],"default"]
+4:I[64345,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js"],"HomeLayout"]
+5:I[88760,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js"],"Logo"]
+6:I[15269,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js"],"CommunityDropdown"]
+7:I[15269,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js"],"communityLinks"]
+8:I[29966,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js"],"ASFDropdown"]
+9:I[36330,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js"],"ASFMobileLinks"]
+a:I[39756,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"default"]
+b:I[37457,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"default"]
+14:X
+0:{"buildId":"CEAllZE6ERPzzxzpa_n8G","data":[{"rsc":["$","$1","c",{"children":[[["$","script","script-0",{"src":"/_next/static/chunks/241-fa32f9zay.js","async":true}],["$","script","script-1",{"src":"/_next/static/chunks/3x8y3fmtn6lnc.js","async":true}],["$","script","script-2",{"src":"/_next/static/chunks/250gopd52txql.js","async":true}],["$","script","script-3",{"src":"/_next/static/chunks/0n3fueko2xquo.js","async":true}]],[["$","div",null,{"className":"relative border-b border-white/[ [...]
+c:["$","$L2","/",{"href":"/","className":"transition-colors hover:text-fd-primary","children":"Home"}]
+d:["$","$L2","/docs",{"href":"/docs","className":"transition-colors hover:text-fd-primary","children":"Documentation"}]
+e:["$","$L2","/blogs",{"href":"/blogs","className":"transition-colors hover:text-fd-primary","children":"Blog"}]
+f:["$","$L2","/downloads",{"href":"/downloads","className":"transition-colors hover:text-fd-primary","children":"Downloads"}]
+10:["$","$L2","/community",{"href":"/community","className":"transition-colors hover:text-fd-primary","children":"Community"}]
+11:["$","p",null,{"className":"mt-6 max-w-md text-xs text-fd-muted-foreground","children":["Every page on this site is listed in"," ",["$","a",null,{"href":"/sitemap.xml","className":"underline hover:text-fd-primary","children":"/sitemap.xml"}],", and"," ",["$","a",null,{"href":"/llms.txt","className":"underline hover:text-fd-primary","children":"/llms.txt"}]," ","summarises the documentation."]}]
+12:["$","footer",null,{"className":"border-t border-fd-border bg-fd-background px-6 py-14 md:px-12","children":["$","div",null,{"className":"mx-auto max-w-6xl","children":[["$","div",null,{"className":"grid gap-10 sm:grid-cols-2 lg:grid-cols-4","children":[["$","div","Docs",{"children":[["$","h2",null,{"className":"mb-4 text-sm font-semibold uppercase tracking-wide text-fd-primary","children":"Docs"}],["$","ul",null,{"className":"space-y-2.5 text-sm","children":[["$","li","/docs",{"child [...]
+16:true
+17:["$","$L2",null,{"href":"https://www.apache.org/foundation/contributing.html","target":"_blank","rel":"noopener noreferrer","className":"text-fd-muted-foreground transition-colors hover:text-fd-foreground","children":"Donate"}]
+18:["$","li","https://www.apache.org/foundation/sponsorship.html",{"children":["$","$L2",null,{"href":"https://www.apache.org/foundation/sponsorship.html","target":"_blank","rel":"noopener noreferrer","className":"text-fd-muted-foreground transition-colors hover:text-fd-foreground","children":"Sponsors"}]}]
+19:["$","li","https://www.apache.org/security/",{"children":["$","$L2",null,{"href":"https://www.apache.org/security/","target":"_blank","rel":"noopener noreferrer","className":"text-fd-muted-foreground transition-colors hover:text-fd-foreground","children":"Security"}]}]
+1a:["$","li","https://privacy.apache.org/policies/privacy-policy-public.html",{"children":["$","$L2",null,{"href":"https://privacy.apache.org/policies/privacy-policy-public.html","target":"_blank","rel":"noopener noreferrer","className":"text-fd-muted-foreground transition-colors hover:text-fd-foreground","children":"Privacy"}]}]
+1b:["$","div",null,{"className":"mt-12 border-t border-fd-border pt-8 text-xs leading-relaxed text-fd-muted-foreground/70","children":[["$","p",null,{"className":"mt-4","children":["Copyright © ",2026," The Apache Software Foundation, Licensed under the Apache License, Version 2.0."]}],["$","p",null,{"className":"mt-4","children":"Apache Iggy, Iggy, Apache, and the Apache Iggy logo are trademarks or registered trademarks of The Apache Software Foundation. All other marks mentioned may be [...]
+14:300
+14:C
+15:0
+13:"$undefined"
diff --git a/blogs/2023/08/27/message-expiry/__next._full.txt b/blogs/2023/08/27/message-expiry/__next._full.txt
new file mode 100644
index 000000000..7de7bcba6
--- /dev/null
+++ b/blogs/2023/08/27/message-expiry/__next._full.txt
@@ -0,0 +1,93 @@
+1:"$Sreact.fragment"
+3:I[17751,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"RootProvider"]
+4:I[39756,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"default"]
+5:I[58298,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/3-_96y-evozm0.js"],"default"]
+6:I[37457,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"default"]
+7:I[22016,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],""]
+12:I[68027,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"default",1]
+:HL["/_next/static/chunks/1_55v0vlfews3.css","style"]
+2:T512,{"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://iggy.apache.org/#organization","name":"The Apache Software Foundation","url":"https://www.apache.org/","logo":"https://iggy.apache.org/img/asf_logo.svg","contactPoint":{"@type":"ContactPoint","contactType":"technical support","email":"dev@iggy.apache.org","url":"https://iggy.apache.org/community/"}},{"@type":"WebSite","@id":"https://iggy.apache.org/#website","name":"Apache Iggy","url":"https://iggy.a [...]
+0:{"P":null,"c":["","blogs","2023","08","27","message-expiry",""],"q":"","i":false,"f":[[["",{"children":["(site)",{"children":["blogs",{"children":[["slug","2023/08/27/message-expiry","c",[]],{"children":["__PAGE__",{},"$undefined","$undefined",4608]},"$undefined","$undefined",4608]},"$undefined","$undefined",4608]},"$undefined","$undefined",4608]},"$undefined","$undefined",4624],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/1_55v0vlfews3. [...]
+14:I[79520,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],""]
+15:I[69877,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"Matomo"]
+16:I[5014,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],"default"]
+17:I[64345,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js"],"HomeLayout"]
+18:I[88760,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js"],"Logo"]
+19:I[15269,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js"],"CommunityDropdown"]
+1a:I[15269,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js"],"communityLinks"]
+1b:I[29966,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js"],"ASFDropdown"]
+1c:I[36330,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js"],"ASFMobileLinks"]
+25:I[97367,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"OutletBoundary"]
+26:"$Sreact.suspense"
+28:I[97367,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"ViewportBoundary"]
+2a:I[97367,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"MetadataBoundary"]
+8:["$","$L7","/community",{"href":"/community","className":"transition-colors hover:text-fd-primary","children":"Community"}]
+9:["$","p",null,{"className":"mt-6 max-w-md text-xs text-fd-muted-foreground","children":["Every page on this site is listed in"," ",["$","a",null,{"href":"/sitemap.xml","className":"underline hover:text-fd-primary","children":"/sitemap.xml"}],", and"," ",["$","a",null,{"href":"/llms.txt","className":"underline hover:text-fd-primary","children":"/llms.txt"}]," ","summarises the documentation."]}]
+a:["$","$L14",null,{"id":"matomo","strategy":"afterInteractive","children":"var _paq = window._paq = window._paq || [];\n_paq.push([\"setDoNotTrack\", true]);\n_paq.push([\"disableCookies\"]);\n_paq.push(['trackPageView']);\n_paq.push(['enableLinkTracking']);\n(function() {\n  var u=\"https://analytics.apache.org/\";\n  _paq.push(['setTrackerUrl', u+'matomo.php']);\n  _paq.push(['setSiteId', '80']);\n  var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];\n  [...]
+b:["$","$L15",null,{}]
+c:["$","$1","c",{"children":[[["$","script","script-0",{"src":"/_next/static/chunks/241-fa32f9zay.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/_next/static/chunks/3x8y3fmtn6lnc.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/_next/static/chunks/250gopd52txql.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/_next/static/chunks/0n3fueko2xquo.js","async":true,"nonce":"$undefined"}]],[["$","div",null,{"className" [...]
+d:["$","$1","c",{"children":[null,["$","$L4",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}]
+e:["$","$1","c",{"children":[null,["$","$L4",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}]
+f:["$","$1","c",{"children":["$L24",[["$","script","script-0",{"src":"/_next/static/chunks/1k39uva2a578s.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/_next/static/chunks/23ktdyx90z0v3.js","async":true,"nonce":"$undefined"}]],["$","$L25",null,{"children":["$","$26",null,{"name":"Next.MetadataOutlet","children":"$@27"}]}]]}]
+11:["$","$1","h",{"children":[null,["$","$L28",null,{"children":"$L29"}],["$","div",null,{"hidden":true,"children":["$","$L2a",null,{"children":["$","$26",null,{"name":"Next.Metadata","children":"$L2b"}]}]}],null]}]
+13:["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/1_55v0vlfews3.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]
+10:C
+1d:["$","$L7","/",{"href":"/","className":"transition-colors hover:text-fd-primary","children":"Home"}]
+1e:["$","$L7","/docs",{"href":"/docs","className":"transition-colors hover:text-fd-primary","children":"Documentation"}]
+1f:["$","$L7","/blogs",{"href":"/blogs","className":"transition-colors hover:text-fd-primary","children":"Blog"}]
+20:["$","$L7","/downloads",{"href":"/downloads","className":"transition-colors hover:text-fd-primary","children":"Downloads"}]
+21:["$","$L7","/community",{"href":"/community","className":"transition-colors hover:text-fd-primary","children":"Community"}]
+22:["$","p",null,{"className":"mt-6 max-w-md text-xs text-fd-muted-foreground","children":["Every page on this site is listed in"," ",["$","a",null,{"href":"/sitemap.xml","className":"underline hover:text-fd-primary","children":"/sitemap.xml"}],", and"," ",["$","a",null,{"href":"/llms.txt","className":"underline hover:text-fd-primary","children":"/llms.txt"}]," ","summarises the documentation."]}]
+23:["$","footer",null,{"className":"border-t border-fd-border bg-fd-background px-6 py-14 md:px-12","children":["$","div",null,{"className":"mx-auto max-w-6xl","children":[["$","div",null,{"className":"grid gap-10 sm:grid-cols-2 lg:grid-cols-4","children":[["$","div","Docs",{"children":[["$","h2",null,{"className":"mb-4 text-sm font-semibold uppercase tracking-wide text-fd-primary","children":"Docs"}],["$","ul",null,{"className":"space-y-2.5 text-sm","children":[["$","li","/docs",{"child [...]
+2c:["$","li","https://www.apache.org/foundation/contributing.html",{"children":["$","$L7",null,{"href":"https://www.apache.org/foundation/contributing.html","target":"_blank","rel":"noopener noreferrer","className":"text-fd-muted-foreground transition-colors hover:text-fd-foreground","children":"Donate"}]}]
+2d:["$","li","https://www.apache.org/foundation/sponsorship.html",{"children":["$","$L7",null,{"href":"https://www.apache.org/foundation/sponsorship.html","target":"_blank","rel":"noopener noreferrer","className":"text-fd-muted-foreground transition-colors hover:text-fd-foreground","children":"Sponsors"}]}]
+2e:["$","li","https://www.apache.org/security/",{"children":["$","$L7",null,{"href":"https://www.apache.org/security/","target":"_blank","rel":"noopener noreferrer","className":"text-fd-muted-foreground transition-colors hover:text-fd-foreground","children":"Security"}]}]
+2f:["$","li","https://privacy.apache.org/policies/privacy-policy-public.html",{"children":["$","$L7",null,{"href":"https://privacy.apache.org/policies/privacy-policy-public.html","target":"_blank","rel":"noopener noreferrer","className":"text-fd-muted-foreground transition-colors hover:text-fd-foreground","children":"Privacy"}]}]
+30:["$","div",null,{"className":"mt-12 border-t border-fd-border pt-8 text-xs leading-relaxed text-fd-muted-foreground/70","children":[["$","p",null,{"className":"mt-4","children":["Copyright © ",2026," The Apache Software Foundation, Licensed under the Apache License, Version 2.0."]}],["$","p",null,{"className":"mt-4","children":"Apache Iggy, Iggy, Apache, and the Apache Iggy logo are trademarks or registered trademarks of The Apache Software Foundation. All other marks mentioned may be [...]
+31:I[94157,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],"Heading"]
+32:I[47873,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],"default"]
+:HL["/img/authors/piotr.png","image"]
+24:["$","main",null,{"className":"min-h-screen px-6 py-16 md:px-12","children":["$","article",null,{"className":"mx-auto max-w-5xl","children":[["$","header",null,{"className":"mb-10","children":[["$","time",null,{"className":"text-sm font-medium text-fd-muted-foreground","children":"August 27, 2023"}],["$","h1",null,{"className":"mt-3 text-3xl font-extrabold tracking-tight text-fd-foreground md:text-5xl","children":"Message expiry"}],["$","div",null,{"className":"mt-6 flex flex-wrap gap [...]
+47:I[44324,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],"CodeBlock"]
+48:I[44324,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],"Pre"]
+33:["$","code",null,{"children":"size_bytes"}]
+34:["$","p",null,{"children":["Setting the ",["$","code",null,{"children":"message_expiry"}]," to 0 disables the message expiry feature, meaning that the data will be kept forever, unless deleted manually."]}]
+35:["$","$L31",null,{"as":"h2","id":"configuration","children":"Configuration"}]
+36:["$","$L47",null,{"className":"shiki shiki-themes github-light github-dark","style":{"--shiki-light":"#24292e","--shiki-dark":"#e1e4e8","--shiki-light-bg":"#fff","--shiki-dark-bg":"#24292e"},"tabIndex":"0","icon":"<svg viewBox=\"0 0 24 24\"><path d=\"M 6,1 C 4.354992,1 3,2.354992 3,4 v 16 c 0,1.645008 1.354992,3 3,3 h 12 c 1.645008,0 3,-1.354992 3,-3 V 8 7 A 1.0001,1.0001 0 0 0 20.707031,6.2929687 l -5,-5 A 1.0001,1.0001 0 0 0 15,1 h -1 z m 0,2 h 7 v 3 c 0,1.645008 1.354992,3 3,3 h 3  [...]
+37:["$","$L31",null,{"as":"h3","id":"message-cleaner","children":"Message cleaner"}]
+38:["$","p",null,{"children":["The optional component, running in the background, responsible for validating and removing, the expired messages. The whole segment will be removed, when all the messages in this segment are expired. If the ",["$","code",null,{"children":"enabled"}]," is set to false, the message cleaner will be disabled, meaning that even if the ",["$","code",null,{"children":"message_expiry"}]," is set, the expired messages will not be removed."]}]
+39:["$","$L31",null,{"as":"h3","id":"segment","children":"Segment"}]
+3a:["$","p",null,{"children":["The ",["$","code",null,{"children":"message_expiry"}]," option in the ",["$","code",null,{"children":"segment"}]," section of the configuration file specifies the number of seconds after which the message will be marked as expired - this is the default value that will be applied to all the topics, unless overridden when creating the topic via API. If the ",["$","code",null,{"children":"message_expiry"}]," is set to 0, then the message expiry is disabled."]}]
+3b:["$","$L31",null,{"as":"h2","id":"commands","children":"Commands"}]
+49:T1068,<svg viewBox="0 0 24 24"><path d="M23.8346 11.7033l-1.0073-.6236a13.7268 13.7268 0 00-.0283-.2936l.8656-.8069a.3483.3483 0 00-.1154-.578l-1.1066-.414a8.4958 8.4958 0 00-.087-.2856l.6904-.9587a.3462.3462 0 00-.2257-.5446l-1.1663-.1894a9.3574 9.3574 0 00-.1407-.2622l.49-1.0761a.3437.3437 0 00-.0274-.3361.3486.3486 0 00-.3006-.154l-1.1845.0416a6.7444 6.7444 0 00-.1873-.2268l.2723-1.153a.3472.3472 0 00-.417-.4172l-1.1532.2724a14.0183 14.0183 0 00-.2278-.1873l.0415-1.1845a.3442.3442  [...]
+3d:["$","p",null,{"children":["The ",["$","code",null,{"children":"message_expiry"}]," field has been added to the ",["$","code",null,{"children":"CreateTopic"}]," command, which allows overriding the default value set in the configuration file. If the ",["$","code",null,{"children":"message_expiry"}]," is set to None (serialized as 0 value on the binary level), then the message expiry is disabled."]}]
+4b:T1068,<svg viewBox="0 0 24 24"><path d="M23.8346 11.7033l-1.0073-.6236a13.7268 13.7268 0 00-.0283-.2936l.8656-.8069a.3483.3483 0 00-.1154-.578l-1.1066-.414a8.4958 8.4958 0 00-.087-.2856l.6904-.9587a.3462.3462 0 00-.2257-.5446l-1.1663-.1894a9.3574 9.3574 0 00-.1407-.2622l.49-1.0761a.3437.3437 0 00-.0274-.3361.3486.3486 0 00-.3006-.154l-1.1845.0416a6.7444 6.7444 0 00-.1873-.2268l.2723-1.153a.3472.3472 0 00-.417-.4172l-1.1532.2724a14.0183 14.0183 0 00-.2278-.1873l.0415-1.1845a.3442.3442  [...]
+3f:["$","p",null,{"children":["Additionally, the ",["$","code",null,{"children":"name_length"}]," field has been added to the binary serialization of the ",["$","code",null,{"children":"CreateTopic"}]," and ",["$","code",null,{"children":"CreateStream"}]," commands, which allows specifying the length of the name - it should be serialized as ",["$","code",null,{"children":"u8"}]," value, before the actual name, with a maximum length of 255 characters."]}]
+40:["$","p",null,{"children":["The following ",["$","strong",null,{"children":"regex"}]," is used to validate the topic and stream names: ",["$","code",null,{"children":"^[\\w\\.\\-\\s]+$"}],". The name will always be lowercased, and the whitespace will be trimmed and then replaced with the ",["$","code",null,{"children":"."}]," character. The following rule applies to all the resources that contain the name field."]}]
+41:["$","p",null,{"children":["Also, the ",["$","code",null,{"children":"Topic"}]," and ",["$","code",null,{"children":"TopicDetails"}]," returned when fetching the topic(s), have been extended with the ",["$","code",null,{"children":"message_expiry"}]," field, and the ",["$","code",null,{"children":"name_length"}]," has changed value from ",["$","code",null,{"children":"u32 to "}],"u8` (1 byte instead of 4 bytes)."]}]
+42:["$","p",null,{"children":"Serialization:"}]
+43:["$","$L47",null,{"className":"shiki shiki-themes github-light github-dark","style":{"--shiki-light":"#24292e","--shiki-dark":"#e1e4e8","--shiki-light-bg":"#fff","--shiki-dark-bg":"#24292e"},"tabIndex":"0","icon":"<svg viewBox=\"0 0 24 24\"><path d=\"M 6,1 C 4.354992,1 3,2.354992 3,4 v 16 c 0,1.645008 1.354992,3 3,3 h 12 c 1.645008,0 3,-1.354992 3,-3 V 8 7 A 1.0001,1.0001 0 0 0 20.707031,6.2929687 l -5,-5 A 1.0001,1.0001 0 0 0 15,1 h -1 z m 0,2 h 7 v 3 c 0,1.645008 1.354992,3 3,3 h 3  [...]
+44:["$","p",null,{"children":["The same changes (",["$","code",null,{"children":"name_length"}],") apply to the ",["$","code",null,{"children":"Stream"}]," and ",["$","code",null,{"children":"StreamDetails"}]," structs."]}]
+45:["$","$L47",null,{"className":"shiki shiki-themes github-light github-dark","style":{"--shiki-light":"#24292e","--shiki-dark":"#e1e4e8","--shiki-light-bg":"#fff","--shiki-dark-bg":"#24292e"},"tabIndex":"0","icon":"<svg viewBox=\"0 0 24 24\"><path d=\"M 6,1 C 4.354992,1 3,2.354992 3,4 v 16 c 0,1.645008 1.354992,3 3,3 h 12 c 1.645008,0 3,-1.354992 3,-3 V 8 7 A 1.0001,1.0001 0 0 0 20.707031,6.2929687 l -5,-5 A 1.0001,1.0001 0 0 0 15,1 h -1 z m 0,2 h 7 v 3 c 0,1.645008 1.354992,3 3,3 h 3  [...]
+46:["$","footer",null,{"className":"mt-16 border-t border-fd-border pt-8","children":["$","$L7",null,{"href":"/blogs","className":"inline-flex items-center gap-2 text-sm font-medium text-fd-primary transition-colors hover:opacity-80","children":"← Back to all posts"}]}]
+4a:["$","$L48",null,{"children":["$","code",null,{"children":[["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"pub"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":" struct"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" CreateTopic"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4 [...]
+4c:["$","$L48",null,{"children":["$","code",null,{"children":[["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"fn"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" as_bytes"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"("}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"chil [...]
+4d:["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"."}]
+4e:["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"put_u32_le"}]
+4f:["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"("}]
+50:["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":"self"}]
+51:["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"."}]
+52:["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"topic_id);"}]
+53:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"    bytes"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"."}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"put_u32_le"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"("}],["$","span",null,{"style":{"--shiki-lig [...]
+54:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"    match"}],["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":" self"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"."}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"message_expiry {"}]]}]
+55:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"        Some"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"(message_expiry) "}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"=>"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":" bytes"}],["$","span",null,{"styl [...]
+56:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"        None"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":" =>"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":" bytes"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"."}],["$","span",null,{"style":{"--shiki-li [...]
+57:["$","span",null,{"className":"line","children":["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"    }"}]}]
+58:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"    bytes"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"."}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"put_u8"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"("}],["$","span",null,{"style":{"--shiki-light": [...]
+59:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"    bytes"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"."}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"extend"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"("}],["$","span",null,{"style":{"--shiki-light": [...]
+5a:["$","span",null,{"className":"line","children":["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"    bytes"}]}]
+5b:["$","span",null,{"className":"line","children":["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"}"}]}]
+29:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]
+5c:I[27201,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"IconMark"]
+27:null
+2b:[["$","title","0",{"children":"Message expiry | Apache Iggy"}],["$","link","1",{"rel":"canonical","href":"https://iggy.apache.org/blogs/2023/08/27/message-expiry/"}],["$","link","2",{"rel":"alternate","type":"text/markdown","href":"https://iggy.apache.org/blogs/2023/08/27/message-expiry.md"}],["$","meta","3",{"property":"og:title","content":"Message expiry | Apache Iggy"}],["$","meta","4",{"property":"og:url","content":"https://iggy.apache.org/blogs/2023/08/27/message-expiry/"}],["$", [...]
diff --git a/blogs/2023/08/27/message-expiry/__next._index.txt b/blogs/2023/08/27/message-expiry/__next._index.txt
new file mode 100644
index 000000000..42b058136
--- /dev/null
+++ b/blogs/2023/08/27/message-expiry/__next._index.txt
@@ -0,0 +1,20 @@
+1:"$Sreact.fragment"
+3:I[17751,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"RootProvider"]
+4:I[39756,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"default"]
+5:I[58298,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/3-_96y-evozm0.js"],"default"]
+6:I[37457,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"default"]
+7:I[22016,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],""]
+:HL["/_next/static/chunks/1_55v0vlfews3.css","style"]
+2:T512,{"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://iggy.apache.org/#organization","name":"The Apache Software Foundation","url":"https://www.apache.org/","logo":"https://iggy.apache.org/img/asf_logo.svg","contactPoint":{"@type":"ContactPoint","contactType":"technical support","email":"dev@iggy.apache.org","url":"https://iggy.apache.org/community/"}},{"@type":"WebSite","@id":"https://iggy.apache.org/#website","name":"Apache Iggy","url":"https://iggy.a [...]
+0:{"buildId":"CEAllZE6ERPzzxzpa_n8G","data":[{"rsc":["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/1_55v0vlfews3.css","precedence":"next"}],["$","script","script-0",{"src":"/_next/static/chunks/05hk4ely-lns6.js","async":true}],["$","script","script-1",{"src":"/_next/static/chunks/2tvyahbdutabx.js","async":true}]],["$","html",null,{"lang":"en","suppressHydrationWarning":true,"children":["$","body",null,{"className":"flex min-h-screen flex-col  [...]
+10:I[79520,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],""]
+11:I[69877,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"Matomo"]
+8:["$","a",null,{"href":"/sitemap.xml","className":"underline hover:text-fd-primary","children":"/sitemap.xml"}]
+9:["$","a",null,{"href":"/llms.txt","className":"underline hover:text-fd-primary","children":"/llms.txt"}]
+a:["$","$L10",null,{"id":"matomo","strategy":"afterInteractive","children":"var _paq = window._paq = window._paq || [];\n_paq.push([\"setDoNotTrack\", true]);\n_paq.push([\"disableCookies\"]);\n_paq.push(['trackPageView']);\n_paq.push(['enableLinkTracking']);\n(function() {\n  var u=\"https://analytics.apache.org/\";\n  _paq.push(['setTrackerUrl', u+'matomo.php']);\n  _paq.push(['setSiteId', '80']);\n  var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];\n  [...]
+b:["$","$L11",null,{}]
+d:300
+f:true
+d:C
+e:0
+c:"$undefined"
diff --git a/blogs/2023/08/27/message-expiry/__next._tree.txt b/blogs/2023/08/27/message-expiry/__next._tree.txt
new file mode 100644
index 000000000..0c32391b8
--- /dev/null
+++ b/blogs/2023/08/27/message-expiry/__next._tree.txt
@@ -0,0 +1,3 @@
+:HL["/_next/static/chunks/1_55v0vlfews3.css","style"]
+:HL["/img/authors/piotr.png","image"]
+0:{"tree":{"name":"","param":null,"prefetchHints":4112,"slots":{"children":{"name":"(site)","param":null,"prefetchHints":4096,"slots":{"children":{"name":"blogs","param":null,"prefetchHints":4160,"slots":{"children":{"name":"slug","param":{"type":"c","key":"2023/08/27/message-expiry","siblings":[]},"prefetchHints":4192,"slots":{"children":{"name":"__PAGE__","param":null,"prefetchHints":4256,"slots":null}}}}}}}}},"staleTime":300,"buildId":"CEAllZE6ERPzzxzpa_n8G"}
diff --git a/blogs/2023/08/27/message-expiry/index.html b/blogs/2023/08/27/message-expiry/index.html
new file mode 100644
index 000000000..47d119415
--- /dev/null
+++ b/blogs/2023/08/27/message-expiry/index.html
@@ -0,0 +1,50 @@
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" href="/img/authors/piotr.png" as="image"/><link rel="stylesheet" href="/_next/static/chunks/1_55v0vlfews3.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/1qt6pht_u0de1.js"/><script src="/_next/static/chunks/1iye7dwhtxrnu.js" async=""></script><script src="/_next/static/chunks/1t7fq8 [...]
+<h2 id="breaking-changes" class="group/heading flex scroll-m-28 flex-row items-center gap-1"><a data-card="" href="#breaking-changes">Breaking changes</a><button aria-label="Copy Anchor Link" class="inline-flex items-center justify-center rounded-md text-sm font-medium duration-100 disabled:pointer-events-none disabled:opacity-50 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-fd-ring hover:bg-fd-accent hover:text-fd-accent-foreground p-1 [&amp;_svg]:size-4 not-prose s [...]
+<p>No breaking changes have been introduced with this feature. The only breaking changes are related to the updated <code>CreateTopic</code>, <code>CreateStream</code> commands and <code>Stream</code> + <code>Topic</code> responses, which have been introduced in the latest commit <a href="https://github.com/apache/iggy/commit/ea3bf9c16dd5f93e1c80c140e9e1d14cfa70f570" rel="noreferrer noopener" target="_blank">#ea3bf9c</a>. The available <a href="https://crates.io/crates/iggy" rel="norefer [...]
+<h2 id="introduction" class="group/heading flex scroll-m-28 flex-row items-center gap-1"><a data-card="" href="#introduction">Introduction</a><button aria-label="Copy Anchor Link" class="inline-flex items-center justify-center rounded-md text-sm font-medium duration-100 disabled:pointer-events-none disabled:opacity-50 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-fd-ring hover:bg-fd-accent hover:text-fd-accent-foreground p-1 [&amp;_svg]:size-4 not-prose shrink-0 text [...]
+<p>The expiration policy is defined per topic, and it&#x27;s being set when creating the topic. The value can be either provided via server configuration file, or via <code>CreateTopic</code> command. If the expiration is set in the configuration, it will be used as a default value for all the topics, unless when explicitly set when creating the topic via available <code>message_expiry</code> field.</p>
+<p>The expiration policy is defined as <code>u32</code> value, which is the number of seconds after which the message should be marked as expired.</p>
+<p>For example, the value of 604800 represents 1 week (60 * 60 * 24 * 7) - after this time, the messages will be marked as expired, and the whole segment will be deleted, as long as all the messages in this segment are expired.</p>
+<p>If there are still some messages which are not expired, the segment will be kept on the disk. By default, the new segment is automatically created when the previous one is full - either, it has reached the maximum size (defined by <code>size_bytes</code> property) or the currently stored messages have been expired, based on the current server timestamp and configured expiry value.</p>
+<p>Setting the <code>message_expiry</code> to 0 disables the message expiry feature, meaning that the data will be kept forever, unless deleted manually.</p>
+<h2 id="configuration" class="group/heading flex scroll-m-28 flex-row items-center gap-1"><a data-card="" href="#configuration">Configuration</a><button aria-label="Copy Anchor Link" class="inline-flex items-center justify-center rounded-md text-sm font-medium duration-100 disabled:pointer-events-none disabled:opacity-50 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-fd-ring hover:bg-fd-accent hover:text-fd-accent-foreground p-1 [&amp;_svg]:size-4 not-prose shrink-0 t [...]
+<figure dir="ltr" class="my-4 bg-fd-card rounded-xl shiki relative border shadow-sm not-prose overflow-hidden text-sm shiki shiki-themes github-light github-dark" style="--shiki-light:#24292e;--shiki-dark:#e1e4e8;--shiki-light-bg:#fff;--shiki-dark-bg:#24292e" tabindex="-1"><div class="empty:hidden absolute top-3 right-2 z-2 backdrop-blur-lg rounded-lg text-fd-muted-foreground"><button type="button" class="inline-flex items-center justify-center rounded-md text-sm font-medium transition-c [...]
+<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">enabled = </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">true</span></span>
+<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">interval = </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">60</span></span>
+<span class="line"></span>
+<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">[</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">system</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">segment</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">]</span></span>
+<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">message_expiry = </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">0</span></span></code></pre></div></figure>
+<h3 id="message-cleaner" class="group/heading flex scroll-m-28 flex-row items-center gap-1"><a data-card="" href="#message-cleaner">Message cleaner</a><button aria-label="Copy Anchor Link" class="inline-flex items-center justify-center rounded-md text-sm font-medium duration-100 disabled:pointer-events-none disabled:opacity-50 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-fd-ring hover:bg-fd-accent hover:text-fd-accent-foreground p-1 [&amp;_svg]:size-4 not-prose shri [...]
+<p>The optional component, running in the background, responsible for validating and removing, the expired messages. The whole segment will be removed, when all the messages in this segment are expired. If the <code>enabled</code> is set to false, the message cleaner will be disabled, meaning that even if the <code>message_expiry</code> is set, the expired messages will not be removed.</p>
+<h3 id="segment" class="group/heading flex scroll-m-28 flex-row items-center gap-1"><a data-card="" href="#segment">Segment</a><button aria-label="Copy Anchor Link" class="inline-flex items-center justify-center rounded-md text-sm font-medium duration-100 disabled:pointer-events-none disabled:opacity-50 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-fd-ring hover:bg-fd-accent hover:text-fd-accent-foreground p-1 [&amp;_svg]:size-4 not-prose shrink-0 text-fd-muted-foreg [...]
+<p>The <code>message_expiry</code> option in the <code>segment</code> section of the configuration file specifies the number of seconds after which the message will be marked as expired - this is the default value that will be applied to all the topics, unless overridden when creating the topic via API. If the <code>message_expiry</code> is set to 0, then the message expiry is disabled.</p>
+<h2 id="commands" class="group/heading flex scroll-m-28 flex-row items-center gap-1"><a data-card="" href="#commands">Commands</a><button aria-label="Copy Anchor Link" class="inline-flex items-center justify-center rounded-md text-sm font-medium duration-100 disabled:pointer-events-none disabled:opacity-50 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-fd-ring hover:bg-fd-accent hover:text-fd-accent-foreground p-1 [&amp;_svg]:size-4 not-prose shrink-0 text-fd-muted-fo [...]
+<figure dir="ltr" class="my-4 bg-fd-card rounded-xl shiki relative border shadow-sm not-prose overflow-hidden text-sm shiki shiki-themes github-light github-dark" style="--shiki-light:#24292e;--shiki-dark:#e1e4e8;--shiki-light-bg:#fff;--shiki-dark-bg:#24292e" tabindex="-1"><div class="empty:hidden absolute top-3 right-2 z-2 backdrop-blur-lg rounded-lg text-fd-muted-foreground"><button type="button" class="inline-flex items-center justify-center rounded-md text-sm font-medium transition-c [...]
+<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    pub</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> stream_id</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">:</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> Identifier</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
+<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    pub</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> topic_id</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">:</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> u32</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
+<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    pub</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> partitions_count</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">:</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> u32</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
+<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    pub</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> message_expiry</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">:</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> Option</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">&lt;</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">u32</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E [...]
+<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    pub</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> name</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">:</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> String</span></span>
+<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">}</span></span></code></pre></div></figure>
+<p>The <code>message_expiry</code> field has been added to the <code>CreateTopic</code> command, which allows overriding the default value set in the configuration file. If the <code>message_expiry</code> is set to None (serialized as 0 value on the binary level), then the message expiry is disabled.</p>
+<figure dir="ltr" class="my-4 bg-fd-card rounded-xl shiki relative border shadow-sm not-prose overflow-hidden text-sm shiki shiki-themes github-light github-dark" style="--shiki-light:#24292e;--shiki-dark:#e1e4e8;--shiki-light-bg:#fff;--shiki-dark-bg:#24292e" tabindex="-1"><div class="empty:hidden absolute top-3 right-2 z-2 backdrop-blur-lg rounded-lg text-fd-muted-foreground"><button type="button" class="inline-flex items-center justify-center rounded-md text-sm font-medium transition-c [...]
+<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    let</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> stream_id_bytes </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">=</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> self</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">.</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">stream_id</span><span style="--shiki-light:#D73A49;--shiki-dark:# [...]
+<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    let</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583"> mut</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> bytes </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">=</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> Vec</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">::</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">with_ca [...]
+<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">    bytes</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">extend</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(stream_id_bytes);</span></span>
+<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">    bytes</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">put_u32_le</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">self</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">.</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">topic_ [...]
+<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">    bytes</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">put_u32_le</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">self</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">.</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">partit [...]
+<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    match</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> self</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">.</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">message_expiry {</span></span>
+<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">        Some</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(message_expiry) </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">=&gt;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> bytes</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">put_u32_le</span><span style="--shiki-light:#24292E;--s [...]
+<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">        None</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583"> =&gt;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> bytes</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">put_u32_le</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8 [...]
+<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">    }</span></span>
+<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">    bytes</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">put_u8</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">self</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">.</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">name</span [...]
+<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">    bytes</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">extend</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">self</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">.</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">name</span [...]
+<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">    bytes</span></span>
+<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">}</span></span></code></pre></div></figure>
+<p>Additionally, the <code>name_length</code> field has been added to the binary serialization of the <code>CreateTopic</code> and <code>CreateStream</code> commands, which allows specifying the length of the name - it should be serialized as <code>u8</code> value, before the actual name, with a maximum length of 255 characters.</p>
+<p>The following <strong>regex</strong> is used to validate the topic and stream names: <code>^[\w\.\-\s]+$</code>. The name will always be lowercased, and the whitespace will be trimmed and then replaced with the <code>.</code> character. The following rule applies to all the resources that contain the name field.</p>
+<p>Also, the <code>Topic</code> and <code>TopicDetails</code> returned when fetching the topic(s), have been extended with the <code>message_expiry</code> field, and the <code>name_length</code> has changed value from <code>u32 to </code>u8` (1 byte instead of 4 bytes).</p>
+<p>Serialization:</p>
+<figure dir="ltr" class="my-4 bg-fd-card rounded-xl shiki relative border shadow-sm not-prose overflow-hidden text-sm shiki shiki-themes github-light github-dark" style="--shiki-light:#24292e;--shiki-dark:#e1e4e8;--shiki-light-bg:#fff;--shiki-dark-bg:#24292e" tabindex="-1"><div class="empty:hidden absolute top-3 right-2 z-2 backdrop-blur-lg rounded-lg text-fd-muted-foreground"><button type="button" class="inline-flex items-center justify-center rounded-md text-sm font-medium transition-c [...]
+<p>The same changes (<code>name_length</code>) apply to the <code>Stream</code> and <code>StreamDetails</code> structs.</p>
+<figure dir="ltr" class="my-4 bg-fd-card rounded-xl shiki relative border shadow-sm not-prose overflow-hidden text-sm shiki shiki-themes github-light github-dark" style="--shiki-light:#24292e;--shiki-dark:#e1e4e8;--shiki-light-bg:#fff;--shiki-dark-bg:#24292e" tabindex="-1"><div class="empty:hidden absolute top-3 right-2 z-2 backdrop-blur-lg rounded-lg text-fd-muted-foreground"><button type="button" class="inline-flex items-center justify-center rounded-md text-sm font-medium transition-c [...]
\ No newline at end of file
diff --git a/blogs/2023/08/27/message-expiry/index.txt b/blogs/2023/08/27/message-expiry/index.txt
new file mode 100644
index 000000000..7de7bcba6
--- /dev/null
+++ b/blogs/2023/08/27/message-expiry/index.txt
@@ -0,0 +1,93 @@
+1:"$Sreact.fragment"
+3:I[17751,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"RootProvider"]
+4:I[39756,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"default"]
+5:I[58298,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/3-_96y-evozm0.js"],"default"]
+6:I[37457,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"default"]
+7:I[22016,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],""]
+12:I[68027,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"default",1]
+:HL["/_next/static/chunks/1_55v0vlfews3.css","style"]
+2:T512,{"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://iggy.apache.org/#organization","name":"The Apache Software Foundation","url":"https://www.apache.org/","logo":"https://iggy.apache.org/img/asf_logo.svg","contactPoint":{"@type":"ContactPoint","contactType":"technical support","email":"dev@iggy.apache.org","url":"https://iggy.apache.org/community/"}},{"@type":"WebSite","@id":"https://iggy.apache.org/#website","name":"Apache Iggy","url":"https://iggy.a [...]
+0:{"P":null,"c":["","blogs","2023","08","27","message-expiry",""],"q":"","i":false,"f":[[["",{"children":["(site)",{"children":["blogs",{"children":[["slug","2023/08/27/message-expiry","c",[]],{"children":["__PAGE__",{},"$undefined","$undefined",4608]},"$undefined","$undefined",4608]},"$undefined","$undefined",4608]},"$undefined","$undefined",4608]},"$undefined","$undefined",4624],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/1_55v0vlfews3. [...]
+14:I[79520,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],""]
+15:I[69877,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"Matomo"]
+16:I[5014,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],"default"]
+17:I[64345,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js"],"HomeLayout"]
+18:I[88760,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js"],"Logo"]
+19:I[15269,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js"],"CommunityDropdown"]
+1a:I[15269,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js"],"communityLinks"]
+1b:I[29966,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js"],"ASFDropdown"]
+1c:I[36330,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js"],"ASFMobileLinks"]
+25:I[97367,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"OutletBoundary"]
+26:"$Sreact.suspense"
+28:I[97367,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"ViewportBoundary"]
+2a:I[97367,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"MetadataBoundary"]
+8:["$","$L7","/community",{"href":"/community","className":"transition-colors hover:text-fd-primary","children":"Community"}]
+9:["$","p",null,{"className":"mt-6 max-w-md text-xs text-fd-muted-foreground","children":["Every page on this site is listed in"," ",["$","a",null,{"href":"/sitemap.xml","className":"underline hover:text-fd-primary","children":"/sitemap.xml"}],", and"," ",["$","a",null,{"href":"/llms.txt","className":"underline hover:text-fd-primary","children":"/llms.txt"}]," ","summarises the documentation."]}]
+a:["$","$L14",null,{"id":"matomo","strategy":"afterInteractive","children":"var _paq = window._paq = window._paq || [];\n_paq.push([\"setDoNotTrack\", true]);\n_paq.push([\"disableCookies\"]);\n_paq.push(['trackPageView']);\n_paq.push(['enableLinkTracking']);\n(function() {\n  var u=\"https://analytics.apache.org/\";\n  _paq.push(['setTrackerUrl', u+'matomo.php']);\n  _paq.push(['setSiteId', '80']);\n  var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];\n  [...]
+b:["$","$L15",null,{}]
+c:["$","$1","c",{"children":[[["$","script","script-0",{"src":"/_next/static/chunks/241-fa32f9zay.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/_next/static/chunks/3x8y3fmtn6lnc.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/_next/static/chunks/250gopd52txql.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/_next/static/chunks/0n3fueko2xquo.js","async":true,"nonce":"$undefined"}]],[["$","div",null,{"className" [...]
+d:["$","$1","c",{"children":[null,["$","$L4",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}]
+e:["$","$1","c",{"children":[null,["$","$L4",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}]
+f:["$","$1","c",{"children":["$L24",[["$","script","script-0",{"src":"/_next/static/chunks/1k39uva2a578s.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/_next/static/chunks/23ktdyx90z0v3.js","async":true,"nonce":"$undefined"}]],["$","$L25",null,{"children":["$","$26",null,{"name":"Next.MetadataOutlet","children":"$@27"}]}]]}]
+11:["$","$1","h",{"children":[null,["$","$L28",null,{"children":"$L29"}],["$","div",null,{"hidden":true,"children":["$","$L2a",null,{"children":["$","$26",null,{"name":"Next.Metadata","children":"$L2b"}]}]}],null]}]
+13:["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/1_55v0vlfews3.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]
+10:C
+1d:["$","$L7","/",{"href":"/","className":"transition-colors hover:text-fd-primary","children":"Home"}]
+1e:["$","$L7","/docs",{"href":"/docs","className":"transition-colors hover:text-fd-primary","children":"Documentation"}]
+1f:["$","$L7","/blogs",{"href":"/blogs","className":"transition-colors hover:text-fd-primary","children":"Blog"}]
+20:["$","$L7","/downloads",{"href":"/downloads","className":"transition-colors hover:text-fd-primary","children":"Downloads"}]
+21:["$","$L7","/community",{"href":"/community","className":"transition-colors hover:text-fd-primary","children":"Community"}]
+22:["$","p",null,{"className":"mt-6 max-w-md text-xs text-fd-muted-foreground","children":["Every page on this site is listed in"," ",["$","a",null,{"href":"/sitemap.xml","className":"underline hover:text-fd-primary","children":"/sitemap.xml"}],", and"," ",["$","a",null,{"href":"/llms.txt","className":"underline hover:text-fd-primary","children":"/llms.txt"}]," ","summarises the documentation."]}]
+23:["$","footer",null,{"className":"border-t border-fd-border bg-fd-background px-6 py-14 md:px-12","children":["$","div",null,{"className":"mx-auto max-w-6xl","children":[["$","div",null,{"className":"grid gap-10 sm:grid-cols-2 lg:grid-cols-4","children":[["$","div","Docs",{"children":[["$","h2",null,{"className":"mb-4 text-sm font-semibold uppercase tracking-wide text-fd-primary","children":"Docs"}],["$","ul",null,{"className":"space-y-2.5 text-sm","children":[["$","li","/docs",{"child [...]
+2c:["$","li","https://www.apache.org/foundation/contributing.html",{"children":["$","$L7",null,{"href":"https://www.apache.org/foundation/contributing.html","target":"_blank","rel":"noopener noreferrer","className":"text-fd-muted-foreground transition-colors hover:text-fd-foreground","children":"Donate"}]}]
+2d:["$","li","https://www.apache.org/foundation/sponsorship.html",{"children":["$","$L7",null,{"href":"https://www.apache.org/foundation/sponsorship.html","target":"_blank","rel":"noopener noreferrer","className":"text-fd-muted-foreground transition-colors hover:text-fd-foreground","children":"Sponsors"}]}]
+2e:["$","li","https://www.apache.org/security/",{"children":["$","$L7",null,{"href":"https://www.apache.org/security/","target":"_blank","rel":"noopener noreferrer","className":"text-fd-muted-foreground transition-colors hover:text-fd-foreground","children":"Security"}]}]
+2f:["$","li","https://privacy.apache.org/policies/privacy-policy-public.html",{"children":["$","$L7",null,{"href":"https://privacy.apache.org/policies/privacy-policy-public.html","target":"_blank","rel":"noopener noreferrer","className":"text-fd-muted-foreground transition-colors hover:text-fd-foreground","children":"Privacy"}]}]
+30:["$","div",null,{"className":"mt-12 border-t border-fd-border pt-8 text-xs leading-relaxed text-fd-muted-foreground/70","children":[["$","p",null,{"className":"mt-4","children":["Copyright © ",2026," The Apache Software Foundation, Licensed under the Apache License, Version 2.0."]}],["$","p",null,{"className":"mt-4","children":"Apache Iggy, Iggy, Apache, and the Apache Iggy logo are trademarks or registered trademarks of The Apache Software Foundation. All other marks mentioned may be [...]
+31:I[94157,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],"Heading"]
+32:I[47873,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],"default"]
+:HL["/img/authors/piotr.png","image"]
+24:["$","main",null,{"className":"min-h-screen px-6 py-16 md:px-12","children":["$","article",null,{"className":"mx-auto max-w-5xl","children":[["$","header",null,{"className":"mb-10","children":[["$","time",null,{"className":"text-sm font-medium text-fd-muted-foreground","children":"August 27, 2023"}],["$","h1",null,{"className":"mt-3 text-3xl font-extrabold tracking-tight text-fd-foreground md:text-5xl","children":"Message expiry"}],["$","div",null,{"className":"mt-6 flex flex-wrap gap [...]
+47:I[44324,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],"CodeBlock"]
+48:I[44324,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],"Pre"]
+33:["$","code",null,{"children":"size_bytes"}]
+34:["$","p",null,{"children":["Setting the ",["$","code",null,{"children":"message_expiry"}]," to 0 disables the message expiry feature, meaning that the data will be kept forever, unless deleted manually."]}]
+35:["$","$L31",null,{"as":"h2","id":"configuration","children":"Configuration"}]
+36:["$","$L47",null,{"className":"shiki shiki-themes github-light github-dark","style":{"--shiki-light":"#24292e","--shiki-dark":"#e1e4e8","--shiki-light-bg":"#fff","--shiki-dark-bg":"#24292e"},"tabIndex":"0","icon":"<svg viewBox=\"0 0 24 24\"><path d=\"M 6,1 C 4.354992,1 3,2.354992 3,4 v 16 c 0,1.645008 1.354992,3 3,3 h 12 c 1.645008,0 3,-1.354992 3,-3 V 8 7 A 1.0001,1.0001 0 0 0 20.707031,6.2929687 l -5,-5 A 1.0001,1.0001 0 0 0 15,1 h -1 z m 0,2 h 7 v 3 c 0,1.645008 1.354992,3 3,3 h 3  [...]
+37:["$","$L31",null,{"as":"h3","id":"message-cleaner","children":"Message cleaner"}]
+38:["$","p",null,{"children":["The optional component, running in the background, responsible for validating and removing, the expired messages. The whole segment will be removed, when all the messages in this segment are expired. If the ",["$","code",null,{"children":"enabled"}]," is set to false, the message cleaner will be disabled, meaning that even if the ",["$","code",null,{"children":"message_expiry"}]," is set, the expired messages will not be removed."]}]
+39:["$","$L31",null,{"as":"h3","id":"segment","children":"Segment"}]
+3a:["$","p",null,{"children":["The ",["$","code",null,{"children":"message_expiry"}]," option in the ",["$","code",null,{"children":"segment"}]," section of the configuration file specifies the number of seconds after which the message will be marked as expired - this is the default value that will be applied to all the topics, unless overridden when creating the topic via API. If the ",["$","code",null,{"children":"message_expiry"}]," is set to 0, then the message expiry is disabled."]}]
+3b:["$","$L31",null,{"as":"h2","id":"commands","children":"Commands"}]
+49:T1068,<svg viewBox="0 0 24 24"><path d="M23.8346 11.7033l-1.0073-.6236a13.7268 13.7268 0 00-.0283-.2936l.8656-.8069a.3483.3483 0 00-.1154-.578l-1.1066-.414a8.4958 8.4958 0 00-.087-.2856l.6904-.9587a.3462.3462 0 00-.2257-.5446l-1.1663-.1894a9.3574 9.3574 0 00-.1407-.2622l.49-1.0761a.3437.3437 0 00-.0274-.3361.3486.3486 0 00-.3006-.154l-1.1845.0416a6.7444 6.7444 0 00-.1873-.2268l.2723-1.153a.3472.3472 0 00-.417-.4172l-1.1532.2724a14.0183 14.0183 0 00-.2278-.1873l.0415-1.1845a.3442.3442  [...]
+3d:["$","p",null,{"children":["The ",["$","code",null,{"children":"message_expiry"}]," field has been added to the ",["$","code",null,{"children":"CreateTopic"}]," command, which allows overriding the default value set in the configuration file. If the ",["$","code",null,{"children":"message_expiry"}]," is set to None (serialized as 0 value on the binary level), then the message expiry is disabled."]}]
+4b:T1068,<svg viewBox="0 0 24 24"><path d="M23.8346 11.7033l-1.0073-.6236a13.7268 13.7268 0 00-.0283-.2936l.8656-.8069a.3483.3483 0 00-.1154-.578l-1.1066-.414a8.4958 8.4958 0 00-.087-.2856l.6904-.9587a.3462.3462 0 00-.2257-.5446l-1.1663-.1894a9.3574 9.3574 0 00-.1407-.2622l.49-1.0761a.3437.3437 0 00-.0274-.3361.3486.3486 0 00-.3006-.154l-1.1845.0416a6.7444 6.7444 0 00-.1873-.2268l.2723-1.153a.3472.3472 0 00-.417-.4172l-1.1532.2724a14.0183 14.0183 0 00-.2278-.1873l.0415-1.1845a.3442.3442  [...]
+3f:["$","p",null,{"children":["Additionally, the ",["$","code",null,{"children":"name_length"}]," field has been added to the binary serialization of the ",["$","code",null,{"children":"CreateTopic"}]," and ",["$","code",null,{"children":"CreateStream"}]," commands, which allows specifying the length of the name - it should be serialized as ",["$","code",null,{"children":"u8"}]," value, before the actual name, with a maximum length of 255 characters."]}]
+40:["$","p",null,{"children":["The following ",["$","strong",null,{"children":"regex"}]," is used to validate the topic and stream names: ",["$","code",null,{"children":"^[\\w\\.\\-\\s]+$"}],". The name will always be lowercased, and the whitespace will be trimmed and then replaced with the ",["$","code",null,{"children":"."}]," character. The following rule applies to all the resources that contain the name field."]}]
+41:["$","p",null,{"children":["Also, the ",["$","code",null,{"children":"Topic"}]," and ",["$","code",null,{"children":"TopicDetails"}]," returned when fetching the topic(s), have been extended with the ",["$","code",null,{"children":"message_expiry"}]," field, and the ",["$","code",null,{"children":"name_length"}]," has changed value from ",["$","code",null,{"children":"u32 to "}],"u8` (1 byte instead of 4 bytes)."]}]
+42:["$","p",null,{"children":"Serialization:"}]
+43:["$","$L47",null,{"className":"shiki shiki-themes github-light github-dark","style":{"--shiki-light":"#24292e","--shiki-dark":"#e1e4e8","--shiki-light-bg":"#fff","--shiki-dark-bg":"#24292e"},"tabIndex":"0","icon":"<svg viewBox=\"0 0 24 24\"><path d=\"M 6,1 C 4.354992,1 3,2.354992 3,4 v 16 c 0,1.645008 1.354992,3 3,3 h 12 c 1.645008,0 3,-1.354992 3,-3 V 8 7 A 1.0001,1.0001 0 0 0 20.707031,6.2929687 l -5,-5 A 1.0001,1.0001 0 0 0 15,1 h -1 z m 0,2 h 7 v 3 c 0,1.645008 1.354992,3 3,3 h 3  [...]
+44:["$","p",null,{"children":["The same changes (",["$","code",null,{"children":"name_length"}],") apply to the ",["$","code",null,{"children":"Stream"}]," and ",["$","code",null,{"children":"StreamDetails"}]," structs."]}]
+45:["$","$L47",null,{"className":"shiki shiki-themes github-light github-dark","style":{"--shiki-light":"#24292e","--shiki-dark":"#e1e4e8","--shiki-light-bg":"#fff","--shiki-dark-bg":"#24292e"},"tabIndex":"0","icon":"<svg viewBox=\"0 0 24 24\"><path d=\"M 6,1 C 4.354992,1 3,2.354992 3,4 v 16 c 0,1.645008 1.354992,3 3,3 h 12 c 1.645008,0 3,-1.354992 3,-3 V 8 7 A 1.0001,1.0001 0 0 0 20.707031,6.2929687 l -5,-5 A 1.0001,1.0001 0 0 0 15,1 h -1 z m 0,2 h 7 v 3 c 0,1.645008 1.354992,3 3,3 h 3  [...]
+46:["$","footer",null,{"className":"mt-16 border-t border-fd-border pt-8","children":["$","$L7",null,{"href":"/blogs","className":"inline-flex items-center gap-2 text-sm font-medium text-fd-primary transition-colors hover:opacity-80","children":"← Back to all posts"}]}]
+4a:["$","$L48",null,{"children":["$","code",null,{"children":[["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"pub"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":" struct"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" CreateTopic"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4 [...]
+4c:["$","$L48",null,{"children":["$","code",null,{"children":[["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"fn"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" as_bytes"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"("}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"chil [...]
+4d:["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"."}]
+4e:["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"put_u32_le"}]
+4f:["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"("}]
+50:["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":"self"}]
+51:["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"."}]
+52:["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"topic_id);"}]
+53:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"    bytes"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"."}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"put_u32_le"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"("}],["$","span",null,{"style":{"--shiki-lig [...]
+54:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"    match"}],["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":" self"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"."}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"message_expiry {"}]]}]
+55:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"        Some"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"(message_expiry) "}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"=>"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":" bytes"}],["$","span",null,{"styl [...]
+56:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"        None"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":" =>"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":" bytes"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"."}],["$","span",null,{"style":{"--shiki-li [...]
+57:["$","span",null,{"className":"line","children":["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"    }"}]}]
+58:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"    bytes"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"."}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"put_u8"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"("}],["$","span",null,{"style":{"--shiki-light": [...]
+59:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"    bytes"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"."}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"extend"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"("}],["$","span",null,{"style":{"--shiki-light": [...]
+5a:["$","span",null,{"className":"line","children":["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"    bytes"}]}]
+5b:["$","span",null,{"className":"line","children":["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"}"}]}]
+29:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]
+5c:I[27201,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"IconMark"]
+27:null
+2b:[["$","title","0",{"children":"Message expiry | Apache Iggy"}],["$","link","1",{"rel":"canonical","href":"https://iggy.apache.org/blogs/2023/08/27/message-expiry/"}],["$","link","2",{"rel":"alternate","type":"text/markdown","href":"https://iggy.apache.org/blogs/2023/08/27/message-expiry.md"}],["$","meta","3",{"property":"og:title","content":"Message expiry | Apache Iggy"}],["$","meta","4",{"property":"og:url","content":"https://iggy.apache.org/blogs/2023/08/27/message-expiry/"}],["$", [...]
diff --git a/blogs/2023/08/31/updated-schemas.md b/blogs/2023/08/31/updated-schemas.md
new file mode 100644
index 000000000..72fc7b519
--- /dev/null
+++ b/blogs/2023/08/31/updated-schemas.md
@@ -0,0 +1,56 @@
+# Updated schemas
+
+Published: 2023-08-31
+
+Rendered page: https://iggy.apache.org/blogs/2023/08/31/updated-schemas/
+
+Source: https://github.com/apache/iggy-website/blob/main/content/blog/updated-schemas.mdx
+
+The latest update introduces the changes to the `PollMessages` and `GetConsumerOffset` commands response schema, as well as the `Stream`, `Topic` and `Partition` structs extended with `created_at` field.
+
+
+## Breaking changes
+
+Breaking changes have been introduced with the commit [#670a8ba](https://github.com/apache/iggy/commit/670a8baba8617bb7e52bd51d556a621349e2e9f0). The available [iggy crate](https://crates.io/crates/iggy) supports these changes since version 0.0.60.
+
+## PollMessages
+
+By default, the `PollMessages` used to return `Vec<Message>` as a response, which has been changed to `PolledMessages` struct, that contains the `partition_id`, `current_offset` and `messages` field. The reason for this change was to provide more information about the current offset, and the partition from which the messages have been fetched - this might be especially useful when using the consumer groups feature, where the partition is calculated on the server-side.
+
+```rust
+pub struct PolledMessages {
+    pub partition_id: u32,
+    pub current_offset: u64,
+    pub messages: Vec<Message>,
+}
+```
+
+Serialization:
+
+```
+Partition ID (4 bytes) + Current offset (8 bytes) + Messages count (4 bytes) + Messages (N bytes)
+```
+
+## GetConsumerOffset
+
+Previously, the `GetConsumerOffset` command used to return `u64` as a response, which has been changed to `ConsumerOffsetInfo` struct, that contains the `partition_id`, `current_offset` and `stored_offset` field. Similar to the `PollMessages` response update, the additional data might be helpful when using the consumer groups feature.
+
+```rust
+pub struct ConsumerOffsetInfo {
+    pub partition_id: u32,
+    pub current_offset: u64,
+    pub stored_offset: u64,
+}
+```
+
+Serialization:
+
+```
+Partition ID (4 bytes) + Current offset (8 bytes) + Stored offset (8 bytes)
+```
+
+## Stream, Topic, Partition
+
+The `Stream`, `Topic` and `Partition` structs (along with the additional `Details` models when fetching the single object, not a list) have been extended with the `created_at` field, which contains the timestamp of the creation time (EPOCH in microseconds).
+
+The `created_at` field which is `u64` (8 bytes) is always serialized right after the `id` field, and then the remaining fields follow.
diff --git a/blogs/2023/08/31/updated-schemas/__next.!KHNpdGUp.blogs.$c$slug.__PAGE__.txt b/blogs/2023/08/31/updated-schemas/__next.!KHNpdGUp.blogs.$c$slug.__PAGE__.txt
new file mode 100644
index 000000000..c45a34b18
--- /dev/null
+++ b/blogs/2023/08/31/updated-schemas/__next.!KHNpdGUp.blogs.$c$slug.__PAGE__.txt
@@ -0,0 +1,46 @@
+1:"$Sreact.fragment"
+2:I[94157,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],"Heading"]
+3:I[47873,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],"default"]
+4:I[44324,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],"CodeBlock"]
+:HL["/img/authors/piotr.png","image"]
+5:T1068,<svg viewBox="0 0 24 24"><path d="M23.8346 11.7033l-1.0073-.6236a13.7268 13.7268 0 00-.0283-.2936l.8656-.8069a.3483.3483 0 00-.1154-.578l-1.1066-.414a8.4958 8.4958 0 00-.087-.2856l.6904-.9587a.3462.3462 0 00-.2257-.5446l-1.1663-.1894a9.3574 9.3574 0 00-.1407-.2622l.49-1.0761a.3437.3437 0 00-.0274-.3361.3486.3486 0 00-.3006-.154l-1.1845.0416a6.7444 6.7444 0 00-.1873-.2268l.2723-1.153a.3472.3472 0 00-.417-.4172l-1.1532.2724a14.0183 14.0183 0 00-.2278-.1873l.0415-1.1845a.3442.3442 0 [...]
+1b:X
+1b:C
+0:{"buildId":"CEAllZE6ERPzzxzpa_n8G","data":[{"rsc":["$","$1","c",{"children":[["$","main",null,{"className":"min-h-screen px-6 py-16 md:px-12","children":["$","article",null,{"className":"mx-auto max-w-5xl","children":[["$","header",null,{"className":"mb-10","children":[["$","time",null,{"className":"text-sm font-medium text-fd-muted-foreground","children":"August 31, 2023"}],["$","h1",null,{"className":"mt-3 text-3xl font-extrabold tracking-tight text-fd-foreground md:text-5xl","childr [...]
+20:I[44324,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],"Pre"]
+23:I[22016,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],""]
+24:I[97367,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"OutletBoundary"]
+25:"$Sreact.suspense"
+27:I[97367,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"ViewportBoundary"]
+28:I[97367,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"MetadataBoundary"]
+29:I[27201,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"IconMark"]
+2a:I[39756,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"default"]
+2b:I[37457,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"default"]
+6:["$","$L20",null,{"children":["$","code",null,{"children":[["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"pub"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":" struct"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" PolledMessages"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1 [...]
+7:["$","p",null,{"children":"Serialization:"}]
+8:["$","$L4",null,{"className":"shiki shiki-themes github-light github-dark","style":{"--shiki-light":"#24292e","--shiki-dark":"#e1e4e8","--shiki-light-bg":"#fff","--shiki-dark-bg":"#24292e"},"tabIndex":"0","icon":"<svg viewBox=\"0 0 24 24\"><path d=\"M 6,1 C 4.354992,1 3,2.354992 3,4 v 16 c 0,1.645008 1.354992,3 3,3 h 12 c 1.645008,0 3,-1.354992 3,-3 V 8 7 A 1.0001,1.0001 0 0 0 20.707031,6.2929687 l -5,-5 A 1.0001,1.0001 0 0 0 15,1 h -1 z m 0,2 h 7 v 3 c 0,1.645008 1.354992,3 3,3 h 3 v  [...]
+9:["$","$L2",null,{"as":"h2","id":"getconsumeroffset","children":"GetConsumerOffset"}]
+a:["$","p",null,{"children":["Previously, the ",["$","code",null,{"children":"GetConsumerOffset"}]," command used to return ",["$","code",null,{"children":"u64"}]," as a response, which has been changed to ",["$","code",null,{"children":"ConsumerOffsetInfo"}]," struct, that contains the ",["$","code",null,{"children":"partition_id"}],", ",["$","code",null,{"children":"current_offset"}]," and ",["$","code",null,{"children":"stored_offset"}]," field. Similar to the ",["$","code",null,{"chi [...]
+21:T1068,<svg viewBox="0 0 24 24"><path d="M23.8346 11.7033l-1.0073-.6236a13.7268 13.7268 0 00-.0283-.2936l.8656-.8069a.3483.3483 0 00-.1154-.578l-1.1066-.414a8.4958 8.4958 0 00-.087-.2856l.6904-.9587a.3462.3462 0 00-.2257-.5446l-1.1663-.1894a9.3574 9.3574 0 00-.1407-.2622l.49-1.0761a.3437.3437 0 00-.0274-.3361.3486.3486 0 00-.3006-.154l-1.1845.0416a6.7444 6.7444 0 00-.1873-.2268l.2723-1.153a.3472.3472 0 00-.417-.4172l-1.1532.2724a14.0183 14.0183 0 00-.2278-.1873l.0415-1.1845a.3442.3442  [...]
+c:["$","p",null,{"children":"Serialization:"}]
+d:["$","$L4",null,{"className":"shiki shiki-themes github-light github-dark","style":{"--shiki-light":"#24292e","--shiki-dark":"#e1e4e8","--shiki-light-bg":"#fff","--shiki-dark-bg":"#24292e"},"tabIndex":"0","icon":"<svg viewBox=\"0 0 24 24\"><path d=\"M 6,1 C 4.354992,1 3,2.354992 3,4 v 16 c 0,1.645008 1.354992,3 3,3 h 12 c 1.645008,0 3,-1.354992 3,-3 V 8 7 A 1.0001,1.0001 0 0 0 20.707031,6.2929687 l -5,-5 A 1.0001,1.0001 0 0 0 15,1 h -1 z m 0,2 h 7 v 3 c 0,1.645008 1.354992,3 3,3 h 3 v  [...]
+e:["$","$L2",null,{"as":"h2","id":"stream-topic-partition","children":"Stream, Topic, Partition"}]
+f:["$","p",null,{"children":["The ",["$","code",null,{"children":"Stream"}],", ",["$","code",null,{"children":"Topic"}]," and ",["$","code",null,{"children":"Partition"}]," structs (along with the additional ",["$","code",null,{"children":"Details"}]," models when fetching the single object, not a list) have been extended with the ",["$","code",null,{"children":"created_at"}]," field, which contains the timestamp of the creation time (EPOCH in microseconds)."]}]
+10:["$","p",null,{"children":["The ",["$","code",null,{"children":"created_at"}]," field which is ",["$","code",null,{"children":"u64"}]," (8 bytes) is always serialized right after the ",["$","code",null,{"children":"id"}]," field, and then the remaining fields follow."]}]
+11:["$","footer",null,{"className":"mt-16 border-t border-fd-border pt-8","children":["$","$L23",null,{"href":"/blogs","className":"inline-flex items-center gap-2 text-sm font-medium text-fd-primary transition-colors hover:opacity-80","children":"← Back to all posts"}]}]
+12:["$","script","script-0",{"src":"/_next/static/chunks/1k39uva2a578s.js","async":true}]
+13:["$","script","script-1",{"src":"/_next/static/chunks/23ktdyx90z0v3.js","async":true}]
+14:["$","$L24",null,{"children":["$","$25",null,{"name":"Next.MetadataOutlet","children":"$@26"}]}]
+17:["$","$1","h",{"children":[null,["$","$L27",null,{"children":[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]}],["$","div",null,{"hidden":true,"children":["$","$L28",null,{"children":["$","$25",null,{"name":"Next.Metadata","children":[["$","title","0",{"children":"Updated schemas | Apache Iggy"}],["$","link","1",{"rel":"canonical","href":"https://iggy.apache.org/blogs/2023/08/31/updated-schemas/"}],["$","link", [...]
+19:["$","$1","c",{"children":[null,["$","$L2a",null,{"parallelRouterKey":"children","template":["$","$L2b",null,{}]}]]}]
+1c:["$","$1","c",{"children":[null,["$","$L2a",null,{"parallelRouterKey":"children","template":["$","$L2b",null,{}]}]]}]
+1f:true
+22:["$","$L20",null,{"children":["$","code",null,{"children":[["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"pub"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":" struct"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" ConsumerOffsetInfo"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark" [...]
+26:null
+16:300
+16:C
+1e:0
+18:"$undefined"
+1a:"$undefined"
+1d:"$undefined"
+15:"$undefined"
diff --git a/blogs/2023/08/31/updated-schemas/__next.!KHNpdGUp.txt b/blogs/2023/08/31/updated-schemas/__next.!KHNpdGUp.txt
new file mode 100644
index 000000000..940e917aa
--- /dev/null
+++ b/blogs/2023/08/31/updated-schemas/__next.!KHNpdGUp.txt
@@ -0,0 +1,30 @@
+1:"$Sreact.fragment"
+2:I[22016,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],""]
+3:I[5014,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],"default"]
+4:I[64345,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js"],"HomeLayout"]
+5:I[88760,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js"],"Logo"]
+6:I[15269,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js"],"CommunityDropdown"]
+7:I[15269,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js"],"communityLinks"]
+8:I[29966,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js"],"ASFDropdown"]
+9:I[36330,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js"],"ASFMobileLinks"]
+a:I[39756,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"default"]
+b:I[37457,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"default"]
+14:X
+0:{"buildId":"CEAllZE6ERPzzxzpa_n8G","data":[{"rsc":["$","$1","c",{"children":[[["$","script","script-0",{"src":"/_next/static/chunks/241-fa32f9zay.js","async":true}],["$","script","script-1",{"src":"/_next/static/chunks/3x8y3fmtn6lnc.js","async":true}],["$","script","script-2",{"src":"/_next/static/chunks/250gopd52txql.js","async":true}],["$","script","script-3",{"src":"/_next/static/chunks/0n3fueko2xquo.js","async":true}]],[["$","div",null,{"className":"relative border-b border-white/[ [...]
+c:["$","$L2","/",{"href":"/","className":"transition-colors hover:text-fd-primary","children":"Home"}]
+d:["$","$L2","/docs",{"href":"/docs","className":"transition-colors hover:text-fd-primary","children":"Documentation"}]
+e:["$","$L2","/blogs",{"href":"/blogs","className":"transition-colors hover:text-fd-primary","children":"Blog"}]
+f:["$","$L2","/downloads",{"href":"/downloads","className":"transition-colors hover:text-fd-primary","children":"Downloads"}]
+10:["$","$L2","/community",{"href":"/community","className":"transition-colors hover:text-fd-primary","children":"Community"}]
+11:["$","p",null,{"className":"mt-6 max-w-md text-xs text-fd-muted-foreground","children":["Every page on this site is listed in"," ",["$","a",null,{"href":"/sitemap.xml","className":"underline hover:text-fd-primary","children":"/sitemap.xml"}],", and"," ",["$","a",null,{"href":"/llms.txt","className":"underline hover:text-fd-primary","children":"/llms.txt"}]," ","summarises the documentation."]}]
+12:["$","footer",null,{"className":"border-t border-fd-border bg-fd-background px-6 py-14 md:px-12","children":["$","div",null,{"className":"mx-auto max-w-6xl","children":[["$","div",null,{"className":"grid gap-10 sm:grid-cols-2 lg:grid-cols-4","children":[["$","div","Docs",{"children":[["$","h2",null,{"className":"mb-4 text-sm font-semibold uppercase tracking-wide text-fd-primary","children":"Docs"}],["$","ul",null,{"className":"space-y-2.5 text-sm","children":[["$","li","/docs",{"child [...]
+16:true
+17:["$","$L2",null,{"href":"https://www.apache.org/foundation/contributing.html","target":"_blank","rel":"noopener noreferrer","className":"text-fd-muted-foreground transition-colors hover:text-fd-foreground","children":"Donate"}]
+18:["$","li","https://www.apache.org/foundation/sponsorship.html",{"children":["$","$L2",null,{"href":"https://www.apache.org/foundation/sponsorship.html","target":"_blank","rel":"noopener noreferrer","className":"text-fd-muted-foreground transition-colors hover:text-fd-foreground","children":"Sponsors"}]}]
+19:["$","li","https://www.apache.org/security/",{"children":["$","$L2",null,{"href":"https://www.apache.org/security/","target":"_blank","rel":"noopener noreferrer","className":"text-fd-muted-foreground transition-colors hover:text-fd-foreground","children":"Security"}]}]
+1a:["$","li","https://privacy.apache.org/policies/privacy-policy-public.html",{"children":["$","$L2",null,{"href":"https://privacy.apache.org/policies/privacy-policy-public.html","target":"_blank","rel":"noopener noreferrer","className":"text-fd-muted-foreground transition-colors hover:text-fd-foreground","children":"Privacy"}]}]
+1b:["$","div",null,{"className":"mt-12 border-t border-fd-border pt-8 text-xs leading-relaxed text-fd-muted-foreground/70","children":[["$","p",null,{"className":"mt-4","children":["Copyright © ",2026," The Apache Software Foundation, Licensed under the Apache License, Version 2.0."]}],["$","p",null,{"className":"mt-4","children":"Apache Iggy, Iggy, Apache, and the Apache Iggy logo are trademarks or registered trademarks of The Apache Software Foundation. All other marks mentioned may be [...]
+14:300
+14:C
+15:0
+13:"$undefined"
diff --git a/blogs/2023/08/31/updated-schemas/__next._full.txt b/blogs/2023/08/31/updated-schemas/__next._full.txt
new file mode 100644
index 000000000..3c97a94ce
--- /dev/null
+++ b/blogs/2023/08/31/updated-schemas/__next._full.txt
@@ -0,0 +1,69 @@
+1:"$Sreact.fragment"
+3:I[17751,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"RootProvider"]
+4:I[39756,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"default"]
+5:I[58298,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/3-_96y-evozm0.js"],"default"]
+6:I[37457,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"default"]
+7:I[22016,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],""]
+12:I[68027,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"default",1]
+:HL["/_next/static/chunks/1_55v0vlfews3.css","style"]
+2:T512,{"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://iggy.apache.org/#organization","name":"The Apache Software Foundation","url":"https://www.apache.org/","logo":"https://iggy.apache.org/img/asf_logo.svg","contactPoint":{"@type":"ContactPoint","contactType":"technical support","email":"dev@iggy.apache.org","url":"https://iggy.apache.org/community/"}},{"@type":"WebSite","@id":"https://iggy.apache.org/#website","name":"Apache Iggy","url":"https://iggy.a [...]
+0:{"P":null,"c":["","blogs","2023","08","31","updated-schemas",""],"q":"","i":false,"f":[[["",{"children":["(site)",{"children":["blogs",{"children":[["slug","2023/08/31/updated-schemas","c",[]],{"children":["__PAGE__",{},"$undefined","$undefined",4608]},"$undefined","$undefined",4608]},"$undefined","$undefined",4608]},"$undefined","$undefined",4608]},"$undefined","$undefined",4624],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/1_55v0vlfews [...]
+14:I[79520,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],""]
+15:I[69877,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"Matomo"]
+16:I[5014,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],"default"]
+17:I[64345,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js"],"HomeLayout"]
+18:I[88760,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js"],"Logo"]
+19:I[15269,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js"],"CommunityDropdown"]
+1a:I[15269,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js"],"communityLinks"]
+1b:I[29966,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js"],"ASFDropdown"]
+1c:I[36330,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js"],"ASFMobileLinks"]
+25:I[97367,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"OutletBoundary"]
+26:"$Sreact.suspense"
+28:I[97367,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"ViewportBoundary"]
+2a:I[97367,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"MetadataBoundary"]
+8:["$","$L7","/community",{"href":"/community","className":"transition-colors hover:text-fd-primary","children":"Community"}]
+9:["$","p",null,{"className":"mt-6 max-w-md text-xs text-fd-muted-foreground","children":["Every page on this site is listed in"," ",["$","a",null,{"href":"/sitemap.xml","className":"underline hover:text-fd-primary","children":"/sitemap.xml"}],", and"," ",["$","a",null,{"href":"/llms.txt","className":"underline hover:text-fd-primary","children":"/llms.txt"}]," ","summarises the documentation."]}]
+a:["$","$L14",null,{"id":"matomo","strategy":"afterInteractive","children":"var _paq = window._paq = window._paq || [];\n_paq.push([\"setDoNotTrack\", true]);\n_paq.push([\"disableCookies\"]);\n_paq.push(['trackPageView']);\n_paq.push(['enableLinkTracking']);\n(function() {\n  var u=\"https://analytics.apache.org/\";\n  _paq.push(['setTrackerUrl', u+'matomo.php']);\n  _paq.push(['setSiteId', '80']);\n  var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];\n  [...]
+b:["$","$L15",null,{}]
+c:["$","$1","c",{"children":[[["$","script","script-0",{"src":"/_next/static/chunks/241-fa32f9zay.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/_next/static/chunks/3x8y3fmtn6lnc.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/_next/static/chunks/250gopd52txql.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/_next/static/chunks/0n3fueko2xquo.js","async":true,"nonce":"$undefined"}]],[["$","div",null,{"className" [...]
+d:["$","$1","c",{"children":[null,["$","$L4",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}]
+e:["$","$1","c",{"children":[null,["$","$L4",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}]
+f:["$","$1","c",{"children":["$L24",[["$","script","script-0",{"src":"/_next/static/chunks/1k39uva2a578s.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/_next/static/chunks/23ktdyx90z0v3.js","async":true,"nonce":"$undefined"}]],["$","$L25",null,{"children":["$","$26",null,{"name":"Next.MetadataOutlet","children":"$@27"}]}]]}]
+11:["$","$1","h",{"children":[null,["$","$L28",null,{"children":"$L29"}],["$","div",null,{"hidden":true,"children":["$","$L2a",null,{"children":["$","$26",null,{"name":"Next.Metadata","children":"$L2b"}]}]}],null]}]
+13:["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/1_55v0vlfews3.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]
+10:C
+1d:["$","$L7","/",{"href":"/","className":"transition-colors hover:text-fd-primary","children":"Home"}]
+1e:["$","$L7","/docs",{"href":"/docs","className":"transition-colors hover:text-fd-primary","children":"Documentation"}]
+1f:["$","$L7","/blogs",{"href":"/blogs","className":"transition-colors hover:text-fd-primary","children":"Blog"}]
+20:["$","$L7","/downloads",{"href":"/downloads","className":"transition-colors hover:text-fd-primary","children":"Downloads"}]
+21:["$","$L7","/community",{"href":"/community","className":"transition-colors hover:text-fd-primary","children":"Community"}]
+22:["$","p",null,{"className":"mt-6 max-w-md text-xs text-fd-muted-foreground","children":["Every page on this site is listed in"," ",["$","a",null,{"href":"/sitemap.xml","className":"underline hover:text-fd-primary","children":"/sitemap.xml"}],", and"," ",["$","a",null,{"href":"/llms.txt","className":"underline hover:text-fd-primary","children":"/llms.txt"}]," ","summarises the documentation."]}]
+23:["$","footer",null,{"className":"border-t border-fd-border bg-fd-background px-6 py-14 md:px-12","children":["$","div",null,{"className":"mx-auto max-w-6xl","children":[["$","div",null,{"className":"grid gap-10 sm:grid-cols-2 lg:grid-cols-4","children":[["$","div","Docs",{"children":[["$","h2",null,{"className":"mb-4 text-sm font-semibold uppercase tracking-wide text-fd-primary","children":"Docs"}],["$","ul",null,{"className":"space-y-2.5 text-sm","children":[["$","li","/docs",{"child [...]
+2c:["$","li","https://www.apache.org/foundation/contributing.html",{"children":["$","$L7",null,{"href":"https://www.apache.org/foundation/contributing.html","target":"_blank","rel":"noopener noreferrer","className":"text-fd-muted-foreground transition-colors hover:text-fd-foreground","children":"Donate"}]}]
+2d:["$","li","https://www.apache.org/foundation/sponsorship.html",{"children":["$","$L7",null,{"href":"https://www.apache.org/foundation/sponsorship.html","target":"_blank","rel":"noopener noreferrer","className":"text-fd-muted-foreground transition-colors hover:text-fd-foreground","children":"Sponsors"}]}]
+2e:["$","li","https://www.apache.org/security/",{"children":["$","$L7",null,{"href":"https://www.apache.org/security/","target":"_blank","rel":"noopener noreferrer","className":"text-fd-muted-foreground transition-colors hover:text-fd-foreground","children":"Security"}]}]
+2f:["$","li","https://privacy.apache.org/policies/privacy-policy-public.html",{"children":["$","$L7",null,{"href":"https://privacy.apache.org/policies/privacy-policy-public.html","target":"_blank","rel":"noopener noreferrer","className":"text-fd-muted-foreground transition-colors hover:text-fd-foreground","children":"Privacy"}]}]
+30:["$","div",null,{"className":"mt-12 border-t border-fd-border pt-8 text-xs leading-relaxed text-fd-muted-foreground/70","children":[["$","p",null,{"className":"mt-4","children":["Copyright © ",2026," The Apache Software Foundation, Licensed under the Apache License, Version 2.0."]}],["$","p",null,{"className":"mt-4","children":"Apache Iggy, Iggy, Apache, and the Apache Iggy logo are trademarks or registered trademarks of The Apache Software Foundation. All other marks mentioned may be [...]
+31:I[94157,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],"Heading"]
+32:I[47873,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],"default"]
+33:I[44324,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],"CodeBlock"]
+:HL["/img/authors/piotr.png","image"]
+34:T1068,<svg viewBox="0 0 24 24"><path d="M23.8346 11.7033l-1.0073-.6236a13.7268 13.7268 0 00-.0283-.2936l.8656-.8069a.3483.3483 0 00-.1154-.578l-1.1066-.414a8.4958 8.4958 0 00-.087-.2856l.6904-.9587a.3462.3462 0 00-.2257-.5446l-1.1663-.1894a9.3574 9.3574 0 00-.1407-.2622l.49-1.0761a.3437.3437 0 00-.0274-.3361.3486.3486 0 00-.3006-.154l-1.1845.0416a6.7444 6.7444 0 00-.1873-.2268l.2723-1.153a.3472.3472 0 00-.417-.4172l-1.1532.2724a14.0183 14.0183 0 00-.2278-.1873l.0415-1.1845a.3442.3442  [...]
+41:I[44324,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],"Pre"]
+35:["$","$L41",null,{"children":["$","code",null,{"children":[["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"pub"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":" struct"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" PolledMessages"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E [...]
+36:["$","p",null,{"children":"Serialization:"}]
+37:["$","$L33",null,{"className":"shiki shiki-themes github-light github-dark","style":{"--shiki-light":"#24292e","--shiki-dark":"#e1e4e8","--shiki-light-bg":"#fff","--shiki-dark-bg":"#24292e"},"tabIndex":"0","icon":"<svg viewBox=\"0 0 24 24\"><path d=\"M 6,1 C 4.354992,1 3,2.354992 3,4 v 16 c 0,1.645008 1.354992,3 3,3 h 12 c 1.645008,0 3,-1.354992 3,-3 V 8 7 A 1.0001,1.0001 0 0 0 20.707031,6.2929687 l -5,-5 A 1.0001,1.0001 0 0 0 15,1 h -1 z m 0,2 h 7 v 3 c 0,1.645008 1.354992,3 3,3 h 3  [...]
+38:["$","$L31",null,{"as":"h2","id":"getconsumeroffset","children":"GetConsumerOffset"}]
+39:["$","p",null,{"children":["Previously, the ",["$","code",null,{"children":"GetConsumerOffset"}]," command used to return ",["$","code",null,{"children":"u64"}]," as a response, which has been changed to ",["$","code",null,{"children":"ConsumerOffsetInfo"}]," struct, that contains the ",["$","code",null,{"children":"partition_id"}],", ",["$","code",null,{"children":"current_offset"}]," and ",["$","code",null,{"children":"stored_offset"}]," field. Similar to the ",["$","code",null,{"ch [...]
+42:T1068,<svg viewBox="0 0 24 24"><path d="M23.8346 11.7033l-1.0073-.6236a13.7268 13.7268 0 00-.0283-.2936l.8656-.8069a.3483.3483 0 00-.1154-.578l-1.1066-.414a8.4958 8.4958 0 00-.087-.2856l.6904-.9587a.3462.3462 0 00-.2257-.5446l-1.1663-.1894a9.3574 9.3574 0 00-.1407-.2622l.49-1.0761a.3437.3437 0 00-.0274-.3361.3486.3486 0 00-.3006-.154l-1.1845.0416a6.7444 6.7444 0 00-.1873-.2268l.2723-1.153a.3472.3472 0 00-.417-.4172l-1.1532.2724a14.0183 14.0183 0 00-.2278-.1873l.0415-1.1845a.3442.3442  [...]
+3b:["$","p",null,{"children":"Serialization:"}]
+3c:["$","$L33",null,{"className":"shiki shiki-themes github-light github-dark","style":{"--shiki-light":"#24292e","--shiki-dark":"#e1e4e8","--shiki-light-bg":"#fff","--shiki-dark-bg":"#24292e"},"tabIndex":"0","icon":"<svg viewBox=\"0 0 24 24\"><path d=\"M 6,1 C 4.354992,1 3,2.354992 3,4 v 16 c 0,1.645008 1.354992,3 3,3 h 12 c 1.645008,0 3,-1.354992 3,-3 V 8 7 A 1.0001,1.0001 0 0 0 20.707031,6.2929687 l -5,-5 A 1.0001,1.0001 0 0 0 15,1 h -1 z m 0,2 h 7 v 3 c 0,1.645008 1.354992,3 3,3 h 3  [...]
+3d:["$","$L31",null,{"as":"h2","id":"stream-topic-partition","children":"Stream, Topic, Partition"}]
+3e:["$","p",null,{"children":["The ",["$","code",null,{"children":"Stream"}],", ",["$","code",null,{"children":"Topic"}]," and ",["$","code",null,{"children":"Partition"}]," structs (along with the additional ",["$","code",null,{"children":"Details"}]," models when fetching the single object, not a list) have been extended with the ",["$","code",null,{"children":"created_at"}]," field, which contains the timestamp of the creation time (EPOCH in microseconds)."]}]
+3f:["$","p",null,{"children":["The ",["$","code",null,{"children":"created_at"}]," field which is ",["$","code",null,{"children":"u64"}]," (8 bytes) is always serialized right after the ",["$","code",null,{"children":"id"}]," field, and then the remaining fields follow."]}]
+40:["$","footer",null,{"className":"mt-16 border-t border-fd-border pt-8","children":["$","$L7",null,{"href":"/blogs","className":"inline-flex items-center gap-2 text-sm font-medium text-fd-primary transition-colors hover:opacity-80","children":"← Back to all posts"}]}]
+43:["$","$L41",null,{"children":["$","code",null,{"children":[["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"pub"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":" struct"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" ConsumerOffsetInfo"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark" [...]
+29:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]
+44:I[27201,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"IconMark"]
+27:null
+2b:[["$","title","0",{"children":"Updated schemas | Apache Iggy"}],["$","link","1",{"rel":"canonical","href":"https://iggy.apache.org/blogs/2023/08/31/updated-schemas/"}],["$","link","2",{"rel":"alternate","type":"text/markdown","href":"https://iggy.apache.org/blogs/2023/08/31/updated-schemas.md"}],["$","meta","3",{"property":"og:title","content":"Updated schemas | Apache Iggy"}],["$","meta","4",{"property":"og:url","content":"https://iggy.apache.org/blogs/2023/08/31/updated-schemas/"}], [...]
diff --git a/blogs/2023/08/31/updated-schemas/__next._index.txt b/blogs/2023/08/31/updated-schemas/__next._index.txt
new file mode 100644
index 000000000..42b058136
--- /dev/null
+++ b/blogs/2023/08/31/updated-schemas/__next._index.txt
@@ -0,0 +1,20 @@
+1:"$Sreact.fragment"
+3:I[17751,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"RootProvider"]
+4:I[39756,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"default"]
+5:I[58298,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/3-_96y-evozm0.js"],"default"]
+6:I[37457,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"default"]
+7:I[22016,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],""]
+:HL["/_next/static/chunks/1_55v0vlfews3.css","style"]
+2:T512,{"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://iggy.apache.org/#organization","name":"The Apache Software Foundation","url":"https://www.apache.org/","logo":"https://iggy.apache.org/img/asf_logo.svg","contactPoint":{"@type":"ContactPoint","contactType":"technical support","email":"dev@iggy.apache.org","url":"https://iggy.apache.org/community/"}},{"@type":"WebSite","@id":"https://iggy.apache.org/#website","name":"Apache Iggy","url":"https://iggy.a [...]
+0:{"buildId":"CEAllZE6ERPzzxzpa_n8G","data":[{"rsc":["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/1_55v0vlfews3.css","precedence":"next"}],["$","script","script-0",{"src":"/_next/static/chunks/05hk4ely-lns6.js","async":true}],["$","script","script-1",{"src":"/_next/static/chunks/2tvyahbdutabx.js","async":true}]],["$","html",null,{"lang":"en","suppressHydrationWarning":true,"children":["$","body",null,{"className":"flex min-h-screen flex-col  [...]
+10:I[79520,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],""]
+11:I[69877,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"Matomo"]
+8:["$","a",null,{"href":"/sitemap.xml","className":"underline hover:text-fd-primary","children":"/sitemap.xml"}]
+9:["$","a",null,{"href":"/llms.txt","className":"underline hover:text-fd-primary","children":"/llms.txt"}]
+a:["$","$L10",null,{"id":"matomo","strategy":"afterInteractive","children":"var _paq = window._paq = window._paq || [];\n_paq.push([\"setDoNotTrack\", true]);\n_paq.push([\"disableCookies\"]);\n_paq.push(['trackPageView']);\n_paq.push(['enableLinkTracking']);\n(function() {\n  var u=\"https://analytics.apache.org/\";\n  _paq.push(['setTrackerUrl', u+'matomo.php']);\n  _paq.push(['setSiteId', '80']);\n  var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];\n  [...]
+b:["$","$L11",null,{}]
+d:300
+f:true
+d:C
+e:0
+c:"$undefined"
diff --git a/blogs/2023/08/31/updated-schemas/__next._tree.txt b/blogs/2023/08/31/updated-schemas/__next._tree.txt
new file mode 100644
index 000000000..1e8dd0862
--- /dev/null
+++ b/blogs/2023/08/31/updated-schemas/__next._tree.txt
@@ -0,0 +1,3 @@
+:HL["/_next/static/chunks/1_55v0vlfews3.css","style"]
+:HL["/img/authors/piotr.png","image"]
+0:{"tree":{"name":"","param":null,"prefetchHints":4112,"slots":{"children":{"name":"(site)","param":null,"prefetchHints":4096,"slots":{"children":{"name":"blogs","param":null,"prefetchHints":4160,"slots":{"children":{"name":"slug","param":{"type":"c","key":"2023/08/31/updated-schemas","siblings":[]},"prefetchHints":4192,"slots":{"children":{"name":"__PAGE__","param":null,"prefetchHints":4256,"slots":null}}}}}}}}},"staleTime":300,"buildId":"CEAllZE6ERPzzxzpa_n8G"}
diff --git a/blogs/2023/08/31/updated-schemas/index.html b/blogs/2023/08/31/updated-schemas/index.html
new file mode 100644
index 000000000..1668270d6
--- /dev/null
+++ b/blogs/2023/08/31/updated-schemas/index.html
@@ -0,0 +1,24 @@
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" href="/img/authors/piotr.png" as="image"/><link rel="stylesheet" href="/_next/static/chunks/1_55v0vlfews3.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/1qt6pht_u0de1.js"/><script src="/_next/static/chunks/1iye7dwhtxrnu.js" async=""></script><script src="/_next/static/chunks/1t7fq8 [...]
+<h2 id="breaking-changes" class="group/heading flex scroll-m-28 flex-row items-center gap-1"><a data-card="" href="#breaking-changes">Breaking changes</a><button aria-label="Copy Anchor Link" class="inline-flex items-center justify-center rounded-md text-sm font-medium duration-100 disabled:pointer-events-none disabled:opacity-50 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-fd-ring hover:bg-fd-accent hover:text-fd-accent-foreground p-1 [&amp;_svg]:size-4 not-prose s [...]
+<p>Breaking changes have been introduced with the commit <a href="https://github.com/apache/iggy/commit/670a8baba8617bb7e52bd51d556a621349e2e9f0" rel="noreferrer noopener" target="_blank">#670a8ba</a>. The available <a href="https://crates.io/crates/iggy" rel="noreferrer noopener" target="_blank">iggy crate</a> supports these changes since version 0.0.60.</p>
+<h2 id="pollmessages" class="group/heading flex scroll-m-28 flex-row items-center gap-1"><a data-card="" href="#pollmessages">PollMessages</a><button aria-label="Copy Anchor Link" class="inline-flex items-center justify-center rounded-md text-sm font-medium duration-100 disabled:pointer-events-none disabled:opacity-50 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-fd-ring hover:bg-fd-accent hover:text-fd-accent-foreground p-1 [&amp;_svg]:size-4 not-prose shrink-0 text [...]
+<p>By default, the <code>PollMessages</code> used to return <code>Vec&lt;Message&gt;</code> as a response, which has been changed to <code>PolledMessages</code> struct, that contains the <code>partition_id</code>, <code>current_offset</code> and <code>messages</code> field. The reason for this change was to provide more information about the current offset, and the partition from which the messages have been fetched - this might be especially useful when using the consumer groups feature [...]
+<figure dir="ltr" class="my-4 bg-fd-card rounded-xl shiki relative border shadow-sm not-prose overflow-hidden text-sm shiki shiki-themes github-light github-dark" style="--shiki-light:#24292e;--shiki-dark:#e1e4e8;--shiki-light-bg:#fff;--shiki-dark-bg:#24292e" tabindex="-1"><div class="empty:hidden absolute top-3 right-2 z-2 backdrop-blur-lg rounded-lg text-fd-muted-foreground"><button type="button" class="inline-flex items-center justify-center rounded-md text-sm font-medium transition-c [...]
+<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    pub</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> partition_id</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">:</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> u32</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
+<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    pub</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> current_offset</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">:</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> u64</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
+<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    pub</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> messages</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">:</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> Vec</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">&lt;</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">Message</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> [...]
+<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">}</span></span></code></pre></div></figure>
+<p>Serialization:</p>
+<figure dir="ltr" class="my-4 bg-fd-card rounded-xl shiki relative border shadow-sm not-prose overflow-hidden text-sm shiki shiki-themes github-light github-dark" style="--shiki-light:#24292e;--shiki-dark:#e1e4e8;--shiki-light-bg:#fff;--shiki-dark-bg:#24292e" tabindex="-1"><div class="empty:hidden absolute top-3 right-2 z-2 backdrop-blur-lg rounded-lg text-fd-muted-foreground"><button type="button" class="inline-flex items-center justify-center rounded-md text-sm font-medium transition-c [...]
+<h2 id="getconsumeroffset" class="group/heading flex scroll-m-28 flex-row items-center gap-1"><a data-card="" href="#getconsumeroffset">GetConsumerOffset</a><button aria-label="Copy Anchor Link" class="inline-flex items-center justify-center rounded-md text-sm font-medium duration-100 disabled:pointer-events-none disabled:opacity-50 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-fd-ring hover:bg-fd-accent hover:text-fd-accent-foreground p-1 [&amp;_svg]:size-4 not-pros [...]
+<p>Previously, the <code>GetConsumerOffset</code> command used to return <code>u64</code> as a response, which has been changed to <code>ConsumerOffsetInfo</code> struct, that contains the <code>partition_id</code>, <code>current_offset</code> and <code>stored_offset</code> field. Similar to the <code>PollMessages</code> response update, the additional data might be helpful when using the consumer groups feature.</p>
+<figure dir="ltr" class="my-4 bg-fd-card rounded-xl shiki relative border shadow-sm not-prose overflow-hidden text-sm shiki shiki-themes github-light github-dark" style="--shiki-light:#24292e;--shiki-dark:#e1e4e8;--shiki-light-bg:#fff;--shiki-dark-bg:#24292e" tabindex="-1"><div class="empty:hidden absolute top-3 right-2 z-2 backdrop-blur-lg rounded-lg text-fd-muted-foreground"><button type="button" class="inline-flex items-center justify-center rounded-md text-sm font-medium transition-c [...]
+<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    pub</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> partition_id</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">:</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> u32</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
+<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    pub</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> current_offset</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">:</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> u64</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
+<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    pub</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> stored_offset</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">:</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> u64</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
+<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">}</span></span></code></pre></div></figure>
+<p>Serialization:</p>
+<figure dir="ltr" class="my-4 bg-fd-card rounded-xl shiki relative border shadow-sm not-prose overflow-hidden text-sm shiki shiki-themes github-light github-dark" style="--shiki-light:#24292e;--shiki-dark:#e1e4e8;--shiki-light-bg:#fff;--shiki-dark-bg:#24292e" tabindex="-1"><div class="empty:hidden absolute top-3 right-2 z-2 backdrop-blur-lg rounded-lg text-fd-muted-foreground"><button type="button" class="inline-flex items-center justify-center rounded-md text-sm font-medium transition-c [...]
+<h2 id="stream-topic-partition" class="group/heading flex scroll-m-28 flex-row items-center gap-1"><a data-card="" href="#stream-topic-partition">Stream, Topic, Partition</a><button aria-label="Copy Anchor Link" class="inline-flex items-center justify-center rounded-md text-sm font-medium duration-100 disabled:pointer-events-none disabled:opacity-50 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-fd-ring hover:bg-fd-accent hover:text-fd-accent-foreground p-1 [&amp;_svg [...]
+<p>The <code>Stream</code>, <code>Topic</code> and <code>Partition</code> structs (along with the additional <code>Details</code> models when fetching the single object, not a list) have been extended with the <code>created_at</code> field, which contains the timestamp of the creation time (EPOCH in microseconds).</p>
+<p>The <code>created_at</code> field which is <code>u64</code> (8 bytes) is always serialized right after the <code>id</code> field, and then the remaining fields follow.</p></div><footer class="mt-16 border-t border-fd-border pt-8"><a class="inline-flex items-center gap-2 text-sm font-medium text-fd-primary transition-colors hover:opacity-80" href="/blogs/">← Back to all posts</a></footer></article></main><!--$--><!--/$--><footer class="border-t border-fd-border bg-fd-background px-6 py [...]
\ No newline at end of file
diff --git a/blogs/2023/08/31/updated-schemas/index.txt b/blogs/2023/08/31/updated-schemas/index.txt
new file mode 100644
index 000000000..3c97a94ce
--- /dev/null
+++ b/blogs/2023/08/31/updated-schemas/index.txt
@@ -0,0 +1,69 @@
+1:"$Sreact.fragment"
+3:I[17751,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"RootProvider"]
+4:I[39756,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"default"]
+5:I[58298,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/3-_96y-evozm0.js"],"default"]
+6:I[37457,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"default"]
+7:I[22016,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],""]
+12:I[68027,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"default",1]
+:HL["/_next/static/chunks/1_55v0vlfews3.css","style"]
+2:T512,{"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://iggy.apache.org/#organization","name":"The Apache Software Foundation","url":"https://www.apache.org/","logo":"https://iggy.apache.org/img/asf_logo.svg","contactPoint":{"@type":"ContactPoint","contactType":"technical support","email":"dev@iggy.apache.org","url":"https://iggy.apache.org/community/"}},{"@type":"WebSite","@id":"https://iggy.apache.org/#website","name":"Apache Iggy","url":"https://iggy.a [...]
+0:{"P":null,"c":["","blogs","2023","08","31","updated-schemas",""],"q":"","i":false,"f":[[["",{"children":["(site)",{"children":["blogs",{"children":[["slug","2023/08/31/updated-schemas","c",[]],{"children":["__PAGE__",{},"$undefined","$undefined",4608]},"$undefined","$undefined",4608]},"$undefined","$undefined",4608]},"$undefined","$undefined",4608]},"$undefined","$undefined",4624],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/1_55v0vlfews [...]
+14:I[79520,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],""]
+15:I[69877,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"Matomo"]
+16:I[5014,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],"default"]
+17:I[64345,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js"],"HomeLayout"]
+18:I[88760,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js"],"Logo"]
+19:I[15269,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js"],"CommunityDropdown"]
+1a:I[15269,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js"],"communityLinks"]
+1b:I[29966,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js"],"ASFDropdown"]
+1c:I[36330,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js"],"ASFMobileLinks"]
+25:I[97367,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"OutletBoundary"]
+26:"$Sreact.suspense"
+28:I[97367,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"ViewportBoundary"]
+2a:I[97367,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"MetadataBoundary"]
+8:["$","$L7","/community",{"href":"/community","className":"transition-colors hover:text-fd-primary","children":"Community"}]
+9:["$","p",null,{"className":"mt-6 max-w-md text-xs text-fd-muted-foreground","children":["Every page on this site is listed in"," ",["$","a",null,{"href":"/sitemap.xml","className":"underline hover:text-fd-primary","children":"/sitemap.xml"}],", and"," ",["$","a",null,{"href":"/llms.txt","className":"underline hover:text-fd-primary","children":"/llms.txt"}]," ","summarises the documentation."]}]
+a:["$","$L14",null,{"id":"matomo","strategy":"afterInteractive","children":"var _paq = window._paq = window._paq || [];\n_paq.push([\"setDoNotTrack\", true]);\n_paq.push([\"disableCookies\"]);\n_paq.push(['trackPageView']);\n_paq.push(['enableLinkTracking']);\n(function() {\n  var u=\"https://analytics.apache.org/\";\n  _paq.push(['setTrackerUrl', u+'matomo.php']);\n  _paq.push(['setSiteId', '80']);\n  var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];\n  [...]
+b:["$","$L15",null,{}]
+c:["$","$1","c",{"children":[[["$","script","script-0",{"src":"/_next/static/chunks/241-fa32f9zay.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/_next/static/chunks/3x8y3fmtn6lnc.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/_next/static/chunks/250gopd52txql.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/_next/static/chunks/0n3fueko2xquo.js","async":true,"nonce":"$undefined"}]],[["$","div",null,{"className" [...]
+d:["$","$1","c",{"children":[null,["$","$L4",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}]
+e:["$","$1","c",{"children":[null,["$","$L4",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}]
+f:["$","$1","c",{"children":["$L24",[["$","script","script-0",{"src":"/_next/static/chunks/1k39uva2a578s.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/_next/static/chunks/23ktdyx90z0v3.js","async":true,"nonce":"$undefined"}]],["$","$L25",null,{"children":["$","$26",null,{"name":"Next.MetadataOutlet","children":"$@27"}]}]]}]
+11:["$","$1","h",{"children":[null,["$","$L28",null,{"children":"$L29"}],["$","div",null,{"hidden":true,"children":["$","$L2a",null,{"children":["$","$26",null,{"name":"Next.Metadata","children":"$L2b"}]}]}],null]}]
+13:["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/1_55v0vlfews3.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]
+10:C
+1d:["$","$L7","/",{"href":"/","className":"transition-colors hover:text-fd-primary","children":"Home"}]
+1e:["$","$L7","/docs",{"href":"/docs","className":"transition-colors hover:text-fd-primary","children":"Documentation"}]
+1f:["$","$L7","/blogs",{"href":"/blogs","className":"transition-colors hover:text-fd-primary","children":"Blog"}]
+20:["$","$L7","/downloads",{"href":"/downloads","className":"transition-colors hover:text-fd-primary","children":"Downloads"}]
+21:["$","$L7","/community",{"href":"/community","className":"transition-colors hover:text-fd-primary","children":"Community"}]
+22:["$","p",null,{"className":"mt-6 max-w-md text-xs text-fd-muted-foreground","children":["Every page on this site is listed in"," ",["$","a",null,{"href":"/sitemap.xml","className":"underline hover:text-fd-primary","children":"/sitemap.xml"}],", and"," ",["$","a",null,{"href":"/llms.txt","className":"underline hover:text-fd-primary","children":"/llms.txt"}]," ","summarises the documentation."]}]
+23:["$","footer",null,{"className":"border-t border-fd-border bg-fd-background px-6 py-14 md:px-12","children":["$","div",null,{"className":"mx-auto max-w-6xl","children":[["$","div",null,{"className":"grid gap-10 sm:grid-cols-2 lg:grid-cols-4","children":[["$","div","Docs",{"children":[["$","h2",null,{"className":"mb-4 text-sm font-semibold uppercase tracking-wide text-fd-primary","children":"Docs"}],["$","ul",null,{"className":"space-y-2.5 text-sm","children":[["$","li","/docs",{"child [...]
+2c:["$","li","https://www.apache.org/foundation/contributing.html",{"children":["$","$L7",null,{"href":"https://www.apache.org/foundation/contributing.html","target":"_blank","rel":"noopener noreferrer","className":"text-fd-muted-foreground transition-colors hover:text-fd-foreground","children":"Donate"}]}]
+2d:["$","li","https://www.apache.org/foundation/sponsorship.html",{"children":["$","$L7",null,{"href":"https://www.apache.org/foundation/sponsorship.html","target":"_blank","rel":"noopener noreferrer","className":"text-fd-muted-foreground transition-colors hover:text-fd-foreground","children":"Sponsors"}]}]
+2e:["$","li","https://www.apache.org/security/",{"children":["$","$L7",null,{"href":"https://www.apache.org/security/","target":"_blank","rel":"noopener noreferrer","className":"text-fd-muted-foreground transition-colors hover:text-fd-foreground","children":"Security"}]}]
+2f:["$","li","https://privacy.apache.org/policies/privacy-policy-public.html",{"children":["$","$L7",null,{"href":"https://privacy.apache.org/policies/privacy-policy-public.html","target":"_blank","rel":"noopener noreferrer","className":"text-fd-muted-foreground transition-colors hover:text-fd-foreground","children":"Privacy"}]}]
+30:["$","div",null,{"className":"mt-12 border-t border-fd-border pt-8 text-xs leading-relaxed text-fd-muted-foreground/70","children":[["$","p",null,{"className":"mt-4","children":["Copyright © ",2026," The Apache Software Foundation, Licensed under the Apache License, Version 2.0."]}],["$","p",null,{"className":"mt-4","children":"Apache Iggy, Iggy, Apache, and the Apache Iggy logo are trademarks or registered trademarks of The Apache Software Foundation. All other marks mentioned may be [...]
+31:I[94157,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],"Heading"]
+32:I[47873,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],"default"]
+33:I[44324,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],"CodeBlock"]
+:HL["/img/authors/piotr.png","image"]
+34:T1068,<svg viewBox="0 0 24 24"><path d="M23.8346 11.7033l-1.0073-.6236a13.7268 13.7268 0 00-.0283-.2936l.8656-.8069a.3483.3483 0 00-.1154-.578l-1.1066-.414a8.4958 8.4958 0 00-.087-.2856l.6904-.9587a.3462.3462 0 00-.2257-.5446l-1.1663-.1894a9.3574 9.3574 0 00-.1407-.2622l.49-1.0761a.3437.3437 0 00-.0274-.3361.3486.3486 0 00-.3006-.154l-1.1845.0416a6.7444 6.7444 0 00-.1873-.2268l.2723-1.153a.3472.3472 0 00-.417-.4172l-1.1532.2724a14.0183 14.0183 0 00-.2278-.1873l.0415-1.1845a.3442.3442  [...]
+41:I[44324,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],"Pre"]
+35:["$","$L41",null,{"children":["$","code",null,{"children":[["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"pub"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":" struct"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" PolledMessages"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E [...]
+36:["$","p",null,{"children":"Serialization:"}]
+37:["$","$L33",null,{"className":"shiki shiki-themes github-light github-dark","style":{"--shiki-light":"#24292e","--shiki-dark":"#e1e4e8","--shiki-light-bg":"#fff","--shiki-dark-bg":"#24292e"},"tabIndex":"0","icon":"<svg viewBox=\"0 0 24 24\"><path d=\"M 6,1 C 4.354992,1 3,2.354992 3,4 v 16 c 0,1.645008 1.354992,3 3,3 h 12 c 1.645008,0 3,-1.354992 3,-3 V 8 7 A 1.0001,1.0001 0 0 0 20.707031,6.2929687 l -5,-5 A 1.0001,1.0001 0 0 0 15,1 h -1 z m 0,2 h 7 v 3 c 0,1.645008 1.354992,3 3,3 h 3  [...]
+38:["$","$L31",null,{"as":"h2","id":"getconsumeroffset","children":"GetConsumerOffset"}]
+39:["$","p",null,{"children":["Previously, the ",["$","code",null,{"children":"GetConsumerOffset"}]," command used to return ",["$","code",null,{"children":"u64"}]," as a response, which has been changed to ",["$","code",null,{"children":"ConsumerOffsetInfo"}]," struct, that contains the ",["$","code",null,{"children":"partition_id"}],", ",["$","code",null,{"children":"current_offset"}]," and ",["$","code",null,{"children":"stored_offset"}]," field. Similar to the ",["$","code",null,{"ch [...]
+42:T1068,<svg viewBox="0 0 24 24"><path d="M23.8346 11.7033l-1.0073-.6236a13.7268 13.7268 0 00-.0283-.2936l.8656-.8069a.3483.3483 0 00-.1154-.578l-1.1066-.414a8.4958 8.4958 0 00-.087-.2856l.6904-.9587a.3462.3462 0 00-.2257-.5446l-1.1663-.1894a9.3574 9.3574 0 00-.1407-.2622l.49-1.0761a.3437.3437 0 00-.0274-.3361.3486.3486 0 00-.3006-.154l-1.1845.0416a6.7444 6.7444 0 00-.1873-.2268l.2723-1.153a.3472.3472 0 00-.417-.4172l-1.1532.2724a14.0183 14.0183 0 00-.2278-.1873l.0415-1.1845a.3442.3442  [...]
+3b:["$","p",null,{"children":"Serialization:"}]
+3c:["$","$L33",null,{"className":"shiki shiki-themes github-light github-dark","style":{"--shiki-light":"#24292e","--shiki-dark":"#e1e4e8","--shiki-light-bg":"#fff","--shiki-dark-bg":"#24292e"},"tabIndex":"0","icon":"<svg viewBox=\"0 0 24 24\"><path d=\"M 6,1 C 4.354992,1 3,2.354992 3,4 v 16 c 0,1.645008 1.354992,3 3,3 h 12 c 1.645008,0 3,-1.354992 3,-3 V 8 7 A 1.0001,1.0001 0 0 0 20.707031,6.2929687 l -5,-5 A 1.0001,1.0001 0 0 0 15,1 h -1 z m 0,2 h 7 v 3 c 0,1.645008 1.354992,3 3,3 h 3  [...]
+3d:["$","$L31",null,{"as":"h2","id":"stream-topic-partition","children":"Stream, Topic, Partition"}]
+3e:["$","p",null,{"children":["The ",["$","code",null,{"children":"Stream"}],", ",["$","code",null,{"children":"Topic"}]," and ",["$","code",null,{"children":"Partition"}]," structs (along with the additional ",["$","code",null,{"children":"Details"}]," models when fetching the single object, not a list) have been extended with the ",["$","code",null,{"children":"created_at"}]," field, which contains the timestamp of the creation time (EPOCH in microseconds)."]}]
+3f:["$","p",null,{"children":["The ",["$","code",null,{"children":"created_at"}]," field which is ",["$","code",null,{"children":"u64"}]," (8 bytes) is always serialized right after the ",["$","code",null,{"children":"id"}]," field, and then the remaining fields follow."]}]
+40:["$","footer",null,{"className":"mt-16 border-t border-fd-border pt-8","children":["$","$L7",null,{"href":"/blogs","className":"inline-flex items-center gap-2 text-sm font-medium text-fd-primary transition-colors hover:opacity-80","children":"← Back to all posts"}]}]
+43:["$","$L41",null,{"children":["$","code",null,{"children":[["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"pub"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":" struct"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" ConsumerOffsetInfo"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark" [...]
+29:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]
+44:I[27201,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"IconMark"]
+27:null
+2b:[["$","title","0",{"children":"Updated schemas | Apache Iggy"}],["$","link","1",{"rel":"canonical","href":"https://iggy.apache.org/blogs/2023/08/31/updated-schemas/"}],["$","link","2",{"rel":"alternate","type":"text/markdown","href":"https://iggy.apache.org/blogs/2023/08/31/updated-schemas.md"}],["$","meta","3",{"property":"og:title","content":"Updated schemas | Apache Iggy"}],["$","meta","4",{"property":"og:url","content":"https://iggy.apache.org/blogs/2023/08/31/updated-schemas/"}], [...]
diff --git a/blogs/2023/09/20/users-and-permissions.md b/blogs/2023/09/20/users-and-permissions.md
new file mode 100644
index 000000000..07ad7465e
--- /dev/null
+++ b/blogs/2023/09/20/users-and-permissions.md
@@ -0,0 +1,366 @@
+# Users and permissions
+
+Published: 2023-09-20
+
+Rendered page: https://iggy.apache.org/blogs/2023/09/20/users-and-permissions/
+
+Source: https://github.com/apache/iggy-website/blob/main/content/blog/users-and-permissions.mdx
+
+In the most recent update, the Iggy server as well as the clients for all the available transport protocols have been extended with the support for **users and permissions**. From now on, you can additionally secure your data using the authentication and authorization by specifying the granular set of permissions for each user.
+
+
+## Breaking changes
+
+In general, there are no breaking changes, except a new field added to the `ClientInfo` and `ClientInfoDetails` structs returned by `get_client()` and `get_clients()` methods.
+
+```rust
+pub struct ClientInfo {
+    pub client_id: u32,
+    pub user_id: Option<u32>, // New optional field
+    pub address: String,
+    pub transport: String,
+    pub consumer_groups_count: u32,
+}
+```
+
+The `user_id` field is optional, and it's only returned when the user is authenticated. Otherwise, it's set to `None` (0 value for binary transport) or `null` (HTTP transport).
+
+Keep in mind that the `client` represents the application connected to the server - since it's possible that multiple applications would share the same user credentials, thus you can think of a `client` as a single connection from the application to the server (1 user -> N clients).
+
+This breaking change has been introduced with the commit [#23b3309](https://github.com/apache/iggy/commit/23b330928aa38463ef907c95a9f672fa7b728881). The available [iggy crate](https://crates.io/crates/iggy) supports these changes since version 0.0.80.
+
+## Configuration
+
+Currently, the authentication and authorization can be enabled in the `server.toml` configuration via `[system.user]` section:
+
+```toml
+[system.user]
+authentication_enabled = true
+authorization_enabled = true
+```
+
+This might change in the future releases (e.g. authentication and authorization will always be enabled), but in order to avoid the breaking changes to the existing clients SDKs, these options are configurable for now.
+
+The additional settings for HTTP API which uses JWT (JSON Web Token), can be found in the `[http.jwt]` section:
+
+```toml
+[http.jwt]
+algorithm = "HS256"
+audience = "iggy.rs"
+expiry = 3600
+encoding_secret = "top_secret$iggy.rs$_jwt_HS256_key#!"
+decoding_secret = "top_secret$iggy.rs$_jwt_HS256_key#!"
+use_base64_secret = false
+```
+
+## Authentication and authorization
+
+The overall implementation of the users authentication and authorization is rather typical. All the server methods except `ping` and `login` require the user to be authenticated. The `login` method is used to authenticate the user, and it returns the optional `token` which is then used to authenticate the user in the subsequent requests. For now, the `token` is only used by HTTP API based on JWT, for the binary transport there's no token - since, it's a stateful protocol, the server keep [...]
+
+The authorization is based on the permissions, which are defined for each user. All the server methods have the specific authorization policies applied. For example, you can allow the user to read all the streams, or manage all the topics, while on the other hand, you could also specify only the set of particular streams or topics to which the user can send and/or poll the message to/from.
+
+Take a look at the following JSON example to get the overall idea:
+
+```json
+{
+  "permissions": {
+    "global": {
+      "manage_servers": false,
+      "read_servers": true,
+      "manage_users": true,
+      "read_users": true,
+      "manage_streams": false,
+      "read_streams": true,
+      "manage_topics": false,
+      "read_topics": true,
+      "poll_messages": true,
+      "send_messages": true
+    },
+    "streams": {
+      "1": {
+        "manage_stream": false,
+        "read_stream": true,
+        "manage_topics": false,
+        "read_topics": true,
+        "poll_messages": true,
+        "send_messages": true,
+        "topics": {
+          "1": {
+            "manage_topic": false,
+            "read_topic": true,
+            "poll_messages": true,
+            "send_messages": true
+          }
+        }
+      }
+    }
+  }
+}
+```
+
+Each user might have the global permissions which do apply to all the available streams and topics, as well as the granular permissions for each stream and its topics (this is a simple hashmap using the stream or topic ID as its key).
+
+For example, the `root user`, which has the default username and password `iggy` and cannot be updated or deleted, can do everything, simply by having the following permissions:
+
+```json
+{
+  "permissions": {
+    "global": {
+      "manage_servers": true,
+      "read_servers": true,
+      "manage_users": true,
+      "read_users": true,
+      "manage_streams": true,
+      "read_streams": true,
+      "manage_topics": true,
+      "read_topics": true,
+      "poll_messages": true,
+      "send_messages": true
+    },
+    "streams": null
+  }
+}
+```
+
+## SDK
+
+The new `UserClient` trait has been added in order to support the users and permissions feature. It is implemented for all the available transport protocols.
+
+```rust
+pub trait UserClient {
+    async fn get_user(&self, command: &GetUser) -> Result<UserInfoDetails, Error>;
+    async fn get_users(&self, command: &GetUsers) -> Result<Vec<UserInfo>, Error>;
+    async fn create_user(&self, command: &CreateUser) -> Result<(), Error>;
+    async fn delete_user(&self, command: &DeleteUser) -> Result<(), Error>;
+    async fn update_user(&self, command: &UpdateUser) -> Result<(), Error>;
+    async fn update_permissions(&self, command: &UpdatePermissions) -> Result<(), Error>;
+    async fn change_password(&self, command: &ChangePassword) -> Result<(), Error>;
+    async fn login_user(&self, command: &LoginUser) -> Result<IdentityInfo, Error>;
+    async fn logout_user(&self, command: &LogoutUser) -> Result<(), Error>;
+}
+```
+
+## Commands and models
+
+The following commands and response models have been added:
+
+```rust
+pub struct IdentityInfo {
+    pub user_id: u32,
+    pub token: Option<String>,
+}
+```
+
+```rust
+pub struct UserInfo {
+    pub id: u32,
+    pub created_at: u64,
+    pub status: UserStatus,
+    pub username: String,
+}
+
+pub struct UserInfoDetails {
+    pub id: u32,
+    pub created_at: u64,
+    pub status: UserStatus,
+    pub username: String,
+    pub permissions: Option<Permissions>,
+}
+```
+
+```rust
+pub struct Permissions {
+    pub global: GlobalPermissions,
+    pub streams: Option<HashMap<u32, StreamPermissions>>,
+}
+
+pub struct GlobalPermissions {
+    pub manage_servers: bool,
+    pub read_servers: bool,
+    pub manage_users: bool,
+    pub read_users: bool,
+    pub manage_streams: bool,
+    pub read_streams: bool,
+    pub manage_topics: bool,
+    pub read_topics: bool,
+    pub poll_messages: bool,
+    pub send_messages: bool,
+}
+
+pub struct StreamPermissions {
+    pub manage_stream: bool,
+    pub read_stream: bool,
+    pub manage_topics: bool,
+    pub read_topics: bool,
+    pub poll_messages: bool,
+    pub send_messages: bool,
+    pub topics: Option<HashMap<u32, TopicPermissions>>,
+}
+
+pub struct TopicPermissions {
+    pub manage_topic: bool,
+    pub read_topic: bool,
+    pub poll_messages: bool,
+    pub send_messages: bool,
+}
+```
+
+```rust
+pub struct GetUser {
+    pub user_id: Identifier,
+}
+```
+
+```rust
+pub struct GetUsers {}
+```
+
+```rust
+pub struct CreateUser {
+    pub username: String,
+    pub password: String,
+    pub status: UserStatus,
+    pub permissions: Option<Permissions>,
+}
+```
+
+```rust
+pub struct DeleteUser {
+    pub user_id: Identifier,
+}
+```
+
+```rust
+pub struct UpdateUser {
+    pub user_id: Identifier,
+    pub username: Option<String>,
+    pub status: Option<UserStatus>,
+}
+```
+
+```rust
+pub struct UpdatePermissions {
+    pub user_id: Identifier,
+    pub permissions: Option<Permissions>,
+}
+```
+
+```rust
+pub struct ChangePassword {
+    pub user_id: Identifier,
+    pub current_password: String,
+    pub new_password: String,
+}
+```
+
+```rust
+pub struct LoginUser {
+    pub username: String,
+    pub password: String,
+}
+```
+
+```rust
+pub struct LogoutUser {}
+```
+
+Similar to the stream and topic ID, the user will always have the unique numeric ID and the username. The username must be within the range of 3–50 chars and will always be lowercased, using the same regex as the stream and topic name `^[\w\.\-\s]+$`. The password must be within the range of 3–100 chars and will be hashed using the bcrypt algorithm.
+
+## HTTP API
+
+The following endpoints have been added, and as always, you can find them in the `server.http` file in the main repository.
+
+```
+POST {{url}}/users/login
+Content-Type: application/json
+
+{
+  "username": "iggy",
+  "password": "iggy"
+}
+
+POST {{url}}/users/logout
+Authorization: Bearer {{token}}
+Content-Type: application/json
+
+{
+}
+
+POST {{url}}/users
+Authorization: Bearer {{token}}
+Content-Type: application/json
+
+{
+  "username": "user1",
+  "password": "secret",
+  "status": "active",
+  "permissions": null
+}
+
+GET {{url}}/users
+Authorization: Bearer {{token}}
+
+GET {{url}}/users/user1
+Authorization: Bearer {{token}}
+
+PUT {{url}}/users/user1
+Authorization: Bearer {{token}}
+Content-Type: application/json
+
+{
+  "username": "user1,
+  "status": "active",
+  "permissions": null
+}
+
+PUT {{url}}/users/user1/password
+Authorization: Bearer {{token}}
+Content-Type: application/json
+
+{
+  "current_password": "secret",
+  "new_password": "secret1"
+}
+
+PUT {{url}}/users/user1permissions
+Authorization: Bearer {{token}}
+Content-Type: application/json
+
+{
+  "permissions": {
+    "global": {
+      "manage_servers": false,
+      "read_servers": true,
+      "manage_users": true,
+      "read_users": true,
+      "manage_streams": false,
+      "read_streams": true,
+      "manage_topics": false,
+      "read_topics": true,
+      "poll_messages": true,
+      "send_messages": true
+    },
+    "streams": {
+      "1": {
+        "manage_stream": false,
+        "read_stream": true,
+        "manage_topics": false,
+        "read_topics": true,
+        "poll_messages": true,
+        "send_messages": true,
+        "topics": {
+          "1": {
+            "manage_topic": false,
+            "read_topic": true,
+            "poll_messages": true,
+            "send_messages": true
+          }
+        }
+      }
+    }
+  }
+}
+
+DELETE {{url}}/users/user1
+Authorization: Bearer {{token}}
+```
diff --git a/blogs/2023/09/20/users-and-permissions/__next.!KHNpdGUp.blogs.$c$slug.__PAGE__.txt b/blogs/2023/09/20/users-and-permissions/__next.!KHNpdGUp.blogs.$c$slug.__PAGE__.txt
new file mode 100644
index 000000000..47a031061
--- /dev/null
+++ b/blogs/2023/09/20/users-and-permissions/__next.!KHNpdGUp.blogs.$c$slug.__PAGE__.txt
@@ -0,0 +1,217 @@
+1:"$Sreact.fragment"
+2:I[94157,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],"Heading"]
+3:I[44324,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],"CodeBlock"]
+:HL["/img/authors/piotr.png","image"]
+4:T1068,<svg viewBox="0 0 24 24"><path d="M23.8346 11.7033l-1.0073-.6236a13.7268 13.7268 0 00-.0283-.2936l.8656-.8069a.3483.3483 0 00-.1154-.578l-1.1066-.414a8.4958 8.4958 0 00-.087-.2856l.6904-.9587a.3462.3462 0 00-.2257-.5446l-1.1663-.1894a9.3574 9.3574 0 00-.1407-.2622l.49-1.0761a.3437.3437 0 00-.0274-.3361.3486.3486 0 00-.3006-.154l-1.1845.0416a6.7444 6.7444 0 00-.1873-.2268l.2723-1.153a.3472.3472 0 00-.417-.4172l-1.1532.2724a14.0183 14.0183 0 00-.2278-.1873l.0415-1.1845a.3442.3442 0 [...]
+36:X
+36:C
+0:{"buildId":"CEAllZE6ERPzzxzpa_n8G","data":[{"rsc":["$","$1","c",{"children":[["$","main",null,{"className":"min-h-screen px-6 py-16 md:px-12","children":["$","article",null,{"className":"mx-auto max-w-5xl","children":[["$","header",null,{"className":"mb-10","children":[["$","time",null,{"className":"text-sm font-medium text-fd-muted-foreground","children":"September 20, 2023"}],["$","h1",null,{"className":"mt-3 text-3xl font-extrabold tracking-tight text-fd-foreground md:text-5xl","chi [...]
+3b:I[44324,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],"Pre"]
+3c:I[47873,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],"default"]
+aa:I[22016,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],""]
+ab:I[97367,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"OutletBoundary"]
+ac:"$Sreact.suspense"
+ae:I[97367,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"ViewportBoundary"]
+af:I[97367,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"MetadataBoundary"]
+b0:I[27201,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"IconMark"]
+b1:I[39756,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"default"]
+b2:I[37457,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"default"]
+5:["$","$L3b",null,{"children":["$","code",null,{"children":[["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"pub"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":" struct"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" ClientInfo"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8 [...]
+6:["$","p",null,{"children":["The ",["$","code",null,{"children":"user_id"}]," field is optional, and it's only returned when the user is authenticated. Otherwise, it's set to ",["$","code",null,{"children":"None"}]," (0 value for binary transport) or ",["$","code",null,{"children":"null"}]," (HTTP transport)."]}]
+7:["$","p",null,{"children":["Keep in mind that the ",["$","code",null,{"children":"client"}]," represents the application connected to the server - since it's possible that multiple applications would share the same user credentials, thus you can think of a ",["$","code",null,{"children":"client"}]," as a single connection from the application to the server (1 user -> N clients)."]}]
+8:["$","p",null,{"children":["This breaking change has been introduced with the commit ",["$","$L3c",null,{"href":"https://github.com/apache/iggy/commit/23b330928aa38463ef907c95a9f672fa7b728881","children":"#23b3309"}],". The available ",["$","$L3c",null,{"href":"https://crates.io/crates/iggy","children":"iggy crate"}]," supports these changes since version 0.0.80."]}]
+9:["$","$L2",null,{"as":"h2","id":"configuration","children":"Configuration"}]
+a:["$","p",null,{"children":["Currently, the authentication and authorization can be enabled in the ",["$","code",null,{"children":"server.toml"}]," configuration via ",["$","code",null,{"children":"[system.user]"}]," section:"]}]
+b:["$","$L3",null,{"className":"shiki shiki-themes github-light github-dark","style":{"--shiki-light":"#24292e","--shiki-dark":"#e1e4e8","--shiki-light-bg":"#fff","--shiki-dark-bg":"#24292e"},"tabIndex":"0","icon":"<svg viewBox=\"0 0 24 24\"><path d=\"M 6,1 C 4.354992,1 3,2.354992 3,4 v 16 c 0,1.645008 1.354992,3 3,3 h 12 c 1.645008,0 3,-1.354992 3,-3 V 8 7 A 1.0001,1.0001 0 0 0 20.707031,6.2929687 l -5,-5 A 1.0001,1.0001 0 0 0 15,1 h -1 z m 0,2 h 7 v 3 c 0,1.645008 1.354992,3 3,3 h 3 v  [...]
+c:["$","p",null,{"children":"This might change in the future releases (e.g. authentication and authorization will always be enabled), but in order to avoid the breaking changes to the existing clients SDKs, these options are configurable for now."}]
+d:["$","p",null,{"children":["The additional settings for HTTP API which uses JWT (JSON Web Token), can be found in the ",["$","code",null,{"children":"[http.jwt]"}]," section:"]}]
+e:["$","$L3",null,{"className":"shiki shiki-themes github-light github-dark","style":{"--shiki-light":"#24292e","--shiki-dark":"#e1e4e8","--shiki-light-bg":"#fff","--shiki-dark-bg":"#24292e"},"tabIndex":"0","icon":"<svg viewBox=\"0 0 24 24\"><path d=\"M 6,1 C 4.354992,1 3,2.354992 3,4 v 16 c 0,1.645008 1.354992,3 3,3 h 12 c 1.645008,0 3,-1.354992 3,-3 V 8 7 A 1.0001,1.0001 0 0 0 20.707031,6.2929687 l -5,-5 A 1.0001,1.0001 0 0 0 15,1 h -1 z m 0,2 h 7 v 3 c 0,1.645008 1.354992,3 3,3 h 3 v  [...]
+f:["$","$L2",null,{"as":"h2","id":"authentication-and-authorization","children":"Authentication and authorization"}]
+10:["$","p",null,{"children":["The overall implementation of the users authentication and authorization is rather typical. All the server methods except ",["$","code",null,{"children":"ping"}]," and ",["$","code",null,{"children":"login"}]," require the user to be authenticated. The ",["$","code",null,{"children":"login"}]," method is used to authenticate the user, and it returns the optional ",["$","code",null,{"children":"token"}]," which is then used to authenticate the user in the su [...]
+11:["$","p",null,{"children":"The authorization is based on the permissions, which are defined for each user. All the server methods have the specific authorization policies applied. For example, you can allow the user to read all the streams, or manage all the topics, while on the other hand, you could also specify only the set of particular streams or topics to which the user can send and/or poll the message to/from."}]
+12:["$","p",null,{"children":"Take a look at the following JSON example to get the overall idea:"}]
+13:["$","$L3",null,{"className":"shiki shiki-themes github-light github-dark","style":{"--shiki-light":"#24292e","--shiki-dark":"#e1e4e8","--shiki-light-bg":"#fff","--shiki-dark-bg":"#24292e"},"tabIndex":"0","icon":"<svg viewBox=\"0 0 24 24\"><path d=\"M 6,1 C 4.354992,1 3,2.354992 3,4 v 16 c 0,1.645008 1.354992,3 3,3 h 12 c 1.645008,0 3,-1.354992 3,-3 V 8 7 A 1.0001,1.0001 0 0 0 20.707031,6.2929687 l -5,-5 A 1.0001,1.0001 0 0 0 15,1 h -1 z m 0,2 h 7 v 3 c 0,1.645008 1.354992,3 3,3 h 3 v [...]
+14:["$","p",null,{"children":"Each user might have the global permissions which do apply to all the available streams and topics, as well as the granular permissions for each stream and its topics (this is a simple hashmap using the stream or topic ID as its key)."}]
+15:["$","p",null,{"children":["For example, the ",["$","code",null,{"children":"root user"}],", which has the default username and password ",["$","code",null,{"children":"iggy"}]," and cannot be updated or deleted, can do everything, simply by having the following permissions:"]}]
+16:["$","$L3",null,{"className":"shiki shiki-themes github-light github-dark","style":{"--shiki-light":"#24292e","--shiki-dark":"#e1e4e8","--shiki-light-bg":"#fff","--shiki-dark-bg":"#24292e"},"tabIndex":"0","icon":"<svg viewBox=\"0 0 24 24\"><path d=\"M 6,1 C 4.354992,1 3,2.354992 3,4 v 16 c 0,1.645008 1.354992,3 3,3 h 12 c 1.645008,0 3,-1.354992 3,-3 V 8 7 A 1.0001,1.0001 0 0 0 20.707031,6.2929687 l -5,-5 A 1.0001,1.0001 0 0 0 15,1 h -1 z m 0,2 h 7 v 3 c 0,1.645008 1.354992,3 3,3 h 3 v [...]
+17:["$","$L2",null,{"as":"h2","id":"sdk","children":"SDK"}]
+18:["$","p",null,{"children":["The new ",["$","code",null,{"children":"UserClient"}]," trait has been added in order to support the users and permissions feature. It is implemented for all the available transport protocols."]}]
+5c:T1068,<svg viewBox="0 0 24 24"><path d="M23.8346 11.7033l-1.0073-.6236a13.7268 13.7268 0 00-.0283-.2936l.8656-.8069a.3483.3483 0 00-.1154-.578l-1.1066-.414a8.4958 8.4958 0 00-.087-.2856l.6904-.9587a.3462.3462 0 00-.2257-.5446l-1.1663-.1894a9.3574 9.3574 0 00-.1407-.2622l.49-1.0761a.3437.3437 0 00-.0274-.3361.3486.3486 0 00-.3006-.154l-1.1845.0416a6.7444 6.7444 0 00-.1873-.2268l.2723-1.153a.3472.3472 0 00-.417-.4172l-1.1532.2724a14.0183 14.0183 0 00-.2278-.1873l.0415-1.1845a.3442.3442  [...]
+1a:["$","$L2",null,{"as":"h2","id":"commands-and-models","children":"Commands and models"}]
+1b:["$","p",null,{"children":"The following commands and response models have been added:"}]
+5e:T1068,<svg viewBox="0 0 24 24"><path d="M23.8346 11.7033l-1.0073-.6236a13.7268 13.7268 0 00-.0283-.2936l.8656-.8069a.3483.3483 0 00-.1154-.578l-1.1066-.414a8.4958 8.4958 0 00-.087-.2856l.6904-.9587a.3462.3462 0 00-.2257-.5446l-1.1663-.1894a9.3574 9.3574 0 00-.1407-.2622l.49-1.0761a.3437.3437 0 00-.0274-.3361.3486.3486 0 00-.3006-.154l-1.1845.0416a6.7444 6.7444 0 00-.1873-.2268l.2723-1.153a.3472.3472 0 00-.417-.4172l-1.1532.2724a14.0183 14.0183 0 00-.2278-.1873l.0415-1.1845a.3442.3442  [...]
+60:T1068,<svg viewBox="0 0 24 24"><path d="M23.8346 11.7033l-1.0073-.6236a13.7268 13.7268 0 00-.0283-.2936l.8656-.8069a.3483.3483 0 00-.1154-.578l-1.1066-.414a8.4958 8.4958 0 00-.087-.2856l.6904-.9587a.3462.3462 0 00-.2257-.5446l-1.1663-.1894a9.3574 9.3574 0 00-.1407-.2622l.49-1.0761a.3437.3437 0 00-.0274-.3361.3486.3486 0 00-.3006-.154l-1.1845.0416a6.7444 6.7444 0 00-.1873-.2268l.2723-1.153a.3472.3472 0 00-.417-.4172l-1.1532.2724a14.0183 14.0183 0 00-.2278-.1873l.0415-1.1845a.3442.3442  [...]
+62:T1068,<svg viewBox="0 0 24 24"><path d="M23.8346 11.7033l-1.0073-.6236a13.7268 13.7268 0 00-.0283-.2936l.8656-.8069a.3483.3483 0 00-.1154-.578l-1.1066-.414a8.4958 8.4958 0 00-.087-.2856l.6904-.9587a.3462.3462 0 00-.2257-.5446l-1.1663-.1894a9.3574 9.3574 0 00-.1407-.2622l.49-1.0761a.3437.3437 0 00-.0274-.3361.3486.3486 0 00-.3006-.154l-1.1845.0416a6.7444 6.7444 0 00-.1873-.2268l.2723-1.153a.3472.3472 0 00-.417-.4172l-1.1532.2724a14.0183 14.0183 0 00-.2278-.1873l.0415-1.1845a.3442.3442  [...]
+64:T1068,<svg viewBox="0 0 24 24"><path d="M23.8346 11.7033l-1.0073-.6236a13.7268 13.7268 0 00-.0283-.2936l.8656-.8069a.3483.3483 0 00-.1154-.578l-1.1066-.414a8.4958 8.4958 0 00-.087-.2856l.6904-.9587a.3462.3462 0 00-.2257-.5446l-1.1663-.1894a9.3574 9.3574 0 00-.1407-.2622l.49-1.0761a.3437.3437 0 00-.0274-.3361.3486.3486 0 00-.3006-.154l-1.1845.0416a6.7444 6.7444 0 00-.1873-.2268l.2723-1.153a.3472.3472 0 00-.417-.4172l-1.1532.2724a14.0183 14.0183 0 00-.2278-.1873l.0415-1.1845a.3442.3442  [...]
+66:T1068,<svg viewBox="0 0 24 24"><path d="M23.8346 11.7033l-1.0073-.6236a13.7268 13.7268 0 00-.0283-.2936l.8656-.8069a.3483.3483 0 00-.1154-.578l-1.1066-.414a8.4958 8.4958 0 00-.087-.2856l.6904-.9587a.3462.3462 0 00-.2257-.5446l-1.1663-.1894a9.3574 9.3574 0 00-.1407-.2622l.49-1.0761a.3437.3437 0 00-.0274-.3361.3486.3486 0 00-.3006-.154l-1.1845.0416a6.7444 6.7444 0 00-.1873-.2268l.2723-1.153a.3472.3472 0 00-.417-.4172l-1.1532.2724a14.0183 14.0183 0 00-.2278-.1873l.0415-1.1845a.3442.3442  [...]
+68:T1068,<svg viewBox="0 0 24 24"><path d="M23.8346 11.7033l-1.0073-.6236a13.7268 13.7268 0 00-.0283-.2936l.8656-.8069a.3483.3483 0 00-.1154-.578l-1.1066-.414a8.4958 8.4958 0 00-.087-.2856l.6904-.9587a.3462.3462 0 00-.2257-.5446l-1.1663-.1894a9.3574 9.3574 0 00-.1407-.2622l.49-1.0761a.3437.3437 0 00-.0274-.3361.3486.3486 0 00-.3006-.154l-1.1845.0416a6.7444 6.7444 0 00-.1873-.2268l.2723-1.153a.3472.3472 0 00-.417-.4172l-1.1532.2724a14.0183 14.0183 0 00-.2278-.1873l.0415-1.1845a.3442.3442  [...]
+6a:T1068,<svg viewBox="0 0 24 24"><path d="M23.8346 11.7033l-1.0073-.6236a13.7268 13.7268 0 00-.0283-.2936l.8656-.8069a.3483.3483 0 00-.1154-.578l-1.1066-.414a8.4958 8.4958 0 00-.087-.2856l.6904-.9587a.3462.3462 0 00-.2257-.5446l-1.1663-.1894a9.3574 9.3574 0 00-.1407-.2622l.49-1.0761a.3437.3437 0 00-.0274-.3361.3486.3486 0 00-.3006-.154l-1.1845.0416a6.7444 6.7444 0 00-.1873-.2268l.2723-1.153a.3472.3472 0 00-.417-.4172l-1.1532.2724a14.0183 14.0183 0 00-.2278-.1873l.0415-1.1845a.3442.3442  [...]
+6c:T1068,<svg viewBox="0 0 24 24"><path d="M23.8346 11.7033l-1.0073-.6236a13.7268 13.7268 0 00-.0283-.2936l.8656-.8069a.3483.3483 0 00-.1154-.578l-1.1066-.414a8.4958 8.4958 0 00-.087-.2856l.6904-.9587a.3462.3462 0 00-.2257-.5446l-1.1663-.1894a9.3574 9.3574 0 00-.1407-.2622l.49-1.0761a.3437.3437 0 00-.0274-.3361.3486.3486 0 00-.3006-.154l-1.1845.0416a6.7444 6.7444 0 00-.1873-.2268l.2723-1.153a.3472.3472 0 00-.417-.4172l-1.1532.2724a14.0183 14.0183 0 00-.2278-.1873l.0415-1.1845a.3442.3442  [...]
+6e:T1068,<svg viewBox="0 0 24 24"><path d="M23.8346 11.7033l-1.0073-.6236a13.7268 13.7268 0 00-.0283-.2936l.8656-.8069a.3483.3483 0 00-.1154-.578l-1.1066-.414a8.4958 8.4958 0 00-.087-.2856l.6904-.9587a.3462.3462 0 00-.2257-.5446l-1.1663-.1894a9.3574 9.3574 0 00-.1407-.2622l.49-1.0761a.3437.3437 0 00-.0274-.3361.3486.3486 0 00-.3006-.154l-1.1845.0416a6.7444 6.7444 0 00-.1873-.2268l.2723-1.153a.3472.3472 0 00-.417-.4172l-1.1532.2724a14.0183 14.0183 0 00-.2278-.1873l.0415-1.1845a.3442.3442  [...]
+70:T1068,<svg viewBox="0 0 24 24"><path d="M23.8346 11.7033l-1.0073-.6236a13.7268 13.7268 0 00-.0283-.2936l.8656-.8069a.3483.3483 0 00-.1154-.578l-1.1066-.414a8.4958 8.4958 0 00-.087-.2856l.6904-.9587a.3462.3462 0 00-.2257-.5446l-1.1663-.1894a9.3574 9.3574 0 00-.1407-.2622l.49-1.0761a.3437.3437 0 00-.0274-.3361.3486.3486 0 00-.3006-.154l-1.1845.0416a6.7444 6.7444 0 00-.1873-.2268l.2723-1.153a.3472.3472 0 00-.417-.4172l-1.1532.2724a14.0183 14.0183 0 00-.2278-.1873l.0415-1.1845a.3442.3442  [...]
+72:T1068,<svg viewBox="0 0 24 24"><path d="M23.8346 11.7033l-1.0073-.6236a13.7268 13.7268 0 00-.0283-.2936l.8656-.8069a.3483.3483 0 00-.1154-.578l-1.1066-.414a8.4958 8.4958 0 00-.087-.2856l.6904-.9587a.3462.3462 0 00-.2257-.5446l-1.1663-.1894a9.3574 9.3574 0 00-.1407-.2622l.49-1.0761a.3437.3437 0 00-.0274-.3361.3486.3486 0 00-.3006-.154l-1.1845.0416a6.7444 6.7444 0 00-.1873-.2268l.2723-1.153a.3472.3472 0 00-.417-.4172l-1.1532.2724a14.0183 14.0183 0 00-.2278-.1873l.0415-1.1845a.3442.3442  [...]
+74:T1068,<svg viewBox="0 0 24 24"><path d="M23.8346 11.7033l-1.0073-.6236a13.7268 13.7268 0 00-.0283-.2936l.8656-.8069a.3483.3483 0 00-.1154-.578l-1.1066-.414a8.4958 8.4958 0 00-.087-.2856l.6904-.9587a.3462.3462 0 00-.2257-.5446l-1.1663-.1894a9.3574 9.3574 0 00-.1407-.2622l.49-1.0761a.3437.3437 0 00-.0274-.3361.3486.3486 0 00-.3006-.154l-1.1845.0416a6.7444 6.7444 0 00-.1873-.2268l.2723-1.153a.3472.3472 0 00-.417-.4172l-1.1532.2724a14.0183 14.0183 0 00-.2278-.1873l.0415-1.1845a.3442.3442  [...]
+28:["$","p",null,{"children":["Similar to the stream and topic ID, the user will always have the unique numeric ID and the username. The username must be within the range of 3–50 chars and will always be lowercased, using the same regex as the stream and topic name ",["$","code",null,{"children":"^[\\w\\.\\-\\s]+$"}],". The password must be within the range of 3–100 chars and will be hashed using the bcrypt algorithm."]}]
+29:["$","$L2",null,{"as":"h2","id":"http-api","children":"HTTP API"}]
+2a:["$","p",null,{"children":["The following endpoints have been added, and as always, you can find them in the ",["$","code",null,{"children":"server.http"}]," file in the main repository."]}]
+2b:["$","$L3",null,{"className":"shiki shiki-themes github-light github-dark","style":{"--shiki-light":"#24292e","--shiki-dark":"#e1e4e8","--shiki-light-bg":"#fff","--shiki-dark-bg":"#24292e"},"tabIndex":"0","icon":"<svg viewBox=\"0 0 24 24\"><path d=\"M 6,1 C 4.354992,1 3,2.354992 3,4 v 16 c 0,1.645008 1.354992,3 3,3 h 12 c 1.645008,0 3,-1.354992 3,-3 V 8 7 A 1.0001,1.0001 0 0 0 20.707031,6.2929687 l -5,-5 A 1.0001,1.0001 0 0 0 15,1 h -1 z m 0,2 h 7 v 3 c 0,1.645008 1.354992,3 3,3 h 3 v [...]
+2c:["$","footer",null,{"className":"mt-16 border-t border-fd-border pt-8","children":["$","$Laa",null,{"href":"/blogs","className":"inline-flex items-center gap-2 text-sm font-medium text-fd-primary transition-colors hover:opacity-80","children":"← Back to all posts"}]}]
+2d:["$","script","script-0",{"src":"/_next/static/chunks/1k39uva2a578s.js","async":true}]
+2e:["$","script","script-1",{"src":"/_next/static/chunks/23ktdyx90z0v3.js","async":true}]
+2f:["$","$Lab",null,{"children":["$","$ac",null,{"name":"Next.MetadataOutlet","children":"$@ad"}]}]
+32:["$","$1","h",{"children":[null,["$","$Lae",null,{"children":[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]}],["$","div",null,{"hidden":true,"children":["$","$Laf",null,{"children":["$","$ac",null,{"name":"Next.Metadata","children":[["$","title","0",{"children":"Users and permissions | Apache Iggy"}],["$","link","1",{"rel":"canonical","href":"https://iggy.apache.org/blogs/2023/09/20/users-and-permissions/"}], [...]
+34:["$","$1","c",{"children":[null,["$","$Lb1",null,{"parallelRouterKey":"children","template":["$","$Lb2",null,{}]}]]}]
+37:["$","$1","c",{"children":[null,["$","$Lb1",null,{"parallelRouterKey":"children","template":["$","$Lb2",null,{}]}]]}]
+3a:true
+3d:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":"      \"read_topics\""}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":": "}],["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":"true"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":","}]]}]
+3e:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":"      \"poll_messages\""}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":": "}],["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":"true"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":","}]]}]
+3f:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":"      \"send_messages\""}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":": "}],["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":"true"}]]}]
+40:["$","span",null,{"className":"line","children":["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"    },"}]}]
+41:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":"    \"streams\""}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":": {"}]]}]
+42:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":"      \"1\""}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":": {"}]]}]
+43:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":"        \"manage_stream\""}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":": "}],["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":"false"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":","}]]}]
+44:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":"        \"read_stream\""}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":": "}],["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":"true"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":","}]]}]
+45:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":"        \"manage_topics\""}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":": "}],["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":"false"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":","}]]}]
+46:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":"        \"read_topics\""}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":": "}],["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":"true"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":","}]]}]
+47:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":"        \"poll_messages\""}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":": "}],["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":"true"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":","}]]}]
+48:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":"        \"send_messages\""}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":": "}],["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":"true"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":","}]]}]
+49:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":"        \"topics\""}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":": {"}]]}]
+4a:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":"          \"1\""}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":": {"}]]}]
+4b:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":"            \"manage_topic\""}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":": "}],["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":"false"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":","}]]}]
+4c:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":"            \"read_topic\""}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":": "}],["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":"true"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":","}]]}]
+4d:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":"            \"poll_messages\""}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":": "}],["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":"true"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":","}]]}]
+4e:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":"            \"send_messages\""}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":": "}],["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":"true"}]]}]
+4f:["$","span",null,{"className":"line","children":["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"          }"}]}]
+50:["$","span",null,{"className":"line","children":["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"        }"}]}]
+51:["$","span",null,{"className":"line","children":["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"      }"}]}]
+52:["$","span",null,{"className":"line","children":["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"    }"}]}]
+53:["$","span",null,{"className":"line","children":["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"  }"}]}]
+54:["$","span",null,{"className":"line","children":["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"}"}]}]
+55:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":"      \"read_topics\""}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":": "}],["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":"true"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":","}]]}]
+56:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":"      \"poll_messages\""}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":": "}],["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":"true"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":","}]]}]
+57:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":"      \"send_messages\""}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":": "}],["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":"true"}]]}]
+58:["$","span",null,{"className":"line","children":["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"    },"}]}]
+59:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":"    \"streams\""}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":": "}],["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":"null"}]]}]
+5a:["$","span",null,{"className":"line","children":["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"  }"}]}]
+5b:["$","span",null,{"className":"line","children":["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"}"}]}]
+5d:["$","$L3b",null,{"children":["$","code",null,{"children":[["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"pub"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":" trait"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" UserClient"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8 [...]
+5f:["$","$L3b",null,{"children":["$","code",null,{"children":[["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"pub"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":" struct"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" IdentityInfo"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E [...]
+61:["$","$L3b",null,{"children":["$","code",null,{"children":[["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"pub"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":" struct"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" UserInfo"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8" [...]
+63:["$","$L3b",null,{"children":["$","code",null,{"children":[["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"pub"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":" struct"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" Permissions"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4 [...]
+65:["$","$L3b",null,{"children":["$","code",null,{"children":[["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"pub"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":" struct"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" GetUser"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"} [...]
+67:["$","$L3b",null,{"children":["$","code",null,{"children":["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"pub"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":" struct"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" GetUsers"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"} [...]
+69:["$","$L3b",null,{"children":["$","code",null,{"children":[["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"pub"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":" struct"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" CreateUser"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E [...]
+6b:["$","$L3b",null,{"children":["$","code",null,{"children":[["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"pub"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":" struct"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" DeleteUser"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E [...]
+6d:["$","$L3b",null,{"children":["$","code",null,{"children":[["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"pub"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":" struct"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" UpdateUser"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E [...]
+6f:["$","$L3b",null,{"children":["$","code",null,{"children":[["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"pub"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":" struct"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" UpdatePermissions"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark": [...]
+71:["$","$L3b",null,{"children":["$","code",null,{"children":[["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"pub"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":" struct"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" ChangePassword"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E [...]
+73:["$","$L3b",null,{"children":["$","code",null,{"children":[["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"pub"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":" struct"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" LoginUser"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8 [...]
+75:["$","$L3b",null,{"children":["$","code",null,{"children":["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"pub"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":" struct"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" LogoutUser"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8 [...]
+76:["$","span",null,{"children":"}"}]
+77:["$","span",null,{"className":"line","children":["$","span",null,{}]}]
+78:["$","span",null,{"className":"line","children":["$","span",null,{"children":"PUT {{url}}/users/user1/password"}]}]
+79:["$","span",null,{"className":"line","children":["$","span",null,{"children":"Authorization: Bearer {{token}}"}]}]
+7a:["$","span",null,{"className":"line","children":["$","span",null,{"children":"Content-Type: application/json"}]}]
+7b:["$","span",null,{"className":"line","children":["$","span",null,{}]}]
+7c:["$","span",null,{"className":"line","children":["$","span",null,{"children":"{"}]}]
+7d:["$","span",null,{"className":"line","children":["$","span",null,{"children":"  \"current_password\": \"secret\","}]}]
+7e:["$","span",null,{"className":"line","children":["$","span",null,{"children":"  \"new_password\": \"secret1\""}]}]
+7f:["$","span",null,{"className":"line","children":["$","span",null,{"children":"}"}]}]
+80:["$","span",null,{"className":"line","children":["$","span",null,{}]}]
+81:["$","span",null,{"className":"line","children":["$","span",null,{"children":"PUT {{url}}/users/user1permissions"}]}]
+82:["$","span",null,{"className":"line","children":["$","span",null,{"children":"Authorization: Bearer {{token}}"}]}]
+83:["$","span",null,{"className":"line","children":["$","span",null,{"children":"Content-Type: application/json"}]}]
+84:["$","span",null,{"className":"line","children":["$","span",null,{}]}]
+85:["$","span",null,{"className":"line","children":["$","span",null,{"children":"{"}]}]
+86:["$","span",null,{"className":"line","children":["$","span",null,{"children":"  \"permissions\": {"}]}]
+87:["$","span",null,{"className":"line","children":["$","span",null,{"children":"    \"global\": {"}]}]
+88:["$","span",null,{"className":"line","children":["$","span",null,{"children":"      \"manage_servers\": false,"}]}]
+89:["$","span",null,{"className":"line","children":["$","span",null,{"children":"      \"read_servers\": true,"}]}]
+8a:["$","span",null,{"className":"line","children":["$","span",null,{"children":"      \"manage_users\": true,"}]}]
+8b:["$","span",null,{"className":"line","children":["$","span",null,{"children":"      \"read_users\": true,"}]}]
+8c:["$","span",null,{"className":"line","children":["$","span",null,{"children":"      \"manage_streams\": false,"}]}]
+8d:["$","span",null,{"className":"line","children":["$","span",null,{"children":"      \"read_streams\": true,"}]}]
+8e:["$","span",null,{"className":"line","children":["$","span",null,{"children":"      \"manage_topics\": false,"}]}]
+8f:["$","span",null,{"className":"line","children":["$","span",null,{"children":"      \"read_topics\": true,"}]}]
+90:["$","span",null,{"className":"line","children":["$","span",null,{"children":"      \"poll_messages\": true,"}]}]
+91:["$","span",null,{"className":"line","children":["$","span",null,{"children":"      \"send_messages\": true"}]}]
+92:["$","span",null,{"className":"line","children":["$","span",null,{"children":"    },"}]}]
+93:["$","span",null,{"className":"line","children":["$","span",null,{"children":"    \"streams\": {"}]}]
+94:["$","span",null,{"className":"line","children":["$","span",null,{"children":"      \"1\": {"}]}]
+95:["$","span",null,{"className":"line","children":["$","span",null,{"children":"        \"manage_stream\": false,"}]}]
+96:["$","span",null,{"className":"line","children":["$","span",null,{"children":"        \"read_stream\": true,"}]}]
+97:["$","span",null,{"className":"line","children":["$","span",null,{"children":"        \"manage_topics\": false,"}]}]
+98:["$","span",null,{"className":"line","children":["$","span",null,{"children":"        \"read_topics\": true,"}]}]
+99:["$","span",null,{"className":"line","children":["$","span",null,{"children":"        \"poll_messages\": true,"}]}]
+9a:["$","span",null,{"className":"line","children":["$","span",null,{"children":"        \"send_messages\": true,"}]}]
+9b:["$","span",null,{"className":"line","children":["$","span",null,{"children":"        \"topics\": {"}]}]
+9c:["$","span",null,{"className":"line","children":["$","span",null,{"children":"          \"1\": {"}]}]
+9d:["$","span",null,{"className":"line","children":["$","span",null,{"children":"            \"manage_topic\": false,"}]}]
+9e:["$","span",null,{"className":"line","children":["$","span",null,{"children":"            \"read_topic\": true,"}]}]
+9f:["$","span",null,{"className":"line","children":["$","span",null,{"children":"            \"poll_messages\": true,"}]}]
+a0:["$","span",null,{"className":"line","children":["$","span",null,{"children":"            \"send_messages\": true"}]}]
+a1:["$","span",null,{"className":"line","children":["$","span",null,{"children":"          }"}]}]
+a2:["$","span",null,{"className":"line","children":["$","span",null,{"children":"        }"}]}]
+a3:["$","span",null,{"className":"line","children":["$","span",null,{"children":"      }"}]}]
+a4:["$","span",null,{"className":"line","children":["$","span",null,{"children":"    }"}]}]
+a5:["$","span",null,{"className":"line","children":["$","span",null,{"children":"  }"}]}]
+a6:["$","span",null,{"className":"line","children":["$","span",null,{"children":"}"}]}]
+a7:["$","span",null,{"className":"line","children":["$","span",null,{}]}]
+a8:["$","span",null,{"className":"line","children":["$","span",null,{"children":"DELETE {{url}}/users/user1"}]}]
+a9:["$","span",null,{"className":"line","children":["$","span",null,{"children":"Authorization: Bearer {{token}}"}]}]
+ad:null
+31:300
+b3:["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":"self"}]
+b4:["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":", command"}]
+b5:["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":":"}]
+b6:["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":" &"}]
+b7:["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"CreateUser"}]
+b8:["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":") "}]
+b9:["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"->"}]
+ba:["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" Result"}]
+bb:["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"<(), "}]
+bc:["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"Error"}]
+bd:["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":">;"}]
+be:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"    async"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":" fn"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" delete_user"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"("}],["$","span",null,{"style":{"--shiki [...]
+bf:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"    async"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":" fn"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" update_user"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"("}],["$","span",null,{"style":{"--shiki [...]
+c0:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"    async"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":" fn"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" update_permissions"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"("}],["$","span",null,{"style":{" [...]
+c1:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"    async"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":" fn"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" change_password"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"("}],["$","span",null,{"style":{"--s [...]
+c2:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"    async"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":" fn"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" login_user"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"("}],["$","span",null,{"style":{"--shiki- [...]
+c3:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"    async"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":" fn"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" logout_user"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"("}],["$","span",null,{"style":{"--shiki [...]
+c4:["$","span",null,{"className":"line","children":["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"}"}]}]
+c5:["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":","}]
+c6:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"    pub"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":" username"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":":"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" String"}],["$","span",null,{"style":{"--shiki- [...]
+c7:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"    pub"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":" permissions"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":":"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" Option"}],["$","span",null,{"style":{"--shi [...]
+c8:["$","span",null,{"className":"line","children":["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"}"}]}]
+c9:["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" bool"}]
+ca:["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":","}]
+cb:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"    pub"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":" manage_streams"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":":"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" bool"}],["$","span",null,{"style":{"--sh [...]
+cc:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"    pub"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":" read_streams"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":":"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" bool"}],["$","span",null,{"style":{"--shik [...]
+cd:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"    pub"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":" manage_topics"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":":"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" bool"}],["$","span",null,{"style":{"--shi [...]
+ce:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"    pub"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":" read_topics"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":":"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" bool"}],["$","span",null,{"style":{"--shiki [...]
+cf:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"    pub"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":" poll_messages"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":":"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" bool"}],["$","span",null,{"style":{"--shi [...]
+d0:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"    pub"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":" send_messages"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":":"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" bool"}],["$","span",null,{"style":{"--shi [...]
+d1:["$","span",null,{"className":"line","children":["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"}"}]}]
+d2:["$","span",null,{"className":"line"}]
+d3:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"pub"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":" struct"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" StreamPermissions"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":" {"}]]}]
+d4:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"    pub"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":" manage_stream"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":":"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" bool"}],["$","span",null,{"style":{"--shi [...]
+d5:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"    pub"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":" read_stream"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":":"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" bool"}],["$","span",null,{"style":{"--shiki [...]
+d6:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"    pub"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":" manage_topics"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":":"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" bool"}],["$","span",null,{"style":{"--shi [...]
+d7:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"    pub"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":" read_topics"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":":"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" bool"}],["$","span",null,{"style":{"--shiki [...]
+d8:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"    pub"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":" poll_messages"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":":"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" bool"}],["$","span",null,{"style":{"--shi [...]
+d9:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"    pub"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":" send_messages"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":":"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" bool"}],["$","span",null,{"style":{"--shi [...]
+da:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"    pub"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":" topics"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":":"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" Option"}],["$","span",null,{"style":{"--shiki-li [...]
+db:["$","span",null,{"className":"line","children":["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"}"}]}]
+dc:["$","span",null,{"className":"line"}]
+dd:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"pub"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":" struct"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" TopicPermissions"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":" {"}]]}]
+de:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"    pub"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":" manage_topic"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":":"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" bool"}],["$","span",null,{"style":{"--shik [...]
+df:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"    pub"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":" read_topic"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":":"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" bool"}],["$","span",null,{"style":{"--shiki- [...]
+e0:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"    pub"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":" poll_messages"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":":"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" bool"}],["$","span",null,{"style":{"--shi [...]
+e1:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"    pub"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":" send_messages"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":":"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" bool"}],["$","span",null,{"style":{"--shi [...]
+e2:["$","span",null,{"className":"line","children":["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"}"}]}]
+31:C
+39:0
+33:"$undefined"
+35:"$undefined"
+38:"$undefined"
+30:"$undefined"
diff --git a/blogs/2023/09/20/users-and-permissions/__next.!KHNpdGUp.txt b/blogs/2023/09/20/users-and-permissions/__next.!KHNpdGUp.txt
new file mode 100644
index 000000000..940e917aa
--- /dev/null
+++ b/blogs/2023/09/20/users-and-permissions/__next.!KHNpdGUp.txt
@@ -0,0 +1,30 @@
+1:"$Sreact.fragment"
+2:I[22016,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],""]
+3:I[5014,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],"default"]
+4:I[64345,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js"],"HomeLayout"]
+5:I[88760,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js"],"Logo"]
+6:I[15269,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js"],"CommunityDropdown"]
+7:I[15269,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js"],"communityLinks"]
+8:I[29966,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js"],"ASFDropdown"]
+9:I[36330,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js"],"ASFMobileLinks"]
+a:I[39756,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"default"]
+b:I[37457,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"default"]
+14:X
+0:{"buildId":"CEAllZE6ERPzzxzpa_n8G","data":[{"rsc":["$","$1","c",{"children":[[["$","script","script-0",{"src":"/_next/static/chunks/241-fa32f9zay.js","async":true}],["$","script","script-1",{"src":"/_next/static/chunks/3x8y3fmtn6lnc.js","async":true}],["$","script","script-2",{"src":"/_next/static/chunks/250gopd52txql.js","async":true}],["$","script","script-3",{"src":"/_next/static/chunks/0n3fueko2xquo.js","async":true}]],[["$","div",null,{"className":"relative border-b border-white/[ [...]
+c:["$","$L2","/",{"href":"/","className":"transition-colors hover:text-fd-primary","children":"Home"}]
+d:["$","$L2","/docs",{"href":"/docs","className":"transition-colors hover:text-fd-primary","children":"Documentation"}]
+e:["$","$L2","/blogs",{"href":"/blogs","className":"transition-colors hover:text-fd-primary","children":"Blog"}]
+f:["$","$L2","/downloads",{"href":"/downloads","className":"transition-colors hover:text-fd-primary","children":"Downloads"}]
+10:["$","$L2","/community",{"href":"/community","className":"transition-colors hover:text-fd-primary","children":"Community"}]
+11:["$","p",null,{"className":"mt-6 max-w-md text-xs text-fd-muted-foreground","children":["Every page on this site is listed in"," ",["$","a",null,{"href":"/sitemap.xml","className":"underline hover:text-fd-primary","children":"/sitemap.xml"}],", and"," ",["$","a",null,{"href":"/llms.txt","className":"underline hover:text-fd-primary","children":"/llms.txt"}]," ","summarises the documentation."]}]
+12:["$","footer",null,{"className":"border-t border-fd-border bg-fd-background px-6 py-14 md:px-12","children":["$","div",null,{"className":"mx-auto max-w-6xl","children":[["$","div",null,{"className":"grid gap-10 sm:grid-cols-2 lg:grid-cols-4","children":[["$","div","Docs",{"children":[["$","h2",null,{"className":"mb-4 text-sm font-semibold uppercase tracking-wide text-fd-primary","children":"Docs"}],["$","ul",null,{"className":"space-y-2.5 text-sm","children":[["$","li","/docs",{"child [...]
+16:true
+17:["$","$L2",null,{"href":"https://www.apache.org/foundation/contributing.html","target":"_blank","rel":"noopener noreferrer","className":"text-fd-muted-foreground transition-colors hover:text-fd-foreground","children":"Donate"}]
+18:["$","li","https://www.apache.org/foundation/sponsorship.html",{"children":["$","$L2",null,{"href":"https://www.apache.org/foundation/sponsorship.html","target":"_blank","rel":"noopener noreferrer","className":"text-fd-muted-foreground transition-colors hover:text-fd-foreground","children":"Sponsors"}]}]
+19:["$","li","https://www.apache.org/security/",{"children":["$","$L2",null,{"href":"https://www.apache.org/security/","target":"_blank","rel":"noopener noreferrer","className":"text-fd-muted-foreground transition-colors hover:text-fd-foreground","children":"Security"}]}]
+1a:["$","li","https://privacy.apache.org/policies/privacy-policy-public.html",{"children":["$","$L2",null,{"href":"https://privacy.apache.org/policies/privacy-policy-public.html","target":"_blank","rel":"noopener noreferrer","className":"text-fd-muted-foreground transition-colors hover:text-fd-foreground","children":"Privacy"}]}]
+1b:["$","div",null,{"className":"mt-12 border-t border-fd-border pt-8 text-xs leading-relaxed text-fd-muted-foreground/70","children":[["$","p",null,{"className":"mt-4","children":["Copyright © ",2026," The Apache Software Foundation, Licensed under the Apache License, Version 2.0."]}],["$","p",null,{"className":"mt-4","children":"Apache Iggy, Iggy, Apache, and the Apache Iggy logo are trademarks or registered trademarks of The Apache Software Foundation. All other marks mentioned may be [...]
+14:300
+14:C
+15:0
+13:"$undefined"
diff --git a/blogs/2023/09/20/users-and-permissions/__next._full.txt b/blogs/2023/09/20/users-and-permissions/__next._full.txt
new file mode 100644
index 000000000..e4a2e7d31
--- /dev/null
+++ b/blogs/2023/09/20/users-and-permissions/__next._full.txt
@@ -0,0 +1,240 @@
+1:"$Sreact.fragment"
+3:I[17751,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"RootProvider"]
+4:I[39756,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"default"]
+5:I[58298,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/3-_96y-evozm0.js"],"default"]
+6:I[37457,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"default"]
+7:I[22016,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],""]
+12:I[68027,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"default",1]
+:HL["/_next/static/chunks/1_55v0vlfews3.css","style"]
+2:T512,{"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://iggy.apache.org/#organization","name":"The Apache Software Foundation","url":"https://www.apache.org/","logo":"https://iggy.apache.org/img/asf_logo.svg","contactPoint":{"@type":"ContactPoint","contactType":"technical support","email":"dev@iggy.apache.org","url":"https://iggy.apache.org/community/"}},{"@type":"WebSite","@id":"https://iggy.apache.org/#website","name":"Apache Iggy","url":"https://iggy.a [...]
+0:{"P":null,"c":["","blogs","2023","09","20","users-and-permissions",""],"q":"","i":false,"f":[[["",{"children":["(site)",{"children":["blogs",{"children":[["slug","2023/09/20/users-and-permissions","c",[]],{"children":["__PAGE__",{},"$undefined","$undefined",4608]},"$undefined","$undefined",4608]},"$undefined","$undefined",4608]},"$undefined","$undefined",4608]},"$undefined","$undefined",4624],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/ [...]
+14:I[79520,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],""]
+15:I[69877,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"Matomo"]
+16:I[5014,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],"default"]
+17:I[64345,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js"],"HomeLayout"]
+18:I[88760,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js"],"Logo"]
+19:I[15269,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js"],"CommunityDropdown"]
+1a:I[15269,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js"],"communityLinks"]
+1b:I[29966,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js"],"ASFDropdown"]
+1c:I[36330,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js"],"ASFMobileLinks"]
+25:I[97367,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"OutletBoundary"]
+26:"$Sreact.suspense"
+28:I[97367,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"ViewportBoundary"]
+2a:I[97367,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"MetadataBoundary"]
+8:["$","$L7","/community",{"href":"/community","className":"transition-colors hover:text-fd-primary","children":"Community"}]
+9:["$","p",null,{"className":"mt-6 max-w-md text-xs text-fd-muted-foreground","children":["Every page on this site is listed in"," ",["$","a",null,{"href":"/sitemap.xml","className":"underline hover:text-fd-primary","children":"/sitemap.xml"}],", and"," ",["$","a",null,{"href":"/llms.txt","className":"underline hover:text-fd-primary","children":"/llms.txt"}]," ","summarises the documentation."]}]
+a:["$","$L14",null,{"id":"matomo","strategy":"afterInteractive","children":"var _paq = window._paq = window._paq || [];\n_paq.push([\"setDoNotTrack\", true]);\n_paq.push([\"disableCookies\"]);\n_paq.push(['trackPageView']);\n_paq.push(['enableLinkTracking']);\n(function() {\n  var u=\"https://analytics.apache.org/\";\n  _paq.push(['setTrackerUrl', u+'matomo.php']);\n  _paq.push(['setSiteId', '80']);\n  var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];\n  [...]
+b:["$","$L15",null,{}]
+c:["$","$1","c",{"children":[[["$","script","script-0",{"src":"/_next/static/chunks/241-fa32f9zay.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/_next/static/chunks/3x8y3fmtn6lnc.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/_next/static/chunks/250gopd52txql.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/_next/static/chunks/0n3fueko2xquo.js","async":true,"nonce":"$undefined"}]],[["$","div",null,{"className" [...]
+d:["$","$1","c",{"children":[null,["$","$L4",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}]
+e:["$","$1","c",{"children":[null,["$","$L4",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}]
+f:["$","$1","c",{"children":["$L24",[["$","script","script-0",{"src":"/_next/static/chunks/1k39uva2a578s.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/_next/static/chunks/23ktdyx90z0v3.js","async":true,"nonce":"$undefined"}]],["$","$L25",null,{"children":["$","$26",null,{"name":"Next.MetadataOutlet","children":"$@27"}]}]]}]
+11:["$","$1","h",{"children":[null,["$","$L28",null,{"children":"$L29"}],["$","div",null,{"hidden":true,"children":["$","$L2a",null,{"children":["$","$26",null,{"name":"Next.Metadata","children":"$L2b"}]}]}],null]}]
+13:["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/1_55v0vlfews3.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]
+10:C
+1d:["$","$L7","/",{"href":"/","className":"transition-colors hover:text-fd-primary","children":"Home"}]
+1e:["$","$L7","/docs",{"href":"/docs","className":"transition-colors hover:text-fd-primary","children":"Documentation"}]
+1f:["$","$L7","/blogs",{"href":"/blogs","className":"transition-colors hover:text-fd-primary","children":"Blog"}]
+20:["$","$L7","/downloads",{"href":"/downloads","className":"transition-colors hover:text-fd-primary","children":"Downloads"}]
+21:["$","$L7","/community",{"href":"/community","className":"transition-colors hover:text-fd-primary","children":"Community"}]
+22:["$","p",null,{"className":"mt-6 max-w-md text-xs text-fd-muted-foreground","children":["Every page on this site is listed in"," ",["$","a",null,{"href":"/sitemap.xml","className":"underline hover:text-fd-primary","children":"/sitemap.xml"}],", and"," ",["$","a",null,{"href":"/llms.txt","className":"underline hover:text-fd-primary","children":"/llms.txt"}]," ","summarises the documentation."]}]
+23:["$","footer",null,{"className":"border-t border-fd-border bg-fd-background px-6 py-14 md:px-12","children":["$","div",null,{"className":"mx-auto max-w-6xl","children":[["$","div",null,{"className":"grid gap-10 sm:grid-cols-2 lg:grid-cols-4","children":[["$","div","Docs",{"children":[["$","h2",null,{"className":"mb-4 text-sm font-semibold uppercase tracking-wide text-fd-primary","children":"Docs"}],["$","ul",null,{"className":"space-y-2.5 text-sm","children":[["$","li","/docs",{"child [...]
+2c:["$","li","https://www.apache.org/foundation/contributing.html",{"children":["$","$L7",null,{"href":"https://www.apache.org/foundation/contributing.html","target":"_blank","rel":"noopener noreferrer","className":"text-fd-muted-foreground transition-colors hover:text-fd-foreground","children":"Donate"}]}]
+2d:["$","li","https://www.apache.org/foundation/sponsorship.html",{"children":["$","$L7",null,{"href":"https://www.apache.org/foundation/sponsorship.html","target":"_blank","rel":"noopener noreferrer","className":"text-fd-muted-foreground transition-colors hover:text-fd-foreground","children":"Sponsors"}]}]
+2e:["$","li","https://www.apache.org/security/",{"children":["$","$L7",null,{"href":"https://www.apache.org/security/","target":"_blank","rel":"noopener noreferrer","className":"text-fd-muted-foreground transition-colors hover:text-fd-foreground","children":"Security"}]}]
+2f:["$","li","https://privacy.apache.org/policies/privacy-policy-public.html",{"children":["$","$L7",null,{"href":"https://privacy.apache.org/policies/privacy-policy-public.html","target":"_blank","rel":"noopener noreferrer","className":"text-fd-muted-foreground transition-colors hover:text-fd-foreground","children":"Privacy"}]}]
+30:["$","div",null,{"className":"mt-12 border-t border-fd-border pt-8 text-xs leading-relaxed text-fd-muted-foreground/70","children":[["$","p",null,{"className":"mt-4","children":["Copyright © ",2026," The Apache Software Foundation, Licensed under the Apache License, Version 2.0."]}],["$","p",null,{"className":"mt-4","children":"Apache Iggy, Iggy, Apache, and the Apache Iggy logo are trademarks or registered trademarks of The Apache Software Foundation. All other marks mentioned may be [...]
+31:I[94157,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],"Heading"]
+32:I[44324,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],"CodeBlock"]
+:HL["/img/authors/piotr.png","image"]
+33:T1068,<svg viewBox="0 0 24 24"><path d="M23.8346 11.7033l-1.0073-.6236a13.7268 13.7268 0 00-.0283-.2936l.8656-.8069a.3483.3483 0 00-.1154-.578l-1.1066-.414a8.4958 8.4958 0 00-.087-.2856l.6904-.9587a.3462.3462 0 00-.2257-.5446l-1.1663-.1894a9.3574 9.3574 0 00-.1407-.2622l.49-1.0761a.3437.3437 0 00-.0274-.3361.3486.3486 0 00-.3006-.154l-1.1845.0416a6.7444 6.7444 0 00-.1873-.2268l.2723-1.153a.3472.3472 0 00-.417-.4172l-1.1532.2724a14.0183 14.0183 0 00-.2278-.1873l.0415-1.1845a.3442.3442  [...]
+5c:I[44324,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],"Pre"]
+5d:I[47873,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],"default"]
+34:["$","$L5c",null,{"children":["$","code",null,{"children":[["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"pub"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":" struct"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" ClientInfo"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E [...]
+35:["$","p",null,{"children":["The ",["$","code",null,{"children":"user_id"}]," field is optional, and it's only returned when the user is authenticated. Otherwise, it's set to ",["$","code",null,{"children":"None"}]," (0 value for binary transport) or ",["$","code",null,{"children":"null"}]," (HTTP transport)."]}]
+36:["$","p",null,{"children":["Keep in mind that the ",["$","code",null,{"children":"client"}]," represents the application connected to the server - since it's possible that multiple applications would share the same user credentials, thus you can think of a ",["$","code",null,{"children":"client"}]," as a single connection from the application to the server (1 user -> N clients)."]}]
+37:["$","p",null,{"children":["This breaking change has been introduced with the commit ",["$","$L5d",null,{"href":"https://github.com/apache/iggy/commit/23b330928aa38463ef907c95a9f672fa7b728881","children":"#23b3309"}],". The available ",["$","$L5d",null,{"href":"https://crates.io/crates/iggy","children":"iggy crate"}]," supports these changes since version 0.0.80."]}]
+38:["$","$L31",null,{"as":"h2","id":"configuration","children":"Configuration"}]
+39:["$","p",null,{"children":["Currently, the authentication and authorization can be enabled in the ",["$","code",null,{"children":"server.toml"}]," configuration via ",["$","code",null,{"children":"[system.user]"}]," section:"]}]
+3a:["$","$L32",null,{"className":"shiki shiki-themes github-light github-dark","style":{"--shiki-light":"#24292e","--shiki-dark":"#e1e4e8","--shiki-light-bg":"#fff","--shiki-dark-bg":"#24292e"},"tabIndex":"0","icon":"<svg viewBox=\"0 0 24 24\"><path d=\"M 6,1 C 4.354992,1 3,2.354992 3,4 v 16 c 0,1.645008 1.354992,3 3,3 h 12 c 1.645008,0 3,-1.354992 3,-3 V 8 7 A 1.0001,1.0001 0 0 0 20.707031,6.2929687 l -5,-5 A 1.0001,1.0001 0 0 0 15,1 h -1 z m 0,2 h 7 v 3 c 0,1.645008 1.354992,3 3,3 h 3  [...]
+3b:["$","p",null,{"children":"This might change in the future releases (e.g. authentication and authorization will always be enabled), but in order to avoid the breaking changes to the existing clients SDKs, these options are configurable for now."}]
+3c:["$","p",null,{"children":["The additional settings for HTTP API which uses JWT (JSON Web Token), can be found in the ",["$","code",null,{"children":"[http.jwt]"}]," section:"]}]
+3d:["$","$L32",null,{"className":"shiki shiki-themes github-light github-dark","style":{"--shiki-light":"#24292e","--shiki-dark":"#e1e4e8","--shiki-light-bg":"#fff","--shiki-dark-bg":"#24292e"},"tabIndex":"0","icon":"<svg viewBox=\"0 0 24 24\"><path d=\"M 6,1 C 4.354992,1 3,2.354992 3,4 v 16 c 0,1.645008 1.354992,3 3,3 h 12 c 1.645008,0 3,-1.354992 3,-3 V 8 7 A 1.0001,1.0001 0 0 0 20.707031,6.2929687 l -5,-5 A 1.0001,1.0001 0 0 0 15,1 h -1 z m 0,2 h 7 v 3 c 0,1.645008 1.354992,3 3,3 h 3  [...]
+3e:["$","$L31",null,{"as":"h2","id":"authentication-and-authorization","children":"Authentication and authorization"}]
+3f:["$","p",null,{"children":["The overall implementation of the users authentication and authorization is rather typical. All the server methods except ",["$","code",null,{"children":"ping"}]," and ",["$","code",null,{"children":"login"}]," require the user to be authenticated. The ",["$","code",null,{"children":"login"}]," method is used to authenticate the user, and it returns the optional ",["$","code",null,{"children":"token"}]," which is then used to authenticate the user in the su [...]
+40:["$","p",null,{"children":"The authorization is based on the permissions, which are defined for each user. All the server methods have the specific authorization policies applied. For example, you can allow the user to read all the streams, or manage all the topics, while on the other hand, you could also specify only the set of particular streams or topics to which the user can send and/or poll the message to/from."}]
+41:["$","p",null,{"children":"Take a look at the following JSON example to get the overall idea:"}]
+42:["$","$L32",null,{"className":"shiki shiki-themes github-light github-dark","style":{"--shiki-light":"#24292e","--shiki-dark":"#e1e4e8","--shiki-light-bg":"#fff","--shiki-dark-bg":"#24292e"},"tabIndex":"0","icon":"<svg viewBox=\"0 0 24 24\"><path d=\"M 6,1 C 4.354992,1 3,2.354992 3,4 v 16 c 0,1.645008 1.354992,3 3,3 h 12 c 1.645008,0 3,-1.354992 3,-3 V 8 7 A 1.0001,1.0001 0 0 0 20.707031,6.2929687 l -5,-5 A 1.0001,1.0001 0 0 0 15,1 h -1 z m 0,2 h 7 v 3 c 0,1.645008 1.354992,3 3,3 h 3  [...]
+43:["$","p",null,{"children":"Each user might have the global permissions which do apply to all the available streams and topics, as well as the granular permissions for each stream and its topics (this is a simple hashmap using the stream or topic ID as its key)."}]
+44:["$","p",null,{"children":["For example, the ",["$","code",null,{"children":"root user"}],", which has the default username and password ",["$","code",null,{"children":"iggy"}]," and cannot be updated or deleted, can do everything, simply by having the following permissions:"]}]
+45:["$","$L32",null,{"className":"shiki shiki-themes github-light github-dark","style":{"--shiki-light":"#24292e","--shiki-dark":"#e1e4e8","--shiki-light-bg":"#fff","--shiki-dark-bg":"#24292e"},"tabIndex":"0","icon":"<svg viewBox=\"0 0 24 24\"><path d=\"M 6,1 C 4.354992,1 3,2.354992 3,4 v 16 c 0,1.645008 1.354992,3 3,3 h 12 c 1.645008,0 3,-1.354992 3,-3 V 8 7 A 1.0001,1.0001 0 0 0 20.707031,6.2929687 l -5,-5 A 1.0001,1.0001 0 0 0 15,1 h -1 z m 0,2 h 7 v 3 c 0,1.645008 1.354992,3 3,3 h 3  [...]
+46:["$","$L31",null,{"as":"h2","id":"sdk","children":"SDK"}]
+47:["$","p",null,{"children":["The new ",["$","code",null,{"children":"UserClient"}]," trait has been added in order to support the users and permissions feature. It is implemented for all the available transport protocols."]}]
+7d:T1068,<svg viewBox="0 0 24 24"><path d="M23.8346 11.7033l-1.0073-.6236a13.7268 13.7268 0 00-.0283-.2936l.8656-.8069a.3483.3483 0 00-.1154-.578l-1.1066-.414a8.4958 8.4958 0 00-.087-.2856l.6904-.9587a.3462.3462 0 00-.2257-.5446l-1.1663-.1894a9.3574 9.3574 0 00-.1407-.2622l.49-1.0761a.3437.3437 0 00-.0274-.3361.3486.3486 0 00-.3006-.154l-1.1845.0416a6.7444 6.7444 0 00-.1873-.2268l.2723-1.153a.3472.3472 0 00-.417-.4172l-1.1532.2724a14.0183 14.0183 0 00-.2278-.1873l.0415-1.1845a.3442.3442  [...]
+49:["$","$L31",null,{"as":"h2","id":"commands-and-models","children":"Commands and models"}]
+4a:["$","p",null,{"children":"The following commands and response models have been added:"}]
+7f:T1068,<svg viewBox="0 0 24 24"><path d="M23.8346 11.7033l-1.0073-.6236a13.7268 13.7268 0 00-.0283-.2936l.8656-.8069a.3483.3483 0 00-.1154-.578l-1.1066-.414a8.4958 8.4958 0 00-.087-.2856l.6904-.9587a.3462.3462 0 00-.2257-.5446l-1.1663-.1894a9.3574 9.3574 0 00-.1407-.2622l.49-1.0761a.3437.3437 0 00-.0274-.3361.3486.3486 0 00-.3006-.154l-1.1845.0416a6.7444 6.7444 0 00-.1873-.2268l.2723-1.153a.3472.3472 0 00-.417-.4172l-1.1532.2724a14.0183 14.0183 0 00-.2278-.1873l.0415-1.1845a.3442.3442  [...]
+81:T1068,<svg viewBox="0 0 24 24"><path d="M23.8346 11.7033l-1.0073-.6236a13.7268 13.7268 0 00-.0283-.2936l.8656-.8069a.3483.3483 0 00-.1154-.578l-1.1066-.414a8.4958 8.4958 0 00-.087-.2856l.6904-.9587a.3462.3462 0 00-.2257-.5446l-1.1663-.1894a9.3574 9.3574 0 00-.1407-.2622l.49-1.0761a.3437.3437 0 00-.0274-.3361.3486.3486 0 00-.3006-.154l-1.1845.0416a6.7444 6.7444 0 00-.1873-.2268l.2723-1.153a.3472.3472 0 00-.417-.4172l-1.1532.2724a14.0183 14.0183 0 00-.2278-.1873l.0415-1.1845a.3442.3442  [...]
+83:T1068,<svg viewBox="0 0 24 24"><path d="M23.8346 11.7033l-1.0073-.6236a13.7268 13.7268 0 00-.0283-.2936l.8656-.8069a.3483.3483 0 00-.1154-.578l-1.1066-.414a8.4958 8.4958 0 00-.087-.2856l.6904-.9587a.3462.3462 0 00-.2257-.5446l-1.1663-.1894a9.3574 9.3574 0 00-.1407-.2622l.49-1.0761a.3437.3437 0 00-.0274-.3361.3486.3486 0 00-.3006-.154l-1.1845.0416a6.7444 6.7444 0 00-.1873-.2268l.2723-1.153a.3472.3472 0 00-.417-.4172l-1.1532.2724a14.0183 14.0183 0 00-.2278-.1873l.0415-1.1845a.3442.3442  [...]
+85:T1068,<svg viewBox="0 0 24 24"><path d="M23.8346 11.7033l-1.0073-.6236a13.7268 13.7268 0 00-.0283-.2936l.8656-.8069a.3483.3483 0 00-.1154-.578l-1.1066-.414a8.4958 8.4958 0 00-.087-.2856l.6904-.9587a.3462.3462 0 00-.2257-.5446l-1.1663-.1894a9.3574 9.3574 0 00-.1407-.2622l.49-1.0761a.3437.3437 0 00-.0274-.3361.3486.3486 0 00-.3006-.154l-1.1845.0416a6.7444 6.7444 0 00-.1873-.2268l.2723-1.153a.3472.3472 0 00-.417-.4172l-1.1532.2724a14.0183 14.0183 0 00-.2278-.1873l.0415-1.1845a.3442.3442  [...]
+87:T1068,<svg viewBox="0 0 24 24"><path d="M23.8346 11.7033l-1.0073-.6236a13.7268 13.7268 0 00-.0283-.2936l.8656-.8069a.3483.3483 0 00-.1154-.578l-1.1066-.414a8.4958 8.4958 0 00-.087-.2856l.6904-.9587a.3462.3462 0 00-.2257-.5446l-1.1663-.1894a9.3574 9.3574 0 00-.1407-.2622l.49-1.0761a.3437.3437 0 00-.0274-.3361.3486.3486 0 00-.3006-.154l-1.1845.0416a6.7444 6.7444 0 00-.1873-.2268l.2723-1.153a.3472.3472 0 00-.417-.4172l-1.1532.2724a14.0183 14.0183 0 00-.2278-.1873l.0415-1.1845a.3442.3442  [...]
+89:T1068,<svg viewBox="0 0 24 24"><path d="M23.8346 11.7033l-1.0073-.6236a13.7268 13.7268 0 00-.0283-.2936l.8656-.8069a.3483.3483 0 00-.1154-.578l-1.1066-.414a8.4958 8.4958 0 00-.087-.2856l.6904-.9587a.3462.3462 0 00-.2257-.5446l-1.1663-.1894a9.3574 9.3574 0 00-.1407-.2622l.49-1.0761a.3437.3437 0 00-.0274-.3361.3486.3486 0 00-.3006-.154l-1.1845.0416a6.7444 6.7444 0 00-.1873-.2268l.2723-1.153a.3472.3472 0 00-.417-.4172l-1.1532.2724a14.0183 14.0183 0 00-.2278-.1873l.0415-1.1845a.3442.3442  [...]
+8b:T1068,<svg viewBox="0 0 24 24"><path d="M23.8346 11.7033l-1.0073-.6236a13.7268 13.7268 0 00-.0283-.2936l.8656-.8069a.3483.3483 0 00-.1154-.578l-1.1066-.414a8.4958 8.4958 0 00-.087-.2856l.6904-.9587a.3462.3462 0 00-.2257-.5446l-1.1663-.1894a9.3574 9.3574 0 00-.1407-.2622l.49-1.0761a.3437.3437 0 00-.0274-.3361.3486.3486 0 00-.3006-.154l-1.1845.0416a6.7444 6.7444 0 00-.1873-.2268l.2723-1.153a.3472.3472 0 00-.417-.4172l-1.1532.2724a14.0183 14.0183 0 00-.2278-.1873l.0415-1.1845a.3442.3442  [...]
+8d:T1068,<svg viewBox="0 0 24 24"><path d="M23.8346 11.7033l-1.0073-.6236a13.7268 13.7268 0 00-.0283-.2936l.8656-.8069a.3483.3483 0 00-.1154-.578l-1.1066-.414a8.4958 8.4958 0 00-.087-.2856l.6904-.9587a.3462.3462 0 00-.2257-.5446l-1.1663-.1894a9.3574 9.3574 0 00-.1407-.2622l.49-1.0761a.3437.3437 0 00-.0274-.3361.3486.3486 0 00-.3006-.154l-1.1845.0416a6.7444 6.7444 0 00-.1873-.2268l.2723-1.153a.3472.3472 0 00-.417-.4172l-1.1532.2724a14.0183 14.0183 0 00-.2278-.1873l.0415-1.1845a.3442.3442  [...]
+8f:T1068,<svg viewBox="0 0 24 24"><path d="M23.8346 11.7033l-1.0073-.6236a13.7268 13.7268 0 00-.0283-.2936l.8656-.8069a.3483.3483 0 00-.1154-.578l-1.1066-.414a8.4958 8.4958 0 00-.087-.2856l.6904-.9587a.3462.3462 0 00-.2257-.5446l-1.1663-.1894a9.3574 9.3574 0 00-.1407-.2622l.49-1.0761a.3437.3437 0 00-.0274-.3361.3486.3486 0 00-.3006-.154l-1.1845.0416a6.7444 6.7444 0 00-.1873-.2268l.2723-1.153a.3472.3472 0 00-.417-.4172l-1.1532.2724a14.0183 14.0183 0 00-.2278-.1873l.0415-1.1845a.3442.3442  [...]
+91:T1068,<svg viewBox="0 0 24 24"><path d="M23.8346 11.7033l-1.0073-.6236a13.7268 13.7268 0 00-.0283-.2936l.8656-.8069a.3483.3483 0 00-.1154-.578l-1.1066-.414a8.4958 8.4958 0 00-.087-.2856l.6904-.9587a.3462.3462 0 00-.2257-.5446l-1.1663-.1894a9.3574 9.3574 0 00-.1407-.2622l.49-1.0761a.3437.3437 0 00-.0274-.3361.3486.3486 0 00-.3006-.154l-1.1845.0416a6.7444 6.7444 0 00-.1873-.2268l.2723-1.153a.3472.3472 0 00-.417-.4172l-1.1532.2724a14.0183 14.0183 0 00-.2278-.1873l.0415-1.1845a.3442.3442  [...]
+93:T1068,<svg viewBox="0 0 24 24"><path d="M23.8346 11.7033l-1.0073-.6236a13.7268 13.7268 0 00-.0283-.2936l.8656-.8069a.3483.3483 0 00-.1154-.578l-1.1066-.414a8.4958 8.4958 0 00-.087-.2856l.6904-.9587a.3462.3462 0 00-.2257-.5446l-1.1663-.1894a9.3574 9.3574 0 00-.1407-.2622l.49-1.0761a.3437.3437 0 00-.0274-.3361.3486.3486 0 00-.3006-.154l-1.1845.0416a6.7444 6.7444 0 00-.1873-.2268l.2723-1.153a.3472.3472 0 00-.417-.4172l-1.1532.2724a14.0183 14.0183 0 00-.2278-.1873l.0415-1.1845a.3442.3442  [...]
+95:T1068,<svg viewBox="0 0 24 24"><path d="M23.8346 11.7033l-1.0073-.6236a13.7268 13.7268 0 00-.0283-.2936l.8656-.8069a.3483.3483 0 00-.1154-.578l-1.1066-.414a8.4958 8.4958 0 00-.087-.2856l.6904-.9587a.3462.3462 0 00-.2257-.5446l-1.1663-.1894a9.3574 9.3574 0 00-.1407-.2622l.49-1.0761a.3437.3437 0 00-.0274-.3361.3486.3486 0 00-.3006-.154l-1.1845.0416a6.7444 6.7444 0 00-.1873-.2268l.2723-1.153a.3472.3472 0 00-.417-.4172l-1.1532.2724a14.0183 14.0183 0 00-.2278-.1873l.0415-1.1845a.3442.3442  [...]
+57:["$","p",null,{"children":["Similar to the stream and topic ID, the user will always have the unique numeric ID and the username. The username must be within the range of 3–50 chars and will always be lowercased, using the same regex as the stream and topic name ",["$","code",null,{"children":"^[\\w\\.\\-\\s]+$"}],". The password must be within the range of 3–100 chars and will be hashed using the bcrypt algorithm."]}]
+58:["$","$L31",null,{"as":"h2","id":"http-api","children":"HTTP API"}]
+59:["$","p",null,{"children":["The following endpoints have been added, and as always, you can find them in the ",["$","code",null,{"children":"server.http"}]," file in the main repository."]}]
+5a:["$","$L32",null,{"className":"shiki shiki-themes github-light github-dark","style":{"--shiki-light":"#24292e","--shiki-dark":"#e1e4e8","--shiki-light-bg":"#fff","--shiki-dark-bg":"#24292e"},"tabIndex":"0","icon":"<svg viewBox=\"0 0 24 24\"><path d=\"M 6,1 C 4.354992,1 3,2.354992 3,4 v 16 c 0,1.645008 1.354992,3 3,3 h 12 c 1.645008,0 3,-1.354992 3,-3 V 8 7 A 1.0001,1.0001 0 0 0 20.707031,6.2929687 l -5,-5 A 1.0001,1.0001 0 0 0 15,1 h -1 z m 0,2 h 7 v 3 c 0,1.645008 1.354992,3 3,3 h 3  [...]
+5b:["$","footer",null,{"className":"mt-16 border-t border-fd-border pt-8","children":["$","$L7",null,{"href":"/blogs","className":"inline-flex items-center gap-2 text-sm font-medium text-fd-primary transition-colors hover:opacity-80","children":"← Back to all posts"}]}]
+5e:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":"      \"read_topics\""}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":": "}],["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":"true"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":","}]]}]
+5f:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":"      \"poll_messages\""}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":": "}],["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":"true"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":","}]]}]
+60:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":"      \"send_messages\""}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":": "}],["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":"true"}]]}]
+61:["$","span",null,{"className":"line","children":["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"    },"}]}]
+62:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":"    \"streams\""}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":": {"}]]}]
+63:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":"      \"1\""}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":": {"}]]}]
+64:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":"        \"manage_stream\""}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":": "}],["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":"false"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":","}]]}]
+65:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":"        \"read_stream\""}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":": "}],["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":"true"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":","}]]}]
+66:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":"        \"manage_topics\""}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":": "}],["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":"false"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":","}]]}]
+67:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":"        \"read_topics\""}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":": "}],["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":"true"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":","}]]}]
+68:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":"        \"poll_messages\""}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":": "}],["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":"true"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":","}]]}]
+69:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":"        \"send_messages\""}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":": "}],["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":"true"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":","}]]}]
+6a:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":"        \"topics\""}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":": {"}]]}]
+6b:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":"          \"1\""}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":": {"}]]}]
+6c:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":"            \"manage_topic\""}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":": "}],["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":"false"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":","}]]}]
+6d:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":"            \"read_topic\""}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":": "}],["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":"true"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":","}]]}]
+6e:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":"            \"poll_messages\""}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":": "}],["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":"true"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":","}]]}]
+6f:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":"            \"send_messages\""}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":": "}],["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":"true"}]]}]
+70:["$","span",null,{"className":"line","children":["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"          }"}]}]
+71:["$","span",null,{"className":"line","children":["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"        }"}]}]
+72:["$","span",null,{"className":"line","children":["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"      }"}]}]
+73:["$","span",null,{"className":"line","children":["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"    }"}]}]
+74:["$","span",null,{"className":"line","children":["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"  }"}]}]
+75:["$","span",null,{"className":"line","children":["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"}"}]}]
+76:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":"      \"read_topics\""}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":": "}],["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":"true"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":","}]]}]
+77:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":"      \"poll_messages\""}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":": "}],["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":"true"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":","}]]}]
+78:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":"      \"send_messages\""}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":": "}],["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":"true"}]]}]
+79:["$","span",null,{"className":"line","children":["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"    },"}]}]
+7a:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":"    \"streams\""}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":": "}],["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":"null"}]]}]
+7b:["$","span",null,{"className":"line","children":["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"  }"}]}]
+7c:["$","span",null,{"className":"line","children":["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"}"}]}]
+7e:["$","$L5c",null,{"children":["$","code",null,{"children":[["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"pub"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":" trait"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" UserClient"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8 [...]
+fb:I[27201,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"IconMark"]
+80:["$","$L5c",null,{"children":["$","code",null,{"children":[["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"pub"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":" struct"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" IdentityInfo"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E [...]
+82:["$","$L5c",null,{"children":["$","code",null,{"children":[["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"pub"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":" struct"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" UserInfo"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8" [...]
+84:["$","$L5c",null,{"children":["$","code",null,{"children":[["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"pub"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":" struct"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" Permissions"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4 [...]
+86:["$","$L5c",null,{"children":["$","code",null,{"children":[["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"pub"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":" struct"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" GetUser"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"} [...]
+88:["$","$L5c",null,{"children":["$","code",null,{"children":["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"pub"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":" struct"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" GetUsers"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"} [...]
+8a:["$","$L5c",null,{"children":["$","code",null,{"children":[["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"pub"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":" struct"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" CreateUser"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E [...]
+8c:["$","$L5c",null,{"children":["$","code",null,{"children":[["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"pub"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":" struct"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" DeleteUser"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E [...]
+8e:["$","$L5c",null,{"children":["$","code",null,{"children":[["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"pub"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":" struct"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" UpdateUser"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E [...]
+90:["$","$L5c",null,{"children":["$","code",null,{"children":[["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"pub"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":" struct"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" UpdatePermissions"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark": [...]
+92:["$","$L5c",null,{"children":["$","code",null,{"children":[["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"pub"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":" struct"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" ChangePassword"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E [...]
+94:["$","$L5c",null,{"children":["$","code",null,{"children":[["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"pub"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":" struct"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" LoginUser"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8 [...]
+96:["$","$L5c",null,{"children":["$","code",null,{"children":["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"pub"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":" struct"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" LogoutUser"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8 [...]
+97:["$","span",null,{"children":"}"}]
+98:["$","span",null,{"className":"line","children":["$","span",null,{}]}]
+99:["$","span",null,{"className":"line","children":["$","span",null,{"children":"PUT {{url}}/users/user1/password"}]}]
+9a:["$","span",null,{"className":"line","children":["$","span",null,{"children":"Authorization: Bearer {{token}}"}]}]
+9b:["$","span",null,{"className":"line","children":["$","span",null,{"children":"Content-Type: application/json"}]}]
+9c:["$","span",null,{"className":"line","children":["$","span",null,{}]}]
+9d:["$","span",null,{"className":"line","children":["$","span",null,{"children":"{"}]}]
+9e:["$","span",null,{"className":"line","children":["$","span",null,{"children":"  \"current_password\": \"secret\","}]}]
+9f:["$","span",null,{"className":"line","children":["$","span",null,{"children":"  \"new_password\": \"secret1\""}]}]
+a0:["$","span",null,{"className":"line","children":["$","span",null,{"children":"}"}]}]
+a1:["$","span",null,{"className":"line","children":["$","span",null,{}]}]
+a2:["$","span",null,{"className":"line","children":["$","span",null,{"children":"PUT {{url}}/users/user1permissions"}]}]
+a3:["$","span",null,{"className":"line","children":["$","span",null,{"children":"Authorization: Bearer {{token}}"}]}]
+a4:["$","span",null,{"className":"line","children":["$","span",null,{"children":"Content-Type: application/json"}]}]
+a5:["$","span",null,{"className":"line","children":["$","span",null,{}]}]
+a6:["$","span",null,{"className":"line","children":["$","span",null,{"children":"{"}]}]
+a7:["$","span",null,{"className":"line","children":["$","span",null,{"children":"  \"permissions\": {"}]}]
+a8:["$","span",null,{"className":"line","children":["$","span",null,{"children":"    \"global\": {"}]}]
+a9:["$","span",null,{"className":"line","children":["$","span",null,{"children":"      \"manage_servers\": false,"}]}]
+aa:["$","span",null,{"className":"line","children":["$","span",null,{"children":"      \"read_servers\": true,"}]}]
+ab:["$","span",null,{"className":"line","children":["$","span",null,{"children":"      \"manage_users\": true,"}]}]
+ac:["$","span",null,{"className":"line","children":["$","span",null,{"children":"      \"read_users\": true,"}]}]
+ad:["$","span",null,{"className":"line","children":["$","span",null,{"children":"      \"manage_streams\": false,"}]}]
+ae:["$","span",null,{"className":"line","children":["$","span",null,{"children":"      \"read_streams\": true,"}]}]
+af:["$","span",null,{"className":"line","children":["$","span",null,{"children":"      \"manage_topics\": false,"}]}]
+b0:["$","span",null,{"className":"line","children":["$","span",null,{"children":"      \"read_topics\": true,"}]}]
+b1:["$","span",null,{"className":"line","children":["$","span",null,{"children":"      \"poll_messages\": true,"}]}]
+b2:["$","span",null,{"className":"line","children":["$","span",null,{"children":"      \"send_messages\": true"}]}]
+b3:["$","span",null,{"className":"line","children":["$","span",null,{"children":"    },"}]}]
+b4:["$","span",null,{"className":"line","children":["$","span",null,{"children":"    \"streams\": {"}]}]
+b5:["$","span",null,{"className":"line","children":["$","span",null,{"children":"      \"1\": {"}]}]
+b6:["$","span",null,{"className":"line","children":["$","span",null,{"children":"        \"manage_stream\": false,"}]}]
+b7:["$","span",null,{"className":"line","children":["$","span",null,{"children":"        \"read_stream\": true,"}]}]
+b8:["$","span",null,{"className":"line","children":["$","span",null,{"children":"        \"manage_topics\": false,"}]}]
+b9:["$","span",null,{"className":"line","children":["$","span",null,{"children":"        \"read_topics\": true,"}]}]
+ba:["$","span",null,{"className":"line","children":["$","span",null,{"children":"        \"poll_messages\": true,"}]}]
+bb:["$","span",null,{"className":"line","children":["$","span",null,{"children":"        \"send_messages\": true,"}]}]
+bc:["$","span",null,{"className":"line","children":["$","span",null,{"children":"        \"topics\": {"}]}]
+bd:["$","span",null,{"className":"line","children":["$","span",null,{"children":"          \"1\": {"}]}]
+be:["$","span",null,{"className":"line","children":["$","span",null,{"children":"            \"manage_topic\": false,"}]}]
+bf:["$","span",null,{"className":"line","children":["$","span",null,{"children":"            \"read_topic\": true,"}]}]
+c0:["$","span",null,{"className":"line","children":["$","span",null,{"children":"            \"poll_messages\": true,"}]}]
+c1:["$","span",null,{"className":"line","children":["$","span",null,{"children":"            \"send_messages\": true"}]}]
+c2:["$","span",null,{"className":"line","children":["$","span",null,{"children":"          }"}]}]
+c3:["$","span",null,{"className":"line","children":["$","span",null,{"children":"        }"}]}]
+c4:["$","span",null,{"className":"line","children":["$","span",null,{"children":"      }"}]}]
+c5:["$","span",null,{"className":"line","children":["$","span",null,{"children":"    }"}]}]
+c6:["$","span",null,{"className":"line","children":["$","span",null,{"children":"  }"}]}]
+c7:["$","span",null,{"className":"line","children":["$","span",null,{"children":"}"}]}]
+c8:["$","span",null,{"className":"line","children":["$","span",null,{}]}]
+c9:["$","span",null,{"className":"line","children":["$","span",null,{"children":"DELETE {{url}}/users/user1"}]}]
+ca:["$","span",null,{"className":"line","children":["$","span",null,{"children":"Authorization: Bearer {{token}}"}]}]
+cb:["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":"self"}]
+cc:["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":", command"}]
+cd:["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":":"}]
+ce:["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":" &"}]
+cf:["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"CreateUser"}]
+d0:["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":") "}]
+d1:["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"->"}]
+d2:["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" Result"}]
+d3:["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"<(), "}]
+d4:["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"Error"}]
+d5:["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":">;"}]
+d6:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"    async"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":" fn"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" delete_user"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"("}],["$","span",null,{"style":{"--shiki [...]
+d7:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"    async"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":" fn"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" update_user"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"("}],["$","span",null,{"style":{"--shiki [...]
+d8:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"    async"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":" fn"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" update_permissions"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"("}],["$","span",null,{"style":{" [...]
+d9:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"    async"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":" fn"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" change_password"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"("}],["$","span",null,{"style":{"--s [...]
+da:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"    async"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":" fn"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" login_user"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"("}],["$","span",null,{"style":{"--shiki- [...]
+db:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"    async"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":" fn"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" logout_user"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"("}],["$","span",null,{"style":{"--shiki [...]
+dc:["$","span",null,{"className":"line","children":["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"}"}]}]
+dd:["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":","}]
+de:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"    pub"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":" username"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":":"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" String"}],["$","span",null,{"style":{"--shiki- [...]
+df:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"    pub"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":" permissions"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":":"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" Option"}],["$","span",null,{"style":{"--shi [...]
+e0:["$","span",null,{"className":"line","children":["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"}"}]}]
+e1:["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" bool"}]
+e2:["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":","}]
+e3:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"    pub"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":" manage_streams"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":":"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" bool"}],["$","span",null,{"style":{"--sh [...]
+e4:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"    pub"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":" read_streams"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":":"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" bool"}],["$","span",null,{"style":{"--shik [...]
+e5:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"    pub"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":" manage_topics"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":":"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" bool"}],["$","span",null,{"style":{"--shi [...]
+e6:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"    pub"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":" read_topics"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":":"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" bool"}],["$","span",null,{"style":{"--shiki [...]
+e7:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"    pub"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":" poll_messages"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":":"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" bool"}],["$","span",null,{"style":{"--shi [...]
+e8:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"    pub"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":" send_messages"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":":"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" bool"}],["$","span",null,{"style":{"--shi [...]
+e9:["$","span",null,{"className":"line","children":["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"}"}]}]
+ea:["$","span",null,{"className":"line"}]
+eb:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"pub"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":" struct"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" StreamPermissions"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":" {"}]]}]
+ec:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"    pub"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":" manage_stream"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":":"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" bool"}],["$","span",null,{"style":{"--shi [...]
+ed:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"    pub"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":" read_stream"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":":"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" bool"}],["$","span",null,{"style":{"--shiki [...]
+ee:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"    pub"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":" manage_topics"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":":"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" bool"}],["$","span",null,{"style":{"--shi [...]
+ef:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"    pub"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":" read_topics"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":":"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" bool"}],["$","span",null,{"style":{"--shiki [...]
+f0:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"    pub"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":" poll_messages"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":":"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" bool"}],["$","span",null,{"style":{"--shi [...]
+f1:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"    pub"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":" send_messages"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":":"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" bool"}],["$","span",null,{"style":{"--shi [...]
+f2:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"    pub"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":" topics"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":":"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" Option"}],["$","span",null,{"style":{"--shiki-li [...]
+f3:["$","span",null,{"className":"line","children":["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"}"}]}]
+f4:["$","span",null,{"className":"line"}]
+f5:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"pub"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":" struct"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" TopicPermissions"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":" {"}]]}]
+f6:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"    pub"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":" manage_topic"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":":"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" bool"}],["$","span",null,{"style":{"--shik [...]
+f7:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"    pub"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":" read_topic"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":":"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" bool"}],["$","span",null,{"style":{"--shiki- [...]
+f8:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"    pub"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":" poll_messages"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":":"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" bool"}],["$","span",null,{"style":{"--shi [...]
+f9:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"    pub"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":" send_messages"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":":"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" bool"}],["$","span",null,{"style":{"--shi [...]
+fa:["$","span",null,{"className":"line","children":["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"}"}]}]
+29:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]
+27:null
+2b:[["$","title","0",{"children":"Users and permissions | Apache Iggy"}],["$","link","1",{"rel":"canonical","href":"https://iggy.apache.org/blogs/2023/09/20/users-and-permissions/"}],["$","link","2",{"rel":"alternate","type":"text/markdown","href":"https://iggy.apache.org/blogs/2023/09/20/users-and-permissions.md"}],["$","meta","3",{"property":"og:title","content":"Users and permissions | Apache Iggy"}],["$","meta","4",{"property":"og:url","content":"https://iggy.apache.org/blogs/2023/09 [...]
diff --git a/blogs/2023/09/20/users-and-permissions/__next._index.txt b/blogs/2023/09/20/users-and-permissions/__next._index.txt
new file mode 100644
index 000000000..42b058136
--- /dev/null
+++ b/blogs/2023/09/20/users-and-permissions/__next._index.txt
@@ -0,0 +1,20 @@
+1:"$Sreact.fragment"
+3:I[17751,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"RootProvider"]
+4:I[39756,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"default"]
+5:I[58298,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/3-_96y-evozm0.js"],"default"]
+6:I[37457,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"default"]
+7:I[22016,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],""]
+:HL["/_next/static/chunks/1_55v0vlfews3.css","style"]
+2:T512,{"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://iggy.apache.org/#organization","name":"The Apache Software Foundation","url":"https://www.apache.org/","logo":"https://iggy.apache.org/img/asf_logo.svg","contactPoint":{"@type":"ContactPoint","contactType":"technical support","email":"dev@iggy.apache.org","url":"https://iggy.apache.org/community/"}},{"@type":"WebSite","@id":"https://iggy.apache.org/#website","name":"Apache Iggy","url":"https://iggy.a [...]
+0:{"buildId":"CEAllZE6ERPzzxzpa_n8G","data":[{"rsc":["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/1_55v0vlfews3.css","precedence":"next"}],["$","script","script-0",{"src":"/_next/static/chunks/05hk4ely-lns6.js","async":true}],["$","script","script-1",{"src":"/_next/static/chunks/2tvyahbdutabx.js","async":true}]],["$","html",null,{"lang":"en","suppressHydrationWarning":true,"children":["$","body",null,{"className":"flex min-h-screen flex-col  [...]
+10:I[79520,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],""]
+11:I[69877,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"Matomo"]
+8:["$","a",null,{"href":"/sitemap.xml","className":"underline hover:text-fd-primary","children":"/sitemap.xml"}]
+9:["$","a",null,{"href":"/llms.txt","className":"underline hover:text-fd-primary","children":"/llms.txt"}]
+a:["$","$L10",null,{"id":"matomo","strategy":"afterInteractive","children":"var _paq = window._paq = window._paq || [];\n_paq.push([\"setDoNotTrack\", true]);\n_paq.push([\"disableCookies\"]);\n_paq.push(['trackPageView']);\n_paq.push(['enableLinkTracking']);\n(function() {\n  var u=\"https://analytics.apache.org/\";\n  _paq.push(['setTrackerUrl', u+'matomo.php']);\n  _paq.push(['setSiteId', '80']);\n  var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];\n  [...]
+b:["$","$L11",null,{}]
+d:300
+f:true
+d:C
+e:0
+c:"$undefined"
diff --git a/blogs/2023/09/20/users-and-permissions/__next._tree.txt b/blogs/2023/09/20/users-and-permissions/__next._tree.txt
new file mode 100644
index 000000000..9300c69ac
--- /dev/null
+++ b/blogs/2023/09/20/users-and-permissions/__next._tree.txt
@@ -0,0 +1,3 @@
+:HL["/_next/static/chunks/1_55v0vlfews3.css","style"]
+:HL["/img/authors/piotr.png","image"]
+0:{"tree":{"name":"","param":null,"prefetchHints":4112,"slots":{"children":{"name":"(site)","param":null,"prefetchHints":4096,"slots":{"children":{"name":"blogs","param":null,"prefetchHints":4160,"slots":{"children":{"name":"slug","param":{"type":"c","key":"2023/09/20/users-and-permissions","siblings":[]},"prefetchHints":4192,"slots":{"children":{"name":"__PAGE__","param":null,"prefetchHints":4256,"slots":null}}}}}}}}},"staleTime":300,"buildId":"CEAllZE6ERPzzxzpa_n8G"}
diff --git a/blogs/2023/09/20/users-and-permissions/index.html b/blogs/2023/09/20/users-and-permissions/index.html
new file mode 100644
index 000000000..bfa6b860a
--- /dev/null
+++ b/blogs/2023/09/20/users-and-permissions/index.html
@@ -0,0 +1,278 @@
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" href="/img/authors/piotr.png" as="image"/><link rel="stylesheet" href="/_next/static/chunks/1_55v0vlfews3.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/1qt6pht_u0de1.js"/><script src="/_next/static/chunks/1iye7dwhtxrnu.js" async=""></script><script src="/_next/static/chunks/1t7fq8 [...]
+<h2 id="breaking-changes" class="group/heading flex scroll-m-28 flex-row items-center gap-1"><a data-card="" href="#breaking-changes">Breaking changes</a><button aria-label="Copy Anchor Link" class="inline-flex items-center justify-center rounded-md text-sm font-medium duration-100 disabled:pointer-events-none disabled:opacity-50 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-fd-ring hover:bg-fd-accent hover:text-fd-accent-foreground p-1 [&amp;_svg]:size-4 not-prose s [...]
+<p>In general, there are no breaking changes, except a new field added to the <code>ClientInfo</code> and <code>ClientInfoDetails</code> structs returned by <code>get_client()</code> and <code>get_clients()</code> methods.</p>
+<figure dir="ltr" class="my-4 bg-fd-card rounded-xl shiki relative border shadow-sm not-prose overflow-hidden text-sm shiki shiki-themes github-light github-dark" style="--shiki-light:#24292e;--shiki-dark:#e1e4e8;--shiki-light-bg:#fff;--shiki-dark-bg:#24292e" tabindex="-1"><div class="empty:hidden absolute top-3 right-2 z-2 backdrop-blur-lg rounded-lg text-fd-muted-foreground"><button type="button" class="inline-flex items-center justify-center rounded-md text-sm font-medium transition-c [...]
+<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    pub</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> client_id</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">:</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> u32</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
+<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    pub</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> user_id</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">:</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> Option</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">&lt;</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">u32</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">&g [...]
+<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    pub</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> address</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">:</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> String</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
+<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    pub</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> transport</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">:</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> String</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
+<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    pub</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> consumer_groups_count</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">:</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> u32</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
+<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">}</span></span></code></pre></div></figure>
+<p>The <code>user_id</code> field is optional, and it&#x27;s only returned when the user is authenticated. Otherwise, it&#x27;s set to <code>None</code> (0 value for binary transport) or <code>null</code> (HTTP transport).</p>
+<p>Keep in mind that the <code>client</code> represents the application connected to the server - since it&#x27;s possible that multiple applications would share the same user credentials, thus you can think of a <code>client</code> as a single connection from the application to the server (1 user -&gt; N clients).</p>
+<p>This breaking change has been introduced with the commit <a href="https://github.com/apache/iggy/commit/23b330928aa38463ef907c95a9f672fa7b728881" rel="noreferrer noopener" target="_blank">#23b3309</a>. The available <a href="https://crates.io/crates/iggy" rel="noreferrer noopener" target="_blank">iggy crate</a> supports these changes since version 0.0.80.</p>
+<h2 id="configuration" class="group/heading flex scroll-m-28 flex-row items-center gap-1"><a data-card="" href="#configuration">Configuration</a><button aria-label="Copy Anchor Link" class="inline-flex items-center justify-center rounded-md text-sm font-medium duration-100 disabled:pointer-events-none disabled:opacity-50 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-fd-ring hover:bg-fd-accent hover:text-fd-accent-foreground p-1 [&amp;_svg]:size-4 not-prose shrink-0 t [...]
+<p>Currently, the authentication and authorization can be enabled in the <code>server.toml</code> configuration via <code>[system.user]</code> section:</p>
+<figure dir="ltr" class="my-4 bg-fd-card rounded-xl shiki relative border shadow-sm not-prose overflow-hidden text-sm shiki shiki-themes github-light github-dark" style="--shiki-light:#24292e;--shiki-dark:#e1e4e8;--shiki-light-bg:#fff;--shiki-dark-bg:#24292e" tabindex="-1"><div class="empty:hidden absolute top-3 right-2 z-2 backdrop-blur-lg rounded-lg text-fd-muted-foreground"><button type="button" class="inline-flex items-center justify-center rounded-md text-sm font-medium transition-c [...]
+<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">authentication_enabled = </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">true</span></span>
+<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">authorization_enabled = </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">true</span></span></code></pre></div></figure>
+<p>This might change in the future releases (e.g. authentication and authorization will always be enabled), but in order to avoid the breaking changes to the existing clients SDKs, these options are configurable for now.</p>
+<p>The additional settings for HTTP API which uses JWT (JSON Web Token), can be found in the <code>[http.jwt]</code> section:</p>
+<figure dir="ltr" class="my-4 bg-fd-card rounded-xl shiki relative border shadow-sm not-prose overflow-hidden text-sm shiki shiki-themes github-light github-dark" style="--shiki-light:#24292e;--shiki-dark:#e1e4e8;--shiki-light-bg:#fff;--shiki-dark-bg:#24292e" tabindex="-1"><div class="empty:hidden absolute top-3 right-2 z-2 backdrop-blur-lg rounded-lg text-fd-muted-foreground"><button type="button" class="inline-flex items-center justify-center rounded-md text-sm font-medium transition-c [...]
+<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">algorithm = </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">&quot;HS256&quot;</span></span>
+<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">audience = </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">&quot;iggy.rs&quot;</span></span>
+<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">expiry = </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">3600</span></span>
+<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">encoding_secret = </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">&quot;top_secret$iggy.rs$_jwt_HS256_key#!&quot;</span></span>
+<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">decoding_secret = </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">&quot;top_secret$iggy.rs$_jwt_HS256_key#!&quot;</span></span>
+<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">use_base64_secret = </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">false</span></span></code></pre></div></figure>
+<h2 id="authentication-and-authorization" class="group/heading flex scroll-m-28 flex-row items-center gap-1"><a data-card="" href="#authentication-and-authorization">Authentication and authorization</a><button aria-label="Copy Anchor Link" class="inline-flex items-center justify-center rounded-md text-sm font-medium duration-100 disabled:pointer-events-none disabled:opacity-50 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-fd-ring hover:bg-fd-accent hover:text-fd-acce [...]
+<p>The overall implementation of the users authentication and authorization is rather typical. All the server methods except <code>ping</code> and <code>login</code> require the user to be authenticated. The <code>login</code> method is used to authenticate the user, and it returns the optional <code>token</code> which is then used to authenticate the user in the subsequent requests. For now, the <code>token</code> is only used by HTTP API based on JWT, for the binary transport there&#x2 [...]
+<p>The authorization is based on the permissions, which are defined for each user. All the server methods have the specific authorization policies applied. For example, you can allow the user to read all the streams, or manage all the topics, while on the other hand, you could also specify only the set of particular streams or topics to which the user can send and/or poll the message to/from.</p>
+<p>Take a look at the following JSON example to get the overall idea:</p>
+<figure dir="ltr" class="my-4 bg-fd-card rounded-xl shiki relative border shadow-sm not-prose overflow-hidden text-sm shiki shiki-themes github-light github-dark" style="--shiki-light:#24292e;--shiki-dark:#e1e4e8;--shiki-light-bg:#fff;--shiki-dark-bg:#24292e" tabindex="-1"><div class="empty:hidden absolute top-3 right-2 z-2 backdrop-blur-lg rounded-lg text-fd-muted-foreground"><button type="button" class="inline-flex items-center justify-center rounded-md text-sm font-medium transition-c [...]
+<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">  &quot;permissions&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">: {</span></span>
+<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">    &quot;global&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">: {</span></span>
+<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">      &quot;manage_servers&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">false</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
+<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">      &quot;read_servers&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">true</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
+<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">      &quot;manage_users&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">true</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
+<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">      &quot;read_users&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">true</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
+<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">      &quot;manage_streams&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">false</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
+<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">      &quot;read_streams&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">true</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
+<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">      &quot;manage_topics&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">false</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
+<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">      &quot;read_topics&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">true</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
+<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">      &quot;poll_messages&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">true</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
+<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">      &quot;send_messages&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">true</span></span>
+<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">    },</span></span>
+<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">    &quot;streams&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">: {</span></span>
+<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">      &quot;1&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">: {</span></span>
+<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">        &quot;manage_stream&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">false</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
+<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">        &quot;read_stream&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">true</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
+<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">        &quot;manage_topics&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">false</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
+<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">        &quot;read_topics&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">true</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
+<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">        &quot;poll_messages&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">true</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
+<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">        &quot;send_messages&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">true</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
+<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">        &quot;topics&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">: {</span></span>
+<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">          &quot;1&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">: {</span></span>
+<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">            &quot;manage_topic&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">false</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
+<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">            &quot;read_topic&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">true</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
+<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">            &quot;poll_messages&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">true</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
+<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">            &quot;send_messages&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">true</span></span>
+<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">          }</span></span>
+<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">        }</span></span>
+<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">      }</span></span>
+<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">    }</span></span>
+<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">  }</span></span>
+<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">}</span></span></code></pre></div></figure>
+<p>Each user might have the global permissions which do apply to all the available streams and topics, as well as the granular permissions for each stream and its topics (this is a simple hashmap using the stream or topic ID as its key).</p>
+<p>For example, the <code>root user</code>, which has the default username and password <code>iggy</code> and cannot be updated or deleted, can do everything, simply by having the following permissions:</p>
+<figure dir="ltr" class="my-4 bg-fd-card rounded-xl shiki relative border shadow-sm not-prose overflow-hidden text-sm shiki shiki-themes github-light github-dark" style="--shiki-light:#24292e;--shiki-dark:#e1e4e8;--shiki-light-bg:#fff;--shiki-dark-bg:#24292e" tabindex="-1"><div class="empty:hidden absolute top-3 right-2 z-2 backdrop-blur-lg rounded-lg text-fd-muted-foreground"><button type="button" class="inline-flex items-center justify-center rounded-md text-sm font-medium transition-c [...]
+<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">  &quot;permissions&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">: {</span></span>
+<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">    &quot;global&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">: {</span></span>
+<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">      &quot;manage_servers&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">true</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
+<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">      &quot;read_servers&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">true</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
+<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">      &quot;manage_users&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">true</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
+<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">      &quot;read_users&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">true</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
+<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">      &quot;manage_streams&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">true</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
+<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">      &quot;read_streams&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">true</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
+<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">      &quot;manage_topics&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">true</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
+<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">      &quot;read_topics&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">true</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
+<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">      &quot;poll_messages&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">true</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
+<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">      &quot;send_messages&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">true</span></span>
+<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">    },</span></span>
+<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">    &quot;streams&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">null</span></span>
+<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">  }</span></span>
+<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">}</span></span></code></pre></div></figure>
+<h2 id="sdk" class="group/heading flex scroll-m-28 flex-row items-center gap-1"><a data-card="" href="#sdk">SDK</a><button aria-label="Copy Anchor Link" class="inline-flex items-center justify-center rounded-md text-sm font-medium duration-100 disabled:pointer-events-none disabled:opacity-50 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-fd-ring hover:bg-fd-accent hover:text-fd-accent-foreground p-1 [&amp;_svg]:size-4 not-prose shrink-0 text-fd-muted-foreground opacit [...]
+<p>The new <code>UserClient</code> trait has been added in order to support the users and permissions feature. It is implemented for all the available transport protocols.</p>
+<figure dir="ltr" class="my-4 bg-fd-card rounded-xl shiki relative border shadow-sm not-prose overflow-hidden text-sm shiki shiki-themes github-light github-dark" style="--shiki-light:#24292e;--shiki-dark:#e1e4e8;--shiki-light-bg:#fff;--shiki-dark-bg:#24292e" tabindex="-1"><div class="empty:hidden absolute top-3 right-2 z-2 backdrop-blur-lg rounded-lg text-fd-muted-foreground"><button type="button" class="inline-flex items-center justify-center rounded-md text-sm font-medium transition-c [...]
+<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    async</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583"> fn</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> get_user</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">&amp;</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">self</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">, [...]
+<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    async</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583"> fn</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> get_users</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">&amp;</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">self</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> [...]
+<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    async</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583"> fn</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> create_user</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">&amp;</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">self</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8 [...]
+<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    async</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583"> fn</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> delete_user</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">&amp;</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">self</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8 [...]
+<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    async</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583"> fn</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> update_user</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">&amp;</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">self</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8 [...]
+<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    async</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583"> fn</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> update_permissions</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">&amp;</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">self</span><span style="--shiki-light:#24292E;--shiki-dark: [...]
+<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    async</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583"> fn</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> change_password</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">&amp;</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">self</span><span style="--shiki-light:#24292E;--shiki-dark:#E1 [...]
+<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    async</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583"> fn</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> login_user</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">&amp;</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">self</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8" [...]
+<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    async</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583"> fn</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> logout_user</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">&amp;</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">self</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8 [...]
+<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">}</span></span></code></pre></div></figure>
+<h2 id="commands-and-models" class="group/heading flex scroll-m-28 flex-row items-center gap-1"><a data-card="" href="#commands-and-models">Commands and models</a><button aria-label="Copy Anchor Link" class="inline-flex items-center justify-center rounded-md text-sm font-medium duration-100 disabled:pointer-events-none disabled:opacity-50 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-fd-ring hover:bg-fd-accent hover:text-fd-accent-foreground p-1 [&amp;_svg]:size-4 no [...]
+<p>The following commands and response models have been added:</p>
+<figure dir="ltr" class="my-4 bg-fd-card rounded-xl shiki relative border shadow-sm not-prose overflow-hidden text-sm shiki shiki-themes github-light github-dark" style="--shiki-light:#24292e;--shiki-dark:#e1e4e8;--shiki-light-bg:#fff;--shiki-dark-bg:#24292e" tabindex="-1"><div class="empty:hidden absolute top-3 right-2 z-2 backdrop-blur-lg rounded-lg text-fd-muted-foreground"><button type="button" class="inline-flex items-center justify-center rounded-md text-sm font-medium transition-c [...]
+<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    pub</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> user_id</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">:</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> u32</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
+<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    pub</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> token</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">:</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> Option</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">&lt;</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">String</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">& [...]
+<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">}</span></span></code></pre></div></figure>
+<figure dir="ltr" class="my-4 bg-fd-card rounded-xl shiki relative border shadow-sm not-prose overflow-hidden text-sm shiki shiki-themes github-light github-dark" style="--shiki-light:#24292e;--shiki-dark:#e1e4e8;--shiki-light-bg:#fff;--shiki-dark-bg:#24292e" tabindex="-1"><div class="empty:hidden absolute top-3 right-2 z-2 backdrop-blur-lg rounded-lg text-fd-muted-foreground"><button type="button" class="inline-flex items-center justify-center rounded-md text-sm font-medium transition-c [...]
+<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    pub</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> id</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">:</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> u32</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
+<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    pub</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> created_at</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">:</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> u64</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
+<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    pub</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> status</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">:</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> UserStatus</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
+<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    pub</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> username</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">:</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> String</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
+<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">}</span></span>
+<span class="line"></span>
+<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">pub</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583"> struct</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> UserInfoDetails</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> {</span></span>
+<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    pub</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> id</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">:</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> u32</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
+<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    pub</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> created_at</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">:</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> u64</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
+<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    pub</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> status</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">:</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> UserStatus</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
+<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    pub</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> username</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">:</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> String</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
+<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    pub</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> permissions</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">:</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> Option</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">&lt;</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">Permissions</span><span style="--shiki-light:#24292E;--shiki-dark [...]
+<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">}</span></span></code></pre></div></figure>
+<figure dir="ltr" class="my-4 bg-fd-card rounded-xl shiki relative border shadow-sm not-prose overflow-hidden text-sm shiki shiki-themes github-light github-dark" style="--shiki-light:#24292e;--shiki-dark:#e1e4e8;--shiki-light-bg:#fff;--shiki-dark-bg:#24292e" tabindex="-1"><div class="empty:hidden absolute top-3 right-2 z-2 backdrop-blur-lg rounded-lg text-fd-muted-foreground"><button type="button" class="inline-flex items-center justify-center rounded-md text-sm font-medium transition-c [...]
+<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    pub</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> global</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">:</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> GlobalPermissions</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
+<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    pub</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> streams</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">:</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> Option</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">&lt;</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">HashMap</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8 [...]
+<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">}</span></span>
+<span class="line"></span>
+<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">pub</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583"> struct</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> GlobalPermissions</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> {</span></span>
+<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    pub</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> manage_servers</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">:</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> bool</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
+<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    pub</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> read_servers</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">:</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> bool</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
+<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    pub</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> manage_users</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">:</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> bool</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
+<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    pub</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> read_users</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">:</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> bool</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
+<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    pub</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> manage_streams</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">:</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> bool</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
+<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    pub</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> read_streams</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">:</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> bool</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
+<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    pub</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> manage_topics</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">:</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> bool</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
+<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    pub</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> read_topics</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">:</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> bool</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
+<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    pub</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> poll_messages</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">:</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> bool</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
+<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    pub</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> send_messages</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">:</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> bool</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
+<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">}</span></span>
+<span class="line"></span>
+<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">pub</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583"> struct</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> StreamPermissions</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> {</span></span>
+<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    pub</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> manage_stream</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">:</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> bool</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
+<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    pub</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> read_stream</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">:</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> bool</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
+<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    pub</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> manage_topics</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">:</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> bool</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
+<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    pub</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> read_topics</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">:</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> bool</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
+<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    pub</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> poll_messages</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">:</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> bool</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
+<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    pub</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> send_messages</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">:</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> bool</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
+<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    pub</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> topics</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">:</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> Option</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">&lt;</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">HashMap</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8" [...]
+<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">}</span></span>
+<span class="line"></span>
+<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">pub</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583"> struct</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> TopicPermissions</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> {</span></span>
+<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    pub</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> manage_topic</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">:</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> bool</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
+<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    pub</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> read_topic</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">:</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> bool</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
+<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    pub</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> poll_messages</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">:</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> bool</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
+<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    pub</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> send_messages</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">:</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> bool</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
+<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">}</span></span></code></pre></div></figure>
+<figure dir="ltr" class="my-4 bg-fd-card rounded-xl shiki relative border shadow-sm not-prose overflow-hidden text-sm shiki shiki-themes github-light github-dark" style="--shiki-light:#24292e;--shiki-dark:#e1e4e8;--shiki-light-bg:#fff;--shiki-dark-bg:#24292e" tabindex="-1"><div class="empty:hidden absolute top-3 right-2 z-2 backdrop-blur-lg rounded-lg text-fd-muted-foreground"><button type="button" class="inline-flex items-center justify-center rounded-md text-sm font-medium transition-c [...]
+<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    pub</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> user_id</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">:</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> Identifier</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
+<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">}</span></span></code></pre></div></figure>
+<figure dir="ltr" class="my-4 bg-fd-card rounded-xl shiki relative border shadow-sm not-prose overflow-hidden text-sm shiki shiki-themes github-light github-dark" style="--shiki-light:#24292e;--shiki-dark:#e1e4e8;--shiki-light-bg:#fff;--shiki-dark-bg:#24292e" tabindex="-1"><div class="empty:hidden absolute top-3 right-2 z-2 backdrop-blur-lg rounded-lg text-fd-muted-foreground"><button type="button" class="inline-flex items-center justify-center rounded-md text-sm font-medium transition-c [...]
+<figure dir="ltr" class="my-4 bg-fd-card rounded-xl shiki relative border shadow-sm not-prose overflow-hidden text-sm shiki shiki-themes github-light github-dark" style="--shiki-light:#24292e;--shiki-dark:#e1e4e8;--shiki-light-bg:#fff;--shiki-dark-bg:#24292e" tabindex="-1"><div class="empty:hidden absolute top-3 right-2 z-2 backdrop-blur-lg rounded-lg text-fd-muted-foreground"><button type="button" class="inline-flex items-center justify-center rounded-md text-sm font-medium transition-c [...]
+<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    pub</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> username</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">:</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> String</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
+<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    pub</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> password</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">:</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> String</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
+<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    pub</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> status</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">:</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> UserStatus</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
+<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    pub</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> permissions</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">:</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> Option</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">&lt;</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">Permissions</span><span style="--shiki-light:#24292E;--shiki-dark [...]
+<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">}</span></span></code></pre></div></figure>
+<figure dir="ltr" class="my-4 bg-fd-card rounded-xl shiki relative border shadow-sm not-prose overflow-hidden text-sm shiki shiki-themes github-light github-dark" style="--shiki-light:#24292e;--shiki-dark:#e1e4e8;--shiki-light-bg:#fff;--shiki-dark-bg:#24292e" tabindex="-1"><div class="empty:hidden absolute top-3 right-2 z-2 backdrop-blur-lg rounded-lg text-fd-muted-foreground"><button type="button" class="inline-flex items-center justify-center rounded-md text-sm font-medium transition-c [...]
+<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    pub</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> user_id</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">:</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> Identifier</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
+<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">}</span></span></code></pre></div></figure>
+<figure dir="ltr" class="my-4 bg-fd-card rounded-xl shiki relative border shadow-sm not-prose overflow-hidden text-sm shiki shiki-themes github-light github-dark" style="--shiki-light:#24292e;--shiki-dark:#e1e4e8;--shiki-light-bg:#fff;--shiki-dark-bg:#24292e" tabindex="-1"><div class="empty:hidden absolute top-3 right-2 z-2 backdrop-blur-lg rounded-lg text-fd-muted-foreground"><button type="button" class="inline-flex items-center justify-center rounded-md text-sm font-medium transition-c [...]
+<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    pub</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> user_id</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">:</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> Identifier</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
+<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    pub</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> username</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">:</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> Option</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">&lt;</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">String</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8 [...]
+<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    pub</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> status</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">:</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> Option</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">&lt;</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">UserStatus</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4 [...]
+<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">}</span></span></code></pre></div></figure>
+<figure dir="ltr" class="my-4 bg-fd-card rounded-xl shiki relative border shadow-sm not-prose overflow-hidden text-sm shiki shiki-themes github-light github-dark" style="--shiki-light:#24292e;--shiki-dark:#e1e4e8;--shiki-light-bg:#fff;--shiki-dark-bg:#24292e" tabindex="-1"><div class="empty:hidden absolute top-3 right-2 z-2 backdrop-blur-lg rounded-lg text-fd-muted-foreground"><button type="button" class="inline-flex items-center justify-center rounded-md text-sm font-medium transition-c [...]
+<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    pub</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> user_id</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">:</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> Identifier</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
+<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    pub</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> permissions</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">:</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> Option</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">&lt;</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">Permissions</span><span style="--shiki-light:#24292E;--shiki-dark [...]
+<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">}</span></span></code></pre></div></figure>
+<figure dir="ltr" class="my-4 bg-fd-card rounded-xl shiki relative border shadow-sm not-prose overflow-hidden text-sm shiki shiki-themes github-light github-dark" style="--shiki-light:#24292e;--shiki-dark:#e1e4e8;--shiki-light-bg:#fff;--shiki-dark-bg:#24292e" tabindex="-1"><div class="empty:hidden absolute top-3 right-2 z-2 backdrop-blur-lg rounded-lg text-fd-muted-foreground"><button type="button" class="inline-flex items-center justify-center rounded-md text-sm font-medium transition-c [...]
+<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    pub</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> user_id</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">:</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> Identifier</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
+<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    pub</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> current_password</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">:</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> String</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
+<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    pub</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> new_password</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">:</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> String</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
+<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">}</span></span></code></pre></div></figure>
+<figure dir="ltr" class="my-4 bg-fd-card rounded-xl shiki relative border shadow-sm not-prose overflow-hidden text-sm shiki shiki-themes github-light github-dark" style="--shiki-light:#24292e;--shiki-dark:#e1e4e8;--shiki-light-bg:#fff;--shiki-dark-bg:#24292e" tabindex="-1"><div class="empty:hidden absolute top-3 right-2 z-2 backdrop-blur-lg rounded-lg text-fd-muted-foreground"><button type="button" class="inline-flex items-center justify-center rounded-md text-sm font-medium transition-c [...]
+<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    pub</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> username</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">:</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> String</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
+<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    pub</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> password</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">:</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> String</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
+<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">}</span></span></code></pre></div></figure>
+<figure dir="ltr" class="my-4 bg-fd-card rounded-xl shiki relative border shadow-sm not-prose overflow-hidden text-sm shiki shiki-themes github-light github-dark" style="--shiki-light:#24292e;--shiki-dark:#e1e4e8;--shiki-light-bg:#fff;--shiki-dark-bg:#24292e" tabindex="-1"><div class="empty:hidden absolute top-3 right-2 z-2 backdrop-blur-lg rounded-lg text-fd-muted-foreground"><button type="button" class="inline-flex items-center justify-center rounded-md text-sm font-medium transition-c [...]
+<p>Similar to the stream and topic ID, the user will always have the unique numeric ID and the username. The username must be within the range of 3–50 chars and will always be lowercased, using the same regex as the stream and topic name <code>^[\w\.\-\s]+$</code>. The password must be within the range of 3–100 chars and will be hashed using the bcrypt algorithm.</p>
+<h2 id="http-api" class="group/heading flex scroll-m-28 flex-row items-center gap-1"><a data-card="" href="#http-api">HTTP API</a><button aria-label="Copy Anchor Link" class="inline-flex items-center justify-center rounded-md text-sm font-medium duration-100 disabled:pointer-events-none disabled:opacity-50 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-fd-ring hover:bg-fd-accent hover:text-fd-accent-foreground p-1 [&amp;_svg]:size-4 not-prose shrink-0 text-fd-muted-fo [...]
+<p>The following endpoints have been added, and as always, you can find them in the <code>server.http</code> file in the main repository.</p>
+<figure dir="ltr" class="my-4 bg-fd-card rounded-xl shiki relative border shadow-sm not-prose overflow-hidden text-sm shiki shiki-themes github-light github-dark" style="--shiki-light:#24292e;--shiki-dark:#e1e4e8;--shiki-light-bg:#fff;--shiki-dark-bg:#24292e" tabindex="-1"><div class="empty:hidden absolute top-3 right-2 z-2 backdrop-blur-lg rounded-lg text-fd-muted-foreground"><button type="button" class="inline-flex items-center justify-center rounded-md text-sm font-medium transition-c [...]
+<span class="line"><span>Content-Type: application/json</span></span>
+<span class="line"><span></span></span>
+<span class="line"><span>{</span></span>
+<span class="line"><span>  &quot;username&quot;: &quot;iggy&quot;,</span></span>
+<span class="line"><span>  &quot;password&quot;: &quot;iggy&quot;</span></span>
+<span class="line"><span>}</span></span>
+<span class="line"><span></span></span>
+<span class="line"><span>POST {{url}}/users/logout</span></span>
+<span class="line"><span>Authorization: Bearer {{token}}</span></span>
+<span class="line"><span>Content-Type: application/json</span></span>
+<span class="line"><span></span></span>
+<span class="line"><span>{</span></span>
+<span class="line"><span>}</span></span>
+<span class="line"><span></span></span>
+<span class="line"><span>POST {{url}}/users</span></span>
+<span class="line"><span>Authorization: Bearer {{token}}</span></span>
+<span class="line"><span>Content-Type: application/json</span></span>
+<span class="line"><span></span></span>
+<span class="line"><span>{</span></span>
+<span class="line"><span>  &quot;username&quot;: &quot;user1&quot;,</span></span>
+<span class="line"><span>  &quot;password&quot;: &quot;secret&quot;,</span></span>
+<span class="line"><span>  &quot;status&quot;: &quot;active&quot;,</span></span>
+<span class="line"><span>  &quot;permissions&quot;: null</span></span>
+<span class="line"><span>}</span></span>
+<span class="line"><span></span></span>
+<span class="line"><span>GET {{url}}/users</span></span>
+<span class="line"><span>Authorization: Bearer {{token}}</span></span>
+<span class="line"><span></span></span>
+<span class="line"><span>GET {{url}}/users/user1</span></span>
+<span class="line"><span>Authorization: Bearer {{token}}</span></span>
+<span class="line"><span></span></span>
+<span class="line"><span>PUT {{url}}/users/user1</span></span>
+<span class="line"><span>Authorization: Bearer {{token}}</span></span>
+<span class="line"><span>Content-Type: application/json</span></span>
+<span class="line"><span></span></span>
+<span class="line"><span>{</span></span>
+<span class="line"><span>  &quot;username&quot;: &quot;user1,</span></span>
+<span class="line"><span>  &quot;status&quot;: &quot;active&quot;,</span></span>
+<span class="line"><span>  &quot;permissions&quot;: null</span></span>
+<span class="line"><span>}</span></span>
+<span class="line"><span></span></span>
+<span class="line"><span>PUT {{url}}/users/user1/password</span></span>
+<span class="line"><span>Authorization: Bearer {{token}}</span></span>
+<span class="line"><span>Content-Type: application/json</span></span>
+<span class="line"><span></span></span>
+<span class="line"><span>{</span></span>
+<span class="line"><span>  &quot;current_password&quot;: &quot;secret&quot;,</span></span>
+<span class="line"><span>  &quot;new_password&quot;: &quot;secret1&quot;</span></span>
+<span class="line"><span>}</span></span>
+<span class="line"><span></span></span>
+<span class="line"><span>PUT {{url}}/users/user1permissions</span></span>
+<span class="line"><span>Authorization: Bearer {{token}}</span></span>
+<span class="line"><span>Content-Type: application/json</span></span>
+<span class="line"><span></span></span>
+<span class="line"><span>{</span></span>
+<span class="line"><span>  &quot;permissions&quot;: {</span></span>
+<span class="line"><span>    &quot;global&quot;: {</span></span>
+<span class="line"><span>      &quot;manage_servers&quot;: false,</span></span>
+<span class="line"><span>      &quot;read_servers&quot;: true,</span></span>
+<span class="line"><span>      &quot;manage_users&quot;: true,</span></span>
+<span class="line"><span>      &quot;read_users&quot;: true,</span></span>
+<span class="line"><span>      &quot;manage_streams&quot;: false,</span></span>
+<span class="line"><span>      &quot;read_streams&quot;: true,</span></span>
+<span class="line"><span>      &quot;manage_topics&quot;: false,</span></span>
+<span class="line"><span>      &quot;read_topics&quot;: true,</span></span>
+<span class="line"><span>      &quot;poll_messages&quot;: true,</span></span>
+<span class="line"><span>      &quot;send_messages&quot;: true</span></span>
+<span class="line"><span>    },</span></span>
+<span class="line"><span>    &quot;streams&quot;: {</span></span>
+<span class="line"><span>      &quot;1&quot;: {</span></span>
+<span class="line"><span>        &quot;manage_stream&quot;: false,</span></span>
+<span class="line"><span>        &quot;read_stream&quot;: true,</span></span>
+<span class="line"><span>        &quot;manage_topics&quot;: false,</span></span>
+<span class="line"><span>        &quot;read_topics&quot;: true,</span></span>
+<span class="line"><span>        &quot;poll_messages&quot;: true,</span></span>
+<span class="line"><span>        &quot;send_messages&quot;: true,</span></span>
+<span class="line"><span>        &quot;topics&quot;: {</span></span>
+<span class="line"><span>          &quot;1&quot;: {</span></span>
+<span class="line"><span>            &quot;manage_topic&quot;: false,</span></span>
+<span class="line"><span>            &quot;read_topic&quot;: true,</span></span>
+<span class="line"><span>            &quot;poll_messages&quot;: true,</span></span>
+<span class="line"><span>            &quot;send_messages&quot;: true</span></span>
+<span class="line"><span>          }</span></span>
+<span class="line"><span>        }</span></span>
+<span class="line"><span>      }</span></span>
+<span class="line"><span>    }</span></span>
+<span class="line"><span>  }</span></span>
+<span class="line"><span>}</span></span>
+<span class="line"><span></span></span>
+<span class="line"><span>DELETE {{url}}/users/user1</span></span>
+<span class="line"><span>Authorization: Bearer {{token}}</span></span></code></pre></div></figure></div><footer class="mt-16 border-t border-fd-border pt-8"><a class="inline-flex items-center gap-2 text-sm font-medium text-fd-primary transition-colors hover:opacity-80" href="/blogs/">← Back to all posts</a></footer></article></main><!--$--><!--/$--><footer class="border-t border-fd-border bg-fd-background px-6 py-14 md:px-12"><div class="mx-auto max-w-6xl"><div class="grid gap-10 sm:grid [...]
\ No newline at end of file
diff --git a/blogs/2023/09/20/users-and-permissions/index.txt b/blogs/2023/09/20/users-and-permissions/index.txt
new file mode 100644
index 000000000..e4a2e7d31
--- /dev/null
+++ b/blogs/2023/09/20/users-and-permissions/index.txt
@@ -0,0 +1,240 @@
+1:"$Sreact.fragment"
+3:I[17751,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"RootProvider"]
+4:I[39756,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"default"]
+5:I[58298,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/3-_96y-evozm0.js"],"default"]
+6:I[37457,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"default"]
+7:I[22016,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],""]
+12:I[68027,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"default",1]
+:HL["/_next/static/chunks/1_55v0vlfews3.css","style"]
+2:T512,{"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://iggy.apache.org/#organization","name":"The Apache Software Foundation","url":"https://www.apache.org/","logo":"https://iggy.apache.org/img/asf_logo.svg","contactPoint":{"@type":"ContactPoint","contactType":"technical support","email":"dev@iggy.apache.org","url":"https://iggy.apache.org/community/"}},{"@type":"WebSite","@id":"https://iggy.apache.org/#website","name":"Apache Iggy","url":"https://iggy.a [...]
+0:{"P":null,"c":["","blogs","2023","09","20","users-and-permissions",""],"q":"","i":false,"f":[[["",{"children":["(site)",{"children":["blogs",{"children":[["slug","2023/09/20/users-and-permissions","c",[]],{"children":["__PAGE__",{},"$undefined","$undefined",4608]},"$undefined","$undefined",4608]},"$undefined","$undefined",4608]},"$undefined","$undefined",4608]},"$undefined","$undefined",4624],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/ [...]
+14:I[79520,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],""]
+15:I[69877,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"Matomo"]
+16:I[5014,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],"default"]
+17:I[64345,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js"],"HomeLayout"]
+18:I[88760,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js"],"Logo"]
+19:I[15269,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js"],"CommunityDropdown"]
+1a:I[15269,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js"],"communityLinks"]
+1b:I[29966,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js"],"ASFDropdown"]
+1c:I[36330,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js"],"ASFMobileLinks"]
+25:I[97367,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"OutletBoundary"]
+26:"$Sreact.suspense"
+28:I[97367,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"ViewportBoundary"]
+2a:I[97367,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"MetadataBoundary"]
+8:["$","$L7","/community",{"href":"/community","className":"transition-colors hover:text-fd-primary","children":"Community"}]
+9:["$","p",null,{"className":"mt-6 max-w-md text-xs text-fd-muted-foreground","children":["Every page on this site is listed in"," ",["$","a",null,{"href":"/sitemap.xml","className":"underline hover:text-fd-primary","children":"/sitemap.xml"}],", and"," ",["$","a",null,{"href":"/llms.txt","className":"underline hover:text-fd-primary","children":"/llms.txt"}]," ","summarises the documentation."]}]
+a:["$","$L14",null,{"id":"matomo","strategy":"afterInteractive","children":"var _paq = window._paq = window._paq || [];\n_paq.push([\"setDoNotTrack\", true]);\n_paq.push([\"disableCookies\"]);\n_paq.push(['trackPageView']);\n_paq.push(['enableLinkTracking']);\n(function() {\n  var u=\"https://analytics.apache.org/\";\n  _paq.push(['setTrackerUrl', u+'matomo.php']);\n  _paq.push(['setSiteId', '80']);\n  var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];\n  [...]
+b:["$","$L15",null,{}]
+c:["$","$1","c",{"children":[[["$","script","script-0",{"src":"/_next/static/chunks/241-fa32f9zay.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/_next/static/chunks/3x8y3fmtn6lnc.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/_next/static/chunks/250gopd52txql.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/_next/static/chunks/0n3fueko2xquo.js","async":true,"nonce":"$undefined"}]],[["$","div",null,{"className" [...]
+d:["$","$1","c",{"children":[null,["$","$L4",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}]
+e:["$","$1","c",{"children":[null,["$","$L4",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}]
+f:["$","$1","c",{"children":["$L24",[["$","script","script-0",{"src":"/_next/static/chunks/1k39uva2a578s.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/_next/static/chunks/23ktdyx90z0v3.js","async":true,"nonce":"$undefined"}]],["$","$L25",null,{"children":["$","$26",null,{"name":"Next.MetadataOutlet","children":"$@27"}]}]]}]
+11:["$","$1","h",{"children":[null,["$","$L28",null,{"children":"$L29"}],["$","div",null,{"hidden":true,"children":["$","$L2a",null,{"children":["$","$26",null,{"name":"Next.Metadata","children":"$L2b"}]}]}],null]}]
+13:["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/1_55v0vlfews3.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]
+10:C
+1d:["$","$L7","/",{"href":"/","className":"transition-colors hover:text-fd-primary","children":"Home"}]
+1e:["$","$L7","/docs",{"href":"/docs","className":"transition-colors hover:text-fd-primary","children":"Documentation"}]
+1f:["$","$L7","/blogs",{"href":"/blogs","className":"transition-colors hover:text-fd-primary","children":"Blog"}]
+20:["$","$L7","/downloads",{"href":"/downloads","className":"transition-colors hover:text-fd-primary","children":"Downloads"}]
+21:["$","$L7","/community",{"href":"/community","className":"transition-colors hover:text-fd-primary","children":"Community"}]
+22:["$","p",null,{"className":"mt-6 max-w-md text-xs text-fd-muted-foreground","children":["Every page on this site is listed in"," ",["$","a",null,{"href":"/sitemap.xml","className":"underline hover:text-fd-primary","children":"/sitemap.xml"}],", and"," ",["$","a",null,{"href":"/llms.txt","className":"underline hover:text-fd-primary","children":"/llms.txt"}]," ","summarises the documentation."]}]
+23:["$","footer",null,{"className":"border-t border-fd-border bg-fd-background px-6 py-14 md:px-12","children":["$","div",null,{"className":"mx-auto max-w-6xl","children":[["$","div",null,{"className":"grid gap-10 sm:grid-cols-2 lg:grid-cols-4","children":[["$","div","Docs",{"children":[["$","h2",null,{"className":"mb-4 text-sm font-semibold uppercase tracking-wide text-fd-primary","children":"Docs"}],["$","ul",null,{"className":"space-y-2.5 text-sm","children":[["$","li","/docs",{"child [...]
+2c:["$","li","https://www.apache.org/foundation/contributing.html",{"children":["$","$L7",null,{"href":"https://www.apache.org/foundation/contributing.html","target":"_blank","rel":"noopener noreferrer","className":"text-fd-muted-foreground transition-colors hover:text-fd-foreground","children":"Donate"}]}]
+2d:["$","li","https://www.apache.org/foundation/sponsorship.html",{"children":["$","$L7",null,{"href":"https://www.apache.org/foundation/sponsorship.html","target":"_blank","rel":"noopener noreferrer","className":"text-fd-muted-foreground transition-colors hover:text-fd-foreground","children":"Sponsors"}]}]
+2e:["$","li","https://www.apache.org/security/",{"children":["$","$L7",null,{"href":"https://www.apache.org/security/","target":"_blank","rel":"noopener noreferrer","className":"text-fd-muted-foreground transition-colors hover:text-fd-foreground","children":"Security"}]}]
+2f:["$","li","https://privacy.apache.org/policies/privacy-policy-public.html",{"children":["$","$L7",null,{"href":"https://privacy.apache.org/policies/privacy-policy-public.html","target":"_blank","rel":"noopener noreferrer","className":"text-fd-muted-foreground transition-colors hover:text-fd-foreground","children":"Privacy"}]}]
+30:["$","div",null,{"className":"mt-12 border-t border-fd-border pt-8 text-xs leading-relaxed text-fd-muted-foreground/70","children":[["$","p",null,{"className":"mt-4","children":["Copyright © ",2026," The Apache Software Foundation, Licensed under the Apache License, Version 2.0."]}],["$","p",null,{"className":"mt-4","children":"Apache Iggy, Iggy, Apache, and the Apache Iggy logo are trademarks or registered trademarks of The Apache Software Foundation. All other marks mentioned may be [...]
+31:I[94157,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],"Heading"]
+32:I[44324,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],"CodeBlock"]
+:HL["/img/authors/piotr.png","image"]
+33:T1068,<svg viewBox="0 0 24 24"><path d="M23.8346 11.7033l-1.0073-.6236a13.7268 13.7268 0 00-.0283-.2936l.8656-.8069a.3483.3483 0 00-.1154-.578l-1.1066-.414a8.4958 8.4958 0 00-.087-.2856l.6904-.9587a.3462.3462 0 00-.2257-.5446l-1.1663-.1894a9.3574 9.3574 0 00-.1407-.2622l.49-1.0761a.3437.3437 0 00-.0274-.3361.3486.3486 0 00-.3006-.154l-1.1845.0416a6.7444 6.7444 0 00-.1873-.2268l.2723-1.153a.3472.3472 0 00-.417-.4172l-1.1532.2724a14.0183 14.0183 0 00-.2278-.1873l.0415-1.1845a.3442.3442  [...]
+5c:I[44324,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],"Pre"]
+5d:I[47873,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],"default"]
+34:["$","$L5c",null,{"children":["$","code",null,{"children":[["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"pub"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":" struct"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" ClientInfo"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E [...]
+35:["$","p",null,{"children":["The ",["$","code",null,{"children":"user_id"}]," field is optional, and it's only returned when the user is authenticated. Otherwise, it's set to ",["$","code",null,{"children":"None"}]," (0 value for binary transport) or ",["$","code",null,{"children":"null"}]," (HTTP transport)."]}]
+36:["$","p",null,{"children":["Keep in mind that the ",["$","code",null,{"children":"client"}]," represents the application connected to the server - since it's possible that multiple applications would share the same user credentials, thus you can think of a ",["$","code",null,{"children":"client"}]," as a single connection from the application to the server (1 user -> N clients)."]}]
+37:["$","p",null,{"children":["This breaking change has been introduced with the commit ",["$","$L5d",null,{"href":"https://github.com/apache/iggy/commit/23b330928aa38463ef907c95a9f672fa7b728881","children":"#23b3309"}],". The available ",["$","$L5d",null,{"href":"https://crates.io/crates/iggy","children":"iggy crate"}]," supports these changes since version 0.0.80."]}]
+38:["$","$L31",null,{"as":"h2","id":"configuration","children":"Configuration"}]
+39:["$","p",null,{"children":["Currently, the authentication and authorization can be enabled in the ",["$","code",null,{"children":"server.toml"}]," configuration via ",["$","code",null,{"children":"[system.user]"}]," section:"]}]
+3a:["$","$L32",null,{"className":"shiki shiki-themes github-light github-dark","style":{"--shiki-light":"#24292e","--shiki-dark":"#e1e4e8","--shiki-light-bg":"#fff","--shiki-dark-bg":"#24292e"},"tabIndex":"0","icon":"<svg viewBox=\"0 0 24 24\"><path d=\"M 6,1 C 4.354992,1 3,2.354992 3,4 v 16 c 0,1.645008 1.354992,3 3,3 h 12 c 1.645008,0 3,-1.354992 3,-3 V 8 7 A 1.0001,1.0001 0 0 0 20.707031,6.2929687 l -5,-5 A 1.0001,1.0001 0 0 0 15,1 h -1 z m 0,2 h 7 v 3 c 0,1.645008 1.354992,3 3,3 h 3  [...]
+3b:["$","p",null,{"children":"This might change in the future releases (e.g. authentication and authorization will always be enabled), but in order to avoid the breaking changes to the existing clients SDKs, these options are configurable for now."}]
+3c:["$","p",null,{"children":["The additional settings for HTTP API which uses JWT (JSON Web Token), can be found in the ",["$","code",null,{"children":"[http.jwt]"}]," section:"]}]
+3d:["$","$L32",null,{"className":"shiki shiki-themes github-light github-dark","style":{"--shiki-light":"#24292e","--shiki-dark":"#e1e4e8","--shiki-light-bg":"#fff","--shiki-dark-bg":"#24292e"},"tabIndex":"0","icon":"<svg viewBox=\"0 0 24 24\"><path d=\"M 6,1 C 4.354992,1 3,2.354992 3,4 v 16 c 0,1.645008 1.354992,3 3,3 h 12 c 1.645008,0 3,-1.354992 3,-3 V 8 7 A 1.0001,1.0001 0 0 0 20.707031,6.2929687 l -5,-5 A 1.0001,1.0001 0 0 0 15,1 h -1 z m 0,2 h 7 v 3 c 0,1.645008 1.354992,3 3,3 h 3  [...]
+3e:["$","$L31",null,{"as":"h2","id":"authentication-and-authorization","children":"Authentication and authorization"}]
+3f:["$","p",null,{"children":["The overall implementation of the users authentication and authorization is rather typical. All the server methods except ",["$","code",null,{"children":"ping"}]," and ",["$","code",null,{"children":"login"}]," require the user to be authenticated. The ",["$","code",null,{"children":"login"}]," method is used to authenticate the user, and it returns the optional ",["$","code",null,{"children":"token"}]," which is then used to authenticate the user in the su [...]
+40:["$","p",null,{"children":"The authorization is based on the permissions, which are defined for each user. All the server methods have the specific authorization policies applied. For example, you can allow the user to read all the streams, or manage all the topics, while on the other hand, you could also specify only the set of particular streams or topics to which the user can send and/or poll the message to/from."}]
+41:["$","p",null,{"children":"Take a look at the following JSON example to get the overall idea:"}]
+42:["$","$L32",null,{"className":"shiki shiki-themes github-light github-dark","style":{"--shiki-light":"#24292e","--shiki-dark":"#e1e4e8","--shiki-light-bg":"#fff","--shiki-dark-bg":"#24292e"},"tabIndex":"0","icon":"<svg viewBox=\"0 0 24 24\"><path d=\"M 6,1 C 4.354992,1 3,2.354992 3,4 v 16 c 0,1.645008 1.354992,3 3,3 h 12 c 1.645008,0 3,-1.354992 3,-3 V 8 7 A 1.0001,1.0001 0 0 0 20.707031,6.2929687 l -5,-5 A 1.0001,1.0001 0 0 0 15,1 h -1 z m 0,2 h 7 v 3 c 0,1.645008 1.354992,3 3,3 h 3  [...]
+43:["$","p",null,{"children":"Each user might have the global permissions which do apply to all the available streams and topics, as well as the granular permissions for each stream and its topics (this is a simple hashmap using the stream or topic ID as its key)."}]
+44:["$","p",null,{"children":["For example, the ",["$","code",null,{"children":"root user"}],", which has the default username and password ",["$","code",null,{"children":"iggy"}]," and cannot be updated or deleted, can do everything, simply by having the following permissions:"]}]
+45:["$","$L32",null,{"className":"shiki shiki-themes github-light github-dark","style":{"--shiki-light":"#24292e","--shiki-dark":"#e1e4e8","--shiki-light-bg":"#fff","--shiki-dark-bg":"#24292e"},"tabIndex":"0","icon":"<svg viewBox=\"0 0 24 24\"><path d=\"M 6,1 C 4.354992,1 3,2.354992 3,4 v 16 c 0,1.645008 1.354992,3 3,3 h 12 c 1.645008,0 3,-1.354992 3,-3 V 8 7 A 1.0001,1.0001 0 0 0 20.707031,6.2929687 l -5,-5 A 1.0001,1.0001 0 0 0 15,1 h -1 z m 0,2 h 7 v 3 c 0,1.645008 1.354992,3 3,3 h 3  [...]
+46:["$","$L31",null,{"as":"h2","id":"sdk","children":"SDK"}]
+47:["$","p",null,{"children":["The new ",["$","code",null,{"children":"UserClient"}]," trait has been added in order to support the users and permissions feature. It is implemented for all the available transport protocols."]}]
+7d:T1068,<svg viewBox="0 0 24 24"><path d="M23.8346 11.7033l-1.0073-.6236a13.7268 13.7268 0 00-.0283-.2936l.8656-.8069a.3483.3483 0 00-.1154-.578l-1.1066-.414a8.4958 8.4958 0 00-.087-.2856l.6904-.9587a.3462.3462 0 00-.2257-.5446l-1.1663-.1894a9.3574 9.3574 0 00-.1407-.2622l.49-1.0761a.3437.3437 0 00-.0274-.3361.3486.3486 0 00-.3006-.154l-1.1845.0416a6.7444 6.7444 0 00-.1873-.2268l.2723-1.153a.3472.3472 0 00-.417-.4172l-1.1532.2724a14.0183 14.0183 0 00-.2278-.1873l.0415-1.1845a.3442.3442  [...]
+49:["$","$L31",null,{"as":"h2","id":"commands-and-models","children":"Commands and models"}]
+4a:["$","p",null,{"children":"The following commands and response models have been added:"}]
+7f:T1068,<svg viewBox="0 0 24 24"><path d="M23.8346 11.7033l-1.0073-.6236a13.7268 13.7268 0 00-.0283-.2936l.8656-.8069a.3483.3483 0 00-.1154-.578l-1.1066-.414a8.4958 8.4958 0 00-.087-.2856l.6904-.9587a.3462.3462 0 00-.2257-.5446l-1.1663-.1894a9.3574 9.3574 0 00-.1407-.2622l.49-1.0761a.3437.3437 0 00-.0274-.3361.3486.3486 0 00-.3006-.154l-1.1845.0416a6.7444 6.7444 0 00-.1873-.2268l.2723-1.153a.3472.3472 0 00-.417-.4172l-1.1532.2724a14.0183 14.0183 0 00-.2278-.1873l.0415-1.1845a.3442.3442  [...]
+81:T1068,<svg viewBox="0 0 24 24"><path d="M23.8346 11.7033l-1.0073-.6236a13.7268 13.7268 0 00-.0283-.2936l.8656-.8069a.3483.3483 0 00-.1154-.578l-1.1066-.414a8.4958 8.4958 0 00-.087-.2856l.6904-.9587a.3462.3462 0 00-.2257-.5446l-1.1663-.1894a9.3574 9.3574 0 00-.1407-.2622l.49-1.0761a.3437.3437 0 00-.0274-.3361.3486.3486 0 00-.3006-.154l-1.1845.0416a6.7444 6.7444 0 00-.1873-.2268l.2723-1.153a.3472.3472 0 00-.417-.4172l-1.1532.2724a14.0183 14.0183 0 00-.2278-.1873l.0415-1.1845a.3442.3442  [...]
+83:T1068,<svg viewBox="0 0 24 24"><path d="M23.8346 11.7033l-1.0073-.6236a13.7268 13.7268 0 00-.0283-.2936l.8656-.8069a.3483.3483 0 00-.1154-.578l-1.1066-.414a8.4958 8.4958 0 00-.087-.2856l.6904-.9587a.3462.3462 0 00-.2257-.5446l-1.1663-.1894a9.3574 9.3574 0 00-.1407-.2622l.49-1.0761a.3437.3437 0 00-.0274-.3361.3486.3486 0 00-.3006-.154l-1.1845.0416a6.7444 6.7444 0 00-.1873-.2268l.2723-1.153a.3472.3472 0 00-.417-.4172l-1.1532.2724a14.0183 14.0183 0 00-.2278-.1873l.0415-1.1845a.3442.3442  [...]
+85:T1068,<svg viewBox="0 0 24 24"><path d="M23.8346 11.7033l-1.0073-.6236a13.7268 13.7268 0 00-.0283-.2936l.8656-.8069a.3483.3483 0 00-.1154-.578l-1.1066-.414a8.4958 8.4958 0 00-.087-.2856l.6904-.9587a.3462.3462 0 00-.2257-.5446l-1.1663-.1894a9.3574 9.3574 0 00-.1407-.2622l.49-1.0761a.3437.3437 0 00-.0274-.3361.3486.3486 0 00-.3006-.154l-1.1845.0416a6.7444 6.7444 0 00-.1873-.2268l.2723-1.153a.3472.3472 0 00-.417-.4172l-1.1532.2724a14.0183 14.0183 0 00-.2278-.1873l.0415-1.1845a.3442.3442  [...]
+87:T1068,<svg viewBox="0 0 24 24"><path d="M23.8346 11.7033l-1.0073-.6236a13.7268 13.7268 0 00-.0283-.2936l.8656-.8069a.3483.3483 0 00-.1154-.578l-1.1066-.414a8.4958 8.4958 0 00-.087-.2856l.6904-.9587a.3462.3462 0 00-.2257-.5446l-1.1663-.1894a9.3574 9.3574 0 00-.1407-.2622l.49-1.0761a.3437.3437 0 00-.0274-.3361.3486.3486 0 00-.3006-.154l-1.1845.0416a6.7444 6.7444 0 00-.1873-.2268l.2723-1.153a.3472.3472 0 00-.417-.4172l-1.1532.2724a14.0183 14.0183 0 00-.2278-.1873l.0415-1.1845a.3442.3442  [...]
+89:T1068,<svg viewBox="0 0 24 24"><path d="M23.8346 11.7033l-1.0073-.6236a13.7268 13.7268 0 00-.0283-.2936l.8656-.8069a.3483.3483 0 00-.1154-.578l-1.1066-.414a8.4958 8.4958 0 00-.087-.2856l.6904-.9587a.3462.3462 0 00-.2257-.5446l-1.1663-.1894a9.3574 9.3574 0 00-.1407-.2622l.49-1.0761a.3437.3437 0 00-.0274-.3361.3486.3486 0 00-.3006-.154l-1.1845.0416a6.7444 6.7444 0 00-.1873-.2268l.2723-1.153a.3472.3472 0 00-.417-.4172l-1.1532.2724a14.0183 14.0183 0 00-.2278-.1873l.0415-1.1845a.3442.3442  [...]
+8b:T1068,<svg viewBox="0 0 24 24"><path d="M23.8346 11.7033l-1.0073-.6236a13.7268 13.7268 0 00-.0283-.2936l.8656-.8069a.3483.3483 0 00-.1154-.578l-1.1066-.414a8.4958 8.4958 0 00-.087-.2856l.6904-.9587a.3462.3462 0 00-.2257-.5446l-1.1663-.1894a9.3574 9.3574 0 00-.1407-.2622l.49-1.0761a.3437.3437 0 00-.0274-.3361.3486.3486 0 00-.3006-.154l-1.1845.0416a6.7444 6.7444 0 00-.1873-.2268l.2723-1.153a.3472.3472 0 00-.417-.4172l-1.1532.2724a14.0183 14.0183 0 00-.2278-.1873l.0415-1.1845a.3442.3442  [...]
+8d:T1068,<svg viewBox="0 0 24 24"><path d="M23.8346 11.7033l-1.0073-.6236a13.7268 13.7268 0 00-.0283-.2936l.8656-.8069a.3483.3483 0 00-.1154-.578l-1.1066-.414a8.4958 8.4958 0 00-.087-.2856l.6904-.9587a.3462.3462 0 00-.2257-.5446l-1.1663-.1894a9.3574 9.3574 0 00-.1407-.2622l.49-1.0761a.3437.3437 0 00-.0274-.3361.3486.3486 0 00-.3006-.154l-1.1845.0416a6.7444 6.7444 0 00-.1873-.2268l.2723-1.153a.3472.3472 0 00-.417-.4172l-1.1532.2724a14.0183 14.0183 0 00-.2278-.1873l.0415-1.1845a.3442.3442  [...]
+8f:T1068,<svg viewBox="0 0 24 24"><path d="M23.8346 11.7033l-1.0073-.6236a13.7268 13.7268 0 00-.0283-.2936l.8656-.8069a.3483.3483 0 00-.1154-.578l-1.1066-.414a8.4958 8.4958 0 00-.087-.2856l.6904-.9587a.3462.3462 0 00-.2257-.5446l-1.1663-.1894a9.3574 9.3574 0 00-.1407-.2622l.49-1.0761a.3437.3437 0 00-.0274-.3361.3486.3486 0 00-.3006-.154l-1.1845.0416a6.7444 6.7444 0 00-.1873-.2268l.2723-1.153a.3472.3472 0 00-.417-.4172l-1.1532.2724a14.0183 14.0183 0 00-.2278-.1873l.0415-1.1845a.3442.3442  [...]
+91:T1068,<svg viewBox="0 0 24 24"><path d="M23.8346 11.7033l-1.0073-.6236a13.7268 13.7268 0 00-.0283-.2936l.8656-.8069a.3483.3483 0 00-.1154-.578l-1.1066-.414a8.4958 8.4958 0 00-.087-.2856l.6904-.9587a.3462.3462 0 00-.2257-.5446l-1.1663-.1894a9.3574 9.3574 0 00-.1407-.2622l.49-1.0761a.3437.3437 0 00-.0274-.3361.3486.3486 0 00-.3006-.154l-1.1845.0416a6.7444 6.7444 0 00-.1873-.2268l.2723-1.153a.3472.3472 0 00-.417-.4172l-1.1532.2724a14.0183 14.0183 0 00-.2278-.1873l.0415-1.1845a.3442.3442  [...]
+93:T1068,<svg viewBox="0 0 24 24"><path d="M23.8346 11.7033l-1.0073-.6236a13.7268 13.7268 0 00-.0283-.2936l.8656-.8069a.3483.3483 0 00-.1154-.578l-1.1066-.414a8.4958 8.4958 0 00-.087-.2856l.6904-.9587a.3462.3462 0 00-.2257-.5446l-1.1663-.1894a9.3574 9.3574 0 00-.1407-.2622l.49-1.0761a.3437.3437 0 00-.0274-.3361.3486.3486 0 00-.3006-.154l-1.1845.0416a6.7444 6.7444 0 00-.1873-.2268l.2723-1.153a.3472.3472 0 00-.417-.4172l-1.1532.2724a14.0183 14.0183 0 00-.2278-.1873l.0415-1.1845a.3442.3442  [...]
+95:T1068,<svg viewBox="0 0 24 24"><path d="M23.8346 11.7033l-1.0073-.6236a13.7268 13.7268 0 00-.0283-.2936l.8656-.8069a.3483.3483 0 00-.1154-.578l-1.1066-.414a8.4958 8.4958 0 00-.087-.2856l.6904-.9587a.3462.3462 0 00-.2257-.5446l-1.1663-.1894a9.3574 9.3574 0 00-.1407-.2622l.49-1.0761a.3437.3437 0 00-.0274-.3361.3486.3486 0 00-.3006-.154l-1.1845.0416a6.7444 6.7444 0 00-.1873-.2268l.2723-1.153a.3472.3472 0 00-.417-.4172l-1.1532.2724a14.0183 14.0183 0 00-.2278-.1873l.0415-1.1845a.3442.3442  [...]
+57:["$","p",null,{"children":["Similar to the stream and topic ID, the user will always have the unique numeric ID and the username. The username must be within the range of 3–50 chars and will always be lowercased, using the same regex as the stream and topic name ",["$","code",null,{"children":"^[\\w\\.\\-\\s]+$"}],". The password must be within the range of 3–100 chars and will be hashed using the bcrypt algorithm."]}]
+58:["$","$L31",null,{"as":"h2","id":"http-api","children":"HTTP API"}]
+59:["$","p",null,{"children":["The following endpoints have been added, and as always, you can find them in the ",["$","code",null,{"children":"server.http"}]," file in the main repository."]}]
+5a:["$","$L32",null,{"className":"shiki shiki-themes github-light github-dark","style":{"--shiki-light":"#24292e","--shiki-dark":"#e1e4e8","--shiki-light-bg":"#fff","--shiki-dark-bg":"#24292e"},"tabIndex":"0","icon":"<svg viewBox=\"0 0 24 24\"><path d=\"M 6,1 C 4.354992,1 3,2.354992 3,4 v 16 c 0,1.645008 1.354992,3 3,3 h 12 c 1.645008,0 3,-1.354992 3,-3 V 8 7 A 1.0001,1.0001 0 0 0 20.707031,6.2929687 l -5,-5 A 1.0001,1.0001 0 0 0 15,1 h -1 z m 0,2 h 7 v 3 c 0,1.645008 1.354992,3 3,3 h 3  [...]
+5b:["$","footer",null,{"className":"mt-16 border-t border-fd-border pt-8","children":["$","$L7",null,{"href":"/blogs","className":"inline-flex items-center gap-2 text-sm font-medium text-fd-primary transition-colors hover:opacity-80","children":"← Back to all posts"}]}]
+5e:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":"      \"read_topics\""}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":": "}],["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":"true"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":","}]]}]
+5f:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":"      \"poll_messages\""}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":": "}],["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":"true"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":","}]]}]
+60:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":"      \"send_messages\""}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":": "}],["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":"true"}]]}]
+61:["$","span",null,{"className":"line","children":["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"    },"}]}]
+62:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":"    \"streams\""}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":": {"}]]}]
+63:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":"      \"1\""}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":": {"}]]}]
+64:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":"        \"manage_stream\""}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":": "}],["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":"false"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":","}]]}]
+65:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":"        \"read_stream\""}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":": "}],["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":"true"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":","}]]}]
+66:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":"        \"manage_topics\""}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":": "}],["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":"false"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":","}]]}]
+67:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":"        \"read_topics\""}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":": "}],["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":"true"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":","}]]}]
+68:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":"        \"poll_messages\""}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":": "}],["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":"true"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":","}]]}]
+69:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":"        \"send_messages\""}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":": "}],["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":"true"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":","}]]}]
+6a:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":"        \"topics\""}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":": {"}]]}]
+6b:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":"          \"1\""}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":": {"}]]}]
+6c:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":"            \"manage_topic\""}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":": "}],["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":"false"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":","}]]}]
+6d:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":"            \"read_topic\""}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":": "}],["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":"true"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":","}]]}]
+6e:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":"            \"poll_messages\""}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":": "}],["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":"true"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":","}]]}]
+6f:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":"            \"send_messages\""}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":": "}],["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":"true"}]]}]
+70:["$","span",null,{"className":"line","children":["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"          }"}]}]
+71:["$","span",null,{"className":"line","children":["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"        }"}]}]
+72:["$","span",null,{"className":"line","children":["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"      }"}]}]
+73:["$","span",null,{"className":"line","children":["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"    }"}]}]
+74:["$","span",null,{"className":"line","children":["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"  }"}]}]
+75:["$","span",null,{"className":"line","children":["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"}"}]}]
+76:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":"      \"read_topics\""}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":": "}],["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":"true"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":","}]]}]
+77:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":"      \"poll_messages\""}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":": "}],["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":"true"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":","}]]}]
+78:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":"      \"send_messages\""}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":": "}],["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":"true"}]]}]
+79:["$","span",null,{"className":"line","children":["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"    },"}]}]
+7a:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":"    \"streams\""}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":": "}],["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":"null"}]]}]
+7b:["$","span",null,{"className":"line","children":["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"  }"}]}]
+7c:["$","span",null,{"className":"line","children":["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"}"}]}]
+7e:["$","$L5c",null,{"children":["$","code",null,{"children":[["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"pub"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":" trait"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" UserClient"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8 [...]
+fb:I[27201,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"IconMark"]
+80:["$","$L5c",null,{"children":["$","code",null,{"children":[["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"pub"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":" struct"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" IdentityInfo"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E [...]
+82:["$","$L5c",null,{"children":["$","code",null,{"children":[["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"pub"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":" struct"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" UserInfo"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8" [...]
+84:["$","$L5c",null,{"children":["$","code",null,{"children":[["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"pub"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":" struct"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" Permissions"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4 [...]
+86:["$","$L5c",null,{"children":["$","code",null,{"children":[["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"pub"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":" struct"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" GetUser"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"} [...]
+88:["$","$L5c",null,{"children":["$","code",null,{"children":["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"pub"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":" struct"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" GetUsers"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"} [...]
+8a:["$","$L5c",null,{"children":["$","code",null,{"children":[["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"pub"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":" struct"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" CreateUser"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E [...]
+8c:["$","$L5c",null,{"children":["$","code",null,{"children":[["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"pub"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":" struct"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" DeleteUser"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E [...]
+8e:["$","$L5c",null,{"children":["$","code",null,{"children":[["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"pub"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":" struct"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" UpdateUser"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E [...]
+90:["$","$L5c",null,{"children":["$","code",null,{"children":[["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"pub"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":" struct"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" UpdatePermissions"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark": [...]
+92:["$","$L5c",null,{"children":["$","code",null,{"children":[["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"pub"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":" struct"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" ChangePassword"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E [...]
+94:["$","$L5c",null,{"children":["$","code",null,{"children":[["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"pub"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":" struct"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" LoginUser"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8 [...]
+96:["$","$L5c",null,{"children":["$","code",null,{"children":["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"pub"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":" struct"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" LogoutUser"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8 [...]
+97:["$","span",null,{"children":"}"}]
+98:["$","span",null,{"className":"line","children":["$","span",null,{}]}]
+99:["$","span",null,{"className":"line","children":["$","span",null,{"children":"PUT {{url}}/users/user1/password"}]}]
+9a:["$","span",null,{"className":"line","children":["$","span",null,{"children":"Authorization: Bearer {{token}}"}]}]
+9b:["$","span",null,{"className":"line","children":["$","span",null,{"children":"Content-Type: application/json"}]}]
+9c:["$","span",null,{"className":"line","children":["$","span",null,{}]}]
+9d:["$","span",null,{"className":"line","children":["$","span",null,{"children":"{"}]}]
+9e:["$","span",null,{"className":"line","children":["$","span",null,{"children":"  \"current_password\": \"secret\","}]}]
+9f:["$","span",null,{"className":"line","children":["$","span",null,{"children":"  \"new_password\": \"secret1\""}]}]
+a0:["$","span",null,{"className":"line","children":["$","span",null,{"children":"}"}]}]
+a1:["$","span",null,{"className":"line","children":["$","span",null,{}]}]
+a2:["$","span",null,{"className":"line","children":["$","span",null,{"children":"PUT {{url}}/users/user1permissions"}]}]
+a3:["$","span",null,{"className":"line","children":["$","span",null,{"children":"Authorization: Bearer {{token}}"}]}]
+a4:["$","span",null,{"className":"line","children":["$","span",null,{"children":"Content-Type: application/json"}]}]
+a5:["$","span",null,{"className":"line","children":["$","span",null,{}]}]
+a6:["$","span",null,{"className":"line","children":["$","span",null,{"children":"{"}]}]
+a7:["$","span",null,{"className":"line","children":["$","span",null,{"children":"  \"permissions\": {"}]}]
+a8:["$","span",null,{"className":"line","children":["$","span",null,{"children":"    \"global\": {"}]}]
+a9:["$","span",null,{"className":"line","children":["$","span",null,{"children":"      \"manage_servers\": false,"}]}]
+aa:["$","span",null,{"className":"line","children":["$","span",null,{"children":"      \"read_servers\": true,"}]}]
+ab:["$","span",null,{"className":"line","children":["$","span",null,{"children":"      \"manage_users\": true,"}]}]
+ac:["$","span",null,{"className":"line","children":["$","span",null,{"children":"      \"read_users\": true,"}]}]
+ad:["$","span",null,{"className":"line","children":["$","span",null,{"children":"      \"manage_streams\": false,"}]}]
+ae:["$","span",null,{"className":"line","children":["$","span",null,{"children":"      \"read_streams\": true,"}]}]
+af:["$","span",null,{"className":"line","children":["$","span",null,{"children":"      \"manage_topics\": false,"}]}]
+b0:["$","span",null,{"className":"line","children":["$","span",null,{"children":"      \"read_topics\": true,"}]}]
+b1:["$","span",null,{"className":"line","children":["$","span",null,{"children":"      \"poll_messages\": true,"}]}]
+b2:["$","span",null,{"className":"line","children":["$","span",null,{"children":"      \"send_messages\": true"}]}]
+b3:["$","span",null,{"className":"line","children":["$","span",null,{"children":"    },"}]}]
+b4:["$","span",null,{"className":"line","children":["$","span",null,{"children":"    \"streams\": {"}]}]
+b5:["$","span",null,{"className":"line","children":["$","span",null,{"children":"      \"1\": {"}]}]
+b6:["$","span",null,{"className":"line","children":["$","span",null,{"children":"        \"manage_stream\": false,"}]}]
+b7:["$","span",null,{"className":"line","children":["$","span",null,{"children":"        \"read_stream\": true,"}]}]
+b8:["$","span",null,{"className":"line","children":["$","span",null,{"children":"        \"manage_topics\": false,"}]}]
+b9:["$","span",null,{"className":"line","children":["$","span",null,{"children":"        \"read_topics\": true,"}]}]
+ba:["$","span",null,{"className":"line","children":["$","span",null,{"children":"        \"poll_messages\": true,"}]}]
+bb:["$","span",null,{"className":"line","children":["$","span",null,{"children":"        \"send_messages\": true,"}]}]
+bc:["$","span",null,{"className":"line","children":["$","span",null,{"children":"        \"topics\": {"}]}]
+bd:["$","span",null,{"className":"line","children":["$","span",null,{"children":"          \"1\": {"}]}]
+be:["$","span",null,{"className":"line","children":["$","span",null,{"children":"            \"manage_topic\": false,"}]}]
+bf:["$","span",null,{"className":"line","children":["$","span",null,{"children":"            \"read_topic\": true,"}]}]
+c0:["$","span",null,{"className":"line","children":["$","span",null,{"children":"            \"poll_messages\": true,"}]}]
+c1:["$","span",null,{"className":"line","children":["$","span",null,{"children":"            \"send_messages\": true"}]}]
+c2:["$","span",null,{"className":"line","children":["$","span",null,{"children":"          }"}]}]
+c3:["$","span",null,{"className":"line","children":["$","span",null,{"children":"        }"}]}]
+c4:["$","span",null,{"className":"line","children":["$","span",null,{"children":"      }"}]}]
+c5:["$","span",null,{"className":"line","children":["$","span",null,{"children":"    }"}]}]
+c6:["$","span",null,{"className":"line","children":["$","span",null,{"children":"  }"}]}]
+c7:["$","span",null,{"className":"line","children":["$","span",null,{"children":"}"}]}]
+c8:["$","span",null,{"className":"line","children":["$","span",null,{}]}]
+c9:["$","span",null,{"className":"line","children":["$","span",null,{"children":"DELETE {{url}}/users/user1"}]}]
+ca:["$","span",null,{"className":"line","children":["$","span",null,{"children":"Authorization: Bearer {{token}}"}]}]
+cb:["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":"self"}]
+cc:["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":", command"}]
+cd:["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":":"}]
+ce:["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":" &"}]
+cf:["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"CreateUser"}]
+d0:["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":") "}]
+d1:["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"->"}]
+d2:["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" Result"}]
+d3:["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"<(), "}]
+d4:["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"Error"}]
+d5:["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":">;"}]
+d6:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"    async"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":" fn"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" delete_user"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"("}],["$","span",null,{"style":{"--shiki [...]
+d7:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"    async"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":" fn"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" update_user"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"("}],["$","span",null,{"style":{"--shiki [...]
+d8:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"    async"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":" fn"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" update_permissions"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"("}],["$","span",null,{"style":{" [...]
+d9:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"    async"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":" fn"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" change_password"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"("}],["$","span",null,{"style":{"--s [...]
+da:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"    async"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":" fn"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" login_user"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"("}],["$","span",null,{"style":{"--shiki- [...]
+db:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"    async"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":" fn"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" logout_user"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"("}],["$","span",null,{"style":{"--shiki [...]
+dc:["$","span",null,{"className":"line","children":["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"}"}]}]
+dd:["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":","}]
+de:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"    pub"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":" username"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":":"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" String"}],["$","span",null,{"style":{"--shiki- [...]
+df:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"    pub"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":" permissions"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":":"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" Option"}],["$","span",null,{"style":{"--shi [...]
+e0:["$","span",null,{"className":"line","children":["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"}"}]}]
+e1:["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" bool"}]
+e2:["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":","}]
+e3:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"    pub"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":" manage_streams"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":":"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" bool"}],["$","span",null,{"style":{"--sh [...]
+e4:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"    pub"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":" read_streams"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":":"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" bool"}],["$","span",null,{"style":{"--shik [...]
+e5:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"    pub"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":" manage_topics"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":":"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" bool"}],["$","span",null,{"style":{"--shi [...]
+e6:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"    pub"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":" read_topics"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":":"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" bool"}],["$","span",null,{"style":{"--shiki [...]
+e7:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"    pub"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":" poll_messages"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":":"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" bool"}],["$","span",null,{"style":{"--shi [...]
+e8:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"    pub"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":" send_messages"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":":"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" bool"}],["$","span",null,{"style":{"--shi [...]
+e9:["$","span",null,{"className":"line","children":["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"}"}]}]
+ea:["$","span",null,{"className":"line"}]
+eb:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"pub"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":" struct"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" StreamPermissions"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":" {"}]]}]
+ec:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"    pub"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":" manage_stream"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":":"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" bool"}],["$","span",null,{"style":{"--shi [...]
+ed:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"    pub"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":" read_stream"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":":"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" bool"}],["$","span",null,{"style":{"--shiki [...]
+ee:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"    pub"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":" manage_topics"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":":"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" bool"}],["$","span",null,{"style":{"--shi [...]
+ef:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"    pub"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":" read_topics"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":":"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" bool"}],["$","span",null,{"style":{"--shiki [...]
+f0:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"    pub"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":" poll_messages"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":":"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" bool"}],["$","span",null,{"style":{"--shi [...]
+f1:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"    pub"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":" send_messages"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":":"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" bool"}],["$","span",null,{"style":{"--shi [...]
+f2:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"    pub"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":" topics"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":":"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" Option"}],["$","span",null,{"style":{"--shiki-li [...]
+f3:["$","span",null,{"className":"line","children":["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"}"}]}]
+f4:["$","span",null,{"className":"line"}]
+f5:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"pub"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":" struct"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" TopicPermissions"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":" {"}]]}]
+f6:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"    pub"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":" manage_topic"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":":"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" bool"}],["$","span",null,{"style":{"--shik [...]
+f7:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"    pub"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":" read_topic"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":":"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" bool"}],["$","span",null,{"style":{"--shiki- [...]
+f8:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"    pub"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":" poll_messages"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":":"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" bool"}],["$","span",null,{"style":{"--shi [...]
+f9:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"    pub"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":" send_messages"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":":"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" bool"}],["$","span",null,{"style":{"--shi [...]
+fa:["$","span",null,{"className":"line","children":["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"}"}]}]
+29:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]
+27:null
+2b:[["$","title","0",{"children":"Users and permissions | Apache Iggy"}],["$","link","1",{"rel":"canonical","href":"https://iggy.apache.org/blogs/2023/09/20/users-and-permissions/"}],["$","link","2",{"rel":"alternate","type":"text/markdown","href":"https://iggy.apache.org/blogs/2023/09/20/users-and-permissions.md"}],["$","meta","3",{"property":"og:title","content":"Users and permissions | Apache Iggy"}],["$","meta","4",{"property":"og:url","content":"https://iggy.apache.org/blogs/2023/09 [...]
diff --git a/blogs/2023/10/02/consumer-identifier.md b/blogs/2023/10/02/consumer-identifier.md
new file mode 100644
index 000000000..bc1d16755
--- /dev/null
+++ b/blogs/2023/10/02/consumer-identifier.md
@@ -0,0 +1,89 @@
+# Consumer identifier
+
+Published: 2023-10-02
+
+Rendered page: https://iggy.apache.org/blogs/2023/10/02/consumer-identifier/
+
+Source: https://github.com/apache/iggy-website/blob/main/content/blog/consumer-identifier.mdx
+
+In the latest update, the Iggy server as well as the clients for all the available transport protocols have been extended with the support for **consumer identifier**. Whether you poll the messages, store the consumer offsets, or create consumer groups, you can use the well-established `identifier` type, instead of just `u32`, which is now a common standard for the resources' identification such as streams, topics, users and consumers.
+
+
+## Breaking changes
+
+The breaking changes have been introduced in Iggy server, starting from version `0.0.30` and Iggy SDK, starting from version `0.0.90`. The final commit containing all the mentioned changes is [#655f9b6](https://github.com/apache/iggy/commit/655f9b6bccb0ae4148422f32475a9bedc09827d2).
+
+## Consumer identifier
+
+```rust
+pub struct Consumer {
+    pub kind: ConsumerKind,
+    pub id: Identifier,
+}
+```
+
+All the commands, such as `PollMessages`, `StoreConsumerOffset` and `GetConsumerOffset` which contain the `consumer` field, now require an update to the underlying serialization, as the `id` field is now an `Identifier` type, instead of `u32`. The serialization is the same, as when working with the `stream`, `topic` or `user` resources.
+
+From now on, whenever working with the `consumer` or `consumer group` resource, you can use the numeric or text identifier.
+
+## Consumer groups
+
+```rust
+pub struct CreateConsumerGroup {
+    pub stream_id: Identifier,
+    pub topic_id: Identifier,
+    pub consumer_group_id: u32,
+    pub name: String,
+}
+```
+
+When creating the consumer group, the required `name` field has been added (must be **unique per topic**), and is serialized as usual, at the end of the payload, starting with the `name length` (4 bytes) and the `name` itself (N bytes).
+
+
+```rust
+pub struct DeleteConsumerGroup {
+    pub stream_id: Identifier,
+    pub topic_id: Identifier,
+    pub consumer_group_id: Identifier,
+}
+
+pub struct GetConsumerGroup {
+    pub stream_id: Identifier,
+    pub topic_id: Identifier,
+    pub consumer_group_id: Identifier,
+}
+
+pub struct JoinConsumerGroup {
+    pub stream_id: Identifier,
+    pub topic_id: Identifier,
+    pub consumer_group_id: Identifier,
+}
+
+pub struct LeaveConsumerGroup {
+    pub stream_id: Identifier,
+    pub topic_id: Identifier,
+    pub consumer_group_id: Identifier,
+}
+```
+
+The `DeleteConsumerGroup`, `GetConsumerGroup`, `JoinConsumerGroup` and `LeaveConsumerGroup` commands have been extended with the `consumer_group_id` field, which is now an `Identifier` type, instead of `u32`.
+
+
+```rust
+pub struct ConsumerGroup {
+    pub id: u32,
+    pub name: String,
+    pub partitions_count: u32,
+    pub members_count: u32,
+}
+
+pub struct ConsumerGroupDetails {
+    pub id: u32,
+    pub name: String,
+    pub partitions_count: u32,
+    pub members_count: u32,
+    pub members: Vec<ConsumerGroupMember>,
+}
+```
+
+When fetching the consumer group(s), the `ConsumerGroup` and `ConsumerGroupDetails` structs have been extended with the `name` field, which serialized after `members_count`.
diff --git a/blogs/2023/10/02/consumer-identifier/__next.!KHNpdGUp.blogs.$c$slug.__PAGE__.txt b/blogs/2023/10/02/consumer-identifier/__next.!KHNpdGUp.blogs.$c$slug.__PAGE__.txt
new file mode 100644
index 000000000..718a92a0a
--- /dev/null
+++ b/blogs/2023/10/02/consumer-identifier/__next.!KHNpdGUp.blogs.$c$slug.__PAGE__.txt
@@ -0,0 +1,64 @@
+1:"$Sreact.fragment"
+2:I[94157,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],"Heading"]
+3:I[47873,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],"default"]
+4:I[44324,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],"CodeBlock"]
+:HL["/img/authors/piotr.png","image"]
+5:T1068,<svg viewBox="0 0 24 24"><path d="M23.8346 11.7033l-1.0073-.6236a13.7268 13.7268 0 00-.0283-.2936l.8656-.8069a.3483.3483 0 00-.1154-.578l-1.1066-.414a8.4958 8.4958 0 00-.087-.2856l.6904-.9587a.3462.3462 0 00-.2257-.5446l-1.1663-.1894a9.3574 9.3574 0 00-.1407-.2622l.49-1.0761a.3437.3437 0 00-.0274-.3361.3486.3486 0 00-.3006-.154l-1.1845.0416a6.7444 6.7444 0 00-.1873-.2268l.2723-1.153a.3472.3472 0 00-.417-.4172l-1.1532.2724a14.0183 14.0183 0 00-.2278-.1873l.0415-1.1845a.3442.3442 0 [...]
+1a:X
+1a:C
+0:{"buildId":"CEAllZE6ERPzzxzpa_n8G","data":[{"rsc":["$","$1","c",{"children":[["$","main",null,{"className":"min-h-screen px-6 py-16 md:px-12","children":["$","article",null,{"className":"mx-auto max-w-5xl","children":[["$","header",null,{"className":"mb-10","children":[["$","time",null,{"className":"text-sm font-medium text-fd-muted-foreground","children":"October 2, 2023"}],["$","h1",null,{"className":"mt-3 text-3xl font-extrabold tracking-tight text-fd-foreground md:text-5xl","childr [...]
+1f:I[44324,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],"Pre"]
+26:I[22016,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],""]
+27:I[97367,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"OutletBoundary"]
+28:"$Sreact.suspense"
+2a:I[97367,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"ViewportBoundary"]
+2b:I[97367,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"MetadataBoundary"]
+2c:I[27201,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"IconMark"]
+2d:I[39756,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"default"]
+2e:I[37457,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"default"]
+6:["$","$L1f",null,{"children":["$","code",null,{"children":[["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"pub"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":" struct"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" Consumer"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"} [...]
+7:["$","p",null,{"children":["All the commands, such as ",["$","code",null,{"children":"PollMessages"}],", ",["$","code",null,{"children":"StoreConsumerOffset"}]," and ",["$","code",null,{"children":"GetConsumerOffset"}]," which contain the ",["$","code",null,{"children":"consumer"}]," field, now require an update to the underlying serialization, as the ",["$","code",null,{"children":"id"}]," field is now an ",["$","code",null,{"children":"Identifier"}]," type, instead of ",["$","code",n [...]
+8:["$","p",null,{"children":["From now on, whenever working with the ",["$","code",null,{"children":"consumer"}]," or ",["$","code",null,{"children":"consumer group"}]," resource, you can use the numeric or text identifier."]}]
+9:["$","$L2",null,{"as":"h2","id":"consumer-groups","children":"Consumer groups"}]
+20:T1068,<svg viewBox="0 0 24 24"><path d="M23.8346 11.7033l-1.0073-.6236a13.7268 13.7268 0 00-.0283-.2936l.8656-.8069a.3483.3483 0 00-.1154-.578l-1.1066-.414a8.4958 8.4958 0 00-.087-.2856l.6904-.9587a.3462.3462 0 00-.2257-.5446l-1.1663-.1894a9.3574 9.3574 0 00-.1407-.2622l.49-1.0761a.3437.3437 0 00-.0274-.3361.3486.3486 0 00-.3006-.154l-1.1845.0416a6.7444 6.7444 0 00-.1873-.2268l.2723-1.153a.3472.3472 0 00-.417-.4172l-1.1532.2724a14.0183 14.0183 0 00-.2278-.1873l.0415-1.1845a.3442.3442  [...]
+b:["$","p",null,{"children":["When creating the consumer group, the required ",["$","code",null,{"children":"name"}]," field has been added (must be ",["$","strong",null,{"children":"unique per topic"}],"), and is serialized as usual, at the end of the payload, starting with the ",["$","code",null,{"children":"name length"}]," (4 bytes) and the ",["$","code",null,{"children":"name"}]," itself (N bytes)."]}]
+22:T1068,<svg viewBox="0 0 24 24"><path d="M23.8346 11.7033l-1.0073-.6236a13.7268 13.7268 0 00-.0283-.2936l.8656-.8069a.3483.3483 0 00-.1154-.578l-1.1066-.414a8.4958 8.4958 0 00-.087-.2856l.6904-.9587a.3462.3462 0 00-.2257-.5446l-1.1663-.1894a9.3574 9.3574 0 00-.1407-.2622l.49-1.0761a.3437.3437 0 00-.0274-.3361.3486.3486 0 00-.3006-.154l-1.1845.0416a6.7444 6.7444 0 00-.1873-.2268l.2723-1.153a.3472.3472 0 00-.417-.4172l-1.1532.2724a14.0183 14.0183 0 00-.2278-.1873l.0415-1.1845a.3442.3442  [...]
+d:["$","p",null,{"children":["The ",["$","code",null,{"children":"DeleteConsumerGroup"}],", ",["$","code",null,{"children":"GetConsumerGroup"}],", ",["$","code",null,{"children":"JoinConsumerGroup"}]," and ",["$","code",null,{"children":"LeaveConsumerGroup"}]," commands have been extended with the ",["$","code",null,{"children":"consumer_group_id"}]," field, which is now an ",["$","code",null,{"children":"Identifier"}]," type, instead of ",["$","code",null,{"children":"u32"}],"."]}]
+24:T1068,<svg viewBox="0 0 24 24"><path d="M23.8346 11.7033l-1.0073-.6236a13.7268 13.7268 0 00-.0283-.2936l.8656-.8069a.3483.3483 0 00-.1154-.578l-1.1066-.414a8.4958 8.4958 0 00-.087-.2856l.6904-.9587a.3462.3462 0 00-.2257-.5446l-1.1663-.1894a9.3574 9.3574 0 00-.1407-.2622l.49-1.0761a.3437.3437 0 00-.0274-.3361.3486.3486 0 00-.3006-.154l-1.1845.0416a6.7444 6.7444 0 00-.1873-.2268l.2723-1.153a.3472.3472 0 00-.417-.4172l-1.1532.2724a14.0183 14.0183 0 00-.2278-.1873l.0415-1.1845a.3442.3442  [...]
+f:["$","p",null,{"children":["When fetching the consumer group(s), the ",["$","code",null,{"children":"ConsumerGroup"}]," and ",["$","code",null,{"children":"ConsumerGroupDetails"}]," structs have been extended with the ",["$","code",null,{"children":"name"}]," field, which serialized after ",["$","code",null,{"children":"members_count"}],"."]}]
+10:["$","footer",null,{"className":"mt-16 border-t border-fd-border pt-8","children":["$","$L26",null,{"href":"/blogs","className":"inline-flex items-center gap-2 text-sm font-medium text-fd-primary transition-colors hover:opacity-80","children":"← Back to all posts"}]}]
+11:["$","script","script-0",{"src":"/_next/static/chunks/1k39uva2a578s.js","async":true}]
+12:["$","script","script-1",{"src":"/_next/static/chunks/23ktdyx90z0v3.js","async":true}]
+13:["$","$L27",null,{"children":["$","$28",null,{"name":"Next.MetadataOutlet","children":"$@29"}]}]
+16:["$","$1","h",{"children":[null,["$","$L2a",null,{"children":[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]}],["$","div",null,{"hidden":true,"children":["$","$L2b",null,{"children":["$","$28",null,{"name":"Next.Metadata","children":[["$","title","0",{"children":"Consumer identifier | Apache Iggy"}],["$","link","1",{"rel":"canonical","href":"https://iggy.apache.org/blogs/2023/10/02/consumer-identifier/"}],["$" [...]
+18:["$","$1","c",{"children":[null,["$","$L2d",null,{"parallelRouterKey":"children","template":["$","$L2e",null,{}]}]]}]
+1b:["$","$1","c",{"children":[null,["$","$L2d",null,{"parallelRouterKey":"children","template":["$","$L2e",null,{}]}]]}]
+1e:true
+21:["$","$L1f",null,{"children":["$","code",null,{"children":[["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"pub"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":" struct"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" CreateConsumerGroup"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark [...]
+23:["$","$L1f",null,{"children":["$","code",null,{"children":[["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"pub"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":" struct"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" DeleteConsumerGroup"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark [...]
+25:["$","$L1f",null,{"children":["$","code",null,{"children":[["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"pub"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":" struct"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" ConsumerGroup"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1 [...]
+29:null
+15:300
+2f:["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":" struct"}]
+30:["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" JoinConsumerGroup"}]
+31:["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":" {"}]
+32:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"    pub"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":" stream_id"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":":"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" Identifier"}],["$","span",null,{"style":{"--s [...]
+33:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"    pub"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":" topic_id"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":":"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" Identifier"}],["$","span",null,{"style":{"--sh [...]
+34:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"    pub"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":" consumer_group_id"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":":"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" Identifier"}],["$","span",null,{"styl [...]
+35:["$","span",null,{"className":"line","children":["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"}"}]}]
+36:["$","span",null,{"className":"line"}]
+37:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"pub"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":" struct"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" LeaveConsumerGroup"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":" {"}]]}]
+38:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"    pub"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":" stream_id"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":":"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" Identifier"}],["$","span",null,{"style":{"--s [...]
+39:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"    pub"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":" topic_id"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":":"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" Identifier"}],["$","span",null,{"style":{"--sh [...]
+3a:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"    pub"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":" consumer_group_id"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":":"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" Identifier"}],["$","span",null,{"styl [...]
+3b:["$","span",null,{"className":"line","children":["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"}"}]}]
+3c:["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":","}]
+3d:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"    pub"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":" members_count"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":":"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" u32"}],["$","span",null,{"style":{"--shik [...]
+3e:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"    pub"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":" members"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":":"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" Vec"}],["$","span",null,{"style":{"--shiki-ligh [...]
+3f:["$","span",null,{"className":"line","children":["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"}"}]}]
+15:C
+1d:0
+17:"$undefined"
+19:"$undefined"
+1c:"$undefined"
+14:"$undefined"
diff --git a/blogs/2023/10/02/consumer-identifier/__next.!KHNpdGUp.txt b/blogs/2023/10/02/consumer-identifier/__next.!KHNpdGUp.txt
new file mode 100644
index 000000000..940e917aa
--- /dev/null
+++ b/blogs/2023/10/02/consumer-identifier/__next.!KHNpdGUp.txt
@@ -0,0 +1,30 @@
+1:"$Sreact.fragment"
+2:I[22016,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],""]
+3:I[5014,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],"default"]
+4:I[64345,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js"],"HomeLayout"]
+5:I[88760,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js"],"Logo"]
+6:I[15269,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js"],"CommunityDropdown"]
+7:I[15269,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js"],"communityLinks"]
+8:I[29966,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js"],"ASFDropdown"]
+9:I[36330,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js"],"ASFMobileLinks"]
+a:I[39756,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"default"]
+b:I[37457,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"default"]
+14:X
+0:{"buildId":"CEAllZE6ERPzzxzpa_n8G","data":[{"rsc":["$","$1","c",{"children":[[["$","script","script-0",{"src":"/_next/static/chunks/241-fa32f9zay.js","async":true}],["$","script","script-1",{"src":"/_next/static/chunks/3x8y3fmtn6lnc.js","async":true}],["$","script","script-2",{"src":"/_next/static/chunks/250gopd52txql.js","async":true}],["$","script","script-3",{"src":"/_next/static/chunks/0n3fueko2xquo.js","async":true}]],[["$","div",null,{"className":"relative border-b border-white/[ [...]
+c:["$","$L2","/",{"href":"/","className":"transition-colors hover:text-fd-primary","children":"Home"}]
+d:["$","$L2","/docs",{"href":"/docs","className":"transition-colors hover:text-fd-primary","children":"Documentation"}]
+e:["$","$L2","/blogs",{"href":"/blogs","className":"transition-colors hover:text-fd-primary","children":"Blog"}]
+f:["$","$L2","/downloads",{"href":"/downloads","className":"transition-colors hover:text-fd-primary","children":"Downloads"}]
+10:["$","$L2","/community",{"href":"/community","className":"transition-colors hover:text-fd-primary","children":"Community"}]
+11:["$","p",null,{"className":"mt-6 max-w-md text-xs text-fd-muted-foreground","children":["Every page on this site is listed in"," ",["$","a",null,{"href":"/sitemap.xml","className":"underline hover:text-fd-primary","children":"/sitemap.xml"}],", and"," ",["$","a",null,{"href":"/llms.txt","className":"underline hover:text-fd-primary","children":"/llms.txt"}]," ","summarises the documentation."]}]
+12:["$","footer",null,{"className":"border-t border-fd-border bg-fd-background px-6 py-14 md:px-12","children":["$","div",null,{"className":"mx-auto max-w-6xl","children":[["$","div",null,{"className":"grid gap-10 sm:grid-cols-2 lg:grid-cols-4","children":[["$","div","Docs",{"children":[["$","h2",null,{"className":"mb-4 text-sm font-semibold uppercase tracking-wide text-fd-primary","children":"Docs"}],["$","ul",null,{"className":"space-y-2.5 text-sm","children":[["$","li","/docs",{"child [...]
+16:true
+17:["$","$L2",null,{"href":"https://www.apache.org/foundation/contributing.html","target":"_blank","rel":"noopener noreferrer","className":"text-fd-muted-foreground transition-colors hover:text-fd-foreground","children":"Donate"}]
+18:["$","li","https://www.apache.org/foundation/sponsorship.html",{"children":["$","$L2",null,{"href":"https://www.apache.org/foundation/sponsorship.html","target":"_blank","rel":"noopener noreferrer","className":"text-fd-muted-foreground transition-colors hover:text-fd-foreground","children":"Sponsors"}]}]
+19:["$","li","https://www.apache.org/security/",{"children":["$","$L2",null,{"href":"https://www.apache.org/security/","target":"_blank","rel":"noopener noreferrer","className":"text-fd-muted-foreground transition-colors hover:text-fd-foreground","children":"Security"}]}]
+1a:["$","li","https://privacy.apache.org/policies/privacy-policy-public.html",{"children":["$","$L2",null,{"href":"https://privacy.apache.org/policies/privacy-policy-public.html","target":"_blank","rel":"noopener noreferrer","className":"text-fd-muted-foreground transition-colors hover:text-fd-foreground","children":"Privacy"}]}]
+1b:["$","div",null,{"className":"mt-12 border-t border-fd-border pt-8 text-xs leading-relaxed text-fd-muted-foreground/70","children":[["$","p",null,{"className":"mt-4","children":["Copyright © ",2026," The Apache Software Foundation, Licensed under the Apache License, Version 2.0."]}],["$","p",null,{"className":"mt-4","children":"Apache Iggy, Iggy, Apache, and the Apache Iggy logo are trademarks or registered trademarks of The Apache Software Foundation. All other marks mentioned may be [...]
+14:300
+14:C
+15:0
+13:"$undefined"
diff --git a/blogs/2023/10/02/consumer-identifier/__next._full.txt b/blogs/2023/10/02/consumer-identifier/__next._full.txt
new file mode 100644
index 000000000..32565321f
--- /dev/null
+++ b/blogs/2023/10/02/consumer-identifier/__next._full.txt
@@ -0,0 +1,87 @@
+1:"$Sreact.fragment"
+3:I[17751,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"RootProvider"]
+4:I[39756,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"default"]
+5:I[58298,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/3-_96y-evozm0.js"],"default"]
+6:I[37457,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"default"]
+7:I[22016,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],""]
+12:I[68027,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"default",1]
+:HL["/_next/static/chunks/1_55v0vlfews3.css","style"]
+2:T512,{"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://iggy.apache.org/#organization","name":"The Apache Software Foundation","url":"https://www.apache.org/","logo":"https://iggy.apache.org/img/asf_logo.svg","contactPoint":{"@type":"ContactPoint","contactType":"technical support","email":"dev@iggy.apache.org","url":"https://iggy.apache.org/community/"}},{"@type":"WebSite","@id":"https://iggy.apache.org/#website","name":"Apache Iggy","url":"https://iggy.a [...]
+0:{"P":null,"c":["","blogs","2023","10","02","consumer-identifier",""],"q":"","i":false,"f":[[["",{"children":["(site)",{"children":["blogs",{"children":[["slug","2023/10/02/consumer-identifier","c",[]],{"children":["__PAGE__",{},"$undefined","$undefined",4608]},"$undefined","$undefined",4608]},"$undefined","$undefined",4608]},"$undefined","$undefined",4608]},"$undefined","$undefined",4624],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/1_55 [...]
+14:I[79520,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],""]
+15:I[69877,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"Matomo"]
+16:I[5014,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],"default"]
+17:I[64345,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js"],"HomeLayout"]
+18:I[88760,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js"],"Logo"]
+19:I[15269,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js"],"CommunityDropdown"]
+1a:I[15269,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js"],"communityLinks"]
+1b:I[29966,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js"],"ASFDropdown"]
+1c:I[36330,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js"],"ASFMobileLinks"]
+25:I[97367,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"OutletBoundary"]
+26:"$Sreact.suspense"
+28:I[97367,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"ViewportBoundary"]
+2a:I[97367,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"MetadataBoundary"]
+8:["$","$L7","/community",{"href":"/community","className":"transition-colors hover:text-fd-primary","children":"Community"}]
+9:["$","p",null,{"className":"mt-6 max-w-md text-xs text-fd-muted-foreground","children":["Every page on this site is listed in"," ",["$","a",null,{"href":"/sitemap.xml","className":"underline hover:text-fd-primary","children":"/sitemap.xml"}],", and"," ",["$","a",null,{"href":"/llms.txt","className":"underline hover:text-fd-primary","children":"/llms.txt"}]," ","summarises the documentation."]}]
+a:["$","$L14",null,{"id":"matomo","strategy":"afterInteractive","children":"var _paq = window._paq = window._paq || [];\n_paq.push([\"setDoNotTrack\", true]);\n_paq.push([\"disableCookies\"]);\n_paq.push(['trackPageView']);\n_paq.push(['enableLinkTracking']);\n(function() {\n  var u=\"https://analytics.apache.org/\";\n  _paq.push(['setTrackerUrl', u+'matomo.php']);\n  _paq.push(['setSiteId', '80']);\n  var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];\n  [...]
+b:["$","$L15",null,{}]
+c:["$","$1","c",{"children":[[["$","script","script-0",{"src":"/_next/static/chunks/241-fa32f9zay.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/_next/static/chunks/3x8y3fmtn6lnc.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/_next/static/chunks/250gopd52txql.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/_next/static/chunks/0n3fueko2xquo.js","async":true,"nonce":"$undefined"}]],[["$","div",null,{"className" [...]
+d:["$","$1","c",{"children":[null,["$","$L4",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}]
+e:["$","$1","c",{"children":[null,["$","$L4",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}]
+f:["$","$1","c",{"children":["$L24",[["$","script","script-0",{"src":"/_next/static/chunks/1k39uva2a578s.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/_next/static/chunks/23ktdyx90z0v3.js","async":true,"nonce":"$undefined"}]],["$","$L25",null,{"children":["$","$26",null,{"name":"Next.MetadataOutlet","children":"$@27"}]}]]}]
+11:["$","$1","h",{"children":[null,["$","$L28",null,{"children":"$L29"}],["$","div",null,{"hidden":true,"children":["$","$L2a",null,{"children":["$","$26",null,{"name":"Next.Metadata","children":"$L2b"}]}]}],null]}]
+13:["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/1_55v0vlfews3.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]
+10:C
+1d:["$","$L7","/",{"href":"/","className":"transition-colors hover:text-fd-primary","children":"Home"}]
+1e:["$","$L7","/docs",{"href":"/docs","className":"transition-colors hover:text-fd-primary","children":"Documentation"}]
+1f:["$","$L7","/blogs",{"href":"/blogs","className":"transition-colors hover:text-fd-primary","children":"Blog"}]
+20:["$","$L7","/downloads",{"href":"/downloads","className":"transition-colors hover:text-fd-primary","children":"Downloads"}]
+21:["$","$L7","/community",{"href":"/community","className":"transition-colors hover:text-fd-primary","children":"Community"}]
+22:["$","p",null,{"className":"mt-6 max-w-md text-xs text-fd-muted-foreground","children":["Every page on this site is listed in"," ",["$","a",null,{"href":"/sitemap.xml","className":"underline hover:text-fd-primary","children":"/sitemap.xml"}],", and"," ",["$","a",null,{"href":"/llms.txt","className":"underline hover:text-fd-primary","children":"/llms.txt"}]," ","summarises the documentation."]}]
+23:["$","footer",null,{"className":"border-t border-fd-border bg-fd-background px-6 py-14 md:px-12","children":["$","div",null,{"className":"mx-auto max-w-6xl","children":[["$","div",null,{"className":"grid gap-10 sm:grid-cols-2 lg:grid-cols-4","children":[["$","div","Docs",{"children":[["$","h2",null,{"className":"mb-4 text-sm font-semibold uppercase tracking-wide text-fd-primary","children":"Docs"}],["$","ul",null,{"className":"space-y-2.5 text-sm","children":[["$","li","/docs",{"child [...]
+2c:["$","li","https://www.apache.org/foundation/contributing.html",{"children":["$","$L7",null,{"href":"https://www.apache.org/foundation/contributing.html","target":"_blank","rel":"noopener noreferrer","className":"text-fd-muted-foreground transition-colors hover:text-fd-foreground","children":"Donate"}]}]
+2d:["$","li","https://www.apache.org/foundation/sponsorship.html",{"children":["$","$L7",null,{"href":"https://www.apache.org/foundation/sponsorship.html","target":"_blank","rel":"noopener noreferrer","className":"text-fd-muted-foreground transition-colors hover:text-fd-foreground","children":"Sponsors"}]}]
+2e:["$","li","https://www.apache.org/security/",{"children":["$","$L7",null,{"href":"https://www.apache.org/security/","target":"_blank","rel":"noopener noreferrer","className":"text-fd-muted-foreground transition-colors hover:text-fd-foreground","children":"Security"}]}]
+2f:["$","li","https://privacy.apache.org/policies/privacy-policy-public.html",{"children":["$","$L7",null,{"href":"https://privacy.apache.org/policies/privacy-policy-public.html","target":"_blank","rel":"noopener noreferrer","className":"text-fd-muted-foreground transition-colors hover:text-fd-foreground","children":"Privacy"}]}]
+30:["$","div",null,{"className":"mt-12 border-t border-fd-border pt-8 text-xs leading-relaxed text-fd-muted-foreground/70","children":[["$","p",null,{"className":"mt-4","children":["Copyright © ",2026," The Apache Software Foundation, Licensed under the Apache License, Version 2.0."]}],["$","p",null,{"className":"mt-4","children":"Apache Iggy, Iggy, Apache, and the Apache Iggy logo are trademarks or registered trademarks of The Apache Software Foundation. All other marks mentioned may be [...]
+31:I[94157,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],"Heading"]
+32:I[47873,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],"default"]
+33:I[44324,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],"CodeBlock"]
+:HL["/img/authors/piotr.png","image"]
+34:T1068,<svg viewBox="0 0 24 24"><path d="M23.8346 11.7033l-1.0073-.6236a13.7268 13.7268 0 00-.0283-.2936l.8656-.8069a.3483.3483 0 00-.1154-.578l-1.1066-.414a8.4958 8.4958 0 00-.087-.2856l.6904-.9587a.3462.3462 0 00-.2257-.5446l-1.1663-.1894a9.3574 9.3574 0 00-.1407-.2622l.49-1.0761a.3437.3437 0 00-.0274-.3361.3486.3486 0 00-.3006-.154l-1.1845.0416a6.7444 6.7444 0 00-.1873-.2268l.2723-1.153a.3472.3472 0 00-.417-.4172l-1.1532.2724a14.0183 14.0183 0 00-.2278-.1873l.0415-1.1845a.3442.3442  [...]
+40:I[44324,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],"Pre"]
+35:["$","$L40",null,{"children":["$","code",null,{"children":[["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"pub"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":" struct"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" Consumer"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8" [...]
+36:["$","p",null,{"children":["All the commands, such as ",["$","code",null,{"children":"PollMessages"}],", ",["$","code",null,{"children":"StoreConsumerOffset"}]," and ",["$","code",null,{"children":"GetConsumerOffset"}]," which contain the ",["$","code",null,{"children":"consumer"}]," field, now require an update to the underlying serialization, as the ",["$","code",null,{"children":"id"}]," field is now an ",["$","code",null,{"children":"Identifier"}]," type, instead of ",["$","code", [...]
+37:["$","p",null,{"children":["From now on, whenever working with the ",["$","code",null,{"children":"consumer"}]," or ",["$","code",null,{"children":"consumer group"}]," resource, you can use the numeric or text identifier."]}]
+38:["$","$L31",null,{"as":"h2","id":"consumer-groups","children":"Consumer groups"}]
+41:T1068,<svg viewBox="0 0 24 24"><path d="M23.8346 11.7033l-1.0073-.6236a13.7268 13.7268 0 00-.0283-.2936l.8656-.8069a.3483.3483 0 00-.1154-.578l-1.1066-.414a8.4958 8.4958 0 00-.087-.2856l.6904-.9587a.3462.3462 0 00-.2257-.5446l-1.1663-.1894a9.3574 9.3574 0 00-.1407-.2622l.49-1.0761a.3437.3437 0 00-.0274-.3361.3486.3486 0 00-.3006-.154l-1.1845.0416a6.7444 6.7444 0 00-.1873-.2268l.2723-1.153a.3472.3472 0 00-.417-.4172l-1.1532.2724a14.0183 14.0183 0 00-.2278-.1873l.0415-1.1845a.3442.3442  [...]
+3a:["$","p",null,{"children":["When creating the consumer group, the required ",["$","code",null,{"children":"name"}]," field has been added (must be ",["$","strong",null,{"children":"unique per topic"}],"), and is serialized as usual, at the end of the payload, starting with the ",["$","code",null,{"children":"name length"}]," (4 bytes) and the ",["$","code",null,{"children":"name"}]," itself (N bytes)."]}]
+43:T1068,<svg viewBox="0 0 24 24"><path d="M23.8346 11.7033l-1.0073-.6236a13.7268 13.7268 0 00-.0283-.2936l.8656-.8069a.3483.3483 0 00-.1154-.578l-1.1066-.414a8.4958 8.4958 0 00-.087-.2856l.6904-.9587a.3462.3462 0 00-.2257-.5446l-1.1663-.1894a9.3574 9.3574 0 00-.1407-.2622l.49-1.0761a.3437.3437 0 00-.0274-.3361.3486.3486 0 00-.3006-.154l-1.1845.0416a6.7444 6.7444 0 00-.1873-.2268l.2723-1.153a.3472.3472 0 00-.417-.4172l-1.1532.2724a14.0183 14.0183 0 00-.2278-.1873l.0415-1.1845a.3442.3442  [...]
+3c:["$","p",null,{"children":["The ",["$","code",null,{"children":"DeleteConsumerGroup"}],", ",["$","code",null,{"children":"GetConsumerGroup"}],", ",["$","code",null,{"children":"JoinConsumerGroup"}]," and ",["$","code",null,{"children":"LeaveConsumerGroup"}]," commands have been extended with the ",["$","code",null,{"children":"consumer_group_id"}]," field, which is now an ",["$","code",null,{"children":"Identifier"}]," type, instead of ",["$","code",null,{"children":"u32"}],"."]}]
+45:T1068,<svg viewBox="0 0 24 24"><path d="M23.8346 11.7033l-1.0073-.6236a13.7268 13.7268 0 00-.0283-.2936l.8656-.8069a.3483.3483 0 00-.1154-.578l-1.1066-.414a8.4958 8.4958 0 00-.087-.2856l.6904-.9587a.3462.3462 0 00-.2257-.5446l-1.1663-.1894a9.3574 9.3574 0 00-.1407-.2622l.49-1.0761a.3437.3437 0 00-.0274-.3361.3486.3486 0 00-.3006-.154l-1.1845.0416a6.7444 6.7444 0 00-.1873-.2268l.2723-1.153a.3472.3472 0 00-.417-.4172l-1.1532.2724a14.0183 14.0183 0 00-.2278-.1873l.0415-1.1845a.3442.3442  [...]
+3e:["$","p",null,{"children":["When fetching the consumer group(s), the ",["$","code",null,{"children":"ConsumerGroup"}]," and ",["$","code",null,{"children":"ConsumerGroupDetails"}]," structs have been extended with the ",["$","code",null,{"children":"name"}]," field, which serialized after ",["$","code",null,{"children":"members_count"}],"."]}]
+3f:["$","footer",null,{"className":"mt-16 border-t border-fd-border pt-8","children":["$","$L7",null,{"href":"/blogs","className":"inline-flex items-center gap-2 text-sm font-medium text-fd-primary transition-colors hover:opacity-80","children":"← Back to all posts"}]}]
+42:["$","$L40",null,{"children":["$","code",null,{"children":[["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"pub"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":" struct"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" CreateConsumerGroup"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark [...]
+44:["$","$L40",null,{"children":["$","code",null,{"children":[["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"pub"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":" struct"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" DeleteConsumerGroup"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark [...]
+46:["$","$L40",null,{"children":["$","code",null,{"children":[["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"pub"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":" struct"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" ConsumerGroup"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1 [...]
+47:["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":" struct"}]
+48:["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" JoinConsumerGroup"}]
+49:["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":" {"}]
+4a:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"    pub"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":" stream_id"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":":"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" Identifier"}],["$","span",null,{"style":{"--s [...]
+4b:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"    pub"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":" topic_id"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":":"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" Identifier"}],["$","span",null,{"style":{"--sh [...]
+4c:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"    pub"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":" consumer_group_id"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":":"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" Identifier"}],["$","span",null,{"styl [...]
+4d:["$","span",null,{"className":"line","children":["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"}"}]}]
+4e:["$","span",null,{"className":"line"}]
+4f:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"pub"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":" struct"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" LeaveConsumerGroup"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":" {"}]]}]
+50:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"    pub"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":" stream_id"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":":"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" Identifier"}],["$","span",null,{"style":{"--s [...]
+51:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"    pub"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":" topic_id"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":":"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" Identifier"}],["$","span",null,{"style":{"--sh [...]
+52:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"    pub"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":" consumer_group_id"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":":"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" Identifier"}],["$","span",null,{"styl [...]
+53:["$","span",null,{"className":"line","children":["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"}"}]}]
+54:["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":","}]
+55:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"    pub"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":" members_count"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":":"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" u32"}],["$","span",null,{"style":{"--shik [...]
+56:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"    pub"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":" members"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":":"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" Vec"}],["$","span",null,{"style":{"--shiki-ligh [...]
+57:["$","span",null,{"className":"line","children":["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"}"}]}]
+29:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]
+58:I[27201,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"IconMark"]
+27:null
+2b:[["$","title","0",{"children":"Consumer identifier | Apache Iggy"}],["$","link","1",{"rel":"canonical","href":"https://iggy.apache.org/blogs/2023/10/02/consumer-identifier/"}],["$","link","2",{"rel":"alternate","type":"text/markdown","href":"https://iggy.apache.org/blogs/2023/10/02/consumer-identifier.md"}],["$","meta","3",{"property":"og:title","content":"Consumer identifier | Apache Iggy"}],["$","meta","4",{"property":"og:url","content":"https://iggy.apache.org/blogs/2023/10/02/cons [...]
diff --git a/blogs/2023/10/02/consumer-identifier/__next._index.txt b/blogs/2023/10/02/consumer-identifier/__next._index.txt
new file mode 100644
index 000000000..42b058136
--- /dev/null
+++ b/blogs/2023/10/02/consumer-identifier/__next._index.txt
@@ -0,0 +1,20 @@
+1:"$Sreact.fragment"
+3:I[17751,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"RootProvider"]
+4:I[39756,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"default"]
+5:I[58298,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/3-_96y-evozm0.js"],"default"]
+6:I[37457,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"default"]
+7:I[22016,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],""]
+:HL["/_next/static/chunks/1_55v0vlfews3.css","style"]
+2:T512,{"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://iggy.apache.org/#organization","name":"The Apache Software Foundation","url":"https://www.apache.org/","logo":"https://iggy.apache.org/img/asf_logo.svg","contactPoint":{"@type":"ContactPoint","contactType":"technical support","email":"dev@iggy.apache.org","url":"https://iggy.apache.org/community/"}},{"@type":"WebSite","@id":"https://iggy.apache.org/#website","name":"Apache Iggy","url":"https://iggy.a [...]
+0:{"buildId":"CEAllZE6ERPzzxzpa_n8G","data":[{"rsc":["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/1_55v0vlfews3.css","precedence":"next"}],["$","script","script-0",{"src":"/_next/static/chunks/05hk4ely-lns6.js","async":true}],["$","script","script-1",{"src":"/_next/static/chunks/2tvyahbdutabx.js","async":true}]],["$","html",null,{"lang":"en","suppressHydrationWarning":true,"children":["$","body",null,{"className":"flex min-h-screen flex-col  [...]
+10:I[79520,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],""]
+11:I[69877,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"Matomo"]
+8:["$","a",null,{"href":"/sitemap.xml","className":"underline hover:text-fd-primary","children":"/sitemap.xml"}]
+9:["$","a",null,{"href":"/llms.txt","className":"underline hover:text-fd-primary","children":"/llms.txt"}]
+a:["$","$L10",null,{"id":"matomo","strategy":"afterInteractive","children":"var _paq = window._paq = window._paq || [];\n_paq.push([\"setDoNotTrack\", true]);\n_paq.push([\"disableCookies\"]);\n_paq.push(['trackPageView']);\n_paq.push(['enableLinkTracking']);\n(function() {\n  var u=\"https://analytics.apache.org/\";\n  _paq.push(['setTrackerUrl', u+'matomo.php']);\n  _paq.push(['setSiteId', '80']);\n  var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];\n  [...]
+b:["$","$L11",null,{}]
+d:300
+f:true
+d:C
+e:0
+c:"$undefined"
diff --git a/blogs/2023/10/02/consumer-identifier/__next._tree.txt b/blogs/2023/10/02/consumer-identifier/__next._tree.txt
new file mode 100644
index 000000000..fa27514fe
--- /dev/null
+++ b/blogs/2023/10/02/consumer-identifier/__next._tree.txt
@@ -0,0 +1,3 @@
+:HL["/_next/static/chunks/1_55v0vlfews3.css","style"]
+:HL["/img/authors/piotr.png","image"]
+0:{"tree":{"name":"","param":null,"prefetchHints":4112,"slots":{"children":{"name":"(site)","param":null,"prefetchHints":4096,"slots":{"children":{"name":"blogs","param":null,"prefetchHints":4160,"slots":{"children":{"name":"slug","param":{"type":"c","key":"2023/10/02/consumer-identifier","siblings":[]},"prefetchHints":4192,"slots":{"children":{"name":"__PAGE__","param":null,"prefetchHints":4256,"slots":null}}}}}}}}},"staleTime":300,"buildId":"CEAllZE6ERPzzxzpa_n8G"}
diff --git a/blogs/2023/10/02/consumer-identifier/index.html b/blogs/2023/10/02/consumer-identifier/index.html
new file mode 100644
index 000000000..4ed17969d
--- /dev/null
+++ b/blogs/2023/10/02/consumer-identifier/index.html
@@ -0,0 +1,57 @@
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" href="/img/authors/piotr.png" as="image"/><link rel="stylesheet" href="/_next/static/chunks/1_55v0vlfews3.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/1qt6pht_u0de1.js"/><script src="/_next/static/chunks/1iye7dwhtxrnu.js" async=""></script><script src="/_next/static/chunks/1t7fq8 [...]
+<h2 id="breaking-changes" class="group/heading flex scroll-m-28 flex-row items-center gap-1"><a data-card="" href="#breaking-changes">Breaking changes</a><button aria-label="Copy Anchor Link" class="inline-flex items-center justify-center rounded-md text-sm font-medium duration-100 disabled:pointer-events-none disabled:opacity-50 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-fd-ring hover:bg-fd-accent hover:text-fd-accent-foreground p-1 [&amp;_svg]:size-4 not-prose s [...]
+<p>The breaking changes have been introduced in Iggy server, starting from version <code>0.0.30</code> and Iggy SDK, starting from version <code>0.0.90</code>. The final commit containing all the mentioned changes is <a href="https://github.com/apache/iggy/commit/655f9b6bccb0ae4148422f32475a9bedc09827d2" rel="noreferrer noopener" target="_blank">#655f9b6</a>.</p>
+<h2 id="consumer-identifier" class="group/heading flex scroll-m-28 flex-row items-center gap-1"><a data-card="" href="#consumer-identifier">Consumer identifier</a><button aria-label="Copy Anchor Link" class="inline-flex items-center justify-center rounded-md text-sm font-medium duration-100 disabled:pointer-events-none disabled:opacity-50 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-fd-ring hover:bg-fd-accent hover:text-fd-accent-foreground p-1 [&amp;_svg]:size-4 no [...]
+<figure dir="ltr" class="my-4 bg-fd-card rounded-xl shiki relative border shadow-sm not-prose overflow-hidden text-sm shiki shiki-themes github-light github-dark" style="--shiki-light:#24292e;--shiki-dark:#e1e4e8;--shiki-light-bg:#fff;--shiki-dark-bg:#24292e" tabindex="-1"><div class="empty:hidden absolute top-3 right-2 z-2 backdrop-blur-lg rounded-lg text-fd-muted-foreground"><button type="button" class="inline-flex items-center justify-center rounded-md text-sm font-medium transition-c [...]
+<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    pub</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> kind</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">:</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> ConsumerKind</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
+<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    pub</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> id</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">:</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> Identifier</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
+<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">}</span></span></code></pre></div></figure>
+<p>All the commands, such as <code>PollMessages</code>, <code>StoreConsumerOffset</code> and <code>GetConsumerOffset</code> which contain the <code>consumer</code> field, now require an update to the underlying serialization, as the <code>id</code> field is now an <code>Identifier</code> type, instead of <code>u32</code>. The serialization is the same, as when working with the <code>stream</code>, <code>topic</code> or <code>user</code> resources.</p>
+<p>From now on, whenever working with the <code>consumer</code> or <code>consumer group</code> resource, you can use the numeric or text identifier.</p>
+<h2 id="consumer-groups" class="group/heading flex scroll-m-28 flex-row items-center gap-1"><a data-card="" href="#consumer-groups">Consumer groups</a><button aria-label="Copy Anchor Link" class="inline-flex items-center justify-center rounded-md text-sm font-medium duration-100 disabled:pointer-events-none disabled:opacity-50 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-fd-ring hover:bg-fd-accent hover:text-fd-accent-foreground p-1 [&amp;_svg]:size-4 not-prose shri [...]
+<figure dir="ltr" class="my-4 bg-fd-card rounded-xl shiki relative border shadow-sm not-prose overflow-hidden text-sm shiki shiki-themes github-light github-dark" style="--shiki-light:#24292e;--shiki-dark:#e1e4e8;--shiki-light-bg:#fff;--shiki-dark-bg:#24292e" tabindex="-1"><div class="empty:hidden absolute top-3 right-2 z-2 backdrop-blur-lg rounded-lg text-fd-muted-foreground"><button type="button" class="inline-flex items-center justify-center rounded-md text-sm font-medium transition-c [...]
+<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    pub</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> stream_id</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">:</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> Identifier</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
+<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    pub</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> topic_id</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">:</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> Identifier</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
+<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    pub</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> consumer_group_id</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">:</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> u32</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
+<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    pub</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> name</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">:</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> String</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
+<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">}</span></span></code></pre></div></figure>
+<p>When creating the consumer group, the required <code>name</code> field has been added (must be <strong>unique per topic</strong>), and is serialized as usual, at the end of the payload, starting with the <code>name length</code> (4 bytes) and the <code>name</code> itself (N bytes).</p>
+<figure dir="ltr" class="my-4 bg-fd-card rounded-xl shiki relative border shadow-sm not-prose overflow-hidden text-sm shiki shiki-themes github-light github-dark" style="--shiki-light:#24292e;--shiki-dark:#e1e4e8;--shiki-light-bg:#fff;--shiki-dark-bg:#24292e" tabindex="-1"><div class="empty:hidden absolute top-3 right-2 z-2 backdrop-blur-lg rounded-lg text-fd-muted-foreground"><button type="button" class="inline-flex items-center justify-center rounded-md text-sm font-medium transition-c [...]
+<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    pub</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> stream_id</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">:</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> Identifier</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
+<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    pub</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> topic_id</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">:</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> Identifier</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
+<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    pub</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> consumer_group_id</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">:</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> Identifier</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
+<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">}</span></span>
+<span class="line"></span>
+<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">pub</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583"> struct</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> GetConsumerGroup</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> {</span></span>
+<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    pub</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> stream_id</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">:</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> Identifier</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
+<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    pub</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> topic_id</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">:</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> Identifier</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
+<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    pub</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> consumer_group_id</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">:</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> Identifier</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
+<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">}</span></span>
+<span class="line"></span>
+<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">pub</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583"> struct</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> JoinConsumerGroup</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> {</span></span>
+<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    pub</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> stream_id</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">:</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> Identifier</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
+<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    pub</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> topic_id</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">:</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> Identifier</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
+<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    pub</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> consumer_group_id</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">:</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> Identifier</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
+<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">}</span></span>
+<span class="line"></span>
+<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">pub</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583"> struct</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> LeaveConsumerGroup</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> {</span></span>
+<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    pub</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> stream_id</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">:</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> Identifier</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
+<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    pub</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> topic_id</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">:</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> Identifier</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
+<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    pub</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> consumer_group_id</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">:</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> Identifier</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
+<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">}</span></span></code></pre></div></figure>
+<p>The <code>DeleteConsumerGroup</code>, <code>GetConsumerGroup</code>, <code>JoinConsumerGroup</code> and <code>LeaveConsumerGroup</code> commands have been extended with the <code>consumer_group_id</code> field, which is now an <code>Identifier</code> type, instead of <code>u32</code>.</p>
+<figure dir="ltr" class="my-4 bg-fd-card rounded-xl shiki relative border shadow-sm not-prose overflow-hidden text-sm shiki shiki-themes github-light github-dark" style="--shiki-light:#24292e;--shiki-dark:#e1e4e8;--shiki-light-bg:#fff;--shiki-dark-bg:#24292e" tabindex="-1"><div class="empty:hidden absolute top-3 right-2 z-2 backdrop-blur-lg rounded-lg text-fd-muted-foreground"><button type="button" class="inline-flex items-center justify-center rounded-md text-sm font-medium transition-c [...]
+<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    pub</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> id</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">:</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> u32</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
+<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    pub</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> name</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">:</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> String</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
+<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    pub</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> partitions_count</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">:</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> u32</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
+<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    pub</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> members_count</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">:</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> u32</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
+<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">}</span></span>
+<span class="line"></span>
+<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">pub</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583"> struct</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> ConsumerGroupDetails</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> {</span></span>
+<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    pub</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> id</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">:</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> u32</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
+<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    pub</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> name</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">:</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> String</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
+<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    pub</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> partitions_count</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">:</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> u32</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
+<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    pub</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> members_count</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">:</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> u32</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
+<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    pub</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> members</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">:</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> Vec</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">&lt;</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">ConsumerGroupMember</span><span style="--shiki-light:#24292E;--shiki-dar [...]
+<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">}</span></span></code></pre></div></figure>
+<p>When fetching the consumer group(s), the <code>ConsumerGroup</code> and <code>ConsumerGroupDetails</code> structs have been extended with the <code>name</code> field, which serialized after <code>members_count</code>.</p></div><footer class="mt-16 border-t border-fd-border pt-8"><a class="inline-flex items-center gap-2 text-sm font-medium text-fd-primary transition-colors hover:opacity-80" href="/blogs/">← Back to all posts</a></footer></article></main><!--$--><!--/$--><footer class=" [...]
\ No newline at end of file
diff --git a/blogs/2023/10/02/consumer-identifier/index.txt b/blogs/2023/10/02/consumer-identifier/index.txt
new file mode 100644
index 000000000..32565321f
--- /dev/null
+++ b/blogs/2023/10/02/consumer-identifier/index.txt
@@ -0,0 +1,87 @@
+1:"$Sreact.fragment"
+3:I[17751,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"RootProvider"]
+4:I[39756,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"default"]
+5:I[58298,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/3-_96y-evozm0.js"],"default"]
+6:I[37457,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"default"]
+7:I[22016,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],""]
+12:I[68027,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"default",1]
+:HL["/_next/static/chunks/1_55v0vlfews3.css","style"]
+2:T512,{"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://iggy.apache.org/#organization","name":"The Apache Software Foundation","url":"https://www.apache.org/","logo":"https://iggy.apache.org/img/asf_logo.svg","contactPoint":{"@type":"ContactPoint","contactType":"technical support","email":"dev@iggy.apache.org","url":"https://iggy.apache.org/community/"}},{"@type":"WebSite","@id":"https://iggy.apache.org/#website","name":"Apache Iggy","url":"https://iggy.a [...]
+0:{"P":null,"c":["","blogs","2023","10","02","consumer-identifier",""],"q":"","i":false,"f":[[["",{"children":["(site)",{"children":["blogs",{"children":[["slug","2023/10/02/consumer-identifier","c",[]],{"children":["__PAGE__",{},"$undefined","$undefined",4608]},"$undefined","$undefined",4608]},"$undefined","$undefined",4608]},"$undefined","$undefined",4608]},"$undefined","$undefined",4624],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/1_55 [...]
+14:I[79520,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],""]
+15:I[69877,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"Matomo"]
+16:I[5014,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],"default"]
+17:I[64345,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js"],"HomeLayout"]
+18:I[88760,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js"],"Logo"]
+19:I[15269,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js"],"CommunityDropdown"]
+1a:I[15269,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js"],"communityLinks"]
+1b:I[29966,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js"],"ASFDropdown"]
+1c:I[36330,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js"],"ASFMobileLinks"]
+25:I[97367,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"OutletBoundary"]
+26:"$Sreact.suspense"
+28:I[97367,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"ViewportBoundary"]
+2a:I[97367,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"MetadataBoundary"]
+8:["$","$L7","/community",{"href":"/community","className":"transition-colors hover:text-fd-primary","children":"Community"}]
+9:["$","p",null,{"className":"mt-6 max-w-md text-xs text-fd-muted-foreground","children":["Every page on this site is listed in"," ",["$","a",null,{"href":"/sitemap.xml","className":"underline hover:text-fd-primary","children":"/sitemap.xml"}],", and"," ",["$","a",null,{"href":"/llms.txt","className":"underline hover:text-fd-primary","children":"/llms.txt"}]," ","summarises the documentation."]}]
+a:["$","$L14",null,{"id":"matomo","strategy":"afterInteractive","children":"var _paq = window._paq = window._paq || [];\n_paq.push([\"setDoNotTrack\", true]);\n_paq.push([\"disableCookies\"]);\n_paq.push(['trackPageView']);\n_paq.push(['enableLinkTracking']);\n(function() {\n  var u=\"https://analytics.apache.org/\";\n  _paq.push(['setTrackerUrl', u+'matomo.php']);\n  _paq.push(['setSiteId', '80']);\n  var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];\n  [...]
+b:["$","$L15",null,{}]
+c:["$","$1","c",{"children":[[["$","script","script-0",{"src":"/_next/static/chunks/241-fa32f9zay.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/_next/static/chunks/3x8y3fmtn6lnc.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/_next/static/chunks/250gopd52txql.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/_next/static/chunks/0n3fueko2xquo.js","async":true,"nonce":"$undefined"}]],[["$","div",null,{"className" [...]
+d:["$","$1","c",{"children":[null,["$","$L4",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}]
+e:["$","$1","c",{"children":[null,["$","$L4",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}]
+f:["$","$1","c",{"children":["$L24",[["$","script","script-0",{"src":"/_next/static/chunks/1k39uva2a578s.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/_next/static/chunks/23ktdyx90z0v3.js","async":true,"nonce":"$undefined"}]],["$","$L25",null,{"children":["$","$26",null,{"name":"Next.MetadataOutlet","children":"$@27"}]}]]}]
+11:["$","$1","h",{"children":[null,["$","$L28",null,{"children":"$L29"}],["$","div",null,{"hidden":true,"children":["$","$L2a",null,{"children":["$","$26",null,{"name":"Next.Metadata","children":"$L2b"}]}]}],null]}]
+13:["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/1_55v0vlfews3.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]
+10:C
+1d:["$","$L7","/",{"href":"/","className":"transition-colors hover:text-fd-primary","children":"Home"}]
+1e:["$","$L7","/docs",{"href":"/docs","className":"transition-colors hover:text-fd-primary","children":"Documentation"}]
+1f:["$","$L7","/blogs",{"href":"/blogs","className":"transition-colors hover:text-fd-primary","children":"Blog"}]
+20:["$","$L7","/downloads",{"href":"/downloads","className":"transition-colors hover:text-fd-primary","children":"Downloads"}]
+21:["$","$L7","/community",{"href":"/community","className":"transition-colors hover:text-fd-primary","children":"Community"}]
+22:["$","p",null,{"className":"mt-6 max-w-md text-xs text-fd-muted-foreground","children":["Every page on this site is listed in"," ",["$","a",null,{"href":"/sitemap.xml","className":"underline hover:text-fd-primary","children":"/sitemap.xml"}],", and"," ",["$","a",null,{"href":"/llms.txt","className":"underline hover:text-fd-primary","children":"/llms.txt"}]," ","summarises the documentation."]}]
+23:["$","footer",null,{"className":"border-t border-fd-border bg-fd-background px-6 py-14 md:px-12","children":["$","div",null,{"className":"mx-auto max-w-6xl","children":[["$","div",null,{"className":"grid gap-10 sm:grid-cols-2 lg:grid-cols-4","children":[["$","div","Docs",{"children":[["$","h2",null,{"className":"mb-4 text-sm font-semibold uppercase tracking-wide text-fd-primary","children":"Docs"}],["$","ul",null,{"className":"space-y-2.5 text-sm","children":[["$","li","/docs",{"child [...]
+2c:["$","li","https://www.apache.org/foundation/contributing.html",{"children":["$","$L7",null,{"href":"https://www.apache.org/foundation/contributing.html","target":"_blank","rel":"noopener noreferrer","className":"text-fd-muted-foreground transition-colors hover:text-fd-foreground","children":"Donate"}]}]
+2d:["$","li","https://www.apache.org/foundation/sponsorship.html",{"children":["$","$L7",null,{"href":"https://www.apache.org/foundation/sponsorship.html","target":"_blank","rel":"noopener noreferrer","className":"text-fd-muted-foreground transition-colors hover:text-fd-foreground","children":"Sponsors"}]}]
+2e:["$","li","https://www.apache.org/security/",{"children":["$","$L7",null,{"href":"https://www.apache.org/security/","target":"_blank","rel":"noopener noreferrer","className":"text-fd-muted-foreground transition-colors hover:text-fd-foreground","children":"Security"}]}]
+2f:["$","li","https://privacy.apache.org/policies/privacy-policy-public.html",{"children":["$","$L7",null,{"href":"https://privacy.apache.org/policies/privacy-policy-public.html","target":"_blank","rel":"noopener noreferrer","className":"text-fd-muted-foreground transition-colors hover:text-fd-foreground","children":"Privacy"}]}]
+30:["$","div",null,{"className":"mt-12 border-t border-fd-border pt-8 text-xs leading-relaxed text-fd-muted-foreground/70","children":[["$","p",null,{"className":"mt-4","children":["Copyright © ",2026," The Apache Software Foundation, Licensed under the Apache License, Version 2.0."]}],["$","p",null,{"className":"mt-4","children":"Apache Iggy, Iggy, Apache, and the Apache Iggy logo are trademarks or registered trademarks of The Apache Software Foundation. All other marks mentioned may be [...]
+31:I[94157,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],"Heading"]
+32:I[47873,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],"default"]
+33:I[44324,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],"CodeBlock"]
+:HL["/img/authors/piotr.png","image"]
+34:T1068,<svg viewBox="0 0 24 24"><path d="M23.8346 11.7033l-1.0073-.6236a13.7268 13.7268 0 00-.0283-.2936l.8656-.8069a.3483.3483 0 00-.1154-.578l-1.1066-.414a8.4958 8.4958 0 00-.087-.2856l.6904-.9587a.3462.3462 0 00-.2257-.5446l-1.1663-.1894a9.3574 9.3574 0 00-.1407-.2622l.49-1.0761a.3437.3437 0 00-.0274-.3361.3486.3486 0 00-.3006-.154l-1.1845.0416a6.7444 6.7444 0 00-.1873-.2268l.2723-1.153a.3472.3472 0 00-.417-.4172l-1.1532.2724a14.0183 14.0183 0 00-.2278-.1873l.0415-1.1845a.3442.3442  [...]
+40:I[44324,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],"Pre"]
+35:["$","$L40",null,{"children":["$","code",null,{"children":[["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"pub"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":" struct"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" Consumer"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8" [...]
+36:["$","p",null,{"children":["All the commands, such as ",["$","code",null,{"children":"PollMessages"}],", ",["$","code",null,{"children":"StoreConsumerOffset"}]," and ",["$","code",null,{"children":"GetConsumerOffset"}]," which contain the ",["$","code",null,{"children":"consumer"}]," field, now require an update to the underlying serialization, as the ",["$","code",null,{"children":"id"}]," field is now an ",["$","code",null,{"children":"Identifier"}]," type, instead of ",["$","code", [...]
+37:["$","p",null,{"children":["From now on, whenever working with the ",["$","code",null,{"children":"consumer"}]," or ",["$","code",null,{"children":"consumer group"}]," resource, you can use the numeric or text identifier."]}]
+38:["$","$L31",null,{"as":"h2","id":"consumer-groups","children":"Consumer groups"}]
+41:T1068,<svg viewBox="0 0 24 24"><path d="M23.8346 11.7033l-1.0073-.6236a13.7268 13.7268 0 00-.0283-.2936l.8656-.8069a.3483.3483 0 00-.1154-.578l-1.1066-.414a8.4958 8.4958 0 00-.087-.2856l.6904-.9587a.3462.3462 0 00-.2257-.5446l-1.1663-.1894a9.3574 9.3574 0 00-.1407-.2622l.49-1.0761a.3437.3437 0 00-.0274-.3361.3486.3486 0 00-.3006-.154l-1.1845.0416a6.7444 6.7444 0 00-.1873-.2268l.2723-1.153a.3472.3472 0 00-.417-.4172l-1.1532.2724a14.0183 14.0183 0 00-.2278-.1873l.0415-1.1845a.3442.3442  [...]
+3a:["$","p",null,{"children":["When creating the consumer group, the required ",["$","code",null,{"children":"name"}]," field has been added (must be ",["$","strong",null,{"children":"unique per topic"}],"), and is serialized as usual, at the end of the payload, starting with the ",["$","code",null,{"children":"name length"}]," (4 bytes) and the ",["$","code",null,{"children":"name"}]," itself (N bytes)."]}]
+43:T1068,<svg viewBox="0 0 24 24"><path d="M23.8346 11.7033l-1.0073-.6236a13.7268 13.7268 0 00-.0283-.2936l.8656-.8069a.3483.3483 0 00-.1154-.578l-1.1066-.414a8.4958 8.4958 0 00-.087-.2856l.6904-.9587a.3462.3462 0 00-.2257-.5446l-1.1663-.1894a9.3574 9.3574 0 00-.1407-.2622l.49-1.0761a.3437.3437 0 00-.0274-.3361.3486.3486 0 00-.3006-.154l-1.1845.0416a6.7444 6.7444 0 00-.1873-.2268l.2723-1.153a.3472.3472 0 00-.417-.4172l-1.1532.2724a14.0183 14.0183 0 00-.2278-.1873l.0415-1.1845a.3442.3442  [...]
+3c:["$","p",null,{"children":["The ",["$","code",null,{"children":"DeleteConsumerGroup"}],", ",["$","code",null,{"children":"GetConsumerGroup"}],", ",["$","code",null,{"children":"JoinConsumerGroup"}]," and ",["$","code",null,{"children":"LeaveConsumerGroup"}]," commands have been extended with the ",["$","code",null,{"children":"consumer_group_id"}]," field, which is now an ",["$","code",null,{"children":"Identifier"}]," type, instead of ",["$","code",null,{"children":"u32"}],"."]}]
+45:T1068,<svg viewBox="0 0 24 24"><path d="M23.8346 11.7033l-1.0073-.6236a13.7268 13.7268 0 00-.0283-.2936l.8656-.8069a.3483.3483 0 00-.1154-.578l-1.1066-.414a8.4958 8.4958 0 00-.087-.2856l.6904-.9587a.3462.3462 0 00-.2257-.5446l-1.1663-.1894a9.3574 9.3574 0 00-.1407-.2622l.49-1.0761a.3437.3437 0 00-.0274-.3361.3486.3486 0 00-.3006-.154l-1.1845.0416a6.7444 6.7444 0 00-.1873-.2268l.2723-1.153a.3472.3472 0 00-.417-.4172l-1.1532.2724a14.0183 14.0183 0 00-.2278-.1873l.0415-1.1845a.3442.3442  [...]
+3e:["$","p",null,{"children":["When fetching the consumer group(s), the ",["$","code",null,{"children":"ConsumerGroup"}]," and ",["$","code",null,{"children":"ConsumerGroupDetails"}]," structs have been extended with the ",["$","code",null,{"children":"name"}]," field, which serialized after ",["$","code",null,{"children":"members_count"}],"."]}]
+3f:["$","footer",null,{"className":"mt-16 border-t border-fd-border pt-8","children":["$","$L7",null,{"href":"/blogs","className":"inline-flex items-center gap-2 text-sm font-medium text-fd-primary transition-colors hover:opacity-80","children":"← Back to all posts"}]}]
+42:["$","$L40",null,{"children":["$","code",null,{"children":[["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"pub"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":" struct"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" CreateConsumerGroup"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark [...]
+44:["$","$L40",null,{"children":["$","code",null,{"children":[["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"pub"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":" struct"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" DeleteConsumerGroup"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark [...]
+46:["$","$L40",null,{"children":["$","code",null,{"children":[["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"pub"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":" struct"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" ConsumerGroup"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1 [...]
+47:["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":" struct"}]
+48:["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" JoinConsumerGroup"}]
+49:["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":" {"}]
+4a:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"    pub"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":" stream_id"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":":"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" Identifier"}],["$","span",null,{"style":{"--s [...]
+4b:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"    pub"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":" topic_id"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":":"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" Identifier"}],["$","span",null,{"style":{"--sh [...]
+4c:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"    pub"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":" consumer_group_id"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":":"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" Identifier"}],["$","span",null,{"styl [...]
+4d:["$","span",null,{"className":"line","children":["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"}"}]}]
+4e:["$","span",null,{"className":"line"}]
+4f:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"pub"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":" struct"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" LeaveConsumerGroup"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":" {"}]]}]
+50:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"    pub"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":" stream_id"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":":"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" Identifier"}],["$","span",null,{"style":{"--s [...]
+51:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"    pub"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":" topic_id"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":":"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" Identifier"}],["$","span",null,{"style":{"--sh [...]
+52:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"    pub"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":" consumer_group_id"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":":"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" Identifier"}],["$","span",null,{"styl [...]
+53:["$","span",null,{"className":"line","children":["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"}"}]}]
+54:["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":","}]
+55:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"    pub"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":" members_count"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":":"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" u32"}],["$","span",null,{"style":{"--shik [...]
+56:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"    pub"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":" members"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":":"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" Vec"}],["$","span",null,{"style":{"--shiki-ligh [...]
+57:["$","span",null,{"className":"line","children":["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"}"}]}]
+29:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]
+58:I[27201,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"IconMark"]
+27:null
+2b:[["$","title","0",{"children":"Consumer identifier | Apache Iggy"}],["$","link","1",{"rel":"canonical","href":"https://iggy.apache.org/blogs/2023/10/02/consumer-identifier/"}],["$","link","2",{"rel":"alternate","type":"text/markdown","href":"https://iggy.apache.org/blogs/2023/10/02/consumer-identifier.md"}],["$","meta","3",{"property":"og:title","content":"Consumer identifier | Apache Iggy"}],["$","meta","4",{"property":"og:url","content":"https://iggy.apache.org/blogs/2023/10/02/cons [...]
diff --git a/blogs/2023/10/12/personal-access-tokens.md b/blogs/2023/10/12/personal-access-tokens.md
new file mode 100644
index 000000000..7db18c7be
--- /dev/null
+++ b/blogs/2023/10/12/personal-access-tokens.md
@@ -0,0 +1,91 @@
+# Personal access tokens
+
+Published: 2023-10-12
+
+Rendered page: https://iggy.apache.org/blogs/2023/10/12/personal-access-tokens/
+
+Source: https://github.com/apache/iggy-website/blob/main/content/blog/personal-access-tokens.mdx
+
+Since the most recent update, Iggy.rs supports personal access tokens, which can be used to authenticate the clients, instead of the username and password. The tokens can be created and deleted using the available APIs.
+
+
+## Breaking changes
+
+No breaking changes have been introduced in neither Iggy server, nor Iggy SDK. The server does support the new `PAT` authentication method since version `0.0.40`, and the SDK since version `0.0.100`. The initial changes are part of the commit [#e74c25e](https://github.com/apache/iggy/commit/e74c25e058b1f39119ee89b5ada5d93f171cb221).
+
+## Personal access tokens
+
+PAT is a simple idea, which allows authenticating the clients using a token, instead of the regular credentials (username and password). This approach might feel safer for some users, as the token can be deleted at any time, and it's not tied to the user's password. The tokens can be created, listed and deleted using the available APIs. PAT has an optional expiry, which can be set when creating the token.
+
+
+```rust
+pub struct CreatePersonalAccessToken {
+    pub name: String,
+    pub expiry: Option<u32>,
+}
+
+pub struct DeletePersonalAccessToken {
+    pub name: String,
+}
+
+pub struct GetPersonalAccessTokens {}
+
+pub struct LoginWithPersonalAccessToken {
+    pub token: String,
+}
+```
+
+Each token must have a unique `name`, which is used to identify the token. The `expiry` field is optional, and if set, it must be the amount of seconds since the token creation on the server side, after which the token will expire. A single user may create the maximum of 100 tokens.
+
+```rust
+async fn get_personal_access_tokens(
+    &self,
+    command: &GetPersonalAccessTokens,
+) -> Result<Vec<PersonalAccessTokenInfo>, Error>;
+
+async fn create_personal_access_token(
+    &self,
+    command: &CreatePersonalAccessToken,
+) -> Result<RawPersonalAccessToken, Error>;
+
+async fn delete_personal_access_token(
+    &self,
+    command: &DeletePersonalAccessToken,
+) -> Result<(), Error>;
+
+async fn login_with_personal_access_token(
+    &self,
+    command: &LoginWithPersonalAccessToken,
+) -> Result<IdentityInfo, Error>;
+```
+
+When creating the token, the server returns the `RawPersonalAccessToken` struct, which contains the string `token` value.
+
+```rust
+pub struct RawPersonalAccessToken {
+    pub token: String,
+}
+```
+
+This is returned **only once**, as it's a raw, secure token, which should be stored by the client. The server only stores the hashed version of the token, and it's not possible to retrieve the original value. The token can be used to authenticate the client using the `LoginWithPersonalAccessToken` command.
+
+The following structure is returned when listing the tokens. It contains the `name` and an optional `expiry` fields. Please note that the `expiry` is the actual timestamp (Epoch in microseconds) of when the token will expire, and not the amount of seconds since the token creation (like provided in the `CreatePersonalAccessToken` command).
+
+```rust
+pub struct PersonalAccessTokenInfo {
+    pub name: String,
+    pub expiry: Option<u64>,
+}
+```
+
+Login with PAT is very similar to the regular login with user credentials, and it returns the same `IdentityInfo` structure.
+
+## Configuration
+
+On the server side, you can enable the background task responsible for deleting the expired tokens.
+
+```toml
+[personal_access_token_cleaner]
+enabled = true
+interval = 60
+```
diff --git a/blogs/2023/10/12/personal-access-tokens/__next.!KHNpdGUp.blogs.$c$slug.__PAGE__.txt b/blogs/2023/10/12/personal-access-tokens/__next.!KHNpdGUp.blogs.$c$slug.__PAGE__.txt
new file mode 100644
index 000000000..44cea9522
--- /dev/null
+++ b/blogs/2023/10/12/personal-access-tokens/__next.!KHNpdGUp.blogs.$c$slug.__PAGE__.txt
@@ -0,0 +1,60 @@
+1:"$Sreact.fragment"
+2:I[94157,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],"Heading"]
+3:I[47873,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],"default"]
+4:I[44324,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],"CodeBlock"]
+:HL["/img/authors/piotr.png","image"]
+5:T1068,<svg viewBox="0 0 24 24"><path d="M23.8346 11.7033l-1.0073-.6236a13.7268 13.7268 0 00-.0283-.2936l.8656-.8069a.3483.3483 0 00-.1154-.578l-1.1066-.414a8.4958 8.4958 0 00-.087-.2856l.6904-.9587a.3462.3462 0 00-.2257-.5446l-1.1663-.1894a9.3574 9.3574 0 00-.1407-.2622l.49-1.0761a.3437.3437 0 00-.0274-.3361.3486.3486 0 00-.3006-.154l-1.1845.0416a6.7444 6.7444 0 00-.1873-.2268l.2723-1.153a.3472.3472 0 00-.417-.4172l-1.1532.2724a14.0183 14.0183 0 00-.2278-.1873l.0415-1.1845a.3442.3442 0 [...]
+1c:X
+1c:C
+0:{"buildId":"CEAllZE6ERPzzxzpa_n8G","data":[{"rsc":["$","$1","c",{"children":[["$","main",null,{"className":"min-h-screen px-6 py-16 md:px-12","children":["$","article",null,{"className":"mx-auto max-w-5xl","children":[["$","header",null,{"className":"mb-10","children":[["$","time",null,{"className":"text-sm font-medium text-fd-muted-foreground","children":"October 12, 2023"}],["$","h1",null,{"className":"mt-3 text-3xl font-extrabold tracking-tight text-fd-foreground md:text-5xl","child [...]
+21:I[44324,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],"Pre"]
+28:I[22016,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],""]
+29:I[97367,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"OutletBoundary"]
+2a:"$Sreact.suspense"
+2c:I[97367,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"ViewportBoundary"]
+2d:I[97367,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"MetadataBoundary"]
+2e:I[27201,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"IconMark"]
+2f:I[39756,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"default"]
+30:I[37457,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"default"]
+6:["$","$L21",null,{"children":["$","code",null,{"children":[["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"pub"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":" struct"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" CreatePersonalAccessToken"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki [...]
+7:["$","p",null,{"children":["Each token must have a unique ",["$","code",null,{"children":"name"}],", which is used to identify the token. The ",["$","code",null,{"children":"expiry"}]," field is optional, and if set, it must be the amount of seconds since the token creation on the server side, after which the token will expire. A single user may create the maximum of 100 tokens."]}]
+22:T1068,<svg viewBox="0 0 24 24"><path d="M23.8346 11.7033l-1.0073-.6236a13.7268 13.7268 0 00-.0283-.2936l.8656-.8069a.3483.3483 0 00-.1154-.578l-1.1066-.414a8.4958 8.4958 0 00-.087-.2856l.6904-.9587a.3462.3462 0 00-.2257-.5446l-1.1663-.1894a9.3574 9.3574 0 00-.1407-.2622l.49-1.0761a.3437.3437 0 00-.0274-.3361.3486.3486 0 00-.3006-.154l-1.1845.0416a6.7444 6.7444 0 00-.1873-.2268l.2723-1.153a.3472.3472 0 00-.417-.4172l-1.1532.2724a14.0183 14.0183 0 00-.2278-.1873l.0415-1.1845a.3442.3442  [...]
+9:["$","p",null,{"children":["When creating the token, the server returns the ",["$","code",null,{"children":"RawPersonalAccessToken"}]," struct, which contains the string ",["$","code",null,{"children":"token"}]," value."]}]
+24:T1068,<svg viewBox="0 0 24 24"><path d="M23.8346 11.7033l-1.0073-.6236a13.7268 13.7268 0 00-.0283-.2936l.8656-.8069a.3483.3483 0 00-.1154-.578l-1.1066-.414a8.4958 8.4958 0 00-.087-.2856l.6904-.9587a.3462.3462 0 00-.2257-.5446l-1.1663-.1894a9.3574 9.3574 0 00-.1407-.2622l.49-1.0761a.3437.3437 0 00-.0274-.3361.3486.3486 0 00-.3006-.154l-1.1845.0416a6.7444 6.7444 0 00-.1873-.2268l.2723-1.153a.3472.3472 0 00-.417-.4172l-1.1532.2724a14.0183 14.0183 0 00-.2278-.1873l.0415-1.1845a.3442.3442  [...]
+b:["$","p",null,{"children":["This is returned ",["$","strong",null,{"children":"only once"}],", as it's a raw, secure token, which should be stored by the client. The server only stores the hashed version of the token, and it's not possible to retrieve the original value. The token can be used to authenticate the client using the ",["$","code",null,{"children":"LoginWithPersonalAccessToken"}]," command."]}]
+c:["$","p",null,{"children":["The following structure is returned when listing the tokens. It contains the ",["$","code",null,{"children":"name"}]," and an optional ",["$","code",null,{"children":"expiry"}]," fields. Please note that the ",["$","code",null,{"children":"expiry"}]," is the actual timestamp (Epoch in microseconds) of when the token will expire, and not the amount of seconds since the token creation (like provided in the ",["$","code",null,{"children":"CreatePersonalAccessTo [...]
+26:T1068,<svg viewBox="0 0 24 24"><path d="M23.8346 11.7033l-1.0073-.6236a13.7268 13.7268 0 00-.0283-.2936l.8656-.8069a.3483.3483 0 00-.1154-.578l-1.1066-.414a8.4958 8.4958 0 00-.087-.2856l.6904-.9587a.3462.3462 0 00-.2257-.5446l-1.1663-.1894a9.3574 9.3574 0 00-.1407-.2622l.49-1.0761a.3437.3437 0 00-.0274-.3361.3486.3486 0 00-.3006-.154l-1.1845.0416a6.7444 6.7444 0 00-.1873-.2268l.2723-1.153a.3472.3472 0 00-.417-.4172l-1.1532.2724a14.0183 14.0183 0 00-.2278-.1873l.0415-1.1845a.3442.3442  [...]
+e:["$","p",null,{"children":["Login with PAT is very similar to the regular login with user credentials, and it returns the same ",["$","code",null,{"children":"IdentityInfo"}]," structure."]}]
+f:["$","$L2",null,{"as":"h2","id":"configuration","children":"Configuration"}]
+10:["$","p",null,{"children":"On the server side, you can enable the background task responsible for deleting the expired tokens."}]
+11:["$","$L4",null,{"className":"shiki shiki-themes github-light github-dark","style":{"--shiki-light":"#24292e","--shiki-dark":"#e1e4e8","--shiki-light-bg":"#fff","--shiki-dark-bg":"#24292e"},"tabIndex":"0","icon":"<svg viewBox=\"0 0 24 24\"><path d=\"M 6,1 C 4.354992,1 3,2.354992 3,4 v 16 c 0,1.645008 1.354992,3 3,3 h 12 c 1.645008,0 3,-1.354992 3,-3 V 8 7 A 1.0001,1.0001 0 0 0 20.707031,6.2929687 l -5,-5 A 1.0001,1.0001 0 0 0 15,1 h -1 z m 0,2 h 7 v 3 c 0,1.645008 1.354992,3 3,3 h 3 v [...]
+12:["$","footer",null,{"className":"mt-16 border-t border-fd-border pt-8","children":["$","$L28",null,{"href":"/blogs","className":"inline-flex items-center gap-2 text-sm font-medium text-fd-primary transition-colors hover:opacity-80","children":"← Back to all posts"}]}]
+13:["$","script","script-0",{"src":"/_next/static/chunks/1k39uva2a578s.js","async":true}]
+14:["$","script","script-1",{"src":"/_next/static/chunks/23ktdyx90z0v3.js","async":true}]
+15:["$","$L29",null,{"children":["$","$2a",null,{"name":"Next.MetadataOutlet","children":"$@2b"}]}]
+18:["$","$1","h",{"children":[null,["$","$L2c",null,{"children":[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]}],["$","div",null,{"hidden":true,"children":["$","$L2d",null,{"children":["$","$2a",null,{"name":"Next.Metadata","children":[["$","title","0",{"children":"Personal access tokens | Apache Iggy"}],["$","link","1",{"rel":"canonical","href":"https://iggy.apache.org/blogs/2023/10/12/personal-access-tokens/"} [...]
+1a:["$","$1","c",{"children":[null,["$","$L2f",null,{"parallelRouterKey":"children","template":["$","$L30",null,{}]}]]}]
+1d:["$","$1","c",{"children":[null,["$","$L2f",null,{"parallelRouterKey":"children","template":["$","$L30",null,{}]}]]}]
+20:true
+23:["$","$L21",null,{"children":["$","code",null,{"children":[["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"async"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":" fn"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" get_personal_access_tokens"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki [...]
+25:["$","$L21",null,{"children":["$","code",null,{"children":[["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"pub"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":" struct"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" RawPersonalAccessToken"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-d [...]
+27:["$","$L21",null,{"children":["$","code",null,{"children":[["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"pub"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":" struct"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" PersonalAccessTokenInfo"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki- [...]
+2b:null
+17:300
+31:["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":" fn"}]
+32:["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" delete_personal_access_token"}]
+33:["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"("}]
+34:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"    &"}],["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":"self"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":","}]]}]
+35:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"    command"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":":"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":" &"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"DeletePersonalAccessToken"}],["$","span",null,{"st [...]
+36:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":") "}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"->"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" Result"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"<(), "}],["$","span",null,{"style":{"--shiki-light":" [...]
+37:["$","span",null,{"className":"line"}]
+38:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"async"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":" fn"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" login_with_personal_access_token"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"("}]]}]
+39:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"    &"}],["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":"self"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":","}]]}]
+3a:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"    command"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":":"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":" &"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"LoginWithPersonalAccessToken"}],["$","span",null,{ [...]
+3b:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":") "}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"->"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" Result"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"<"}],["$","span",null,{"style":{"--shiki-light":"#6F4 [...]
+17:C
+1f:0
+19:"$undefined"
+1b:"$undefined"
+1e:"$undefined"
+16:"$undefined"
diff --git a/blogs/2023/10/12/personal-access-tokens/__next.!KHNpdGUp.txt b/blogs/2023/10/12/personal-access-tokens/__next.!KHNpdGUp.txt
new file mode 100644
index 000000000..940e917aa
--- /dev/null
+++ b/blogs/2023/10/12/personal-access-tokens/__next.!KHNpdGUp.txt
@@ -0,0 +1,30 @@
+1:"$Sreact.fragment"
+2:I[22016,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],""]
+3:I[5014,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],"default"]
+4:I[64345,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js"],"HomeLayout"]
+5:I[88760,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js"],"Logo"]
+6:I[15269,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js"],"CommunityDropdown"]
+7:I[15269,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js"],"communityLinks"]
+8:I[29966,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js"],"ASFDropdown"]
+9:I[36330,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js"],"ASFMobileLinks"]
+a:I[39756,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"default"]
+b:I[37457,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"default"]
+14:X
+0:{"buildId":"CEAllZE6ERPzzxzpa_n8G","data":[{"rsc":["$","$1","c",{"children":[[["$","script","script-0",{"src":"/_next/static/chunks/241-fa32f9zay.js","async":true}],["$","script","script-1",{"src":"/_next/static/chunks/3x8y3fmtn6lnc.js","async":true}],["$","script","script-2",{"src":"/_next/static/chunks/250gopd52txql.js","async":true}],["$","script","script-3",{"src":"/_next/static/chunks/0n3fueko2xquo.js","async":true}]],[["$","div",null,{"className":"relative border-b border-white/[ [...]
+c:["$","$L2","/",{"href":"/","className":"transition-colors hover:text-fd-primary","children":"Home"}]
+d:["$","$L2","/docs",{"href":"/docs","className":"transition-colors hover:text-fd-primary","children":"Documentation"}]
+e:["$","$L2","/blogs",{"href":"/blogs","className":"transition-colors hover:text-fd-primary","children":"Blog"}]
+f:["$","$L2","/downloads",{"href":"/downloads","className":"transition-colors hover:text-fd-primary","children":"Downloads"}]
+10:["$","$L2","/community",{"href":"/community","className":"transition-colors hover:text-fd-primary","children":"Community"}]
+11:["$","p",null,{"className":"mt-6 max-w-md text-xs text-fd-muted-foreground","children":["Every page on this site is listed in"," ",["$","a",null,{"href":"/sitemap.xml","className":"underline hover:text-fd-primary","children":"/sitemap.xml"}],", and"," ",["$","a",null,{"href":"/llms.txt","className":"underline hover:text-fd-primary","children":"/llms.txt"}]," ","summarises the documentation."]}]
+12:["$","footer",null,{"className":"border-t border-fd-border bg-fd-background px-6 py-14 md:px-12","children":["$","div",null,{"className":"mx-auto max-w-6xl","children":[["$","div",null,{"className":"grid gap-10 sm:grid-cols-2 lg:grid-cols-4","children":[["$","div","Docs",{"children":[["$","h2",null,{"className":"mb-4 text-sm font-semibold uppercase tracking-wide text-fd-primary","children":"Docs"}],["$","ul",null,{"className":"space-y-2.5 text-sm","children":[["$","li","/docs",{"child [...]
+16:true
+17:["$","$L2",null,{"href":"https://www.apache.org/foundation/contributing.html","target":"_blank","rel":"noopener noreferrer","className":"text-fd-muted-foreground transition-colors hover:text-fd-foreground","children":"Donate"}]
+18:["$","li","https://www.apache.org/foundation/sponsorship.html",{"children":["$","$L2",null,{"href":"https://www.apache.org/foundation/sponsorship.html","target":"_blank","rel":"noopener noreferrer","className":"text-fd-muted-foreground transition-colors hover:text-fd-foreground","children":"Sponsors"}]}]
+19:["$","li","https://www.apache.org/security/",{"children":["$","$L2",null,{"href":"https://www.apache.org/security/","target":"_blank","rel":"noopener noreferrer","className":"text-fd-muted-foreground transition-colors hover:text-fd-foreground","children":"Security"}]}]
+1a:["$","li","https://privacy.apache.org/policies/privacy-policy-public.html",{"children":["$","$L2",null,{"href":"https://privacy.apache.org/policies/privacy-policy-public.html","target":"_blank","rel":"noopener noreferrer","className":"text-fd-muted-foreground transition-colors hover:text-fd-foreground","children":"Privacy"}]}]
+1b:["$","div",null,{"className":"mt-12 border-t border-fd-border pt-8 text-xs leading-relaxed text-fd-muted-foreground/70","children":[["$","p",null,{"className":"mt-4","children":["Copyright © ",2026," The Apache Software Foundation, Licensed under the Apache License, Version 2.0."]}],["$","p",null,{"className":"mt-4","children":"Apache Iggy, Iggy, Apache, and the Apache Iggy logo are trademarks or registered trademarks of The Apache Software Foundation. All other marks mentioned may be [...]
+14:300
+14:C
+15:0
+13:"$undefined"
diff --git a/blogs/2023/10/12/personal-access-tokens/__next._full.txt b/blogs/2023/10/12/personal-access-tokens/__next._full.txt
new file mode 100644
index 000000000..f450d2d77
--- /dev/null
+++ b/blogs/2023/10/12/personal-access-tokens/__next._full.txt
@@ -0,0 +1,83 @@
+1:"$Sreact.fragment"
+3:I[17751,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"RootProvider"]
+4:I[39756,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"default"]
+5:I[58298,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/3-_96y-evozm0.js"],"default"]
+6:I[37457,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"default"]
+7:I[22016,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],""]
+12:I[68027,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"default",1]
+:HL["/_next/static/chunks/1_55v0vlfews3.css","style"]
+2:T512,{"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://iggy.apache.org/#organization","name":"The Apache Software Foundation","url":"https://www.apache.org/","logo":"https://iggy.apache.org/img/asf_logo.svg","contactPoint":{"@type":"ContactPoint","contactType":"technical support","email":"dev@iggy.apache.org","url":"https://iggy.apache.org/community/"}},{"@type":"WebSite","@id":"https://iggy.apache.org/#website","name":"Apache Iggy","url":"https://iggy.a [...]
+0:{"P":null,"c":["","blogs","2023","10","12","personal-access-tokens",""],"q":"","i":false,"f":[[["",{"children":["(site)",{"children":["blogs",{"children":[["slug","2023/10/12/personal-access-tokens","c",[]],{"children":["__PAGE__",{},"$undefined","$undefined",4608]},"$undefined","$undefined",4608]},"$undefined","$undefined",4608]},"$undefined","$undefined",4608]},"$undefined","$undefined",4624],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunk [...]
+14:I[79520,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],""]
+15:I[69877,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"Matomo"]
+16:I[5014,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],"default"]
+17:I[64345,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js"],"HomeLayout"]
+18:I[88760,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js"],"Logo"]
+19:I[15269,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js"],"CommunityDropdown"]
+1a:I[15269,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js"],"communityLinks"]
+1b:I[29966,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js"],"ASFDropdown"]
+1c:I[36330,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js"],"ASFMobileLinks"]
+25:I[97367,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"OutletBoundary"]
+26:"$Sreact.suspense"
+28:I[97367,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"ViewportBoundary"]
+2a:I[97367,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"MetadataBoundary"]
+8:["$","$L7","/community",{"href":"/community","className":"transition-colors hover:text-fd-primary","children":"Community"}]
+9:["$","p",null,{"className":"mt-6 max-w-md text-xs text-fd-muted-foreground","children":["Every page on this site is listed in"," ",["$","a",null,{"href":"/sitemap.xml","className":"underline hover:text-fd-primary","children":"/sitemap.xml"}],", and"," ",["$","a",null,{"href":"/llms.txt","className":"underline hover:text-fd-primary","children":"/llms.txt"}]," ","summarises the documentation."]}]
+a:["$","$L14",null,{"id":"matomo","strategy":"afterInteractive","children":"var _paq = window._paq = window._paq || [];\n_paq.push([\"setDoNotTrack\", true]);\n_paq.push([\"disableCookies\"]);\n_paq.push(['trackPageView']);\n_paq.push(['enableLinkTracking']);\n(function() {\n  var u=\"https://analytics.apache.org/\";\n  _paq.push(['setTrackerUrl', u+'matomo.php']);\n  _paq.push(['setSiteId', '80']);\n  var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];\n  [...]
+b:["$","$L15",null,{}]
+c:["$","$1","c",{"children":[[["$","script","script-0",{"src":"/_next/static/chunks/241-fa32f9zay.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/_next/static/chunks/3x8y3fmtn6lnc.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/_next/static/chunks/250gopd52txql.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/_next/static/chunks/0n3fueko2xquo.js","async":true,"nonce":"$undefined"}]],[["$","div",null,{"className" [...]
+d:["$","$1","c",{"children":[null,["$","$L4",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}]
+e:["$","$1","c",{"children":[null,["$","$L4",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}]
+f:["$","$1","c",{"children":["$L24",[["$","script","script-0",{"src":"/_next/static/chunks/1k39uva2a578s.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/_next/static/chunks/23ktdyx90z0v3.js","async":true,"nonce":"$undefined"}]],["$","$L25",null,{"children":["$","$26",null,{"name":"Next.MetadataOutlet","children":"$@27"}]}]]}]
+11:["$","$1","h",{"children":[null,["$","$L28",null,{"children":"$L29"}],["$","div",null,{"hidden":true,"children":["$","$L2a",null,{"children":["$","$26",null,{"name":"Next.Metadata","children":"$L2b"}]}]}],null]}]
+13:["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/1_55v0vlfews3.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]
+10:C
+1d:["$","$L7","/",{"href":"/","className":"transition-colors hover:text-fd-primary","children":"Home"}]
+1e:["$","$L7","/docs",{"href":"/docs","className":"transition-colors hover:text-fd-primary","children":"Documentation"}]
+1f:["$","$L7","/blogs",{"href":"/blogs","className":"transition-colors hover:text-fd-primary","children":"Blog"}]
+20:["$","$L7","/downloads",{"href":"/downloads","className":"transition-colors hover:text-fd-primary","children":"Downloads"}]
+21:["$","$L7","/community",{"href":"/community","className":"transition-colors hover:text-fd-primary","children":"Community"}]
+22:["$","p",null,{"className":"mt-6 max-w-md text-xs text-fd-muted-foreground","children":["Every page on this site is listed in"," ",["$","a",null,{"href":"/sitemap.xml","className":"underline hover:text-fd-primary","children":"/sitemap.xml"}],", and"," ",["$","a",null,{"href":"/llms.txt","className":"underline hover:text-fd-primary","children":"/llms.txt"}]," ","summarises the documentation."]}]
+23:["$","footer",null,{"className":"border-t border-fd-border bg-fd-background px-6 py-14 md:px-12","children":["$","div",null,{"className":"mx-auto max-w-6xl","children":[["$","div",null,{"className":"grid gap-10 sm:grid-cols-2 lg:grid-cols-4","children":[["$","div","Docs",{"children":[["$","h2",null,{"className":"mb-4 text-sm font-semibold uppercase tracking-wide text-fd-primary","children":"Docs"}],["$","ul",null,{"className":"space-y-2.5 text-sm","children":[["$","li","/docs",{"child [...]
+2c:["$","li","https://www.apache.org/foundation/contributing.html",{"children":["$","$L7",null,{"href":"https://www.apache.org/foundation/contributing.html","target":"_blank","rel":"noopener noreferrer","className":"text-fd-muted-foreground transition-colors hover:text-fd-foreground","children":"Donate"}]}]
+2d:["$","li","https://www.apache.org/foundation/sponsorship.html",{"children":["$","$L7",null,{"href":"https://www.apache.org/foundation/sponsorship.html","target":"_blank","rel":"noopener noreferrer","className":"text-fd-muted-foreground transition-colors hover:text-fd-foreground","children":"Sponsors"}]}]
+2e:["$","li","https://www.apache.org/security/",{"children":["$","$L7",null,{"href":"https://www.apache.org/security/","target":"_blank","rel":"noopener noreferrer","className":"text-fd-muted-foreground transition-colors hover:text-fd-foreground","children":"Security"}]}]
+2f:["$","li","https://privacy.apache.org/policies/privacy-policy-public.html",{"children":["$","$L7",null,{"href":"https://privacy.apache.org/policies/privacy-policy-public.html","target":"_blank","rel":"noopener noreferrer","className":"text-fd-muted-foreground transition-colors hover:text-fd-foreground","children":"Privacy"}]}]
+30:["$","div",null,{"className":"mt-12 border-t border-fd-border pt-8 text-xs leading-relaxed text-fd-muted-foreground/70","children":[["$","p",null,{"className":"mt-4","children":["Copyright © ",2026," The Apache Software Foundation, Licensed under the Apache License, Version 2.0."]}],["$","p",null,{"className":"mt-4","children":"Apache Iggy, Iggy, Apache, and the Apache Iggy logo are trademarks or registered trademarks of The Apache Software Foundation. All other marks mentioned may be [...]
+31:I[94157,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],"Heading"]
+32:I[47873,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],"default"]
+33:I[44324,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],"CodeBlock"]
+:HL["/img/authors/piotr.png","image"]
+34:T1068,<svg viewBox="0 0 24 24"><path d="M23.8346 11.7033l-1.0073-.6236a13.7268 13.7268 0 00-.0283-.2936l.8656-.8069a.3483.3483 0 00-.1154-.578l-1.1066-.414a8.4958 8.4958 0 00-.087-.2856l.6904-.9587a.3462.3462 0 00-.2257-.5446l-1.1663-.1894a9.3574 9.3574 0 00-.1407-.2622l.49-1.0761a.3437.3437 0 00-.0274-.3361.3486.3486 0 00-.3006-.154l-1.1845.0416a6.7444 6.7444 0 00-.1873-.2268l.2723-1.153a.3472.3472 0 00-.417-.4172l-1.1532.2724a14.0183 14.0183 0 00-.2278-.1873l.0415-1.1845a.3442.3442  [...]
+42:I[44324,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],"Pre"]
+35:["$","$L42",null,{"children":["$","code",null,{"children":[["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"pub"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":" struct"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" CreatePersonalAccessToken"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shik [...]
+36:["$","p",null,{"children":["Each token must have a unique ",["$","code",null,{"children":"name"}],", which is used to identify the token. The ",["$","code",null,{"children":"expiry"}]," field is optional, and if set, it must be the amount of seconds since the token creation on the server side, after which the token will expire. A single user may create the maximum of 100 tokens."]}]
+43:T1068,<svg viewBox="0 0 24 24"><path d="M23.8346 11.7033l-1.0073-.6236a13.7268 13.7268 0 00-.0283-.2936l.8656-.8069a.3483.3483 0 00-.1154-.578l-1.1066-.414a8.4958 8.4958 0 00-.087-.2856l.6904-.9587a.3462.3462 0 00-.2257-.5446l-1.1663-.1894a9.3574 9.3574 0 00-.1407-.2622l.49-1.0761a.3437.3437 0 00-.0274-.3361.3486.3486 0 00-.3006-.154l-1.1845.0416a6.7444 6.7444 0 00-.1873-.2268l.2723-1.153a.3472.3472 0 00-.417-.4172l-1.1532.2724a14.0183 14.0183 0 00-.2278-.1873l.0415-1.1845a.3442.3442  [...]
+38:["$","p",null,{"children":["When creating the token, the server returns the ",["$","code",null,{"children":"RawPersonalAccessToken"}]," struct, which contains the string ",["$","code",null,{"children":"token"}]," value."]}]
+45:T1068,<svg viewBox="0 0 24 24"><path d="M23.8346 11.7033l-1.0073-.6236a13.7268 13.7268 0 00-.0283-.2936l.8656-.8069a.3483.3483 0 00-.1154-.578l-1.1066-.414a8.4958 8.4958 0 00-.087-.2856l.6904-.9587a.3462.3462 0 00-.2257-.5446l-1.1663-.1894a9.3574 9.3574 0 00-.1407-.2622l.49-1.0761a.3437.3437 0 00-.0274-.3361.3486.3486 0 00-.3006-.154l-1.1845.0416a6.7444 6.7444 0 00-.1873-.2268l.2723-1.153a.3472.3472 0 00-.417-.4172l-1.1532.2724a14.0183 14.0183 0 00-.2278-.1873l.0415-1.1845a.3442.3442  [...]
+3a:["$","p",null,{"children":["This is returned ",["$","strong",null,{"children":"only once"}],", as it's a raw, secure token, which should be stored by the client. The server only stores the hashed version of the token, and it's not possible to retrieve the original value. The token can be used to authenticate the client using the ",["$","code",null,{"children":"LoginWithPersonalAccessToken"}]," command."]}]
+3b:["$","p",null,{"children":["The following structure is returned when listing the tokens. It contains the ",["$","code",null,{"children":"name"}]," and an optional ",["$","code",null,{"children":"expiry"}]," fields. Please note that the ",["$","code",null,{"children":"expiry"}]," is the actual timestamp (Epoch in microseconds) of when the token will expire, and not the amount of seconds since the token creation (like provided in the ",["$","code",null,{"children":"CreatePersonalAccessT [...]
+47:T1068,<svg viewBox="0 0 24 24"><path d="M23.8346 11.7033l-1.0073-.6236a13.7268 13.7268 0 00-.0283-.2936l.8656-.8069a.3483.3483 0 00-.1154-.578l-1.1066-.414a8.4958 8.4958 0 00-.087-.2856l.6904-.9587a.3462.3462 0 00-.2257-.5446l-1.1663-.1894a9.3574 9.3574 0 00-.1407-.2622l.49-1.0761a.3437.3437 0 00-.0274-.3361.3486.3486 0 00-.3006-.154l-1.1845.0416a6.7444 6.7444 0 00-.1873-.2268l.2723-1.153a.3472.3472 0 00-.417-.4172l-1.1532.2724a14.0183 14.0183 0 00-.2278-.1873l.0415-1.1845a.3442.3442  [...]
+3d:["$","p",null,{"children":["Login with PAT is very similar to the regular login with user credentials, and it returns the same ",["$","code",null,{"children":"IdentityInfo"}]," structure."]}]
+3e:["$","$L31",null,{"as":"h2","id":"configuration","children":"Configuration"}]
+3f:["$","p",null,{"children":"On the server side, you can enable the background task responsible for deleting the expired tokens."}]
+40:["$","$L33",null,{"className":"shiki shiki-themes github-light github-dark","style":{"--shiki-light":"#24292e","--shiki-dark":"#e1e4e8","--shiki-light-bg":"#fff","--shiki-dark-bg":"#24292e"},"tabIndex":"0","icon":"<svg viewBox=\"0 0 24 24\"><path d=\"M 6,1 C 4.354992,1 3,2.354992 3,4 v 16 c 0,1.645008 1.354992,3 3,3 h 12 c 1.645008,0 3,-1.354992 3,-3 V 8 7 A 1.0001,1.0001 0 0 0 20.707031,6.2929687 l -5,-5 A 1.0001,1.0001 0 0 0 15,1 h -1 z m 0,2 h 7 v 3 c 0,1.645008 1.354992,3 3,3 h 3  [...]
+41:["$","footer",null,{"className":"mt-16 border-t border-fd-border pt-8","children":["$","$L7",null,{"href":"/blogs","className":"inline-flex items-center gap-2 text-sm font-medium text-fd-primary transition-colors hover:opacity-80","children":"← Back to all posts"}]}]
+44:["$","$L42",null,{"children":["$","code",null,{"children":[["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"async"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":" fn"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" get_personal_access_tokens"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki [...]
+46:["$","$L42",null,{"children":["$","code",null,{"children":[["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"pub"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":" struct"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" RawPersonalAccessToken"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-d [...]
+48:["$","$L42",null,{"children":["$","code",null,{"children":[["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"pub"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":" struct"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" PersonalAccessTokenInfo"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki- [...]
+49:["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":" fn"}]
+4a:["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" delete_personal_access_token"}]
+4b:["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"("}]
+4c:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"    &"}],["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":"self"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":","}]]}]
+4d:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"    command"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":":"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":" &"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"DeletePersonalAccessToken"}],["$","span",null,{"st [...]
+4e:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":") "}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"->"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" Result"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"<(), "}],["$","span",null,{"style":{"--shiki-light":" [...]
+4f:["$","span",null,{"className":"line"}]
+50:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"async"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":" fn"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" login_with_personal_access_token"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"("}]]}]
+51:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"    &"}],["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":"self"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":","}]]}]
+52:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"    command"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":":"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":" &"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"LoginWithPersonalAccessToken"}],["$","span",null,{ [...]
+53:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":") "}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"->"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" Result"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"<"}],["$","span",null,{"style":{"--shiki-light":"#6F4 [...]
+29:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]
+54:I[27201,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"IconMark"]
+27:null
+2b:[["$","title","0",{"children":"Personal access tokens | Apache Iggy"}],["$","link","1",{"rel":"canonical","href":"https://iggy.apache.org/blogs/2023/10/12/personal-access-tokens/"}],["$","link","2",{"rel":"alternate","type":"text/markdown","href":"https://iggy.apache.org/blogs/2023/10/12/personal-access-tokens.md"}],["$","meta","3",{"property":"og:title","content":"Personal access tokens | Apache Iggy"}],["$","meta","4",{"property":"og:url","content":"https://iggy.apache.org/blogs/202 [...]
diff --git a/blogs/2023/10/12/personal-access-tokens/__next._index.txt b/blogs/2023/10/12/personal-access-tokens/__next._index.txt
new file mode 100644
index 000000000..42b058136
--- /dev/null
+++ b/blogs/2023/10/12/personal-access-tokens/__next._index.txt
@@ -0,0 +1,20 @@
+1:"$Sreact.fragment"
+3:I[17751,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"RootProvider"]
+4:I[39756,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"default"]
+5:I[58298,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/3-_96y-evozm0.js"],"default"]
+6:I[37457,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"default"]
+7:I[22016,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],""]
+:HL["/_next/static/chunks/1_55v0vlfews3.css","style"]
+2:T512,{"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://iggy.apache.org/#organization","name":"The Apache Software Foundation","url":"https://www.apache.org/","logo":"https://iggy.apache.org/img/asf_logo.svg","contactPoint":{"@type":"ContactPoint","contactType":"technical support","email":"dev@iggy.apache.org","url":"https://iggy.apache.org/community/"}},{"@type":"WebSite","@id":"https://iggy.apache.org/#website","name":"Apache Iggy","url":"https://iggy.a [...]
+0:{"buildId":"CEAllZE6ERPzzxzpa_n8G","data":[{"rsc":["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/1_55v0vlfews3.css","precedence":"next"}],["$","script","script-0",{"src":"/_next/static/chunks/05hk4ely-lns6.js","async":true}],["$","script","script-1",{"src":"/_next/static/chunks/2tvyahbdutabx.js","async":true}]],["$","html",null,{"lang":"en","suppressHydrationWarning":true,"children":["$","body",null,{"className":"flex min-h-screen flex-col  [...]
+10:I[79520,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],""]
+11:I[69877,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"Matomo"]
+8:["$","a",null,{"href":"/sitemap.xml","className":"underline hover:text-fd-primary","children":"/sitemap.xml"}]
+9:["$","a",null,{"href":"/llms.txt","className":"underline hover:text-fd-primary","children":"/llms.txt"}]
+a:["$","$L10",null,{"id":"matomo","strategy":"afterInteractive","children":"var _paq = window._paq = window._paq || [];\n_paq.push([\"setDoNotTrack\", true]);\n_paq.push([\"disableCookies\"]);\n_paq.push(['trackPageView']);\n_paq.push(['enableLinkTracking']);\n(function() {\n  var u=\"https://analytics.apache.org/\";\n  _paq.push(['setTrackerUrl', u+'matomo.php']);\n  _paq.push(['setSiteId', '80']);\n  var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];\n  [...]
+b:["$","$L11",null,{}]
+d:300
+f:true
+d:C
+e:0
+c:"$undefined"
diff --git a/blogs/2023/10/12/personal-access-tokens/__next._tree.txt b/blogs/2023/10/12/personal-access-tokens/__next._tree.txt
new file mode 100644
index 000000000..d690a4c38
--- /dev/null
+++ b/blogs/2023/10/12/personal-access-tokens/__next._tree.txt
@@ -0,0 +1,3 @@
+:HL["/_next/static/chunks/1_55v0vlfews3.css","style"]
+:HL["/img/authors/piotr.png","image"]
+0:{"tree":{"name":"","param":null,"prefetchHints":4112,"slots":{"children":{"name":"(site)","param":null,"prefetchHints":4096,"slots":{"children":{"name":"blogs","param":null,"prefetchHints":4160,"slots":{"children":{"name":"slug","param":{"type":"c","key":"2023/10/12/personal-access-tokens","siblings":[]},"prefetchHints":4192,"slots":{"children":{"name":"__PAGE__","param":null,"prefetchHints":4256,"slots":null}}}}}}}}},"staleTime":300,"buildId":"CEAllZE6ERPzzxzpa_n8G"}
diff --git a/blogs/2023/10/12/personal-access-tokens/index.html b/blogs/2023/10/12/personal-access-tokens/index.html
new file mode 100644
index 000000000..e7c9da417
--- /dev/null
+++ b/blogs/2023/10/12/personal-access-tokens/index.html
@@ -0,0 +1,55 @@
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" href="/img/authors/piotr.png" as="image"/><link rel="stylesheet" href="/_next/static/chunks/1_55v0vlfews3.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/1qt6pht_u0de1.js"/><script src="/_next/static/chunks/1iye7dwhtxrnu.js" async=""></script><script src="/_next/static/chunks/1t7fq8 [...]
+<h2 id="breaking-changes" class="group/heading flex scroll-m-28 flex-row items-center gap-1"><a data-card="" href="#breaking-changes">Breaking changes</a><button aria-label="Copy Anchor Link" class="inline-flex items-center justify-center rounded-md text-sm font-medium duration-100 disabled:pointer-events-none disabled:opacity-50 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-fd-ring hover:bg-fd-accent hover:text-fd-accent-foreground p-1 [&amp;_svg]:size-4 not-prose s [...]
+<p>No breaking changes have been introduced in neither Iggy server, nor Iggy SDK. The server does support the new <code>PAT</code> authentication method since version <code>0.0.40</code>, and the SDK since version <code>0.0.100</code>. The initial changes are part of the commit <a href="https://github.com/apache/iggy/commit/e74c25e058b1f39119ee89b5ada5d93f171cb221" rel="noreferrer noopener" target="_blank">#e74c25e</a>.</p>
+<h2 id="personal-access-tokens" class="group/heading flex scroll-m-28 flex-row items-center gap-1"><a data-card="" href="#personal-access-tokens">Personal access tokens</a><button aria-label="Copy Anchor Link" class="inline-flex items-center justify-center rounded-md text-sm font-medium duration-100 disabled:pointer-events-none disabled:opacity-50 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-fd-ring hover:bg-fd-accent hover:text-fd-accent-foreground p-1 [&amp;_svg]: [...]
+<p>PAT is a simple idea, which allows authenticating the clients using a token, instead of the regular credentials (username and password). This approach might feel safer for some users, as the token can be deleted at any time, and it&#x27;s not tied to the user&#x27;s password. The tokens can be created, listed and deleted using the available APIs. PAT has an optional expiry, which can be set when creating the token.</p>
+<figure dir="ltr" class="my-4 bg-fd-card rounded-xl shiki relative border shadow-sm not-prose overflow-hidden text-sm shiki shiki-themes github-light github-dark" style="--shiki-light:#24292e;--shiki-dark:#e1e4e8;--shiki-light-bg:#fff;--shiki-dark-bg:#24292e" tabindex="-1"><div class="empty:hidden absolute top-3 right-2 z-2 backdrop-blur-lg rounded-lg text-fd-muted-foreground"><button type="button" class="inline-flex items-center justify-center rounded-md text-sm font-medium transition-c [...]
+<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    pub</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> name</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">:</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> String</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
+<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    pub</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> expiry</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">:</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> Option</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">&lt;</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">u32</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">&gt [...]
+<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">}</span></span>
+<span class="line"></span>
+<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">pub</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583"> struct</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> DeletePersonalAccessToken</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> {</span></span>
+<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    pub</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> name</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">:</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> String</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
+<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">}</span></span>
+<span class="line"></span>
+<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">pub</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583"> struct</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> GetPersonalAccessTokens</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> {}</span></span>
+<span class="line"></span>
+<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">pub</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583"> struct</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> LoginWithPersonalAccessToken</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> {</span></span>
+<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    pub</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> token</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">:</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> String</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
+<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">}</span></span></code></pre></div></figure>
+<p>Each token must have a unique <code>name</code>, which is used to identify the token. The <code>expiry</code> field is optional, and if set, it must be the amount of seconds since the token creation on the server side, after which the token will expire. A single user may create the maximum of 100 tokens.</p>
+<figure dir="ltr" class="my-4 bg-fd-card rounded-xl shiki relative border shadow-sm not-prose overflow-hidden text-sm shiki shiki-themes github-light github-dark" style="--shiki-light:#24292e;--shiki-dark:#e1e4e8;--shiki-light-bg:#fff;--shiki-dark-bg:#24292e" tabindex="-1"><div class="empty:hidden absolute top-3 right-2 z-2 backdrop-blur-lg rounded-lg text-fd-muted-foreground"><button type="button" class="inline-flex items-center justify-center rounded-md text-sm font-medium transition-c [...]
+<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    &amp;</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">self</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
+<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">    command</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">:</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583"> &amp;</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">GetPersonalAccessTokens</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
+<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">) </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">-&gt;</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> Result</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">&lt;</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">Vec</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">&lt;</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">Persona [...]
+<span class="line"></span>
+<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">async</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583"> fn</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> create_personal_access_token</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(</span></span>
+<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    &amp;</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">self</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
+<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">    command</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">:</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583"> &amp;</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">CreatePersonalAccessToken</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
+<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">) </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">-&gt;</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> Result</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">&lt;</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">RawPersonalAccessToken</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">, </span><span style="--shiki-light:#6F42C1;--shiki-dark [...]
+<span class="line"></span>
+<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">async</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583"> fn</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> delete_personal_access_token</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(</span></span>
+<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    &amp;</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">self</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
+<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">    command</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">:</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583"> &amp;</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">DeletePersonalAccessToken</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
+<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">) </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">-&gt;</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> Result</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">&lt;(), </span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">Error</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">&gt;;</span></span>
+<span class="line"></span>
+<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">async</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583"> fn</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> login_with_personal_access_token</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(</span></span>
+<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    &amp;</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">self</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
+<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">    command</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">:</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583"> &amp;</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">LoginWithPersonalAccessToken</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
+<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">) </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">-&gt;</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> Result</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">&lt;</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">IdentityInfo</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">, </span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> [...]
+<p>When creating the token, the server returns the <code>RawPersonalAccessToken</code> struct, which contains the string <code>token</code> value.</p>
+<figure dir="ltr" class="my-4 bg-fd-card rounded-xl shiki relative border shadow-sm not-prose overflow-hidden text-sm shiki shiki-themes github-light github-dark" style="--shiki-light:#24292e;--shiki-dark:#e1e4e8;--shiki-light-bg:#fff;--shiki-dark-bg:#24292e" tabindex="-1"><div class="empty:hidden absolute top-3 right-2 z-2 backdrop-blur-lg rounded-lg text-fd-muted-foreground"><button type="button" class="inline-flex items-center justify-center rounded-md text-sm font-medium transition-c [...]
+<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    pub</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> token</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">:</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> String</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
+<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">}</span></span></code></pre></div></figure>
+<p>This is returned <strong>only once</strong>, as it&#x27;s a raw, secure token, which should be stored by the client. The server only stores the hashed version of the token, and it&#x27;s not possible to retrieve the original value. The token can be used to authenticate the client using the <code>LoginWithPersonalAccessToken</code> command.</p>
+<p>The following structure is returned when listing the tokens. It contains the <code>name</code> and an optional <code>expiry</code> fields. Please note that the <code>expiry</code> is the actual timestamp (Epoch in microseconds) of when the token will expire, and not the amount of seconds since the token creation (like provided in the <code>CreatePersonalAccessToken</code> command).</p>
+<figure dir="ltr" class="my-4 bg-fd-card rounded-xl shiki relative border shadow-sm not-prose overflow-hidden text-sm shiki shiki-themes github-light github-dark" style="--shiki-light:#24292e;--shiki-dark:#e1e4e8;--shiki-light-bg:#fff;--shiki-dark-bg:#24292e" tabindex="-1"><div class="empty:hidden absolute top-3 right-2 z-2 backdrop-blur-lg rounded-lg text-fd-muted-foreground"><button type="button" class="inline-flex items-center justify-center rounded-md text-sm font-medium transition-c [...]
+<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    pub</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> name</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">:</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> String</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
+<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    pub</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> expiry</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">:</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> Option</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">&lt;</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">u64</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">&gt [...]
+<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">}</span></span></code></pre></div></figure>
+<p>Login with PAT is very similar to the regular login with user credentials, and it returns the same <code>IdentityInfo</code> structure.</p>
+<h2 id="configuration" class="group/heading flex scroll-m-28 flex-row items-center gap-1"><a data-card="" href="#configuration">Configuration</a><button aria-label="Copy Anchor Link" class="inline-flex items-center justify-center rounded-md text-sm font-medium duration-100 disabled:pointer-events-none disabled:opacity-50 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-fd-ring hover:bg-fd-accent hover:text-fd-accent-foreground p-1 [&amp;_svg]:size-4 not-prose shrink-0 t [...]
+<p>On the server side, you can enable the background task responsible for deleting the expired tokens.</p>
+<figure dir="ltr" class="my-4 bg-fd-card rounded-xl shiki relative border shadow-sm not-prose overflow-hidden text-sm shiki shiki-themes github-light github-dark" style="--shiki-light:#24292e;--shiki-dark:#e1e4e8;--shiki-light-bg:#fff;--shiki-dark-bg:#24292e" tabindex="-1"><div class="empty:hidden absolute top-3 right-2 z-2 backdrop-blur-lg rounded-lg text-fd-muted-foreground"><button type="button" class="inline-flex items-center justify-center rounded-md text-sm font-medium transition-c [...]
+<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">enabled = </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">true</span></span>
+<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">interval = </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">60</span></span></code></pre></div></figure></div><footer class="mt-16 border-t border-fd-border pt-8"><a class="inline-flex items-center gap-2 text-sm font-medium text-fd-primary transition-colors hover:opacity-80" href="/blogs/">← Back to all posts</a></footer></article></main><!--$--><!--/$--><footer class="border-t border-fd-border bg- [...]
\ No newline at end of file
diff --git a/blogs/2023/10/12/personal-access-tokens/index.txt b/blogs/2023/10/12/personal-access-tokens/index.txt
new file mode 100644
index 000000000..f450d2d77
--- /dev/null
+++ b/blogs/2023/10/12/personal-access-tokens/index.txt
@@ -0,0 +1,83 @@
+1:"$Sreact.fragment"
+3:I[17751,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"RootProvider"]
+4:I[39756,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"default"]
+5:I[58298,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/3-_96y-evozm0.js"],"default"]
+6:I[37457,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"default"]
+7:I[22016,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],""]
+12:I[68027,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"default",1]
+:HL["/_next/static/chunks/1_55v0vlfews3.css","style"]
+2:T512,{"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://iggy.apache.org/#organization","name":"The Apache Software Foundation","url":"https://www.apache.org/","logo":"https://iggy.apache.org/img/asf_logo.svg","contactPoint":{"@type":"ContactPoint","contactType":"technical support","email":"dev@iggy.apache.org","url":"https://iggy.apache.org/community/"}},{"@type":"WebSite","@id":"https://iggy.apache.org/#website","name":"Apache Iggy","url":"https://iggy.a [...]
+0:{"P":null,"c":["","blogs","2023","10","12","personal-access-tokens",""],"q":"","i":false,"f":[[["",{"children":["(site)",{"children":["blogs",{"children":[["slug","2023/10/12/personal-access-tokens","c",[]],{"children":["__PAGE__",{},"$undefined","$undefined",4608]},"$undefined","$undefined",4608]},"$undefined","$undefined",4608]},"$undefined","$undefined",4608]},"$undefined","$undefined",4624],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunk [...]
+14:I[79520,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],""]
+15:I[69877,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"Matomo"]
+16:I[5014,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],"default"]
+17:I[64345,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js"],"HomeLayout"]
+18:I[88760,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js"],"Logo"]
+19:I[15269,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js"],"CommunityDropdown"]
+1a:I[15269,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js"],"communityLinks"]
+1b:I[29966,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js"],"ASFDropdown"]
+1c:I[36330,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js"],"ASFMobileLinks"]
+25:I[97367,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"OutletBoundary"]
+26:"$Sreact.suspense"
+28:I[97367,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"ViewportBoundary"]
+2a:I[97367,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"MetadataBoundary"]
+8:["$","$L7","/community",{"href":"/community","className":"transition-colors hover:text-fd-primary","children":"Community"}]
+9:["$","p",null,{"className":"mt-6 max-w-md text-xs text-fd-muted-foreground","children":["Every page on this site is listed in"," ",["$","a",null,{"href":"/sitemap.xml","className":"underline hover:text-fd-primary","children":"/sitemap.xml"}],", and"," ",["$","a",null,{"href":"/llms.txt","className":"underline hover:text-fd-primary","children":"/llms.txt"}]," ","summarises the documentation."]}]
+a:["$","$L14",null,{"id":"matomo","strategy":"afterInteractive","children":"var _paq = window._paq = window._paq || [];\n_paq.push([\"setDoNotTrack\", true]);\n_paq.push([\"disableCookies\"]);\n_paq.push(['trackPageView']);\n_paq.push(['enableLinkTracking']);\n(function() {\n  var u=\"https://analytics.apache.org/\";\n  _paq.push(['setTrackerUrl', u+'matomo.php']);\n  _paq.push(['setSiteId', '80']);\n  var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];\n  [...]
+b:["$","$L15",null,{}]
+c:["$","$1","c",{"children":[[["$","script","script-0",{"src":"/_next/static/chunks/241-fa32f9zay.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/_next/static/chunks/3x8y3fmtn6lnc.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/_next/static/chunks/250gopd52txql.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/_next/static/chunks/0n3fueko2xquo.js","async":true,"nonce":"$undefined"}]],[["$","div",null,{"className" [...]
+d:["$","$1","c",{"children":[null,["$","$L4",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}]
+e:["$","$1","c",{"children":[null,["$","$L4",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}]
+f:["$","$1","c",{"children":["$L24",[["$","script","script-0",{"src":"/_next/static/chunks/1k39uva2a578s.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/_next/static/chunks/23ktdyx90z0v3.js","async":true,"nonce":"$undefined"}]],["$","$L25",null,{"children":["$","$26",null,{"name":"Next.MetadataOutlet","children":"$@27"}]}]]}]
+11:["$","$1","h",{"children":[null,["$","$L28",null,{"children":"$L29"}],["$","div",null,{"hidden":true,"children":["$","$L2a",null,{"children":["$","$26",null,{"name":"Next.Metadata","children":"$L2b"}]}]}],null]}]
+13:["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/1_55v0vlfews3.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]
+10:C
+1d:["$","$L7","/",{"href":"/","className":"transition-colors hover:text-fd-primary","children":"Home"}]
+1e:["$","$L7","/docs",{"href":"/docs","className":"transition-colors hover:text-fd-primary","children":"Documentation"}]
+1f:["$","$L7","/blogs",{"href":"/blogs","className":"transition-colors hover:text-fd-primary","children":"Blog"}]
+20:["$","$L7","/downloads",{"href":"/downloads","className":"transition-colors hover:text-fd-primary","children":"Downloads"}]
+21:["$","$L7","/community",{"href":"/community","className":"transition-colors hover:text-fd-primary","children":"Community"}]
+22:["$","p",null,{"className":"mt-6 max-w-md text-xs text-fd-muted-foreground","children":["Every page on this site is listed in"," ",["$","a",null,{"href":"/sitemap.xml","className":"underline hover:text-fd-primary","children":"/sitemap.xml"}],", and"," ",["$","a",null,{"href":"/llms.txt","className":"underline hover:text-fd-primary","children":"/llms.txt"}]," ","summarises the documentation."]}]
+23:["$","footer",null,{"className":"border-t border-fd-border bg-fd-background px-6 py-14 md:px-12","children":["$","div",null,{"className":"mx-auto max-w-6xl","children":[["$","div",null,{"className":"grid gap-10 sm:grid-cols-2 lg:grid-cols-4","children":[["$","div","Docs",{"children":[["$","h2",null,{"className":"mb-4 text-sm font-semibold uppercase tracking-wide text-fd-primary","children":"Docs"}],["$","ul",null,{"className":"space-y-2.5 text-sm","children":[["$","li","/docs",{"child [...]
+2c:["$","li","https://www.apache.org/foundation/contributing.html",{"children":["$","$L7",null,{"href":"https://www.apache.org/foundation/contributing.html","target":"_blank","rel":"noopener noreferrer","className":"text-fd-muted-foreground transition-colors hover:text-fd-foreground","children":"Donate"}]}]
+2d:["$","li","https://www.apache.org/foundation/sponsorship.html",{"children":["$","$L7",null,{"href":"https://www.apache.org/foundation/sponsorship.html","target":"_blank","rel":"noopener noreferrer","className":"text-fd-muted-foreground transition-colors hover:text-fd-foreground","children":"Sponsors"}]}]
+2e:["$","li","https://www.apache.org/security/",{"children":["$","$L7",null,{"href":"https://www.apache.org/security/","target":"_blank","rel":"noopener noreferrer","className":"text-fd-muted-foreground transition-colors hover:text-fd-foreground","children":"Security"}]}]
+2f:["$","li","https://privacy.apache.org/policies/privacy-policy-public.html",{"children":["$","$L7",null,{"href":"https://privacy.apache.org/policies/privacy-policy-public.html","target":"_blank","rel":"noopener noreferrer","className":"text-fd-muted-foreground transition-colors hover:text-fd-foreground","children":"Privacy"}]}]
+30:["$","div",null,{"className":"mt-12 border-t border-fd-border pt-8 text-xs leading-relaxed text-fd-muted-foreground/70","children":[["$","p",null,{"className":"mt-4","children":["Copyright © ",2026," The Apache Software Foundation, Licensed under the Apache License, Version 2.0."]}],["$","p",null,{"className":"mt-4","children":"Apache Iggy, Iggy, Apache, and the Apache Iggy logo are trademarks or registered trademarks of The Apache Software Foundation. All other marks mentioned may be [...]
+31:I[94157,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],"Heading"]
+32:I[47873,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],"default"]
+33:I[44324,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],"CodeBlock"]
+:HL["/img/authors/piotr.png","image"]
+34:T1068,<svg viewBox="0 0 24 24"><path d="M23.8346 11.7033l-1.0073-.6236a13.7268 13.7268 0 00-.0283-.2936l.8656-.8069a.3483.3483 0 00-.1154-.578l-1.1066-.414a8.4958 8.4958 0 00-.087-.2856l.6904-.9587a.3462.3462 0 00-.2257-.5446l-1.1663-.1894a9.3574 9.3574 0 00-.1407-.2622l.49-1.0761a.3437.3437 0 00-.0274-.3361.3486.3486 0 00-.3006-.154l-1.1845.0416a6.7444 6.7444 0 00-.1873-.2268l.2723-1.153a.3472.3472 0 00-.417-.4172l-1.1532.2724a14.0183 14.0183 0 00-.2278-.1873l.0415-1.1845a.3442.3442  [...]
+42:I[44324,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],"Pre"]
+35:["$","$L42",null,{"children":["$","code",null,{"children":[["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"pub"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":" struct"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" CreatePersonalAccessToken"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shik [...]
+36:["$","p",null,{"children":["Each token must have a unique ",["$","code",null,{"children":"name"}],", which is used to identify the token. The ",["$","code",null,{"children":"expiry"}]," field is optional, and if set, it must be the amount of seconds since the token creation on the server side, after which the token will expire. A single user may create the maximum of 100 tokens."]}]
+43:T1068,<svg viewBox="0 0 24 24"><path d="M23.8346 11.7033l-1.0073-.6236a13.7268 13.7268 0 00-.0283-.2936l.8656-.8069a.3483.3483 0 00-.1154-.578l-1.1066-.414a8.4958 8.4958 0 00-.087-.2856l.6904-.9587a.3462.3462 0 00-.2257-.5446l-1.1663-.1894a9.3574 9.3574 0 00-.1407-.2622l.49-1.0761a.3437.3437 0 00-.0274-.3361.3486.3486 0 00-.3006-.154l-1.1845.0416a6.7444 6.7444 0 00-.1873-.2268l.2723-1.153a.3472.3472 0 00-.417-.4172l-1.1532.2724a14.0183 14.0183 0 00-.2278-.1873l.0415-1.1845a.3442.3442  [...]
+38:["$","p",null,{"children":["When creating the token, the server returns the ",["$","code",null,{"children":"RawPersonalAccessToken"}]," struct, which contains the string ",["$","code",null,{"children":"token"}]," value."]}]
+45:T1068,<svg viewBox="0 0 24 24"><path d="M23.8346 11.7033l-1.0073-.6236a13.7268 13.7268 0 00-.0283-.2936l.8656-.8069a.3483.3483 0 00-.1154-.578l-1.1066-.414a8.4958 8.4958 0 00-.087-.2856l.6904-.9587a.3462.3462 0 00-.2257-.5446l-1.1663-.1894a9.3574 9.3574 0 00-.1407-.2622l.49-1.0761a.3437.3437 0 00-.0274-.3361.3486.3486 0 00-.3006-.154l-1.1845.0416a6.7444 6.7444 0 00-.1873-.2268l.2723-1.153a.3472.3472 0 00-.417-.4172l-1.1532.2724a14.0183 14.0183 0 00-.2278-.1873l.0415-1.1845a.3442.3442  [...]
+3a:["$","p",null,{"children":["This is returned ",["$","strong",null,{"children":"only once"}],", as it's a raw, secure token, which should be stored by the client. The server only stores the hashed version of the token, and it's not possible to retrieve the original value. The token can be used to authenticate the client using the ",["$","code",null,{"children":"LoginWithPersonalAccessToken"}]," command."]}]
+3b:["$","p",null,{"children":["The following structure is returned when listing the tokens. It contains the ",["$","code",null,{"children":"name"}]," and an optional ",["$","code",null,{"children":"expiry"}]," fields. Please note that the ",["$","code",null,{"children":"expiry"}]," is the actual timestamp (Epoch in microseconds) of when the token will expire, and not the amount of seconds since the token creation (like provided in the ",["$","code",null,{"children":"CreatePersonalAccessT [...]
+47:T1068,<svg viewBox="0 0 24 24"><path d="M23.8346 11.7033l-1.0073-.6236a13.7268 13.7268 0 00-.0283-.2936l.8656-.8069a.3483.3483 0 00-.1154-.578l-1.1066-.414a8.4958 8.4958 0 00-.087-.2856l.6904-.9587a.3462.3462 0 00-.2257-.5446l-1.1663-.1894a9.3574 9.3574 0 00-.1407-.2622l.49-1.0761a.3437.3437 0 00-.0274-.3361.3486.3486 0 00-.3006-.154l-1.1845.0416a6.7444 6.7444 0 00-.1873-.2268l.2723-1.153a.3472.3472 0 00-.417-.4172l-1.1532.2724a14.0183 14.0183 0 00-.2278-.1873l.0415-1.1845a.3442.3442  [...]
+3d:["$","p",null,{"children":["Login with PAT is very similar to the regular login with user credentials, and it returns the same ",["$","code",null,{"children":"IdentityInfo"}]," structure."]}]
+3e:["$","$L31",null,{"as":"h2","id":"configuration","children":"Configuration"}]
+3f:["$","p",null,{"children":"On the server side, you can enable the background task responsible for deleting the expired tokens."}]
+40:["$","$L33",null,{"className":"shiki shiki-themes github-light github-dark","style":{"--shiki-light":"#24292e","--shiki-dark":"#e1e4e8","--shiki-light-bg":"#fff","--shiki-dark-bg":"#24292e"},"tabIndex":"0","icon":"<svg viewBox=\"0 0 24 24\"><path d=\"M 6,1 C 4.354992,1 3,2.354992 3,4 v 16 c 0,1.645008 1.354992,3 3,3 h 12 c 1.645008,0 3,-1.354992 3,-3 V 8 7 A 1.0001,1.0001 0 0 0 20.707031,6.2929687 l -5,-5 A 1.0001,1.0001 0 0 0 15,1 h -1 z m 0,2 h 7 v 3 c 0,1.645008 1.354992,3 3,3 h 3  [...]
+41:["$","footer",null,{"className":"mt-16 border-t border-fd-border pt-8","children":["$","$L7",null,{"href":"/blogs","className":"inline-flex items-center gap-2 text-sm font-medium text-fd-primary transition-colors hover:opacity-80","children":"← Back to all posts"}]}]
+44:["$","$L42",null,{"children":["$","code",null,{"children":[["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"async"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":" fn"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" get_personal_access_tokens"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki [...]
+46:["$","$L42",null,{"children":["$","code",null,{"children":[["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"pub"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":" struct"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" RawPersonalAccessToken"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-d [...]
+48:["$","$L42",null,{"children":["$","code",null,{"children":[["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"pub"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":" struct"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" PersonalAccessTokenInfo"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki- [...]
+49:["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":" fn"}]
+4a:["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" delete_personal_access_token"}]
+4b:["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"("}]
+4c:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"    &"}],["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":"self"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":","}]]}]
+4d:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"    command"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":":"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":" &"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"DeletePersonalAccessToken"}],["$","span",null,{"st [...]
+4e:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":") "}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"->"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" Result"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"<(), "}],["$","span",null,{"style":{"--shiki-light":" [...]
+4f:["$","span",null,{"className":"line"}]
+50:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"async"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":" fn"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" login_with_personal_access_token"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"("}]]}]
+51:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"    &"}],["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":"self"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":","}]]}]
+52:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"    command"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":":"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":" &"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"LoginWithPersonalAccessToken"}],["$","span",null,{ [...]
+53:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":") "}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"->"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" Result"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"<"}],["$","span",null,{"style":{"--shiki-light":"#6F4 [...]
+29:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]
+54:I[27201,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"IconMark"]
+27:null
+2b:[["$","title","0",{"children":"Personal access tokens | Apache Iggy"}],["$","link","1",{"rel":"canonical","href":"https://iggy.apache.org/blogs/2023/10/12/personal-access-tokens/"}],["$","link","2",{"rel":"alternate","type":"text/markdown","href":"https://iggy.apache.org/blogs/2023/10/12/personal-access-tokens.md"}],["$","meta","3",{"property":"og:title","content":"Personal access tokens | Apache Iggy"}],["$","meta","4",{"property":"og:url","content":"https://iggy.apache.org/blogs/202 [...]
diff --git a/blogs/2023/11/26/release-0.1.0.md b/blogs/2023/11/26/release-0.1.0.md
new file mode 100644
index 000000000..1fcd4718a
--- /dev/null
+++ b/blogs/2023/11/26/release-0.1.0.md
@@ -0,0 +1,40 @@
+# Iggy 0.1.0 release
+
+Published: 2023-11-26
+
+Rendered page: https://iggy.apache.org/blogs/2023/11/26/release-0.1.0/
+
+Source: https://github.com/apache/iggy-website/blob/main/content/blog/release-0.1.0.mdx
+
+We are happy to announce that Iggy.rs has reached the `0.1.0` release. This is a major milestone for the project, as it's getting closer to the first stable release.
+
+
+![0.1.0](https://iggy.apache.org/img/iggy_0_1_0.jpg)
+
+## Release notes
+
+The **streaming server**, being the core of the project, has been improved in many ways. Some of the most important features and bug fixes have to do with the area of memory management, such as keeping the configurable size of the cache under control, extended security including the authentication and authorization, added personal access tokens, and the overall stability of the server.
+
+![CI](https://iggy.apache.org/img/iggy_server_0_1_0.jpeg)
+
+All the core components (server + SDK + CLI + bench) have to go through a lot of automated tests on the different OS, which are run on every commit, and the code coverage is constantly increasing. We've put a lot of offert into making our CI/CD pipeline as robust as possible, and we are happy with the results. 
+
+![CI](https://iggy.apache.org/img/iggy_ci_0_1_0.jpeg)
+
+On top of it, the built-in benchmarking application has been significantly improved and now has its own CLI tool, which makes it easier to use.
+
+![Bench](https://iggy.apache.org/img/iggy_bench_0_1_0.jpeg)
+
+Additionally, we've also a great **CLI** being actively developed, which purpose is to allow the users to interact with the server using the command line.
+
+![CLI](https://iggy.apache.org/img/iggy_cli_0_1_0.jpeg)
+
+And then there's a modern, responsive, and fast **Web UI**, which provides a way to interact with the server using the browser.
+
+![Web UI](https://iggy.apache.org/img/iggy_web_ui_0_1_0.jpeg)
+
+While Rust **SDK** is the most mature one, and the C# is a close second, the remaining ones for Java, Go, Python, and NodeJS are catching up. It's not an easy task to keep all of them in sync, but we are doing our best to make sure that the SDKs are up-to-date with the latest changes in the server.
+
+Last but not least, we are **extremely grateful to the community**, which is growing every day. We are getting more and more feedback, and we are doing our best to address all the issues and feature requests. We are also getting more and more contributions, which is a great sign that the project is going in the right direction.
+
+Come and join our [Discord](https://discord.gg/apache-iggy) server, and let us know what you think about the project. We are looking forward to hearing from you!
diff --git a/blogs/2023/11/26/release-0.1.0/__next.!KHNpdGUp.blogs.$c$slug.__PAGE__.txt b/blogs/2023/11/26/release-0.1.0/__next.!KHNpdGUp.blogs.$c$slug.__PAGE__.txt
new file mode 100644
index 000000000..53ab1cc25
--- /dev/null
+++ b/blogs/2023/11/26/release-0.1.0/__next.!KHNpdGUp.blogs.$c$slug.__PAGE__.txt
@@ -0,0 +1,44 @@
+1:"$Sreact.fragment"
+2:I[24110,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],"Image"]
+3:I[94157,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],"Heading"]
+:HL["/img/authors/piotr.png","image"]
+14:X
+19:X
+19:C
+0:{"buildId":"CEAllZE6ERPzzxzpa_n8G","data":[{"rsc":["$","$1","c",{"children":[["$","main",null,{"className":"min-h-screen px-6 py-16 md:px-12","children":["$","article",null,{"className":"mx-auto max-w-5xl","children":[["$","header",null,{"className":"mb-10","children":[["$","time",null,{"className":"text-sm font-medium text-fd-muted-foreground","children":"November 26, 2023"}],["$","h1",null,{"className":"mt-3 text-3xl font-extrabold tracking-tight text-fd-foreground md:text-5xl","chil [...]
+1e:I[47873,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],"default"]
+1f:I[22016,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],""]
+20:I[97367,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"OutletBoundary"]
+21:"$Sreact.suspense"
+23:I[97367,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"ViewportBoundary"]
+24:I[97367,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"MetadataBoundary"]
+25:I[27201,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"IconMark"]
+26:I[39756,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"default"]
+27:I[37457,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"default"]
+4:["$","p",null,{"children":"All the core components (server + SDK + CLI + bench) have to go through a lot of automated tests on the different OS, which are run on every commit, and the code coverage is constantly increasing. We've put a lot of offert into making our CI/CD pipeline as robust as possible, and we are happy with the results."}]
+5:["$","p",null,{"children":["$","$L2",null,{"sizes":"(max-width: 768px) 100vw, (max-width: 1200px) 70vw, 900px","alt":"CI","src":{"src":"/_next/static/media/iggy_ci_0_1_0.0-oxzxtnw-dza.jpeg","width":3598,"height":1248,"blurWidth":8,"blurHeight":3,"blurDataURL":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAADCAYAAACuyE5IAAAAU0lEQVR42iXLzRJAIBhG4RZkRoX+fJWK4f6v8VUszu48LJUHPlRQOuH2jM3EL7V4CGXBPFWsJiAcF2K+0YF2EbPU4JP8hy5s054KHGWMXLYEhtYLsyIdlkSurj0AAAAASUVORK5CYII="},"className":"rou [...]
+6:["$","p",null,{"children":"On top of it, the built-in benchmarking application has been significantly improved and now has its own CLI tool, which makes it easier to use."}]
+7:["$","p",null,{"children":["$","$L2",null,{"sizes":"(max-width: 768px) 100vw, (max-width: 1200px) 70vw, 900px","alt":"Bench","src":{"src":"/_next/static/media/iggy_bench_0_1_0.3bn66g2gq5-sr.jpeg","width":4068,"height":2138,"blurWidth":8,"blurHeight":4,"blurDataURL":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAECAYAAACzzX7wAAAATUlEQVR42lXKQQrAIAwF0YCCiC6EkEKTkPvf8hcDtXTxVjMklyCJgJmx1sIYA733RO6GLSLSnBOttYPUFGr3GWqtIKLPju/g7iil/IYHwbAlzTFUBBIAAAAASUVORK5CYII="},"className":"round [...]
+8:["$","p",null,{"children":["Additionally, we've also a great ",["$","strong",null,{"children":"CLI"}]," being actively developed, which purpose is to allow the users to interact with the server using the command line."]}]
+9:["$","p",null,{"children":["$","$L2",null,{"sizes":"(max-width: 768px) 100vw, (max-width: 1200px) 70vw, 900px","alt":"CLI","src":{"src":"/_next/static/media/iggy_cli_0_1_0.20dihcl7p1g24.jpeg","width":2942,"height":2164,"blurWidth":8,"blurHeight":6,"blurDataURL":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAGCAYAAAD+Bd/7AAAAVklEQVR42m2NOQ7AIAwEzSUhQAiw/f+nbuKkIqGYbnaWSinIOSOlBO/9DxIRjDEQYzwLay0wM2qtCCGAiHasMOd8BLtxzu2CqqL3/ua+a8PyrbVz/uYCiK8y2ofM4OsAAAAASUVORK5CYII="},"className [...]
+a:["$","p",null,{"children":["And then there's a modern, responsive, and fast ",["$","strong",null,{"children":"Web UI"}],", which provides a way to interact with the server using the browser."]}]
+b:["$","p",null,{"children":["$","$L2",null,{"sizes":"(max-width: 768px) 100vw, (max-width: 1200px) 70vw, 900px","alt":"Web UI","src":{"src":"/_next/static/media/iggy_web_ui_0_1_0.10pkflbhh3k76.jpeg","width":4060,"height":2408,"blurWidth":8,"blurHeight":5,"blurDataURL":"data:image/jpeg;base64,/9j/4AAQSkZJRgABAgAAAQABAAD/wAARCAAFAAgDAREAAhEBAxEB/9sAQwAKBwcIBwYKCAgICwoKCw4YEA4NDQ4dFRYRGCMfJSQiHyIhJis3LyYpNCkhIjBBMTQ5Oz4+PiUuRElDPEg3PT47/9sAQwEKCwsODQ4cEBAcOygiKDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Oz [...]
+c:["$","p",null,{"children":["While Rust ",["$","strong",null,{"children":"SDK"}]," is the most mature one, and the C# is a close second, the remaining ones for Java, Go, Python, and NodeJS are catching up. It's not an easy task to keep all of them in sync, but we are doing our best to make sure that the SDKs are up-to-date with the latest changes in the server."]}]
+d:["$","p",null,{"children":["Last but not least, we are ",["$","strong",null,{"children":"extremely grateful to the community"}],", which is growing every day. We are getting more and more feedback, and we are doing our best to address all the issues and feature requests. We are also getting more and more contributions, which is a great sign that the project is going in the right direction."]}]
+e:["$","p",null,{"children":["Come and join our ",["$","$L1e",null,{"href":"https://discord.gg/apache-iggy","children":"Discord"}]," server, and let us know what you think about the project. We are looking forward to hearing from you!"]}]
+f:["$","footer",null,{"className":"mt-16 border-t border-fd-border pt-8","children":["$","$L1f",null,{"href":"/blogs","className":"inline-flex items-center gap-2 text-sm font-medium text-fd-primary transition-colors hover:opacity-80","children":"← Back to all posts"}]}]
+10:["$","script","script-0",{"src":"/_next/static/chunks/1k39uva2a578s.js","async":true}]
+11:["$","script","script-1",{"src":"/_next/static/chunks/23ktdyx90z0v3.js","async":true}]
+12:["$","$L20",null,{"children":["$","$21",null,{"name":"Next.MetadataOutlet","children":"$@22"}]}]
+15:["$","$1","h",{"children":[null,["$","$L23",null,{"children":[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]}],["$","div",null,{"hidden":true,"children":["$","$L24",null,{"children":["$","$21",null,{"name":"Next.Metadata","children":[["$","title","0",{"children":"Iggy 0.1.0 release | Apache Iggy"}],["$","link","1",{"rel":"canonical","href":"https://iggy.apache.org/blogs/2023/11/26/release-0.1.0/"}],["$","link" [...]
+17:["$","$1","c",{"children":[null,["$","$L26",null,{"parallelRouterKey":"children","template":["$","$L27",null,{}]}]]}]
+1a:["$","$1","c",{"children":[null,["$","$L26",null,{"parallelRouterKey":"children","template":["$","$L27",null,{}]}]]}]
+1d:true
+22:null
+14:300
+14:C
+1c:0
+16:"$undefined"
+18:"$undefined"
+1b:"$undefined"
+13:"$undefined"
diff --git a/blogs/2023/11/26/release-0.1.0/__next.!KHNpdGUp.txt b/blogs/2023/11/26/release-0.1.0/__next.!KHNpdGUp.txt
new file mode 100644
index 000000000..940e917aa
--- /dev/null
+++ b/blogs/2023/11/26/release-0.1.0/__next.!KHNpdGUp.txt
@@ -0,0 +1,30 @@
+1:"$Sreact.fragment"
+2:I[22016,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],""]
+3:I[5014,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],"default"]
+4:I[64345,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js"],"HomeLayout"]
+5:I[88760,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js"],"Logo"]
+6:I[15269,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js"],"CommunityDropdown"]
+7:I[15269,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js"],"communityLinks"]
+8:I[29966,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js"],"ASFDropdown"]
+9:I[36330,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js"],"ASFMobileLinks"]
+a:I[39756,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"default"]
+b:I[37457,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"default"]
+14:X
+0:{"buildId":"CEAllZE6ERPzzxzpa_n8G","data":[{"rsc":["$","$1","c",{"children":[[["$","script","script-0",{"src":"/_next/static/chunks/241-fa32f9zay.js","async":true}],["$","script","script-1",{"src":"/_next/static/chunks/3x8y3fmtn6lnc.js","async":true}],["$","script","script-2",{"src":"/_next/static/chunks/250gopd52txql.js","async":true}],["$","script","script-3",{"src":"/_next/static/chunks/0n3fueko2xquo.js","async":true}]],[["$","div",null,{"className":"relative border-b border-white/[ [...]
+c:["$","$L2","/",{"href":"/","className":"transition-colors hover:text-fd-primary","children":"Home"}]
+d:["$","$L2","/docs",{"href":"/docs","className":"transition-colors hover:text-fd-primary","children":"Documentation"}]
+e:["$","$L2","/blogs",{"href":"/blogs","className":"transition-colors hover:text-fd-primary","children":"Blog"}]
+f:["$","$L2","/downloads",{"href":"/downloads","className":"transition-colors hover:text-fd-primary","children":"Downloads"}]
+10:["$","$L2","/community",{"href":"/community","className":"transition-colors hover:text-fd-primary","children":"Community"}]
+11:["$","p",null,{"className":"mt-6 max-w-md text-xs text-fd-muted-foreground","children":["Every page on this site is listed in"," ",["$","a",null,{"href":"/sitemap.xml","className":"underline hover:text-fd-primary","children":"/sitemap.xml"}],", and"," ",["$","a",null,{"href":"/llms.txt","className":"underline hover:text-fd-primary","children":"/llms.txt"}]," ","summarises the documentation."]}]
+12:["$","footer",null,{"className":"border-t border-fd-border bg-fd-background px-6 py-14 md:px-12","children":["$","div",null,{"className":"mx-auto max-w-6xl","children":[["$","div",null,{"className":"grid gap-10 sm:grid-cols-2 lg:grid-cols-4","children":[["$","div","Docs",{"children":[["$","h2",null,{"className":"mb-4 text-sm font-semibold uppercase tracking-wide text-fd-primary","children":"Docs"}],["$","ul",null,{"className":"space-y-2.5 text-sm","children":[["$","li","/docs",{"child [...]
+16:true
+17:["$","$L2",null,{"href":"https://www.apache.org/foundation/contributing.html","target":"_blank","rel":"noopener noreferrer","className":"text-fd-muted-foreground transition-colors hover:text-fd-foreground","children":"Donate"}]
+18:["$","li","https://www.apache.org/foundation/sponsorship.html",{"children":["$","$L2",null,{"href":"https://www.apache.org/foundation/sponsorship.html","target":"_blank","rel":"noopener noreferrer","className":"text-fd-muted-foreground transition-colors hover:text-fd-foreground","children":"Sponsors"}]}]
+19:["$","li","https://www.apache.org/security/",{"children":["$","$L2",null,{"href":"https://www.apache.org/security/","target":"_blank","rel":"noopener noreferrer","className":"text-fd-muted-foreground transition-colors hover:text-fd-foreground","children":"Security"}]}]
+1a:["$","li","https://privacy.apache.org/policies/privacy-policy-public.html",{"children":["$","$L2",null,{"href":"https://privacy.apache.org/policies/privacy-policy-public.html","target":"_blank","rel":"noopener noreferrer","className":"text-fd-muted-foreground transition-colors hover:text-fd-foreground","children":"Privacy"}]}]
+1b:["$","div",null,{"className":"mt-12 border-t border-fd-border pt-8 text-xs leading-relaxed text-fd-muted-foreground/70","children":[["$","p",null,{"className":"mt-4","children":["Copyright © ",2026," The Apache Software Foundation, Licensed under the Apache License, Version 2.0."]}],["$","p",null,{"className":"mt-4","children":"Apache Iggy, Iggy, Apache, and the Apache Iggy logo are trademarks or registered trademarks of The Apache Software Foundation. All other marks mentioned may be [...]
+14:300
+14:C
+15:0
+13:"$undefined"
diff --git a/blogs/2023/11/26/release-0.1.0/__next._full.txt b/blogs/2023/11/26/release-0.1.0/__next._full.txt
new file mode 100644
index 000000000..387c79141
--- /dev/null
+++ b/blogs/2023/11/26/release-0.1.0/__next._full.txt
@@ -0,0 +1,67 @@
+1:"$Sreact.fragment"
+3:I[17751,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"RootProvider"]
+4:I[39756,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"default"]
+5:I[58298,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/3-_96y-evozm0.js"],"default"]
+6:I[37457,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"default"]
+7:I[22016,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],""]
+12:I[68027,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"default",1]
+:HL["/_next/static/chunks/1_55v0vlfews3.css","style"]
+2:T512,{"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://iggy.apache.org/#organization","name":"The Apache Software Foundation","url":"https://www.apache.org/","logo":"https://iggy.apache.org/img/asf_logo.svg","contactPoint":{"@type":"ContactPoint","contactType":"technical support","email":"dev@iggy.apache.org","url":"https://iggy.apache.org/community/"}},{"@type":"WebSite","@id":"https://iggy.apache.org/#website","name":"Apache Iggy","url":"https://iggy.a [...]
+0:{"P":null,"c":["","blogs","2023","11","26","release-0.1.0",""],"q":"","i":false,"f":[[["",{"children":["(site)",{"children":["blogs",{"children":[["slug","2023/11/26/release-0.1.0","c",[]],{"children":["__PAGE__",{},"$undefined","$undefined",4608]},"$undefined","$undefined",4608]},"$undefined","$undefined",4608]},"$undefined","$undefined",4608]},"$undefined","$undefined",4624],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/1_55v0vlfews3.cs [...]
+14:I[79520,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],""]
+15:I[69877,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"Matomo"]
+16:I[5014,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],"default"]
+17:I[64345,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js"],"HomeLayout"]
+18:I[88760,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js"],"Logo"]
+19:I[15269,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js"],"CommunityDropdown"]
+1a:I[15269,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js"],"communityLinks"]
+1b:I[29966,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js"],"ASFDropdown"]
+1c:I[36330,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js"],"ASFMobileLinks"]
+25:I[97367,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"OutletBoundary"]
+26:"$Sreact.suspense"
+28:I[97367,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"ViewportBoundary"]
+2a:I[97367,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"MetadataBoundary"]
+8:["$","$L7","/community",{"href":"/community","className":"transition-colors hover:text-fd-primary","children":"Community"}]
+9:["$","p",null,{"className":"mt-6 max-w-md text-xs text-fd-muted-foreground","children":["Every page on this site is listed in"," ",["$","a",null,{"href":"/sitemap.xml","className":"underline hover:text-fd-primary","children":"/sitemap.xml"}],", and"," ",["$","a",null,{"href":"/llms.txt","className":"underline hover:text-fd-primary","children":"/llms.txt"}]," ","summarises the documentation."]}]
+a:["$","$L14",null,{"id":"matomo","strategy":"afterInteractive","children":"var _paq = window._paq = window._paq || [];\n_paq.push([\"setDoNotTrack\", true]);\n_paq.push([\"disableCookies\"]);\n_paq.push(['trackPageView']);\n_paq.push(['enableLinkTracking']);\n(function() {\n  var u=\"https://analytics.apache.org/\";\n  _paq.push(['setTrackerUrl', u+'matomo.php']);\n  _paq.push(['setSiteId', '80']);\n  var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];\n  [...]
+b:["$","$L15",null,{}]
+c:["$","$1","c",{"children":[[["$","script","script-0",{"src":"/_next/static/chunks/241-fa32f9zay.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/_next/static/chunks/3x8y3fmtn6lnc.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/_next/static/chunks/250gopd52txql.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/_next/static/chunks/0n3fueko2xquo.js","async":true,"nonce":"$undefined"}]],[["$","div",null,{"className" [...]
+d:["$","$1","c",{"children":[null,["$","$L4",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}]
+e:["$","$1","c",{"children":[null,["$","$L4",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}]
+f:["$","$1","c",{"children":["$L24",[["$","script","script-0",{"src":"/_next/static/chunks/1k39uva2a578s.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/_next/static/chunks/23ktdyx90z0v3.js","async":true,"nonce":"$undefined"}]],["$","$L25",null,{"children":["$","$26",null,{"name":"Next.MetadataOutlet","children":"$@27"}]}]]}]
+11:["$","$1","h",{"children":[null,["$","$L28",null,{"children":"$L29"}],["$","div",null,{"hidden":true,"children":["$","$L2a",null,{"children":["$","$26",null,{"name":"Next.Metadata","children":"$L2b"}]}]}],null]}]
+13:["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/1_55v0vlfews3.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]
+10:C
+1d:["$","$L7","/",{"href":"/","className":"transition-colors hover:text-fd-primary","children":"Home"}]
+1e:["$","$L7","/docs",{"href":"/docs","className":"transition-colors hover:text-fd-primary","children":"Documentation"}]
+1f:["$","$L7","/blogs",{"href":"/blogs","className":"transition-colors hover:text-fd-primary","children":"Blog"}]
+20:["$","$L7","/downloads",{"href":"/downloads","className":"transition-colors hover:text-fd-primary","children":"Downloads"}]
+21:["$","$L7","/community",{"href":"/community","className":"transition-colors hover:text-fd-primary","children":"Community"}]
+22:["$","p",null,{"className":"mt-6 max-w-md text-xs text-fd-muted-foreground","children":["Every page on this site is listed in"," ",["$","a",null,{"href":"/sitemap.xml","className":"underline hover:text-fd-primary","children":"/sitemap.xml"}],", and"," ",["$","a",null,{"href":"/llms.txt","className":"underline hover:text-fd-primary","children":"/llms.txt"}]," ","summarises the documentation."]}]
+23:["$","footer",null,{"className":"border-t border-fd-border bg-fd-background px-6 py-14 md:px-12","children":["$","div",null,{"className":"mx-auto max-w-6xl","children":[["$","div",null,{"className":"grid gap-10 sm:grid-cols-2 lg:grid-cols-4","children":[["$","div","Docs",{"children":[["$","h2",null,{"className":"mb-4 text-sm font-semibold uppercase tracking-wide text-fd-primary","children":"Docs"}],["$","ul",null,{"className":"space-y-2.5 text-sm","children":[["$","li","/docs",{"child [...]
+2c:["$","li","https://www.apache.org/foundation/contributing.html",{"children":["$","$L7",null,{"href":"https://www.apache.org/foundation/contributing.html","target":"_blank","rel":"noopener noreferrer","className":"text-fd-muted-foreground transition-colors hover:text-fd-foreground","children":"Donate"}]}]
+2d:["$","li","https://www.apache.org/foundation/sponsorship.html",{"children":["$","$L7",null,{"href":"https://www.apache.org/foundation/sponsorship.html","target":"_blank","rel":"noopener noreferrer","className":"text-fd-muted-foreground transition-colors hover:text-fd-foreground","children":"Sponsors"}]}]
+2e:["$","li","https://www.apache.org/security/",{"children":["$","$L7",null,{"href":"https://www.apache.org/security/","target":"_blank","rel":"noopener noreferrer","className":"text-fd-muted-foreground transition-colors hover:text-fd-foreground","children":"Security"}]}]
+2f:["$","li","https://privacy.apache.org/policies/privacy-policy-public.html",{"children":["$","$L7",null,{"href":"https://privacy.apache.org/policies/privacy-policy-public.html","target":"_blank","rel":"noopener noreferrer","className":"text-fd-muted-foreground transition-colors hover:text-fd-foreground","children":"Privacy"}]}]
+30:["$","div",null,{"className":"mt-12 border-t border-fd-border pt-8 text-xs leading-relaxed text-fd-muted-foreground/70","children":[["$","p",null,{"className":"mt-4","children":["Copyright © ",2026," The Apache Software Foundation, Licensed under the Apache License, Version 2.0."]}],["$","p",null,{"className":"mt-4","children":"Apache Iggy, Iggy, Apache, and the Apache Iggy logo are trademarks or registered trademarks of The Apache Software Foundation. All other marks mentioned may be [...]
+31:I[24110,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],"Image"]
+32:I[94157,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],"Heading"]
+:HL["/img/authors/piotr.png","image"]
+24:["$","main",null,{"className":"min-h-screen px-6 py-16 md:px-12","children":["$","article",null,{"className":"mx-auto max-w-5xl","children":[["$","header",null,{"className":"mb-10","children":[["$","time",null,{"className":"text-sm font-medium text-fd-muted-foreground","children":"November 26, 2023"}],["$","h1",null,{"className":"mt-3 text-3xl font-extrabold tracking-tight text-fd-foreground md:text-5xl","children":"Iggy 0.1.0 release"}],["$","div",null,{"className":"mt-6 flex flex-wr [...]
+3f:I[47873,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],"default"]
+33:["$","p",null,{"children":"All the core components (server + SDK + CLI + bench) have to go through a lot of automated tests on the different OS, which are run on every commit, and the code coverage is constantly increasing. We've put a lot of offert into making our CI/CD pipeline as robust as possible, and we are happy with the results."}]
+34:["$","p",null,{"children":["$","$L31",null,{"sizes":"(max-width: 768px) 100vw, (max-width: 1200px) 70vw, 900px","alt":"CI","src":{"src":"/_next/static/media/iggy_ci_0_1_0.0-oxzxtnw-dza.jpeg","width":3598,"height":1248,"blurWidth":8,"blurHeight":3,"blurDataURL":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAADCAYAAACuyE5IAAAAU0lEQVR42iXLzRJAIBhG4RZkRoX+fJWK4f6v8VUszu48LJUHPlRQOuH2jM3EL7V4CGXBPFWsJiAcF2K+0YF2EbPU4JP8hy5s054KHGWMXLYEhtYLsyIdlkSurj0AAAAASUVORK5CYII="},"className":"r [...]
+35:["$","p",null,{"children":"On top of it, the built-in benchmarking application has been significantly improved and now has its own CLI tool, which makes it easier to use."}]
+36:["$","p",null,{"children":["$","$L31",null,{"sizes":"(max-width: 768px) 100vw, (max-width: 1200px) 70vw, 900px","alt":"Bench","src":{"src":"/_next/static/media/iggy_bench_0_1_0.3bn66g2gq5-sr.jpeg","width":4068,"height":2138,"blurWidth":8,"blurHeight":4,"blurDataURL":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAECAYAAACzzX7wAAAATUlEQVR42lXKQQrAIAwF0YCCiC6EkEKTkPvf8hcDtXTxVjMklyCJgJmx1sIYA733RO6GLSLSnBOttYPUFGr3GWqtIKLPju/g7iil/IYHwbAlzTFUBBIAAAAASUVORK5CYII="},"className":"rou [...]
+37:["$","p",null,{"children":["Additionally, we've also a great ",["$","strong",null,{"children":"CLI"}]," being actively developed, which purpose is to allow the users to interact with the server using the command line."]}]
+38:["$","p",null,{"children":["$","$L31",null,{"sizes":"(max-width: 768px) 100vw, (max-width: 1200px) 70vw, 900px","alt":"CLI","src":{"src":"/_next/static/media/iggy_cli_0_1_0.20dihcl7p1g24.jpeg","width":2942,"height":2164,"blurWidth":8,"blurHeight":6,"blurDataURL":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAGCAYAAAD+Bd/7AAAAVklEQVR42m2NOQ7AIAwEzSUhQAiw/f+nbuKkIqGYbnaWSinIOSOlBO/9DxIRjDEQYzwLay0wM2qtCCGAiHasMOd8BLtxzu2CqqL3/ua+a8PyrbVz/uYCiK8y2ofM4OsAAAAASUVORK5CYII="},"classNa [...]
+39:["$","p",null,{"children":["And then there's a modern, responsive, and fast ",["$","strong",null,{"children":"Web UI"}],", which provides a way to interact with the server using the browser."]}]
+3a:["$","p",null,{"children":["$","$L31",null,{"sizes":"(max-width: 768px) 100vw, (max-width: 1200px) 70vw, 900px","alt":"Web UI","src":{"src":"/_next/static/media/iggy_web_ui_0_1_0.10pkflbhh3k76.jpeg","width":4060,"height":2408,"blurWidth":8,"blurHeight":5,"blurDataURL":"data:image/jpeg;base64,/9j/4AAQSkZJRgABAgAAAQABAAD/wAARCAAFAAgDAREAAhEBAxEB/9sAQwAKBwcIBwYKCAgICwoKCw4YEA4NDQ4dFRYRGCMfJSQiHyIhJis3LyYpNCkhIjBBMTQ5Oz4+PiUuRElDPEg3PT47/9sAQwEKCwsODQ4cEBAcOygiKDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7 [...]
+3b:["$","p",null,{"children":["While Rust ",["$","strong",null,{"children":"SDK"}]," is the most mature one, and the C# is a close second, the remaining ones for Java, Go, Python, and NodeJS are catching up. It's not an easy task to keep all of them in sync, but we are doing our best to make sure that the SDKs are up-to-date with the latest changes in the server."]}]
+3c:["$","p",null,{"children":["Last but not least, we are ",["$","strong",null,{"children":"extremely grateful to the community"}],", which is growing every day. We are getting more and more feedback, and we are doing our best to address all the issues and feature requests. We are also getting more and more contributions, which is a great sign that the project is going in the right direction."]}]
+3d:["$","p",null,{"children":["Come and join our ",["$","$L3f",null,{"href":"https://discord.gg/apache-iggy","children":"Discord"}]," server, and let us know what you think about the project. We are looking forward to hearing from you!"]}]
+3e:["$","footer",null,{"className":"mt-16 border-t border-fd-border pt-8","children":["$","$L7",null,{"href":"/blogs","className":"inline-flex items-center gap-2 text-sm font-medium text-fd-primary transition-colors hover:opacity-80","children":"← Back to all posts"}]}]
+29:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]
+40:I[27201,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"IconMark"]
+27:null
+2b:[["$","title","0",{"children":"Iggy 0.1.0 release | Apache Iggy"}],["$","link","1",{"rel":"canonical","href":"https://iggy.apache.org/blogs/2023/11/26/release-0.1.0/"}],["$","link","2",{"rel":"alternate","type":"text/markdown","href":"https://iggy.apache.org/blogs/2023/11/26/release-0.1.0.md"}],["$","meta","3",{"property":"og:title","content":"Iggy 0.1.0 release | Apache Iggy"}],["$","meta","4",{"property":"og:url","content":"https://iggy.apache.org/blogs/2023/11/26/release-0.1.0"}],[ [...]
diff --git a/blogs/2023/11/26/release-0.1.0/__next._index.txt b/blogs/2023/11/26/release-0.1.0/__next._index.txt
new file mode 100644
index 000000000..42b058136
--- /dev/null
+++ b/blogs/2023/11/26/release-0.1.0/__next._index.txt
@@ -0,0 +1,20 @@
+1:"$Sreact.fragment"
+3:I[17751,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"RootProvider"]
+4:I[39756,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"default"]
+5:I[58298,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/3-_96y-evozm0.js"],"default"]
+6:I[37457,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"default"]
+7:I[22016,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],""]
+:HL["/_next/static/chunks/1_55v0vlfews3.css","style"]
+2:T512,{"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://iggy.apache.org/#organization","name":"The Apache Software Foundation","url":"https://www.apache.org/","logo":"https://iggy.apache.org/img/asf_logo.svg","contactPoint":{"@type":"ContactPoint","contactType":"technical support","email":"dev@iggy.apache.org","url":"https://iggy.apache.org/community/"}},{"@type":"WebSite","@id":"https://iggy.apache.org/#website","name":"Apache Iggy","url":"https://iggy.a [...]
+0:{"buildId":"CEAllZE6ERPzzxzpa_n8G","data":[{"rsc":["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/1_55v0vlfews3.css","precedence":"next"}],["$","script","script-0",{"src":"/_next/static/chunks/05hk4ely-lns6.js","async":true}],["$","script","script-1",{"src":"/_next/static/chunks/2tvyahbdutabx.js","async":true}]],["$","html",null,{"lang":"en","suppressHydrationWarning":true,"children":["$","body",null,{"className":"flex min-h-screen flex-col  [...]
+10:I[79520,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],""]
+11:I[69877,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"Matomo"]
+8:["$","a",null,{"href":"/sitemap.xml","className":"underline hover:text-fd-primary","children":"/sitemap.xml"}]
+9:["$","a",null,{"href":"/llms.txt","className":"underline hover:text-fd-primary","children":"/llms.txt"}]
+a:["$","$L10",null,{"id":"matomo","strategy":"afterInteractive","children":"var _paq = window._paq = window._paq || [];\n_paq.push([\"setDoNotTrack\", true]);\n_paq.push([\"disableCookies\"]);\n_paq.push(['trackPageView']);\n_paq.push(['enableLinkTracking']);\n(function() {\n  var u=\"https://analytics.apache.org/\";\n  _paq.push(['setTrackerUrl', u+'matomo.php']);\n  _paq.push(['setSiteId', '80']);\n  var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];\n  [...]
+b:["$","$L11",null,{}]
+d:300
+f:true
+d:C
+e:0
+c:"$undefined"
diff --git a/blogs/2023/11/26/release-0.1.0/__next._tree.txt b/blogs/2023/11/26/release-0.1.0/__next._tree.txt
new file mode 100644
index 000000000..f26c76ef3
--- /dev/null
+++ b/blogs/2023/11/26/release-0.1.0/__next._tree.txt
@@ -0,0 +1,3 @@
+:HL["/_next/static/chunks/1_55v0vlfews3.css","style"]
+:HL["/img/authors/piotr.png","image"]
+0:{"tree":{"name":"","param":null,"prefetchHints":4112,"slots":{"children":{"name":"(site)","param":null,"prefetchHints":4096,"slots":{"children":{"name":"blogs","param":null,"prefetchHints":4160,"slots":{"children":{"name":"slug","param":{"type":"c","key":"2023/11/26/release-0.1.0","siblings":[]},"prefetchHints":4192,"slots":{"children":{"name":"__PAGE__","param":null,"prefetchHints":4256,"slots":null}}}}}}}}},"staleTime":300,"buildId":"CEAllZE6ERPzzxzpa_n8G"}
diff --git a/blogs/2023/11/26/release-0.1.0/index.html b/blogs/2023/11/26/release-0.1.0/index.html
new file mode 100644
index 000000000..c38159c04
--- /dev/null
+++ b/blogs/2023/11/26/release-0.1.0/index.html
@@ -0,0 +1,16 @@
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" href="/img/authors/piotr.png" as="image"/><link rel="stylesheet" href="/_next/static/chunks/1_55v0vlfews3.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/1qt6pht_u0de1.js"/><script src="/_next/static/chunks/1iye7dwhtxrnu.js" async=""></script><script src="/_next/static/chunks/1t7fq8 [...]
+<p><img alt="0.1.0" loading="lazy" width="1000" height="500" decoding="async" data-nimg="1" class="rounded-lg" style="color:transparent" src="/_next/static/media/iggy_0_1_0.0clj9t7ympyk_.jpg"/></p>
+<h2 id="release-notes" class="group/heading flex scroll-m-28 flex-row items-center gap-1"><a data-card="" href="#release-notes">Release notes</a><button aria-label="Copy Anchor Link" class="inline-flex items-center justify-center rounded-md text-sm font-medium duration-100 disabled:pointer-events-none disabled:opacity-50 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-fd-ring hover:bg-fd-accent hover:text-fd-accent-foreground p-1 [&amp;_svg]:size-4 not-prose shrink-0 t [...]
+<p>The <strong>streaming server</strong>, being the core of the project, has been improved in many ways. Some of the most important features and bug fixes have to do with the area of memory management, such as keeping the configurable size of the cache under control, extended security including the authentication and authorization, added personal access tokens, and the overall stability of the server.</p>
+<p><img alt="CI" loading="lazy" width="4092" height="1664" decoding="async" data-nimg="1" class="rounded-lg" style="color:transparent" src="/_next/static/media/iggy_server_0_1_0.14n_edtclen0g.jpeg"/></p>
+<p>All the core components (server + SDK + CLI + bench) have to go through a lot of automated tests on the different OS, which are run on every commit, and the code coverage is constantly increasing. We&#x27;ve put a lot of offert into making our CI/CD pipeline as robust as possible, and we are happy with the results.</p>
+<p><img alt="CI" loading="lazy" width="3598" height="1248" decoding="async" data-nimg="1" class="rounded-lg" style="color:transparent" src="/_next/static/media/iggy_ci_0_1_0.0-oxzxtnw-dza.jpeg"/></p>
+<p>On top of it, the built-in benchmarking application has been significantly improved and now has its own CLI tool, which makes it easier to use.</p>
+<p><img alt="Bench" loading="lazy" width="4068" height="2138" decoding="async" data-nimg="1" class="rounded-lg" style="color:transparent" src="/_next/static/media/iggy_bench_0_1_0.3bn66g2gq5-sr.jpeg"/></p>
+<p>Additionally, we&#x27;ve also a great <strong>CLI</strong> being actively developed, which purpose is to allow the users to interact with the server using the command line.</p>
+<p><img alt="CLI" loading="lazy" width="2942" height="2164" decoding="async" data-nimg="1" class="rounded-lg" style="color:transparent" src="/_next/static/media/iggy_cli_0_1_0.20dihcl7p1g24.jpeg"/></p>
+<p>And then there&#x27;s a modern, responsive, and fast <strong>Web UI</strong>, which provides a way to interact with the server using the browser.</p>
+<p><img alt="Web UI" loading="lazy" width="4060" height="2408" decoding="async" data-nimg="1" class="rounded-lg" style="color:transparent" src="/_next/static/media/iggy_web_ui_0_1_0.10pkflbhh3k76.jpeg"/></p>
+<p>While Rust <strong>SDK</strong> is the most mature one, and the C# is a close second, the remaining ones for Java, Go, Python, and NodeJS are catching up. It&#x27;s not an easy task to keep all of them in sync, but we are doing our best to make sure that the SDKs are up-to-date with the latest changes in the server.</p>
+<p>Last but not least, we are <strong>extremely grateful to the community</strong>, which is growing every day. We are getting more and more feedback, and we are doing our best to address all the issues and feature requests. We are also getting more and more contributions, which is a great sign that the project is going in the right direction.</p>
+<p>Come and join our <a href="https://discord.gg/apache-iggy" rel="noreferrer noopener" target="_blank">Discord</a> server, and let us know what you think about the project. We are looking forward to hearing from you!</p></div><footer class="mt-16 border-t border-fd-border pt-8"><a class="inline-flex items-center gap-2 text-sm font-medium text-fd-primary transition-colors hover:opacity-80" href="/blogs/">← Back to all posts</a></footer></article></main><!--$--><!--/$--><footer class="bor [...]
\ No newline at end of file
diff --git a/blogs/2023/11/26/release-0.1.0/index.txt b/blogs/2023/11/26/release-0.1.0/index.txt
new file mode 100644
index 000000000..387c79141
--- /dev/null
+++ b/blogs/2023/11/26/release-0.1.0/index.txt
@@ -0,0 +1,67 @@
+1:"$Sreact.fragment"
+3:I[17751,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"RootProvider"]
+4:I[39756,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"default"]
+5:I[58298,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/3-_96y-evozm0.js"],"default"]
+6:I[37457,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"default"]
+7:I[22016,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],""]
+12:I[68027,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"default",1]
+:HL["/_next/static/chunks/1_55v0vlfews3.css","style"]
+2:T512,{"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://iggy.apache.org/#organization","name":"The Apache Software Foundation","url":"https://www.apache.org/","logo":"https://iggy.apache.org/img/asf_logo.svg","contactPoint":{"@type":"ContactPoint","contactType":"technical support","email":"dev@iggy.apache.org","url":"https://iggy.apache.org/community/"}},{"@type":"WebSite","@id":"https://iggy.apache.org/#website","name":"Apache Iggy","url":"https://iggy.a [...]
+0:{"P":null,"c":["","blogs","2023","11","26","release-0.1.0",""],"q":"","i":false,"f":[[["",{"children":["(site)",{"children":["blogs",{"children":[["slug","2023/11/26/release-0.1.0","c",[]],{"children":["__PAGE__",{},"$undefined","$undefined",4608]},"$undefined","$undefined",4608]},"$undefined","$undefined",4608]},"$undefined","$undefined",4608]},"$undefined","$undefined",4624],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/1_55v0vlfews3.cs [...]
+14:I[79520,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],""]
+15:I[69877,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"Matomo"]
+16:I[5014,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],"default"]
+17:I[64345,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js"],"HomeLayout"]
+18:I[88760,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js"],"Logo"]
+19:I[15269,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js"],"CommunityDropdown"]
+1a:I[15269,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js"],"communityLinks"]
+1b:I[29966,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js"],"ASFDropdown"]
+1c:I[36330,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js"],"ASFMobileLinks"]
+25:I[97367,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"OutletBoundary"]
+26:"$Sreact.suspense"
+28:I[97367,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"ViewportBoundary"]
+2a:I[97367,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"MetadataBoundary"]
+8:["$","$L7","/community",{"href":"/community","className":"transition-colors hover:text-fd-primary","children":"Community"}]
+9:["$","p",null,{"className":"mt-6 max-w-md text-xs text-fd-muted-foreground","children":["Every page on this site is listed in"," ",["$","a",null,{"href":"/sitemap.xml","className":"underline hover:text-fd-primary","children":"/sitemap.xml"}],", and"," ",["$","a",null,{"href":"/llms.txt","className":"underline hover:text-fd-primary","children":"/llms.txt"}]," ","summarises the documentation."]}]
+a:["$","$L14",null,{"id":"matomo","strategy":"afterInteractive","children":"var _paq = window._paq = window._paq || [];\n_paq.push([\"setDoNotTrack\", true]);\n_paq.push([\"disableCookies\"]);\n_paq.push(['trackPageView']);\n_paq.push(['enableLinkTracking']);\n(function() {\n  var u=\"https://analytics.apache.org/\";\n  _paq.push(['setTrackerUrl', u+'matomo.php']);\n  _paq.push(['setSiteId', '80']);\n  var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];\n  [...]
+b:["$","$L15",null,{}]
+c:["$","$1","c",{"children":[[["$","script","script-0",{"src":"/_next/static/chunks/241-fa32f9zay.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/_next/static/chunks/3x8y3fmtn6lnc.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/_next/static/chunks/250gopd52txql.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/_next/static/chunks/0n3fueko2xquo.js","async":true,"nonce":"$undefined"}]],[["$","div",null,{"className" [...]
+d:["$","$1","c",{"children":[null,["$","$L4",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}]
+e:["$","$1","c",{"children":[null,["$","$L4",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}]
+f:["$","$1","c",{"children":["$L24",[["$","script","script-0",{"src":"/_next/static/chunks/1k39uva2a578s.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/_next/static/chunks/23ktdyx90z0v3.js","async":true,"nonce":"$undefined"}]],["$","$L25",null,{"children":["$","$26",null,{"name":"Next.MetadataOutlet","children":"$@27"}]}]]}]
+11:["$","$1","h",{"children":[null,["$","$L28",null,{"children":"$L29"}],["$","div",null,{"hidden":true,"children":["$","$L2a",null,{"children":["$","$26",null,{"name":"Next.Metadata","children":"$L2b"}]}]}],null]}]
+13:["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/1_55v0vlfews3.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]
+10:C
+1d:["$","$L7","/",{"href":"/","className":"transition-colors hover:text-fd-primary","children":"Home"}]
+1e:["$","$L7","/docs",{"href":"/docs","className":"transition-colors hover:text-fd-primary","children":"Documentation"}]
+1f:["$","$L7","/blogs",{"href":"/blogs","className":"transition-colors hover:text-fd-primary","children":"Blog"}]
+20:["$","$L7","/downloads",{"href":"/downloads","className":"transition-colors hover:text-fd-primary","children":"Downloads"}]
+21:["$","$L7","/community",{"href":"/community","className":"transition-colors hover:text-fd-primary","children":"Community"}]
+22:["$","p",null,{"className":"mt-6 max-w-md text-xs text-fd-muted-foreground","children":["Every page on this site is listed in"," ",["$","a",null,{"href":"/sitemap.xml","className":"underline hover:text-fd-primary","children":"/sitemap.xml"}],", and"," ",["$","a",null,{"href":"/llms.txt","className":"underline hover:text-fd-primary","children":"/llms.txt"}]," ","summarises the documentation."]}]
+23:["$","footer",null,{"className":"border-t border-fd-border bg-fd-background px-6 py-14 md:px-12","children":["$","div",null,{"className":"mx-auto max-w-6xl","children":[["$","div",null,{"className":"grid gap-10 sm:grid-cols-2 lg:grid-cols-4","children":[["$","div","Docs",{"children":[["$","h2",null,{"className":"mb-4 text-sm font-semibold uppercase tracking-wide text-fd-primary","children":"Docs"}],["$","ul",null,{"className":"space-y-2.5 text-sm","children":[["$","li","/docs",{"child [...]
+2c:["$","li","https://www.apache.org/foundation/contributing.html",{"children":["$","$L7",null,{"href":"https://www.apache.org/foundation/contributing.html","target":"_blank","rel":"noopener noreferrer","className":"text-fd-muted-foreground transition-colors hover:text-fd-foreground","children":"Donate"}]}]
+2d:["$","li","https://www.apache.org/foundation/sponsorship.html",{"children":["$","$L7",null,{"href":"https://www.apache.org/foundation/sponsorship.html","target":"_blank","rel":"noopener noreferrer","className":"text-fd-muted-foreground transition-colors hover:text-fd-foreground","children":"Sponsors"}]}]
+2e:["$","li","https://www.apache.org/security/",{"children":["$","$L7",null,{"href":"https://www.apache.org/security/","target":"_blank","rel":"noopener noreferrer","className":"text-fd-muted-foreground transition-colors hover:text-fd-foreground","children":"Security"}]}]
+2f:["$","li","https://privacy.apache.org/policies/privacy-policy-public.html",{"children":["$","$L7",null,{"href":"https://privacy.apache.org/policies/privacy-policy-public.html","target":"_blank","rel":"noopener noreferrer","className":"text-fd-muted-foreground transition-colors hover:text-fd-foreground","children":"Privacy"}]}]
+30:["$","div",null,{"className":"mt-12 border-t border-fd-border pt-8 text-xs leading-relaxed text-fd-muted-foreground/70","children":[["$","p",null,{"className":"mt-4","children":["Copyright © ",2026," The Apache Software Foundation, Licensed under the Apache License, Version 2.0."]}],["$","p",null,{"className":"mt-4","children":"Apache Iggy, Iggy, Apache, and the Apache Iggy logo are trademarks or registered trademarks of The Apache Software Foundation. All other marks mentioned may be [...]
+31:I[24110,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],"Image"]
+32:I[94157,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],"Heading"]
+:HL["/img/authors/piotr.png","image"]
+24:["$","main",null,{"className":"min-h-screen px-6 py-16 md:px-12","children":["$","article",null,{"className":"mx-auto max-w-5xl","children":[["$","header",null,{"className":"mb-10","children":[["$","time",null,{"className":"text-sm font-medium text-fd-muted-foreground","children":"November 26, 2023"}],["$","h1",null,{"className":"mt-3 text-3xl font-extrabold tracking-tight text-fd-foreground md:text-5xl","children":"Iggy 0.1.0 release"}],["$","div",null,{"className":"mt-6 flex flex-wr [...]
+3f:I[47873,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],"default"]
+33:["$","p",null,{"children":"All the core components (server + SDK + CLI + bench) have to go through a lot of automated tests on the different OS, which are run on every commit, and the code coverage is constantly increasing. We've put a lot of offert into making our CI/CD pipeline as robust as possible, and we are happy with the results."}]
+34:["$","p",null,{"children":["$","$L31",null,{"sizes":"(max-width: 768px) 100vw, (max-width: 1200px) 70vw, 900px","alt":"CI","src":{"src":"/_next/static/media/iggy_ci_0_1_0.0-oxzxtnw-dza.jpeg","width":3598,"height":1248,"blurWidth":8,"blurHeight":3,"blurDataURL":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAADCAYAAACuyE5IAAAAU0lEQVR42iXLzRJAIBhG4RZkRoX+fJWK4f6v8VUszu48LJUHPlRQOuH2jM3EL7V4CGXBPFWsJiAcF2K+0YF2EbPU4JP8hy5s054KHGWMXLYEhtYLsyIdlkSurj0AAAAASUVORK5CYII="},"className":"r [...]
+35:["$","p",null,{"children":"On top of it, the built-in benchmarking application has been significantly improved and now has its own CLI tool, which makes it easier to use."}]
+36:["$","p",null,{"children":["$","$L31",null,{"sizes":"(max-width: 768px) 100vw, (max-width: 1200px) 70vw, 900px","alt":"Bench","src":{"src":"/_next/static/media/iggy_bench_0_1_0.3bn66g2gq5-sr.jpeg","width":4068,"height":2138,"blurWidth":8,"blurHeight":4,"blurDataURL":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAECAYAAACzzX7wAAAATUlEQVR42lXKQQrAIAwF0YCCiC6EkEKTkPvf8hcDtXTxVjMklyCJgJmx1sIYA733RO6GLSLSnBOttYPUFGr3GWqtIKLPju/g7iil/IYHwbAlzTFUBBIAAAAASUVORK5CYII="},"className":"rou [...]
+37:["$","p",null,{"children":["Additionally, we've also a great ",["$","strong",null,{"children":"CLI"}]," being actively developed, which purpose is to allow the users to interact with the server using the command line."]}]
+38:["$","p",null,{"children":["$","$L31",null,{"sizes":"(max-width: 768px) 100vw, (max-width: 1200px) 70vw, 900px","alt":"CLI","src":{"src":"/_next/static/media/iggy_cli_0_1_0.20dihcl7p1g24.jpeg","width":2942,"height":2164,"blurWidth":8,"blurHeight":6,"blurDataURL":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAGCAYAAAD+Bd/7AAAAVklEQVR42m2NOQ7AIAwEzSUhQAiw/f+nbuKkIqGYbnaWSinIOSOlBO/9DxIRjDEQYzwLay0wM2qtCCGAiHasMOd8BLtxzu2CqqL3/ua+a8PyrbVz/uYCiK8y2ofM4OsAAAAASUVORK5CYII="},"classNa [...]
+39:["$","p",null,{"children":["And then there's a modern, responsive, and fast ",["$","strong",null,{"children":"Web UI"}],", which provides a way to interact with the server using the browser."]}]
+3a:["$","p",null,{"children":["$","$L31",null,{"sizes":"(max-width: 768px) 100vw, (max-width: 1200px) 70vw, 900px","alt":"Web UI","src":{"src":"/_next/static/media/iggy_web_ui_0_1_0.10pkflbhh3k76.jpeg","width":4060,"height":2408,"blurWidth":8,"blurHeight":5,"blurDataURL":"data:image/jpeg;base64,/9j/4AAQSkZJRgABAgAAAQABAAD/wAARCAAFAAgDAREAAhEBAxEB/9sAQwAKBwcIBwYKCAgICwoKCw4YEA4NDQ4dFRYRGCMfJSQiHyIhJis3LyYpNCkhIjBBMTQ5Oz4+PiUuRElDPEg3PT47/9sAQwEKCwsODQ4cEBAcOygiKDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7 [...]
+3b:["$","p",null,{"children":["While Rust ",["$","strong",null,{"children":"SDK"}]," is the most mature one, and the C# is a close second, the remaining ones for Java, Go, Python, and NodeJS are catching up. It's not an easy task to keep all of them in sync, but we are doing our best to make sure that the SDKs are up-to-date with the latest changes in the server."]}]
+3c:["$","p",null,{"children":["Last but not least, we are ",["$","strong",null,{"children":"extremely grateful to the community"}],", which is growing every day. We are getting more and more feedback, and we are doing our best to address all the issues and feature requests. We are also getting more and more contributions, which is a great sign that the project is going in the right direction."]}]
+3d:["$","p",null,{"children":["Come and join our ",["$","$L3f",null,{"href":"https://discord.gg/apache-iggy","children":"Discord"}]," server, and let us know what you think about the project. We are looking forward to hearing from you!"]}]
+3e:["$","footer",null,{"className":"mt-16 border-t border-fd-border pt-8","children":["$","$L7",null,{"href":"/blogs","className":"inline-flex items-center gap-2 text-sm font-medium text-fd-primary transition-colors hover:opacity-80","children":"← Back to all posts"}]}]
+29:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]
+40:I[27201,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"IconMark"]
+27:null
+2b:[["$","title","0",{"children":"Iggy 0.1.0 release | Apache Iggy"}],["$","link","1",{"rel":"canonical","href":"https://iggy.apache.org/blogs/2023/11/26/release-0.1.0/"}],["$","link","2",{"rel":"alternate","type":"text/markdown","href":"https://iggy.apache.org/blogs/2023/11/26/release-0.1.0.md"}],["$","meta","3",{"property":"og:title","content":"Iggy 0.1.0 release | Apache Iggy"}],["$","meta","4",{"property":"og:url","content":"https://iggy.apache.org/blogs/2023/11/26/release-0.1.0"}],[ [...]
diff --git a/blogs/2023/12/29/building-message-streaming-in-rust.md b/blogs/2023/12/29/building-message-streaming-in-rust.md
new file mode 100644
index 000000000..a1bc046ce
--- /dev/null
+++ b/blogs/2023/12/29/building-message-streaming-in-rust.md
@@ -0,0 +1,149 @@
+# Iggy.rs - building message streaming in Rust
+
+Published: 2023-12-29
+
+Rendered page: https://iggy.apache.org/blogs/2023/12/29/building-message-streaming-in-rust/
+
+Source: https://github.com/apache/iggy-website/blob/main/content/blog/building-message-streaming-in-rust.mdx
+
+## Origins
+
+Over half a year ago (in April, to be exact), I eventually decided to learn Rust for good. My previous attempt during the [2022 AoC](https://github.com/spetz/advent-of-code-2022) had failed rather quickly, after a few days of completing the exercises - I finally realized that **I needed a real project to work on**. For the last few years, I've been dealing with the different kinds of distributed systems (mostly using C#), including the typical microservices architecture or Web3. Regardle [...]
+
+
+After a few months of trying to figure out (or just staying in the limbo I guess), what would be the best project to work on, I decided to build the **message streaming platform** (keep in mind that streaming is [not the same](https://blog.iron.io/message-queue-vs-streaming/) as regular message broker). The other reason (besides getting to know Rust) was to **truly understand the internals of the messaging systems** and the trade-offs that were made by their developers - some of them bei [...]
+
+And this is how the [Iggy.rs](https://iggy.rs) was born. The name is an abbreviation of the Italian Greyhound (yes, I own [two of them](https://www.instagram.com/fabio.and.cookie/)), small yet extremely fast dogs, the best in their class.
+
+![image](https://iggy.apache.org/building-message-streaming/iggys.jpeg)
+
+Therefore, what I want, or actually **what we want** (since there's a few of us working on it already) for Iggy.rs to be - the best message streaming platform in its class. **Lightweight** in terms of the resource consumption, **fast** (and predictable) when it comes to the throughput and latency, and **easy to use** when speaking of its API, SDK and configuration of the project.
+
+## Project
+
+At the very beginning, Iggy had rather limited functionality, and everything was handled using the [QUIC](https://www.chromium.org/quic/) protocol based on [Quinn](https://github.com/quinn-rs/quinn) library. You could connect multiple applications into the server, and start exchanging the messages between them, simply by appending the data to the stream (from the producer perspective), and fetching the records on the consumer side, by providing an offset (numeric value specifying from wh [...]
+
+After spending a few weeks on building the initial version, and then another few weeks on rewriting its core part (yes, prototyping + validation repeated in a continuous loop worked quite well), I managed to implement the persistent streaming server being capable of parallel writes/reads to/from independent streams supporting many distinct apps connected into it. Simply put, one could easily have many applications, and even **thousands of the streams** (depending on how do you decide to  [...]
+
+On top of this, the support for **TCP** and **HTTP** protocols have been added. Under the hood, the typical architecture of streams, consisting of the topics being split into the partitions, which eventually operate on a raw file data using so-called segments has been implemented as well.
+
+![image](https://iggy.apache.org/building-message-streaming/iggy_sample.jpeg)
+
+**It was one of the "aha" moments**, when reimplementing the parallel access to the data with the usage of underlying synchronization mechanism (*RwLock* etc.), optimized data structures e.g. for dealing with [bytes](https://crates.io/crates/bytes), along with the [Tokio](https://tokio.rs) **work stealing** approach, yielded the great improvements for the overall throughput.
+
+I do believe, that somewhere at this point I had realized, that **Iggy might actually become something useful** - not just a toy project, to be abandoned after reaching its initial goal (which was sort of already achieved).
+
+```rust
+let polled_messages = client.poll_messages(&PollMessages {
+  stream_id: Identifier::numeric(1)?,
+  topic_id: Identifier::named("orders")?,
+  consumer: Consumer::group(Identifier::named("payments")?),
+  partition_id: None,
+  strategy: PollingStrategy::offset(0),
+  count: 10,
+  auto_commit: true,
+}).await?;
+```
+
+After running some benchmarks (yes, we have a dedicated app for the **[benchmarking purposes](https://github.com/apache/iggy/tree/master/core/bench)**) and seeing the promising numbers (**range of 2-6 GB/s for both, writes & reads when processing millions of messages**), I eventually decided to give it a long-term shot. Being fully aware that there's still lots to be done (speaking of many months, or even years), I couldn't be more happy to find out that there's also someone else out the [...]
+
+![image](https://iggy.apache.org/building-message-streaming/iggy_bench.jpeg)
+
+## Team
+
+At the time of writing this post, **Iggy consists of around 10 members** contributing to its different parts. Some of us do work on the core streaming server, while the other ones are focused on SDKs for the different programming languages or tooling such as Web UI or CLI - all these projects are equally important, as they add up to the overall ecosystem. But how do you actually gather a team of open source contributors, who are willing to spend their free time working on it?
+
+Well, I wish I had an answer to that question - honestly, in case of Iggy I wasn't actually looking for anyone, as I didn't think this could be an interesting project to work on (except for myself). Then how did that happen anyway? There were only 2 things in common - all the people that joined the project were part of the same Discord communities, yet more importantly **they all shared the passion for programming**, and I'm not talking about Rust language specifically. From junior to se [...]
+
+![image](https://iggy.apache.org/building-message-streaming/iggy_server.jpeg)
+
+For example, when I asked one guy what was the reason behind building an SDK in Go, the reply was the need of playing with and learning a new language. Why C# SDK? Well, the other guy wanted to dive more into the low-level concepts and decided to squeeze out great performance from the managed runtime. Why build Web UI in Svelte? At work, I mostly use React, and I wanted to learn a new framework - another member said.
+
+My point is - as long as you believe in what you're building, and you're consistent about it (it was one of the main reasons why I've been contributing to Iggy every day since its inception, and still doing so), there's a chance that someone out there will notice it and happily join you in your efforts. **Lead by example, or whatever you call it.**
+
+At the same time, we've started receiving the first, **external contributions from all around the world** - whether talking about simpler tasks, or the more sophisticated ones, requiring significant amount of time being spent on both, the implementation and the discussions to eventually deliver the code.
+
+It gave us even more confidence, that there are other people (outside our internal bubble), who find this project to be interesting and worth spending their time. And without all these amazing contributors, it'd be much harder (or even impossible) to deliver so many features.
+
+## Features
+
+At first, let me just point out some of the properties and features that are part of the core streaming server:
+
+- **Highly performant**, persistent append-only log for the message streaming
+- **Very high throughput** for both writes and reads
+- **Low latency and predictable resource usage** thanks to the Rust compiled language (no GC)
+- **Users authentication and authorization** with granular permissions and PAT (Personal Access Tokens)
+- Support for multiple streams, topics and partitions
+- Support for **multiple transport protocols** (QUIC, TCP, HTTP)
+- Fully operational RESTful API which can be optionally enabled
+- Available client SDK in multiple languages
+- **Works directly with the binary data** (lack of enforced schema and serialization/deserialization)
+- Configurable server features (e.g. caching, segment size, data flush interval, transport protocols etc.)
+- Possibility of storing the **consumer offsets** on the server
+- Multiple ways of polling the messages:
+  - By offset (using the indexes)
+  - By timestamp (using the time indexes)
+  - First/Last N messages
+  - Next N messages for the specific consumer
+- Possibility of **auto committing the offset** (e.g. to achieve *at-most-once* delivery)
+- **Consumer groups** providing the message ordering and horizontal scaling across the connected clients
+- **Message expiry** with auto deletion based on the configurable **retention policy**
+- Additional features such as **server side message deduplication**
+- **TLS** support for all transport protocols (TCP, QUIC, HTTPS)
+- Optional server-side as well as client-side **data encryption** using AES-256-GCM
+- Optional metadata support in the form of **message headers**
+- Built-in **CLI** to manage the streaming server
+- Built-in **benchmarking app** to test the performance
+- **Single binary deployment** (no external dependencies)
+- Running as a single node (no cluster support yet)
+
+And as already mentioned, we've been working on SDKs for the multiple programming languages:
+
+- [Rust](https://crates.io/crates/iggy)
+- [C#](https://github.com/iggy-rs/iggy-dotnet-client)
+- [Go](https://github.com/iggy-rs/iggy-go-client)
+- [Node](https://github.com/iggy-rs/iggy-node-client)
+- [Python](https://github.com/iggy-rs/iggy-python-client)
+- [Java](https://github.com/iggy-rs/iggy-java-client)
+
+Please keep in mind, though, that some of them e.g. for Rust or C# are more up to date with the recent server changes, while the other ones might still need to do some catching up with the latest features. However, given the amount of available methods on the server's API and the underlying TCP/UDP stack with custom serialization to be implemented from the scratch (except for HTTP transport, that's the easier one), I'd say we're doing quite ok, and I can't stress enough **how grateful I  [...]
+
+But wait, there's even more - what would be a message streaming platform without some additional tooling for managing it? We've also been developing the **[CLI](https://github.com/apache/iggy/tree/master/cmd)**.
+
+![image](https://iggy.apache.org/building-message-streaming/iggy_cli.jpeg)
+
+As well as modern **[Web UI](https://github.com/iggy-rs/iggy-web-ui)** to make it happen :)
+
+![image](https://iggy.apache.org/building-message-streaming/iggy_web_ui.jpeg)
+
+Last but not least, we've got a fully-featured [CI/CD pipeline](https://github.com/apache/iggy/actions) responsible for running all the checks and tests on multiple platforms, and finally producing the release artifacts and [Docker images](https://hub.docker.com/u/iggyrs).
+
+![image](https://iggy.apache.org/building-message-streaming/iggy_ci_cd.jpeg)
+
+At first glance, it might look like there's plenty of features already in place, but for anyone who has ever worked with the message streaming infrastructure before, that might be just a tip of an iceberg, thus let's discuss the roadmap.
+
+## Roadmap
+
+After gaining some traction a few months ago (mostly due to landing on the GitHub trending page in July), we've talked to some users potentially interested in making Iggy part of their infrastructure (there's even one [company](https://neferdata.com) using it already), and discussed what features would be a good addition to the current stack.
+
+![image](https://iggy.apache.org/building-message-streaming/gh_trending.jpeg)
+
+Considering what's already there, being worked on or planned for the future releases, such as interactive CLI, modern Web UI, optional data compression and archivization, plugin support or multiple SDKs, there are at least three additional challenges to overcome:
+
+**Clustering** - the possibility of having a **highly available and fault tolerant** distributed message streaming platform in a production environment, is typically one of the most important aspects when considering the particular tool. While it wouldn't be too difficult to implement the extension (think of a simple proxy/load balancer), allowing to monitor and deliver the data either to the primary or secondary replica (treated as a fallback server) and switch between them when one of  [...]
+
+![image](https://iggy.apache.org/building-message-streaming/leader_elections.jpeg)
+
+**Low-level I/O** - although the current results (based on the benchmarking tool measuring the throughput etc.) are satisfying, we strongly believe that there's still (potentially a huge) room for improvement. We're planning to use **[io_uring](https://unixism.net/loti/what_is_io_uring.html)** for all I/O operations (disk or network related). The brand new, completion based API (available in the recent Linux kernels) shows a significant boost when compared to the existing solutions such  [...]
+
+**Thread-per-core** - in order to avoid the rather costly context switches due to the usage of synchronization mechanism when accessing the data from the different threads (e.g. via Tokio's work stealing mechanism), we're planning to explore (or actually, already doing it, in the previously mentioned repository for clustering sandbox) thread-per-core architecture, once again, delivered as part of **[monoio](https://github.com/bytedance/monoio)** runtime. The overall idea can be described [...]
+
+## Future
+
+**Why building another message streaming then?** A few months ago, I would probably answer - strictly for fun. Yet, after exploring more in-depth the status quo, what we would like to achieve is sort of twofold - on one hand, it'd be great to deliver the general-purpose tool, such as Kafka. On the other hand, why not to try and really push hard the OS and hardware to its limits when speaking of the performance, reliability, throughput and latency, something what e.g. Aeron does? And what [...]
+
+Only the time will tell, but **we're already excited enough to challenge ourselves**. We'd love to hear your thoughts, ideas and **feedback** - anything that will help us in building the best message streaming platform in Rust that you will enjoy using! Feel free to join our [Discord](https://discord.gg/apache-iggy) community and let us know what do you think :)
+
+P.S.
+
+This blog uses [Rust](https://www.getzola.org/).
diff --git a/blogs/2023/12/29/building-message-streaming-in-rust/__next.!KHNpdGUp.blogs.$c$slug.__PAGE__.txt b/blogs/2023/12/29/building-message-streaming-in-rust/__next.!KHNpdGUp.blogs.$c$slug.__PAGE__.txt
new file mode 100644
index 000000000..c1ed5edf4
--- /dev/null
+++ b/blogs/2023/12/29/building-message-streaming-in-rust/__next.!KHNpdGUp.blogs.$c$slug.__PAGE__.txt
@@ -0,0 +1,89 @@
+1:"$Sreact.fragment"
+2:I[94157,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],"Heading"]
+3:I[47873,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],"default"]
+:HL["/img/authors/piotr.png","image"]
+38:X
+3d:X
+3d:C
+0:{"buildId":"CEAllZE6ERPzzxzpa_n8G","data":[{"rsc":["$","$1","c",{"children":[["$","main",null,{"className":"min-h-screen px-6 py-16 md:px-12","children":["$","article",null,{"className":"mx-auto max-w-5xl","children":[["$","header",null,{"className":"mb-10","children":[["$","time",null,{"className":"text-sm font-medium text-fd-muted-foreground","children":"December 29, 2023"}],["$","h1",null,{"className":"mt-3 text-3xl font-extrabold tracking-tight text-fd-foreground md:text-5xl","chil [...]
+42:I[24110,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],"Image"]
+43:I[44324,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],"CodeBlock"]
+46:I[22016,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],""]
+47:I[97367,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"OutletBoundary"]
+48:"$Sreact.suspense"
+4a:I[97367,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"ViewportBoundary"]
+4b:I[97367,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"MetadataBoundary"]
+4c:I[27201,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"IconMark"]
+4d:I[39756,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"default"]
+4e:I[37457,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"default"]
+4:["$","p",null,{"children":["And this is how the ",["$","$L3",null,{"href":"https://iggy.rs","children":"Iggy.rs"}]," was born. The name is an abbreviation of the Italian Greyhound (yes, I own ",["$","$L3",null,{"href":"https://www.instagram.com/fabio.and.cookie/","children":"two of them"}],"), small yet extremely fast dogs, the best in their class."]}]
+5:["$","p",null,{"children":["$","$L42",null,{"sizes":"(max-width: 768px) 100vw, (max-width: 1200px) 70vw, 900px","alt":"image","src":{"src":"/_next/static/media/iggys.26-hz1yki2g5f.jpeg","width":1506,"height":1282,"blurWidth":8,"blurHeight":7,"blurDataURL":"data:image/jpeg;base64,/9j/4AAQSkZJRgABAgAAAQABAAD/wAARCAAHAAgDAREAAhEBAxEB/9sAQwAKBwcIBwYKCAgICwoKCw4YEA4NDQ4dFRYRGCMfJSQiHyIhJis3LyYpNCkhIjBBMTQ5Oz4+PiUuRElDPEg3PT47/9sAQwEKCwsODQ4cEBAcOygiKDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Oz [...]
+6:["$","p",null,{"children":["Therefore, what I want, or actually ",["$","strong",null,{"children":"what we want"}]," (since there's a few of us working on it already) for Iggy.rs to be - the best message streaming platform in its class. ",["$","strong",null,{"children":"Lightweight"}]," in terms of the resource consumption, ",["$","strong",null,{"children":"fast"}]," (and predictable) when it comes to the throughput and latency, and ",["$","strong",null,{"children":"easy to use"}]," whe [...]
+7:["$","$L2",null,{"as":"h2","id":"project","children":"Project"}]
+8:["$","p",null,{"children":["At the very beginning, Iggy had rather limited functionality, and everything was handled using the ",["$","$L3",null,{"href":"https://www.chromium.org/quic/","children":"QUIC"}]," protocol based on ",["$","$L3",null,{"href":"https://github.com/quinn-rs/quinn","children":"Quinn"}]," library. You could connect multiple applications into the server, and start exchanging the messages between them, simply by appending the data to the stream (from the producer per [...]
+9:["$","p",null,{"children":["After spending a few weeks on building the initial version, and then another few weeks on rewriting its core part (yes, prototyping + validation repeated in a continuous loop worked quite well), I managed to implement the persistent streaming server being capable of parallel writes/reads to/from independent streams supporting many distinct apps connected into it. Simply put, one could easily have many applications, and even ",["$","strong",null,{"children":" [...]
+a:["$","p",null,{"children":["On top of this, the support for ",["$","strong",null,{"children":"TCP"}]," and ",["$","strong",null,{"children":"HTTP"}]," protocols have been added. Under the hood, the typical architecture of streams, consisting of the topics being split into the partitions, which eventually operate on a raw file data using so-called segments has been implemented as well."]}]
+b:["$","p",null,{"children":["$","$L42",null,{"sizes":"(max-width: 768px) 100vw, (max-width: 1200px) 70vw, 900px","alt":"image","src":{"src":"/_next/static/media/iggy_sample.1qqv2qiduvn6g.jpeg","width":4064,"height":2408,"blurWidth":8,"blurHeight":5,"blurDataURL":"data:image/jpeg;base64,/9j/4AAQSkZJRgABAgAAAQABAAD/wAARCAAFAAgDAREAAhEBAxEB/9sAQwAKBwcIBwYKCAgICwoKCw4YEA4NDQ4dFRYRGCMfJSQiHyIhJis3LyYpNCkhIjBBMTQ5Oz4+PiUuRElDPEg3PT47/9sAQwEKCwsODQ4cEBAcOygiKDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7 [...]
+c:["$","p",null,{"children":[["$","strong",null,{"children":"It was one of the \"aha\" moments"}],", when reimplementing the parallel access to the data with the usage of underlying synchronization mechanism (",["$","em",null,{"children":"RwLock"}]," etc.), optimized data structures e.g. for dealing with ",["$","$L3",null,{"href":"https://crates.io/crates/bytes","children":"bytes"}],", along with the ",["$","$L3",null,{"href":"https://tokio.rs","children":"Tokio"}]," ",["$","strong",null [...]
+d:["$","p",null,{"children":["I do believe, that somewhere at this point I had realized, that ",["$","strong",null,{"children":"Iggy might actually become something useful"}]," - not just a toy project, to be abandoned after reaching its initial goal (which was sort of already achieved)."]}]
+44:T1068,<svg viewBox="0 0 24 24"><path d="M23.8346 11.7033l-1.0073-.6236a13.7268 13.7268 0 00-.0283-.2936l.8656-.8069a.3483.3483 0 00-.1154-.578l-1.1066-.414a8.4958 8.4958 0 00-.087-.2856l.6904-.9587a.3462.3462 0 00-.2257-.5446l-1.1663-.1894a9.3574 9.3574 0 00-.1407-.2622l.49-1.0761a.3437.3437 0 00-.0274-.3361.3486.3486 0 00-.3006-.154l-1.1845.0416a6.7444 6.7444 0 00-.1873-.2268l.2723-1.153a.3472.3472 0 00-.417-.4172l-1.1532.2724a14.0183 14.0183 0 00-.2278-.1873l.0415-1.1845a.3442.3442  [...]
+f:["$","p",null,{"children":["After running some benchmarks (yes, we have a dedicated app for the ",["$","strong",null,{"children":["$","$L3",null,{"href":"https://github.com/apache/iggy/tree/master/core/bench","children":"benchmarking purposes"}]}],") and seeing the promising numbers (",["$","strong",null,{"children":"range of 2-6 GB/s for both, writes & reads when processing millions of messages"}],"), I eventually decided to give it a long-term shot. Being fully aware that there's sti [...]
+10:["$","p",null,{"children":["$","$L42",null,{"sizes":"(max-width: 768px) 100vw, (max-width: 1200px) 70vw, 900px","alt":"image","src":{"src":"/_next/static/media/iggy_bench.2bpvdoykamynj.jpeg","width":3494,"height":1750,"blurWidth":8,"blurHeight":4,"blurDataURL":"data:image/jpeg;base64,/9j/4AAQSkZJRgABAgAAAQABAAD/wAARCAAEAAgDAREAAhEBAxEB/9sAQwAKBwcIBwYKCAgICwoKCw4YEA4NDQ4dFRYRGCMfJSQiHyIhJis3LyYpNCkhIjBBMTQ5Oz4+PiUuRElDPEg3PT47/9sAQwEKCwsODQ4cEBAcOygiKDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7 [...]
+11:["$","$L2",null,{"as":"h2","id":"team","children":"Team"}]
+12:["$","p",null,{"children":["At the time of writing this post, ",["$","strong",null,{"children":"Iggy consists of around 10 members"}]," contributing to its different parts. Some of us do work on the core streaming server, while the other ones are focused on SDKs for the different programming languages or tooling such as Web UI or CLI - all these projects are equally important, as they add up to the overall ecosystem. But how do you actually gather a team of open source contributors, w [...]
+13:["$","p",null,{"children":["Well, I wish I had an answer to that question - honestly, in case of Iggy I wasn't actually looking for anyone, as I didn't think this could be an interesting project to work on (except for myself). Then how did that happen anyway? There were only 2 things in common - all the people that joined the project were part of the same Discord communities, yet more importantly ",["$","strong",null,{"children":"they all shared the passion for programming"}],", and I [...]
+14:["$","p",null,{"children":["$","$L42",null,{"sizes":"(max-width: 768px) 100vw, (max-width: 1200px) 70vw, 900px","alt":"image","src":{"src":"/_next/static/media/iggy_server.3f5vl0n4vscs5.jpeg","width":4088,"height":1610,"blurWidth":8,"blurHeight":3,"blurDataURL":"data:image/jpeg;base64,/9j/4AAQSkZJRgABAgAAAQABAAD/wAARCAADAAgDAREAAhEBAxEB/9sAQwAKBwcIBwYKCAgICwoKCw4YEA4NDQ4dFRYRGCMfJSQiHyIhJis3LyYpNCkhIjBBMTQ5Oz4+PiUuRElDPEg3PT47/9sAQwEKCwsODQ4cEBAcOygiKDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs [...]
+15:["$","p",null,{"children":"For example, when I asked one guy what was the reason behind building an SDK in Go, the reply was the need of playing with and learning a new language. Why C# SDK? Well, the other guy wanted to dive more into the low-level concepts and decided to squeeze out great performance from the managed runtime. Why build Web UI in Svelte? At work, I mostly use React, and I wanted to learn a new framework - another member said."}]
+16:["$","p",null,{"children":["My point is - as long as you believe in what you're building, and you're consistent about it (it was one of the main reasons why I've been contributing to Iggy every day since its inception, and still doing so), there's a chance that someone out there will notice it and happily join you in your efforts. ",["$","strong",null,{"children":"Lead by example, or whatever you call it."}]]}]
+17:["$","p",null,{"children":["At the same time, we've started receiving the first, ",["$","strong",null,{"children":"external contributions from all around the world"}]," - whether talking about simpler tasks, or the more sophisticated ones, requiring significant amount of time being spent on both, the implementation and the discussions to eventually deliver the code."]}]
+18:["$","p",null,{"children":"It gave us even more confidence, that there are other people (outside our internal bubble), who find this project to be interesting and worth spending their time. And without all these amazing contributors, it'd be much harder (or even impossible) to deliver so many features."}]
+19:["$","$L2",null,{"as":"h2","id":"features","children":"Features"}]
+1a:["$","p",null,{"children":"At first, let me just point out some of the properties and features that are part of the core streaming server:"}]
+1b:["$","ul",null,{"children":["\n",["$","li",null,{"children":[["$","strong",null,{"children":"Highly performant"}],", persistent append-only log for the message streaming"]}],"\n",["$","li",null,{"children":[["$","strong",null,{"children":"Very high throughput"}]," for both writes and reads"]}],"\n",["$","li",null,{"children":[["$","strong",null,{"children":"Low latency and predictable resource usage"}]," thanks to the Rust compiled language (no GC)"]}],"\n",["$","li",null,{"children": [...]
+1c:["$","p",null,{"children":"And as already mentioned, we've been working on SDKs for the multiple programming languages:"}]
+1d:["$","ul",null,{"children":["\n",["$","li",null,{"children":["$","$L3",null,{"href":"https://crates.io/crates/iggy","children":"Rust"}]}],"\n",["$","li",null,{"children":["$","$L3",null,{"href":"https://github.com/iggy-rs/iggy-dotnet-client","children":"C#"}]}],"\n",["$","li",null,{"children":["$","$L3",null,{"href":"https://github.com/iggy-rs/iggy-go-client","children":"Go"}]}],"\n",["$","li",null,{"children":["$","$L3",null,{"href":"https://github.com/iggy-rs/iggy-node-client","chil [...]
+1e:["$","p",null,{"children":["Please keep in mind, though, that some of them e.g. for Rust or C# are more up to date with the recent server changes, while the other ones might still need to do some catching up with the latest features. However, given the amount of available methods on the server's API and the underlying TCP/UDP stack with custom serialization to be implemented from the scratch (except for HTTP transport, that's the easier one), I'd say we're doing quite ok, and I can't  [...]
+1f:["$","p",null,{"children":["But wait, there's even more - what would be a message streaming platform without some additional tooling for managing it? We've also been developing the ",["$","strong",null,{"children":["$","$L3",null,{"href":"https://github.com/apache/iggy/tree/master/cmd","children":"CLI"}]}],"."]}]
+20:["$","p",null,{"children":["$","$L42",null,{"sizes":"(max-width: 768px) 100vw, (max-width: 1200px) 70vw, 900px","alt":"image","src":{"src":"/_next/static/media/iggy_cli.3v4qrbskenyj6.jpeg","width":2942,"height":2162,"blurWidth":8,"blurHeight":6,"blurDataURL":"data:image/jpeg;base64,/9j/4AAQSkZJRgABAgAAAQABAAD/wAARCAAGAAgDAREAAhEBAxEB/9sAQwAKBwcIBwYKCAgICwoKCw4YEA4NDQ4dFRYRGCMfJSQiHyIhJis3LyYpNCkhIjBBMTQ5Oz4+PiUuRElDPEg3PT47/9sAQwEKCwsODQ4cEBAcOygiKDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Oz [...]
+21:["$","p",null,{"children":["As well as modern ",["$","strong",null,{"children":["$","$L3",null,{"href":"https://github.com/iggy-rs/iggy-web-ui","children":"Web UI"}]}]," to make it happen :)"]}]
+22:["$","p",null,{"children":["$","$L42",null,{"sizes":"(max-width: 768px) 100vw, (max-width: 1200px) 70vw, 900px","alt":"image","src":{"src":"/_next/static/media/iggy_web_ui.10pkflbhh3k76.jpeg","width":4060,"height":2408,"blurWidth":8,"blurHeight":5,"blurDataURL":"data:image/jpeg;base64,/9j/4AAQSkZJRgABAgAAAQABAAD/wAARCAAFAAgDAREAAhEBAxEB/9sAQwAKBwcIBwYKCAgICwoKCw4YEA4NDQ4dFRYRGCMfJSQiHyIhJis3LyYpNCkhIjBBMTQ5Oz4+PiUuRElDPEg3PT47/9sAQwEKCwsODQ4cEBAcOygiKDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs [...]
+23:["$","p",null,{"children":["Last but not least, we've got a fully-featured ",["$","$L3",null,{"href":"https://github.com/apache/iggy/actions","children":"CI/CD pipeline"}]," responsible for running all the checks and tests on multiple platforms, and finally producing the release artifacts and ",["$","$L3",null,{"href":"https://hub.docker.com/u/iggyrs","children":"Docker images"}],"."]}]
+24:["$","p",null,{"children":["$","$L42",null,{"sizes":"(max-width: 768px) 100vw, (max-width: 1200px) 70vw, 900px","alt":"image","src":{"src":"/_next/static/media/iggy_ci_cd.0753t43uxufyj.jpeg","width":2000,"height":1000,"blurWidth":8,"blurHeight":4,"blurDataURL":"data:image/jpeg;base64,/9j/4AAQSkZJRgABAgAAAQABAAD/wAARCAAEAAgDAREAAhEBAxEB/9sAQwAKBwcIBwYKCAgICwoKCw4YEA4NDQ4dFRYRGCMfJSQiHyIhJis3LyYpNCkhIjBBMTQ5Oz4+PiUuRElDPEg3PT47/9sAQwEKCwsODQ4cEBAcOygiKDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7 [...]
+25:["$","p",null,{"children":"At first glance, it might look like there's plenty of features already in place, but for anyone who has ever worked with the message streaming infrastructure before, that might be just a tip of an iceberg, thus let's discuss the roadmap."}]
+26:["$","$L2",null,{"as":"h2","id":"roadmap","children":"Roadmap"}]
+27:["$","p",null,{"children":["After gaining some traction a few months ago (mostly due to landing on the GitHub trending page in July), we've talked to some users potentially interested in making Iggy part of their infrastructure (there's even one ",["$","$L3",null,{"href":"https://neferdata.com","children":"company"}]," using it already), and discussed what features would be a good addition to the current stack."]}]
+28:["$","p",null,{"children":["$","$L42",null,{"sizes":"(max-width: 768px) 100vw, (max-width: 1200px) 70vw, 900px","alt":"image","src":{"src":"/_next/static/media/gh_trending.2y416vr29a0r9.jpeg","width":2234,"height":1830,"blurWidth":8,"blurHeight":7,"blurDataURL":"data:image/jpeg;base64,/9j/4AAQSkZJRgABAgAAAQABAAD/wAARCAAHAAgDAREAAhEBAxEB/9sAQwAKBwcIBwYKCAgICwoKCw4YEA4NDQ4dFRYRGCMfJSQiHyIhJis3LyYpNCkhIjBBMTQ5Oz4+PiUuRElDPEg3PT47/9sAQwEKCwsODQ4cEBAcOygiKDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs [...]
+29:["$","p",null,{"children":"Considering what's already there, being worked on or planned for the future releases, such as interactive CLI, modern Web UI, optional data compression and archivization, plugin support or multiple SDKs, there are at least three additional challenges to overcome:"}]
+2a:["$","p",null,{"children":[["$","strong",null,{"children":"Clustering"}]," - the possibility of having a ",["$","strong",null,{"children":"highly available and fault tolerant"}]," distributed message streaming platform in a production environment, is typically one of the most important aspects when considering the particular tool. While it wouldn't be too difficult to implement the extension (think of a simple proxy/load balancer), allowing to monitor and deliver the data either to th [...]
+2b:["$","p",null,{"children":["$","$L42",null,{"sizes":"(max-width: 768px) 100vw, (max-width: 1200px) 70vw, 900px","alt":"image","src":{"src":"/_next/static/media/leader_elections.0q2g_7a47wdz8.jpeg","width":4058,"height":2316,"blurWidth":8,"blurHeight":5,"blurDataURL":"data:image/jpeg;base64,/9j/4AAQSkZJRgABAgAAAQABAAD/wAARCAAFAAgDAREAAhEBAxEB/9sAQwAKBwcIBwYKCAgICwoKCw4YEA4NDQ4dFRYRGCMfJSQiHyIhJis3LyYpNCkhIjBBMTQ5Oz4+PiUuRElDPEg3PT47/9sAQwEKCwsODQ4cEBAcOygiKDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Oz [...]
+2c:["$","p",null,{"children":[["$","strong",null,{"children":"Low-level I/O"}]," - although the current results (based on the benchmarking tool measuring the throughput etc.) are satisfying, we strongly believe that there's still (potentially a huge) room for improvement. We're planning to use ",["$","strong",null,{"children":["$","$L3",null,{"href":"https://unixism.net/loti/what_is_io_uring.html","children":"io_uring"}]}]," for all I/O operations (disk or network related). The brand new [...]
+2d:["$","p",null,{"children":[["$","strong",null,{"children":"Thread-per-core"}]," - in order to avoid the rather costly context switches due to the usage of synchronization mechanism when accessing the data from the different threads (e.g. via Tokio's work stealing mechanism), we're planning to explore (or actually, already doing it, in the previously mentioned repository for clustering sandbox) thread-per-core architecture, once again, delivered as part of ",["$","strong",null,{"childr [...]
+2e:["$","$L2",null,{"as":"h2","id":"future","children":"Future"}]
+2f:["$","p",null,{"children":[["$","strong",null,{"children":"Why building another message streaming then?"}]," A few months ago, I would probably answer - strictly for fun. Yet, after exploring more in-depth the status quo, what we would like to achieve is sort of twofold - on one hand, it'd be great to deliver the general-purpose tool, such as Kafka. On the other hand, why not to try and really push hard the OS and hardware to its limits when speaking of the performance, reliability, t [...]
+30:["$","p",null,{"children":["Only the time will tell, but ",["$","strong",null,{"children":"we're already excited enough to challenge ourselves"}],". We'd love to hear your thoughts, ideas and ",["$","strong",null,{"children":"feedback"}]," - anything that will help us in building the best message streaming platform in Rust that you will enjoy using! Feel free to join our ",["$","$L3",null,{"href":"https://discord.gg/apache-iggy","children":"Discord"}]," community and let us know what  [...]
+31:["$","p",null,{"children":"P.S."}]
+32:["$","p",null,{"children":["This blog uses ",["$","$L3",null,{"href":"https://www.getzola.org/","children":"Rust"}],"."]}]
+33:["$","footer",null,{"className":"mt-16 border-t border-fd-border pt-8","children":["$","$L46",null,{"href":"/blogs","className":"inline-flex items-center gap-2 text-sm font-medium text-fd-primary transition-colors hover:opacity-80","children":"← Back to all posts"}]}]
+34:["$","script","script-0",{"src":"/_next/static/chunks/1k39uva2a578s.js","async":true}]
+35:["$","script","script-1",{"src":"/_next/static/chunks/23ktdyx90z0v3.js","async":true}]
+36:["$","$L47",null,{"children":["$","$48",null,{"name":"Next.MetadataOutlet","children":"$@49"}]}]
+39:["$","$1","h",{"children":[null,["$","$L4a",null,{"children":[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]}],["$","div",null,{"hidden":true,"children":["$","$L4b",null,{"children":["$","$48",null,{"name":"Next.Metadata","children":[["$","title","0",{"children":"Iggy.rs - building message streaming in Rust | Apache Iggy"}],["$","link","1",{"rel":"canonical","href":"https://iggy.apache.org/blogs/2023/12/29/bui [...]
+3b:["$","$1","c",{"children":[null,["$","$L4d",null,{"parallelRouterKey":"children","template":["$","$L4e",null,{}]}]]}]
+3e:["$","$1","c",{"children":[null,["$","$L4d",null,{"parallelRouterKey":"children","template":["$","$L4e",null,{}]}]]}]
+41:true
+4f:I[44324,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],"Pre"]
+45:["$","$L4f",null,{"children":["$","code",null,{"children":[["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"let"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":" polled_messages "}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"="}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E [...]
+49:null
+38:300
+50:["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" None"}]
+51:["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":","}]
+52:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"  strategy"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":":"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" PollingStrategy"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"::"}],["$","span",null,{"style":{"--s [...]
+53:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"  count"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":":"}],["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":" 10"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":","}]]}]
+54:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"  auto_commit"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":":"}],["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":" true"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":","}]]}]
+55:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"})"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":".await?"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":";"}]]}]
+38:C
+40:0
+3a:"$undefined"
+3c:"$undefined"
+3f:"$undefined"
+37:"$undefined"
diff --git a/blogs/2023/12/29/building-message-streaming-in-rust/__next.!KHNpdGUp.txt b/blogs/2023/12/29/building-message-streaming-in-rust/__next.!KHNpdGUp.txt
new file mode 100644
index 000000000..940e917aa
--- /dev/null
+++ b/blogs/2023/12/29/building-message-streaming-in-rust/__next.!KHNpdGUp.txt
@@ -0,0 +1,30 @@
+1:"$Sreact.fragment"
+2:I[22016,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],""]
+3:I[5014,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],"default"]
+4:I[64345,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js"],"HomeLayout"]
+5:I[88760,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js"],"Logo"]
+6:I[15269,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js"],"CommunityDropdown"]
+7:I[15269,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js"],"communityLinks"]
+8:I[29966,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js"],"ASFDropdown"]
+9:I[36330,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js"],"ASFMobileLinks"]
+a:I[39756,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"default"]
+b:I[37457,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"default"]
+14:X
+0:{"buildId":"CEAllZE6ERPzzxzpa_n8G","data":[{"rsc":["$","$1","c",{"children":[[["$","script","script-0",{"src":"/_next/static/chunks/241-fa32f9zay.js","async":true}],["$","script","script-1",{"src":"/_next/static/chunks/3x8y3fmtn6lnc.js","async":true}],["$","script","script-2",{"src":"/_next/static/chunks/250gopd52txql.js","async":true}],["$","script","script-3",{"src":"/_next/static/chunks/0n3fueko2xquo.js","async":true}]],[["$","div",null,{"className":"relative border-b border-white/[ [...]
+c:["$","$L2","/",{"href":"/","className":"transition-colors hover:text-fd-primary","children":"Home"}]
+d:["$","$L2","/docs",{"href":"/docs","className":"transition-colors hover:text-fd-primary","children":"Documentation"}]
+e:["$","$L2","/blogs",{"href":"/blogs","className":"transition-colors hover:text-fd-primary","children":"Blog"}]
+f:["$","$L2","/downloads",{"href":"/downloads","className":"transition-colors hover:text-fd-primary","children":"Downloads"}]
+10:["$","$L2","/community",{"href":"/community","className":"transition-colors hover:text-fd-primary","children":"Community"}]
+11:["$","p",null,{"className":"mt-6 max-w-md text-xs text-fd-muted-foreground","children":["Every page on this site is listed in"," ",["$","a",null,{"href":"/sitemap.xml","className":"underline hover:text-fd-primary","children":"/sitemap.xml"}],", and"," ",["$","a",null,{"href":"/llms.txt","className":"underline hover:text-fd-primary","children":"/llms.txt"}]," ","summarises the documentation."]}]
+12:["$","footer",null,{"className":"border-t border-fd-border bg-fd-background px-6 py-14 md:px-12","children":["$","div",null,{"className":"mx-auto max-w-6xl","children":[["$","div",null,{"className":"grid gap-10 sm:grid-cols-2 lg:grid-cols-4","children":[["$","div","Docs",{"children":[["$","h2",null,{"className":"mb-4 text-sm font-semibold uppercase tracking-wide text-fd-primary","children":"Docs"}],["$","ul",null,{"className":"space-y-2.5 text-sm","children":[["$","li","/docs",{"child [...]
+16:true
+17:["$","$L2",null,{"href":"https://www.apache.org/foundation/contributing.html","target":"_blank","rel":"noopener noreferrer","className":"text-fd-muted-foreground transition-colors hover:text-fd-foreground","children":"Donate"}]
+18:["$","li","https://www.apache.org/foundation/sponsorship.html",{"children":["$","$L2",null,{"href":"https://www.apache.org/foundation/sponsorship.html","target":"_blank","rel":"noopener noreferrer","className":"text-fd-muted-foreground transition-colors hover:text-fd-foreground","children":"Sponsors"}]}]
+19:["$","li","https://www.apache.org/security/",{"children":["$","$L2",null,{"href":"https://www.apache.org/security/","target":"_blank","rel":"noopener noreferrer","className":"text-fd-muted-foreground transition-colors hover:text-fd-foreground","children":"Security"}]}]
+1a:["$","li","https://privacy.apache.org/policies/privacy-policy-public.html",{"children":["$","$L2",null,{"href":"https://privacy.apache.org/policies/privacy-policy-public.html","target":"_blank","rel":"noopener noreferrer","className":"text-fd-muted-foreground transition-colors hover:text-fd-foreground","children":"Privacy"}]}]
+1b:["$","div",null,{"className":"mt-12 border-t border-fd-border pt-8 text-xs leading-relaxed text-fd-muted-foreground/70","children":[["$","p",null,{"className":"mt-4","children":["Copyright © ",2026," The Apache Software Foundation, Licensed under the Apache License, Version 2.0."]}],["$","p",null,{"className":"mt-4","children":"Apache Iggy, Iggy, Apache, and the Apache Iggy logo are trademarks or registered trademarks of The Apache Software Foundation. All other marks mentioned may be [...]
+14:300
+14:C
+15:0
+13:"$undefined"
diff --git a/blogs/2023/12/29/building-message-streaming-in-rust/__next._full.txt b/blogs/2023/12/29/building-message-streaming-in-rust/__next._full.txt
new file mode 100644
index 000000000..f4e5984a5
--- /dev/null
+++ b/blogs/2023/12/29/building-message-streaming-in-rust/__next._full.txt
@@ -0,0 +1,113 @@
+1:"$Sreact.fragment"
+3:I[17751,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"RootProvider"]
+4:I[39756,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"default"]
+5:I[58298,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/3-_96y-evozm0.js"],"default"]
+6:I[37457,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"default"]
+7:I[22016,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],""]
+12:I[68027,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"default",1]
+:HL["/_next/static/chunks/1_55v0vlfews3.css","style"]
+2:T512,{"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://iggy.apache.org/#organization","name":"The Apache Software Foundation","url":"https://www.apache.org/","logo":"https://iggy.apache.org/img/asf_logo.svg","contactPoint":{"@type":"ContactPoint","contactType":"technical support","email":"dev@iggy.apache.org","url":"https://iggy.apache.org/community/"}},{"@type":"WebSite","@id":"https://iggy.apache.org/#website","name":"Apache Iggy","url":"https://iggy.a [...]
+0:{"P":null,"c":["","blogs","2023","12","29","building-message-streaming-in-rust",""],"q":"","i":false,"f":[[["",{"children":["(site)",{"children":["blogs",{"children":[["slug","2023/12/29/building-message-streaming-in-rust","c",[]],{"children":["__PAGE__",{},"$undefined","$undefined",4608]},"$undefined","$undefined",4608]},"$undefined","$undefined",4608]},"$undefined","$undefined",4608]},"$undefined","$undefined",4624],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","hr [...]
+14:I[79520,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],""]
+15:I[69877,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"Matomo"]
+16:I[5014,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],"default"]
+17:I[64345,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js"],"HomeLayout"]
+18:I[88760,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js"],"Logo"]
+19:I[15269,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js"],"CommunityDropdown"]
+1a:I[15269,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js"],"communityLinks"]
+1b:I[29966,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js"],"ASFDropdown"]
+1c:I[36330,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js"],"ASFMobileLinks"]
+25:I[97367,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"OutletBoundary"]
+26:"$Sreact.suspense"
+28:I[97367,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"ViewportBoundary"]
+2a:I[97367,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"MetadataBoundary"]
+8:["$","$L7","/community",{"href":"/community","className":"transition-colors hover:text-fd-primary","children":"Community"}]
+9:["$","p",null,{"className":"mt-6 max-w-md text-xs text-fd-muted-foreground","children":["Every page on this site is listed in"," ",["$","a",null,{"href":"/sitemap.xml","className":"underline hover:text-fd-primary","children":"/sitemap.xml"}],", and"," ",["$","a",null,{"href":"/llms.txt","className":"underline hover:text-fd-primary","children":"/llms.txt"}]," ","summarises the documentation."]}]
+a:["$","$L14",null,{"id":"matomo","strategy":"afterInteractive","children":"var _paq = window._paq = window._paq || [];\n_paq.push([\"setDoNotTrack\", true]);\n_paq.push([\"disableCookies\"]);\n_paq.push(['trackPageView']);\n_paq.push(['enableLinkTracking']);\n(function() {\n  var u=\"https://analytics.apache.org/\";\n  _paq.push(['setTrackerUrl', u+'matomo.php']);\n  _paq.push(['setSiteId', '80']);\n  var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];\n  [...]
+b:["$","$L15",null,{}]
+c:["$","$1","c",{"children":[[["$","script","script-0",{"src":"/_next/static/chunks/241-fa32f9zay.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/_next/static/chunks/3x8y3fmtn6lnc.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/_next/static/chunks/250gopd52txql.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/_next/static/chunks/0n3fueko2xquo.js","async":true,"nonce":"$undefined"}]],[["$","div",null,{"className" [...]
+d:["$","$1","c",{"children":[null,["$","$L4",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}]
+e:["$","$1","c",{"children":[null,["$","$L4",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}]
+f:["$","$1","c",{"children":["$L24",[["$","script","script-0",{"src":"/_next/static/chunks/1k39uva2a578s.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/_next/static/chunks/23ktdyx90z0v3.js","async":true,"nonce":"$undefined"}]],["$","$L25",null,{"children":["$","$26",null,{"name":"Next.MetadataOutlet","children":"$@27"}]}]]}]
+11:["$","$1","h",{"children":[null,["$","$L28",null,{"children":"$L29"}],["$","div",null,{"hidden":true,"children":["$","$L2a",null,{"children":["$","$26",null,{"name":"Next.Metadata","children":"$L2b"}]}]}],null]}]
+13:["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/1_55v0vlfews3.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]
+10:C
+1d:["$","$L7","/",{"href":"/","className":"transition-colors hover:text-fd-primary","children":"Home"}]
+1e:["$","$L7","/docs",{"href":"/docs","className":"transition-colors hover:text-fd-primary","children":"Documentation"}]
+1f:["$","$L7","/blogs",{"href":"/blogs","className":"transition-colors hover:text-fd-primary","children":"Blog"}]
+20:["$","$L7","/downloads",{"href":"/downloads","className":"transition-colors hover:text-fd-primary","children":"Downloads"}]
+21:["$","$L7","/community",{"href":"/community","className":"transition-colors hover:text-fd-primary","children":"Community"}]
+22:["$","p",null,{"className":"mt-6 max-w-md text-xs text-fd-muted-foreground","children":["Every page on this site is listed in"," ",["$","a",null,{"href":"/sitemap.xml","className":"underline hover:text-fd-primary","children":"/sitemap.xml"}],", and"," ",["$","a",null,{"href":"/llms.txt","className":"underline hover:text-fd-primary","children":"/llms.txt"}]," ","summarises the documentation."]}]
+23:["$","footer",null,{"className":"border-t border-fd-border bg-fd-background px-6 py-14 md:px-12","children":["$","div",null,{"className":"mx-auto max-w-6xl","children":[["$","div",null,{"className":"grid gap-10 sm:grid-cols-2 lg:grid-cols-4","children":[["$","div","Docs",{"children":[["$","h2",null,{"className":"mb-4 text-sm font-semibold uppercase tracking-wide text-fd-primary","children":"Docs"}],["$","ul",null,{"className":"space-y-2.5 text-sm","children":[["$","li","/docs",{"child [...]
+2c:["$","li","https://www.apache.org/foundation/contributing.html",{"children":["$","$L7",null,{"href":"https://www.apache.org/foundation/contributing.html","target":"_blank","rel":"noopener noreferrer","className":"text-fd-muted-foreground transition-colors hover:text-fd-foreground","children":"Donate"}]}]
+2d:["$","li","https://www.apache.org/foundation/sponsorship.html",{"children":["$","$L7",null,{"href":"https://www.apache.org/foundation/sponsorship.html","target":"_blank","rel":"noopener noreferrer","className":"text-fd-muted-foreground transition-colors hover:text-fd-foreground","children":"Sponsors"}]}]
+2e:["$","li","https://www.apache.org/security/",{"children":["$","$L7",null,{"href":"https://www.apache.org/security/","target":"_blank","rel":"noopener noreferrer","className":"text-fd-muted-foreground transition-colors hover:text-fd-foreground","children":"Security"}]}]
+2f:["$","li","https://privacy.apache.org/policies/privacy-policy-public.html",{"children":["$","$L7",null,{"href":"https://privacy.apache.org/policies/privacy-policy-public.html","target":"_blank","rel":"noopener noreferrer","className":"text-fd-muted-foreground transition-colors hover:text-fd-foreground","children":"Privacy"}]}]
+30:["$","div",null,{"className":"mt-12 border-t border-fd-border pt-8 text-xs leading-relaxed text-fd-muted-foreground/70","children":[["$","p",null,{"className":"mt-4","children":["Copyright © ",2026," The Apache Software Foundation, Licensed under the Apache License, Version 2.0."]}],["$","p",null,{"className":"mt-4","children":"Apache Iggy, Iggy, Apache, and the Apache Iggy logo are trademarks or registered trademarks of The Apache Software Foundation. All other marks mentioned may be [...]
+31:I[94157,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],"Heading"]
+32:I[47873,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],"default"]
+:HL["/img/authors/piotr.png","image"]
+24:["$","main",null,{"className":"min-h-screen px-6 py-16 md:px-12","children":["$","article",null,{"className":"mx-auto max-w-5xl","children":[["$","header",null,{"className":"mb-10","children":[["$","time",null,{"className":"text-sm font-medium text-fd-muted-foreground","children":"December 29, 2023"}],["$","h1",null,{"className":"mt-3 text-3xl font-extrabold tracking-tight text-fd-foreground md:text-5xl","children":"Iggy.rs - building message streaming in Rust"}],["$","div",null,{"cla [...]
+64:I[24110,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],"Image"]
+65:I[44324,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],"CodeBlock"]
+33:["$","$L32",null,{"href":"https://iggy.rs","children":"Iggy.rs"}]
+34:["$","$L32",null,{"href":"https://www.instagram.com/fabio.and.cookie/","children":"two of them"}]
+35:["$","p",null,{"children":["$","$L64",null,{"sizes":"(max-width: 768px) 100vw, (max-width: 1200px) 70vw, 900px","alt":"image","src":{"src":"/_next/static/media/iggys.26-hz1yki2g5f.jpeg","width":1506,"height":1282,"blurWidth":8,"blurHeight":7,"blurDataURL":"data:image/jpeg;base64,/9j/4AAQSkZJRgABAgAAAQABAAD/wAARCAAHAAgDAREAAhEBAxEB/9sAQwAKBwcIBwYKCAgICwoKCw4YEA4NDQ4dFRYRGCMfJSQiHyIhJis3LyYpNCkhIjBBMTQ5Oz4+PiUuRElDPEg3PT47/9sAQwEKCwsODQ4cEBAcOygiKDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O [...]
+36:["$","p",null,{"children":["Therefore, what I want, or actually ",["$","strong",null,{"children":"what we want"}]," (since there's a few of us working on it already) for Iggy.rs to be - the best message streaming platform in its class. ",["$","strong",null,{"children":"Lightweight"}]," in terms of the resource consumption, ",["$","strong",null,{"children":"fast"}]," (and predictable) when it comes to the throughput and latency, and ",["$","strong",null,{"children":"easy to use"}]," wh [...]
+37:["$","$L31",null,{"as":"h2","id":"project","children":"Project"}]
+38:["$","p",null,{"children":["At the very beginning, Iggy had rather limited functionality, and everything was handled using the ",["$","$L32",null,{"href":"https://www.chromium.org/quic/","children":"QUIC"}]," protocol based on ",["$","$L32",null,{"href":"https://github.com/quinn-rs/quinn","children":"Quinn"}]," library. You could connect multiple applications into the server, and start exchanging the messages between them, simply by appending the data to the stream (from the producer  [...]
+39:["$","p",null,{"children":["After spending a few weeks on building the initial version, and then another few weeks on rewriting its core part (yes, prototyping + validation repeated in a continuous loop worked quite well), I managed to implement the persistent streaming server being capable of parallel writes/reads to/from independent streams supporting many distinct apps connected into it. Simply put, one could easily have many applications, and even ",["$","strong",null,{"children": [...]
+3a:["$","p",null,{"children":["On top of this, the support for ",["$","strong",null,{"children":"TCP"}]," and ",["$","strong",null,{"children":"HTTP"}]," protocols have been added. Under the hood, the typical architecture of streams, consisting of the topics being split into the partitions, which eventually operate on a raw file data using so-called segments has been implemented as well."]}]
+3b:["$","p",null,{"children":["$","$L64",null,{"sizes":"(max-width: 768px) 100vw, (max-width: 1200px) 70vw, 900px","alt":"image","src":{"src":"/_next/static/media/iggy_sample.1qqv2qiduvn6g.jpeg","width":4064,"height":2408,"blurWidth":8,"blurHeight":5,"blurDataURL":"data:image/jpeg;base64,/9j/4AAQSkZJRgABAgAAAQABAAD/wAARCAAFAAgDAREAAhEBAxEB/9sAQwAKBwcIBwYKCAgICwoKCw4YEA4NDQ4dFRYRGCMfJSQiHyIhJis3LyYpNCkhIjBBMTQ5Oz4+PiUuRElDPEg3PT47/9sAQwEKCwsODQ4cEBAcOygiKDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs [...]
+3c:["$","p",null,{"children":[["$","strong",null,{"children":"It was one of the \"aha\" moments"}],", when reimplementing the parallel access to the data with the usage of underlying synchronization mechanism (",["$","em",null,{"children":"RwLock"}]," etc.), optimized data structures e.g. for dealing with ",["$","$L32",null,{"href":"https://crates.io/crates/bytes","children":"bytes"}],", along with the ",["$","$L32",null,{"href":"https://tokio.rs","children":"Tokio"}]," ",["$","strong",n [...]
+3d:["$","p",null,{"children":["I do believe, that somewhere at this point I had realized, that ",["$","strong",null,{"children":"Iggy might actually become something useful"}]," - not just a toy project, to be abandoned after reaching its initial goal (which was sort of already achieved)."]}]
+66:T1068,<svg viewBox="0 0 24 24"><path d="M23.8346 11.7033l-1.0073-.6236a13.7268 13.7268 0 00-.0283-.2936l.8656-.8069a.3483.3483 0 00-.1154-.578l-1.1066-.414a8.4958 8.4958 0 00-.087-.2856l.6904-.9587a.3462.3462 0 00-.2257-.5446l-1.1663-.1894a9.3574 9.3574 0 00-.1407-.2622l.49-1.0761a.3437.3437 0 00-.0274-.3361.3486.3486 0 00-.3006-.154l-1.1845.0416a6.7444 6.7444 0 00-.1873-.2268l.2723-1.153a.3472.3472 0 00-.417-.4172l-1.1532.2724a14.0183 14.0183 0 00-.2278-.1873l.0415-1.1845a.3442.3442  [...]
+3f:["$","p",null,{"children":["After running some benchmarks (yes, we have a dedicated app for the ",["$","strong",null,{"children":["$","$L32",null,{"href":"https://github.com/apache/iggy/tree/master/core/bench","children":"benchmarking purposes"}]}],") and seeing the promising numbers (",["$","strong",null,{"children":"range of 2-6 GB/s for both, writes & reads when processing millions of messages"}],"), I eventually decided to give it a long-term shot. Being fully aware that there's s [...]
+40:["$","p",null,{"children":["$","$L64",null,{"sizes":"(max-width: 768px) 100vw, (max-width: 1200px) 70vw, 900px","alt":"image","src":{"src":"/_next/static/media/iggy_bench.2bpvdoykamynj.jpeg","width":3494,"height":1750,"blurWidth":8,"blurHeight":4,"blurDataURL":"data:image/jpeg;base64,/9j/4AAQSkZJRgABAgAAAQABAAD/wAARCAAEAAgDAREAAhEBAxEB/9sAQwAKBwcIBwYKCAgICwoKCw4YEA4NDQ4dFRYRGCMfJSQiHyIhJis3LyYpNCkhIjBBMTQ5Oz4+PiUuRElDPEg3PT47/9sAQwEKCwsODQ4cEBAcOygiKDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7 [...]
+41:["$","$L31",null,{"as":"h2","id":"team","children":"Team"}]
+42:["$","p",null,{"children":["At the time of writing this post, ",["$","strong",null,{"children":"Iggy consists of around 10 members"}]," contributing to its different parts. Some of us do work on the core streaming server, while the other ones are focused on SDKs for the different programming languages or tooling such as Web UI or CLI - all these projects are equally important, as they add up to the overall ecosystem. But how do you actually gather a team of open source contributors, w [...]
+43:["$","p",null,{"children":["Well, I wish I had an answer to that question - honestly, in case of Iggy I wasn't actually looking for anyone, as I didn't think this could be an interesting project to work on (except for myself). Then how did that happen anyway? There were only 2 things in common - all the people that joined the project were part of the same Discord communities, yet more importantly ",["$","strong",null,{"children":"they all shared the passion for programming"}],", and I [...]
+44:["$","p",null,{"children":["$","$L64",null,{"sizes":"(max-width: 768px) 100vw, (max-width: 1200px) 70vw, 900px","alt":"image","src":{"src":"/_next/static/media/iggy_server.3f5vl0n4vscs5.jpeg","width":4088,"height":1610,"blurWidth":8,"blurHeight":3,"blurDataURL":"data:image/jpeg;base64,/9j/4AAQSkZJRgABAgAAAQABAAD/wAARCAADAAgDAREAAhEBAxEB/9sAQwAKBwcIBwYKCAgICwoKCw4YEA4NDQ4dFRYRGCMfJSQiHyIhJis3LyYpNCkhIjBBMTQ5Oz4+PiUuRElDPEg3PT47/9sAQwEKCwsODQ4cEBAcOygiKDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs [...]
+45:["$","p",null,{"children":"For example, when I asked one guy what was the reason behind building an SDK in Go, the reply was the need of playing with and learning a new language. Why C# SDK? Well, the other guy wanted to dive more into the low-level concepts and decided to squeeze out great performance from the managed runtime. Why build Web UI in Svelte? At work, I mostly use React, and I wanted to learn a new framework - another member said."}]
+46:["$","p",null,{"children":["My point is - as long as you believe in what you're building, and you're consistent about it (it was one of the main reasons why I've been contributing to Iggy every day since its inception, and still doing so), there's a chance that someone out there will notice it and happily join you in your efforts. ",["$","strong",null,{"children":"Lead by example, or whatever you call it."}]]}]
+47:["$","p",null,{"children":["At the same time, we've started receiving the first, ",["$","strong",null,{"children":"external contributions from all around the world"}]," - whether talking about simpler tasks, or the more sophisticated ones, requiring significant amount of time being spent on both, the implementation and the discussions to eventually deliver the code."]}]
+48:["$","p",null,{"children":"It gave us even more confidence, that there are other people (outside our internal bubble), who find this project to be interesting and worth spending their time. And without all these amazing contributors, it'd be much harder (or even impossible) to deliver so many features."}]
+49:["$","$L31",null,{"as":"h2","id":"features","children":"Features"}]
+4a:["$","p",null,{"children":"At first, let me just point out some of the properties and features that are part of the core streaming server:"}]
+4b:["$","ul",null,{"children":["\n",["$","li",null,{"children":[["$","strong",null,{"children":"Highly performant"}],", persistent append-only log for the message streaming"]}],"\n",["$","li",null,{"children":[["$","strong",null,{"children":"Very high throughput"}]," for both writes and reads"]}],"\n",["$","li",null,{"children":[["$","strong",null,{"children":"Low latency and predictable resource usage"}]," thanks to the Rust compiled language (no GC)"]}],"\n",["$","li",null,{"children": [...]
+4c:["$","p",null,{"children":"And as already mentioned, we've been working on SDKs for the multiple programming languages:"}]
+4d:["$","ul",null,{"children":["\n",["$","li",null,{"children":["$","$L32",null,{"href":"https://crates.io/crates/iggy","children":"Rust"}]}],"\n",["$","li",null,{"children":["$","$L32",null,{"href":"https://github.com/iggy-rs/iggy-dotnet-client","children":"C#"}]}],"\n",["$","li",null,{"children":["$","$L32",null,{"href":"https://github.com/iggy-rs/iggy-go-client","children":"Go"}]}],"\n",["$","li",null,{"children":["$","$L32",null,{"href":"https://github.com/iggy-rs/iggy-node-client"," [...]
+4e:["$","p",null,{"children":["Please keep in mind, though, that some of them e.g. for Rust or C# are more up to date with the recent server changes, while the other ones might still need to do some catching up with the latest features. However, given the amount of available methods on the server's API and the underlying TCP/UDP stack with custom serialization to be implemented from the scratch (except for HTTP transport, that's the easier one), I'd say we're doing quite ok, and I can't  [...]
+4f:["$","p",null,{"children":["But wait, there's even more - what would be a message streaming platform without some additional tooling for managing it? We've also been developing the ",["$","strong",null,{"children":["$","$L32",null,{"href":"https://github.com/apache/iggy/tree/master/cmd","children":"CLI"}]}],"."]}]
+50:["$","p",null,{"children":["$","$L64",null,{"sizes":"(max-width: 768px) 100vw, (max-width: 1200px) 70vw, 900px","alt":"image","src":{"src":"/_next/static/media/iggy_cli.3v4qrbskenyj6.jpeg","width":2942,"height":2162,"blurWidth":8,"blurHeight":6,"blurDataURL":"data:image/jpeg;base64,/9j/4AAQSkZJRgABAgAAAQABAAD/wAARCAAGAAgDAREAAhEBAxEB/9sAQwAKBwcIBwYKCAgICwoKCw4YEA4NDQ4dFRYRGCMfJSQiHyIhJis3LyYpNCkhIjBBMTQ5Oz4+PiUuRElDPEg3PT47/9sAQwEKCwsODQ4cEBAcOygiKDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Oz [...]
+51:["$","p",null,{"children":["As well as modern ",["$","strong",null,{"children":["$","$L32",null,{"href":"https://github.com/iggy-rs/iggy-web-ui","children":"Web UI"}]}]," to make it happen :)"]}]
+52:["$","p",null,{"children":["$","$L64",null,{"sizes":"(max-width: 768px) 100vw, (max-width: 1200px) 70vw, 900px","alt":"image","src":{"src":"/_next/static/media/iggy_web_ui.10pkflbhh3k76.jpeg","width":4060,"height":2408,"blurWidth":8,"blurHeight":5,"blurDataURL":"data:image/jpeg;base64,/9j/4AAQSkZJRgABAgAAAQABAAD/wAARCAAFAAgDAREAAhEBAxEB/9sAQwAKBwcIBwYKCAgICwoKCw4YEA4NDQ4dFRYRGCMfJSQiHyIhJis3LyYpNCkhIjBBMTQ5Oz4+PiUuRElDPEg3PT47/9sAQwEKCwsODQ4cEBAcOygiKDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs [...]
+53:["$","p",null,{"children":["Last but not least, we've got a fully-featured ",["$","$L32",null,{"href":"https://github.com/apache/iggy/actions","children":"CI/CD pipeline"}]," responsible for running all the checks and tests on multiple platforms, and finally producing the release artifacts and ",["$","$L32",null,{"href":"https://hub.docker.com/u/iggyrs","children":"Docker images"}],"."]}]
+54:["$","p",null,{"children":["$","$L64",null,{"sizes":"(max-width: 768px) 100vw, (max-width: 1200px) 70vw, 900px","alt":"image","src":{"src":"/_next/static/media/iggy_ci_cd.0753t43uxufyj.jpeg","width":2000,"height":1000,"blurWidth":8,"blurHeight":4,"blurDataURL":"data:image/jpeg;base64,/9j/4AAQSkZJRgABAgAAAQABAAD/wAARCAAEAAgDAREAAhEBAxEB/9sAQwAKBwcIBwYKCAgICwoKCw4YEA4NDQ4dFRYRGCMfJSQiHyIhJis3LyYpNCkhIjBBMTQ5Oz4+PiUuRElDPEg3PT47/9sAQwEKCwsODQ4cEBAcOygiKDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7 [...]
+55:["$","p",null,{"children":"At first glance, it might look like there's plenty of features already in place, but for anyone who has ever worked with the message streaming infrastructure before, that might be just a tip of an iceberg, thus let's discuss the roadmap."}]
+56:["$","$L31",null,{"as":"h2","id":"roadmap","children":"Roadmap"}]
+57:["$","p",null,{"children":["After gaining some traction a few months ago (mostly due to landing on the GitHub trending page in July), we've talked to some users potentially interested in making Iggy part of their infrastructure (there's even one ",["$","$L32",null,{"href":"https://neferdata.com","children":"company"}]," using it already), and discussed what features would be a good addition to the current stack."]}]
+58:["$","p",null,{"children":["$","$L64",null,{"sizes":"(max-width: 768px) 100vw, (max-width: 1200px) 70vw, 900px","alt":"image","src":{"src":"/_next/static/media/gh_trending.2y416vr29a0r9.jpeg","width":2234,"height":1830,"blurWidth":8,"blurHeight":7,"blurDataURL":"data:image/jpeg;base64,/9j/4AAQSkZJRgABAgAAAQABAAD/wAARCAAHAAgDAREAAhEBAxEB/9sAQwAKBwcIBwYKCAgICwoKCw4YEA4NDQ4dFRYRGCMfJSQiHyIhJis3LyYpNCkhIjBBMTQ5Oz4+PiUuRElDPEg3PT47/9sAQwEKCwsODQ4cEBAcOygiKDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs [...]
+59:["$","p",null,{"children":"Considering what's already there, being worked on or planned for the future releases, such as interactive CLI, modern Web UI, optional data compression and archivization, plugin support or multiple SDKs, there are at least three additional challenges to overcome:"}]
+5a:["$","p",null,{"children":[["$","strong",null,{"children":"Clustering"}]," - the possibility of having a ",["$","strong",null,{"children":"highly available and fault tolerant"}]," distributed message streaming platform in a production environment, is typically one of the most important aspects when considering the particular tool. While it wouldn't be too difficult to implement the extension (think of a simple proxy/load balancer), allowing to monitor and deliver the data either to th [...]
+5b:["$","p",null,{"children":["$","$L64",null,{"sizes":"(max-width: 768px) 100vw, (max-width: 1200px) 70vw, 900px","alt":"image","src":{"src":"/_next/static/media/leader_elections.0q2g_7a47wdz8.jpeg","width":4058,"height":2316,"blurWidth":8,"blurHeight":5,"blurDataURL":"data:image/jpeg;base64,/9j/4AAQSkZJRgABAgAAAQABAAD/wAARCAAFAAgDAREAAhEBAxEB/9sAQwAKBwcIBwYKCAgICwoKCw4YEA4NDQ4dFRYRGCMfJSQiHyIhJis3LyYpNCkhIjBBMTQ5Oz4+PiUuRElDPEg3PT47/9sAQwEKCwsODQ4cEBAcOygiKDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Oz [...]
+5c:["$","p",null,{"children":[["$","strong",null,{"children":"Low-level I/O"}]," - although the current results (based on the benchmarking tool measuring the throughput etc.) are satisfying, we strongly believe that there's still (potentially a huge) room for improvement. We're planning to use ",["$","strong",null,{"children":["$","$L32",null,{"href":"https://unixism.net/loti/what_is_io_uring.html","children":"io_uring"}]}]," for all I/O operations (disk or network related). The brand ne [...]
+5d:["$","p",null,{"children":[["$","strong",null,{"children":"Thread-per-core"}]," - in order to avoid the rather costly context switches due to the usage of synchronization mechanism when accessing the data from the different threads (e.g. via Tokio's work stealing mechanism), we're planning to explore (or actually, already doing it, in the previously mentioned repository for clustering sandbox) thread-per-core architecture, once again, delivered as part of ",["$","strong",null,{"childr [...]
+5e:["$","$L31",null,{"as":"h2","id":"future","children":"Future"}]
+5f:["$","p",null,{"children":[["$","strong",null,{"children":"Why building another message streaming then?"}]," A few months ago, I would probably answer - strictly for fun. Yet, after exploring more in-depth the status quo, what we would like to achieve is sort of twofold - on one hand, it'd be great to deliver the general-purpose tool, such as Kafka. On the other hand, why not to try and really push hard the OS and hardware to its limits when speaking of the performance, reliability, t [...]
+60:["$","p",null,{"children":["Only the time will tell, but ",["$","strong",null,{"children":"we're already excited enough to challenge ourselves"}],". We'd love to hear your thoughts, ideas and ",["$","strong",null,{"children":"feedback"}]," - anything that will help us in building the best message streaming platform in Rust that you will enjoy using! Feel free to join our ",["$","$L32",null,{"href":"https://discord.gg/apache-iggy","children":"Discord"}]," community and let us know what [...]
+61:["$","p",null,{"children":"P.S."}]
+62:["$","p",null,{"children":["This blog uses ",["$","$L32",null,{"href":"https://www.getzola.org/","children":"Rust"}],"."]}]
+63:["$","footer",null,{"className":"mt-16 border-t border-fd-border pt-8","children":["$","$L7",null,{"href":"/blogs","className":"inline-flex items-center gap-2 text-sm font-medium text-fd-primary transition-colors hover:opacity-80","children":"← Back to all posts"}]}]
+68:I[44324,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],"Pre"]
+67:["$","$L68",null,{"children":["$","code",null,{"children":[["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"let"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":" polled_messages "}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"="}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E [...]
+69:["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" None"}]
+6a:["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":","}]
+6b:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"  strategy"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":":"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" PollingStrategy"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"::"}],["$","span",null,{"style":{"--s [...]
+6c:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"  count"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":":"}],["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":" 10"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":","}]]}]
+6d:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"  auto_commit"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":":"}],["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":" true"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":","}]]}]
+6e:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"})"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":".await?"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":";"}]]}]
+29:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]
+6f:I[27201,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"IconMark"]
+27:null
+2b:[["$","title","0",{"children":"Iggy.rs - building message streaming in Rust | Apache Iggy"}],["$","link","1",{"rel":"canonical","href":"https://iggy.apache.org/blogs/2023/12/29/building-message-streaming-in-rust/"}],["$","link","2",{"rel":"alternate","type":"text/markdown","href":"https://iggy.apache.org/blogs/2023/12/29/building-message-streaming-in-rust.md"}],["$","meta","3",{"property":"og:title","content":"Iggy.rs - building message streaming in Rust | Apache Iggy"}],["$","meta"," [...]
diff --git a/blogs/2023/12/29/building-message-streaming-in-rust/__next._index.txt b/blogs/2023/12/29/building-message-streaming-in-rust/__next._index.txt
new file mode 100644
index 000000000..42b058136
--- /dev/null
+++ b/blogs/2023/12/29/building-message-streaming-in-rust/__next._index.txt
@@ -0,0 +1,20 @@
+1:"$Sreact.fragment"
+3:I[17751,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"RootProvider"]
+4:I[39756,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"default"]
+5:I[58298,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/3-_96y-evozm0.js"],"default"]
+6:I[37457,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"default"]
+7:I[22016,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],""]
+:HL["/_next/static/chunks/1_55v0vlfews3.css","style"]
+2:T512,{"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://iggy.apache.org/#organization","name":"The Apache Software Foundation","url":"https://www.apache.org/","logo":"https://iggy.apache.org/img/asf_logo.svg","contactPoint":{"@type":"ContactPoint","contactType":"technical support","email":"dev@iggy.apache.org","url":"https://iggy.apache.org/community/"}},{"@type":"WebSite","@id":"https://iggy.apache.org/#website","name":"Apache Iggy","url":"https://iggy.a [...]
+0:{"buildId":"CEAllZE6ERPzzxzpa_n8G","data":[{"rsc":["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/1_55v0vlfews3.css","precedence":"next"}],["$","script","script-0",{"src":"/_next/static/chunks/05hk4ely-lns6.js","async":true}],["$","script","script-1",{"src":"/_next/static/chunks/2tvyahbdutabx.js","async":true}]],["$","html",null,{"lang":"en","suppressHydrationWarning":true,"children":["$","body",null,{"className":"flex min-h-screen flex-col  [...]
+10:I[79520,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],""]
+11:I[69877,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"Matomo"]
+8:["$","a",null,{"href":"/sitemap.xml","className":"underline hover:text-fd-primary","children":"/sitemap.xml"}]
+9:["$","a",null,{"href":"/llms.txt","className":"underline hover:text-fd-primary","children":"/llms.txt"}]
+a:["$","$L10",null,{"id":"matomo","strategy":"afterInteractive","children":"var _paq = window._paq = window._paq || [];\n_paq.push([\"setDoNotTrack\", true]);\n_paq.push([\"disableCookies\"]);\n_paq.push(['trackPageView']);\n_paq.push(['enableLinkTracking']);\n(function() {\n  var u=\"https://analytics.apache.org/\";\n  _paq.push(['setTrackerUrl', u+'matomo.php']);\n  _paq.push(['setSiteId', '80']);\n  var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];\n  [...]
+b:["$","$L11",null,{}]
+d:300
+f:true
+d:C
+e:0
+c:"$undefined"
diff --git a/blogs/2023/12/29/building-message-streaming-in-rust/__next._tree.txt b/blogs/2023/12/29/building-message-streaming-in-rust/__next._tree.txt
new file mode 100644
index 000000000..cf2626b71
--- /dev/null
+++ b/blogs/2023/12/29/building-message-streaming-in-rust/__next._tree.txt
@@ -0,0 +1,3 @@
+:HL["/_next/static/chunks/1_55v0vlfews3.css","style"]
+:HL["/img/authors/piotr.png","image"]
+0:{"tree":{"name":"","param":null,"prefetchHints":4112,"slots":{"children":{"name":"(site)","param":null,"prefetchHints":4096,"slots":{"children":{"name":"blogs","param":null,"prefetchHints":4160,"slots":{"children":{"name":"slug","param":{"type":"c","key":"2023/12/29/building-message-streaming-in-rust","siblings":[]},"prefetchHints":4192,"slots":{"children":{"name":"__PAGE__","param":null,"prefetchHints":4256,"slots":null}}}}}}}}},"staleTime":300,"buildId":"CEAllZE6ERPzzxzpa_n8G"}
diff --git a/blogs/2023/12/29/building-message-streaming-in-rust/index.html b/blogs/2023/12/29/building-message-streaming-in-rust/index.html
new file mode 100644
index 000000000..211ee32fd
--- /dev/null
+++ b/blogs/2023/12/29/building-message-streaming-in-rust/index.html
@@ -0,0 +1,96 @@
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" href="/img/authors/piotr.png" as="image"/><link rel="stylesheet" href="/_next/static/chunks/1_55v0vlfews3.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/1qt6pht_u0de1.js"/><script src="/_next/static/chunks/1iye7dwhtxrnu.js" async=""></script><script src="/_next/static/chunks/1t7fq8 [...]
+<p>Over half a year ago (in April, to be exact), I eventually decided to learn Rust for good. My previous attempt during the <a href="https://github.com/spetz/advent-of-code-2022" rel="noreferrer noopener" target="_blank">2022 AoC</a> had failed rather quickly, after a few days of completing the exercises - I finally realized that <strong>I needed a real project to work on</strong>. For the last few years, I&#x27;ve been dealing with the different kinds of distributed systems (mostly usi [...]
+<p>After a few months of trying to figure out (or just staying in the limbo I guess), what would be the best project to work on, I decided to build the <strong>message streaming platform</strong> (keep in mind that streaming is <a href="https://blog.iron.io/message-queue-vs-streaming/" rel="noreferrer noopener" target="_blank">not the same</a> as regular message broker). The other reason (besides getting to know Rust) was to <strong>truly understand the internals of the messaging systems [...]
+<p>And this is how the <a href="https://iggy.rs" rel="noreferrer noopener" target="_blank">Iggy.rs</a> was born. The name is an abbreviation of the Italian Greyhound (yes, I own <a href="https://www.instagram.com/fabio.and.cookie/" rel="noreferrer noopener" target="_blank">two of them</a>), small yet extremely fast dogs, the best in their class.</p>
+<p><img alt="image" loading="lazy" width="1506" height="1282" decoding="async" data-nimg="1" class="rounded-lg" style="color:transparent" src="/_next/static/media/iggys.26-hz1yki2g5f.jpeg"/></p>
+<p>Therefore, what I want, or actually <strong>what we want</strong> (since there&#x27;s a few of us working on it already) for Iggy.rs to be - the best message streaming platform in its class. <strong>Lightweight</strong> in terms of the resource consumption, <strong>fast</strong> (and predictable) when it comes to the throughput and latency, and <strong>easy to use</strong> when speaking of its API, SDK and configuration of the project.</p>
+<h2 id="project" class="group/heading flex scroll-m-28 flex-row items-center gap-1"><a data-card="" href="#project">Project</a><button aria-label="Copy Anchor Link" class="inline-flex items-center justify-center rounded-md text-sm font-medium duration-100 disabled:pointer-events-none disabled:opacity-50 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-fd-ring hover:bg-fd-accent hover:text-fd-accent-foreground p-1 [&amp;_svg]:size-4 not-prose shrink-0 text-fd-muted-foreg [...]
+<p>At the very beginning, Iggy had rather limited functionality, and everything was handled using the <a href="https://www.chromium.org/quic/" rel="noreferrer noopener" target="_blank">QUIC</a> protocol based on <a href="https://github.com/quinn-rs/quinn" rel="noreferrer noopener" target="_blank">Quinn</a> library. You could connect multiple applications into the server, and start exchanging the messages between them, simply by appending the data to the stream (from the producer perspect [...]
+<p>After spending a few weeks on building the initial version, and then another few weeks on rewriting its core part (yes, prototyping + validation repeated in a continuous loop worked quite well), I managed to implement the persistent streaming server being capable of parallel writes/reads to/from independent streams supporting many distinct apps connected into it. Simply put, one could easily have many applications, and even <strong>thousands of the streams</strong> (depending on how d [...]
+<p>On top of this, the support for <strong>TCP</strong> and <strong>HTTP</strong> protocols have been added. Under the hood, the typical architecture of streams, consisting of the topics being split into the partitions, which eventually operate on a raw file data using so-called segments has been implemented as well.</p>
+<p><img alt="image" loading="lazy" width="4064" height="2408" decoding="async" data-nimg="1" class="rounded-lg" style="color:transparent" src="/_next/static/media/iggy_sample.1qqv2qiduvn6g.jpeg"/></p>
+<p><strong>It was one of the &quot;aha&quot; moments</strong>, when reimplementing the parallel access to the data with the usage of underlying synchronization mechanism (<em>RwLock</em> etc.), optimized data structures e.g. for dealing with <a href="https://crates.io/crates/bytes" rel="noreferrer noopener" target="_blank">bytes</a>, along with the <a href="https://tokio.rs" rel="noreferrer noopener" target="_blank">Tokio</a> <strong>work stealing</strong> approach, yielded the great imp [...]
+<p>I do believe, that somewhere at this point I had realized, that <strong>Iggy might actually become something useful</strong> - not just a toy project, to be abandoned after reaching its initial goal (which was sort of already achieved).</p>
+<figure dir="ltr" class="my-4 bg-fd-card rounded-xl shiki relative border shadow-sm not-prose overflow-hidden text-sm shiki shiki-themes github-light github-dark" style="--shiki-light:#24292e;--shiki-dark:#e1e4e8;--shiki-light-bg:#fff;--shiki-dark-bg:#24292e" tabindex="-1"><div class="empty:hidden absolute top-3 right-2 z-2 backdrop-blur-lg rounded-lg text-fd-muted-foreground"><button type="button" class="inline-flex items-center justify-center rounded-md text-sm font-medium transition-c [...]
+<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">  stream_id</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">:</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> Identifier</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">::</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">numeric</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF" [...]
+<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">  topic_id</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">:</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> Identifier</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">::</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">named</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">&q [...]
+<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">  consumer</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">:</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> Consumer</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">::</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">group</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">Iden [...]
+<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">  partition_id</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">:</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> None</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
+<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">  strategy</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">:</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> PollingStrategy</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">::</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">offset</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8 [...]
+<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">  count</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">:</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> 10</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
+<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">  auto_commit</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">:</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> true</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
+<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">})</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">.await?</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">;</span></span></code></pre></div></figure>
+<p>After running some benchmarks (yes, we have a dedicated app for the <strong><a href="https://github.com/apache/iggy/tree/master/core/bench" rel="noreferrer noopener" target="_blank">benchmarking purposes</a></strong>) and seeing the promising numbers (<strong>range of 2-6 GB/s for both, writes &amp; reads when processing millions of messages</strong>), I eventually decided to give it a long-term shot. Being fully aware that there&#x27;s still lots to be done (speaking of many months,  [...]
+<p><img alt="image" loading="lazy" width="3494" height="1750" decoding="async" data-nimg="1" class="rounded-lg" style="color:transparent" src="/_next/static/media/iggy_bench.2bpvdoykamynj.jpeg"/></p>
+<h2 id="team" class="group/heading flex scroll-m-28 flex-row items-center gap-1"><a data-card="" href="#team">Team</a><button aria-label="Copy Anchor Link" class="inline-flex items-center justify-center rounded-md text-sm font-medium duration-100 disabled:pointer-events-none disabled:opacity-50 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-fd-ring hover:bg-fd-accent hover:text-fd-accent-foreground p-1 [&amp;_svg]:size-4 not-prose shrink-0 text-fd-muted-foreground opa [...]
+<p>At the time of writing this post, <strong>Iggy consists of around 10 members</strong> contributing to its different parts. Some of us do work on the core streaming server, while the other ones are focused on SDKs for the different programming languages or tooling such as Web UI or CLI - all these projects are equally important, as they add up to the overall ecosystem. But how do you actually gather a team of open source contributors, who are willing to spend their free time working on [...]
+<p>Well, I wish I had an answer to that question - honestly, in case of Iggy I wasn&#x27;t actually looking for anyone, as I didn&#x27;t think this could be an interesting project to work on (except for myself). Then how did that happen anyway? There were only 2 things in common - all the people that joined the project were part of the same Discord communities, yet more importantly <strong>they all shared the passion for programming</strong>, and I&#x27;m not talking about Rust language  [...]
+<p><img alt="image" loading="lazy" width="4088" height="1610" decoding="async" data-nimg="1" class="rounded-lg" style="color:transparent" src="/_next/static/media/iggy_server.3f5vl0n4vscs5.jpeg"/></p>
+<p>For example, when I asked one guy what was the reason behind building an SDK in Go, the reply was the need of playing with and learning a new language. Why C# SDK? Well, the other guy wanted to dive more into the low-level concepts and decided to squeeze out great performance from the managed runtime. Why build Web UI in Svelte? At work, I mostly use React, and I wanted to learn a new framework - another member said.</p>
+<p>My point is - as long as you believe in what you&#x27;re building, and you&#x27;re consistent about it (it was one of the main reasons why I&#x27;ve been contributing to Iggy every day since its inception, and still doing so), there&#x27;s a chance that someone out there will notice it and happily join you in your efforts. <strong>Lead by example, or whatever you call it.</strong></p>
+<p>At the same time, we&#x27;ve started receiving the first, <strong>external contributions from all around the world</strong> - whether talking about simpler tasks, or the more sophisticated ones, requiring significant amount of time being spent on both, the implementation and the discussions to eventually deliver the code.</p>
+<p>It gave us even more confidence, that there are other people (outside our internal bubble), who find this project to be interesting and worth spending their time. And without all these amazing contributors, it&#x27;d be much harder (or even impossible) to deliver so many features.</p>
+<h2 id="features" class="group/heading flex scroll-m-28 flex-row items-center gap-1"><a data-card="" href="#features">Features</a><button aria-label="Copy Anchor Link" class="inline-flex items-center justify-center rounded-md text-sm font-medium duration-100 disabled:pointer-events-none disabled:opacity-50 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-fd-ring hover:bg-fd-accent hover:text-fd-accent-foreground p-1 [&amp;_svg]:size-4 not-prose shrink-0 text-fd-muted-fo [...]
+<p>At first, let me just point out some of the properties and features that are part of the core streaming server:</p>
+<ul>
+<li><strong>Highly performant</strong>, persistent append-only log for the message streaming</li>
+<li><strong>Very high throughput</strong> for both writes and reads</li>
+<li><strong>Low latency and predictable resource usage</strong> thanks to the Rust compiled language (no GC)</li>
+<li><strong>Users authentication and authorization</strong> with granular permissions and PAT (Personal Access Tokens)</li>
+<li>Support for multiple streams, topics and partitions</li>
+<li>Support for <strong>multiple transport protocols</strong> (QUIC, TCP, HTTP)</li>
+<li>Fully operational RESTful API which can be optionally enabled</li>
+<li>Available client SDK in multiple languages</li>
+<li><strong>Works directly with the binary data</strong> (lack of enforced schema and serialization/deserialization)</li>
+<li>Configurable server features (e.g. caching, segment size, data flush interval, transport protocols etc.)</li>
+<li>Possibility of storing the <strong>consumer offsets</strong> on the server</li>
+<li>Multiple ways of polling the messages:<!-- -->
+<ul>
+<li>By offset (using the indexes)</li>
+<li>By timestamp (using the time indexes)</li>
+<li>First/Last N messages</li>
+<li>Next N messages for the specific consumer</li>
+</ul>
+</li>
+<li>Possibility of <strong>auto committing the offset</strong> (e.g. to achieve <em>at-most-once</em> delivery)</li>
+<li><strong>Consumer groups</strong> providing the message ordering and horizontal scaling across the connected clients</li>
+<li><strong>Message expiry</strong> with auto deletion based on the configurable <strong>retention policy</strong></li>
+<li>Additional features such as <strong>server side message deduplication</strong></li>
+<li><strong>TLS</strong> support for all transport protocols (TCP, QUIC, HTTPS)</li>
+<li>Optional server-side as well as client-side <strong>data encryption</strong> using AES-256-GCM</li>
+<li>Optional metadata support in the form of <strong>message headers</strong></li>
+<li>Built-in <strong>CLI</strong> to manage the streaming server</li>
+<li>Built-in <strong>benchmarking app</strong> to test the performance</li>
+<li><strong>Single binary deployment</strong> (no external dependencies)</li>
+<li>Running as a single node (no cluster support yet)</li>
+</ul>
+<p>And as already mentioned, we&#x27;ve been working on SDKs for the multiple programming languages:</p>
+<ul>
+<li><a href="https://crates.io/crates/iggy" rel="noreferrer noopener" target="_blank">Rust</a></li>
+<li><a href="https://github.com/iggy-rs/iggy-dotnet-client" rel="noreferrer noopener" target="_blank">C#</a></li>
+<li><a href="https://github.com/iggy-rs/iggy-go-client" rel="noreferrer noopener" target="_blank">Go</a></li>
+<li><a href="https://github.com/iggy-rs/iggy-node-client" rel="noreferrer noopener" target="_blank">Node</a></li>
+<li><a href="https://github.com/iggy-rs/iggy-python-client" rel="noreferrer noopener" target="_blank">Python</a></li>
+<li><a href="https://github.com/iggy-rs/iggy-java-client" rel="noreferrer noopener" target="_blank">Java</a></li>
+</ul>
+<p>Please keep in mind, though, that some of them e.g. for Rust or C# are more up to date with the recent server changes, while the other ones might still need to do some catching up with the latest features. However, given the amount of available methods on the server&#x27;s API and the underlying TCP/UDP stack with custom serialization to be implemented from the scratch (except for HTTP transport, that&#x27;s the easier one), I&#x27;d say we&#x27;re doing quite ok, and I can&#x27;t str [...]
+<p>But wait, there&#x27;s even more - what would be a message streaming platform without some additional tooling for managing it? We&#x27;ve also been developing the <strong><a href="https://github.com/apache/iggy/tree/master/cmd" rel="noreferrer noopener" target="_blank">CLI</a></strong>.</p>
+<p><img alt="image" loading="lazy" width="2942" height="2162" decoding="async" data-nimg="1" class="rounded-lg" style="color:transparent" src="/_next/static/media/iggy_cli.3v4qrbskenyj6.jpeg"/></p>
+<p>As well as modern <strong><a href="https://github.com/iggy-rs/iggy-web-ui" rel="noreferrer noopener" target="_blank">Web UI</a></strong> to make it happen :)</p>
+<p><img alt="image" loading="lazy" width="4060" height="2408" decoding="async" data-nimg="1" class="rounded-lg" style="color:transparent" src="/_next/static/media/iggy_web_ui.10pkflbhh3k76.jpeg"/></p>
+<p>Last but not least, we&#x27;ve got a fully-featured <a href="https://github.com/apache/iggy/actions" rel="noreferrer noopener" target="_blank">CI/CD pipeline</a> responsible for running all the checks and tests on multiple platforms, and finally producing the release artifacts and <a href="https://hub.docker.com/u/iggyrs" rel="noreferrer noopener" target="_blank">Docker images</a>.</p>
+<p><img alt="image" loading="lazy" width="2000" height="1000" decoding="async" data-nimg="1" class="rounded-lg" style="color:transparent" src="/_next/static/media/iggy_ci_cd.0753t43uxufyj.jpeg"/></p>
+<p>At first glance, it might look like there&#x27;s plenty of features already in place, but for anyone who has ever worked with the message streaming infrastructure before, that might be just a tip of an iceberg, thus let&#x27;s discuss the roadmap.</p>
+<h2 id="roadmap" class="group/heading flex scroll-m-28 flex-row items-center gap-1"><a data-card="" href="#roadmap">Roadmap</a><button aria-label="Copy Anchor Link" class="inline-flex items-center justify-center rounded-md text-sm font-medium duration-100 disabled:pointer-events-none disabled:opacity-50 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-fd-ring hover:bg-fd-accent hover:text-fd-accent-foreground p-1 [&amp;_svg]:size-4 not-prose shrink-0 text-fd-muted-foreg [...]
+<p>After gaining some traction a few months ago (mostly due to landing on the GitHub trending page in July), we&#x27;ve talked to some users potentially interested in making Iggy part of their infrastructure (there&#x27;s even one <a href="https://neferdata.com" rel="noreferrer noopener" target="_blank">company</a> using it already), and discussed what features would be a good addition to the current stack.</p>
+<p><img alt="image" loading="lazy" width="2234" height="1830" decoding="async" data-nimg="1" class="rounded-lg" style="color:transparent" src="/_next/static/media/gh_trending.2y416vr29a0r9.jpeg"/></p>
+<p>Considering what&#x27;s already there, being worked on or planned for the future releases, such as interactive CLI, modern Web UI, optional data compression and archivization, plugin support or multiple SDKs, there are at least three additional challenges to overcome:</p>
+<p><strong>Clustering</strong> - the possibility of having a <strong>highly available and fault tolerant</strong> distributed message streaming platform in a production environment, is typically one of the most important aspects when considering the particular tool. While it wouldn&#x27;t be too difficult to implement the extension (think of a simple proxy/load balancer), allowing to monitor and deliver the data either to the primary or secondary replica (treated as a fallback server) an [...]
+<p><img alt="image" loading="lazy" width="4058" height="2316" decoding="async" data-nimg="1" class="rounded-lg" style="color:transparent" src="/_next/static/media/leader_elections.0q2g_7a47wdz8.jpeg"/></p>
+<p><strong>Low-level I/O</strong> - although the current results (based on the benchmarking tool measuring the throughput etc.) are satisfying, we strongly believe that there&#x27;s still (potentially a huge) room for improvement. We&#x27;re planning to use <strong><a href="https://unixism.net/loti/what_is_io_uring.html" rel="noreferrer noopener" target="_blank">io_uring</a></strong> for all I/O operations (disk or network related). The brand new, completion based API (available in the r [...]
+<p><strong>Thread-per-core</strong> - in order to avoid the rather costly context switches due to the usage of synchronization mechanism when accessing the data from the different threads (e.g. via Tokio&#x27;s work stealing mechanism), we&#x27;re planning to explore (or actually, already doing it, in the previously mentioned repository for clustering sandbox) thread-per-core architecture, once again, delivered as part of <strong><a href="https://github.com/bytedance/monoio" rel="norefer [...]
+<h2 id="future" class="group/heading flex scroll-m-28 flex-row items-center gap-1"><a data-card="" href="#future">Future</a><button aria-label="Copy Anchor Link" class="inline-flex items-center justify-center rounded-md text-sm font-medium duration-100 disabled:pointer-events-none disabled:opacity-50 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-fd-ring hover:bg-fd-accent hover:text-fd-accent-foreground p-1 [&amp;_svg]:size-4 not-prose shrink-0 text-fd-muted-foregrou [...]
+<p><strong>Why building another message streaming then?</strong> A few months ago, I would probably answer - strictly for fun. Yet, after exploring more in-depth the status quo, what we would like to achieve is sort of twofold - on one hand, it&#x27;d be great to deliver the general-purpose tool, such as Kafka. On the other hand, why not to try and really push hard the OS and hardware to its limits when speaking of the performance, reliability, throughput and latency, something what e.g. [...]
+<p>Only the time will tell, but <strong>we&#x27;re already excited enough to challenge ourselves</strong>. We&#x27;d love to hear your thoughts, ideas and <strong>feedback</strong> - anything that will help us in building the best message streaming platform in Rust that you will enjoy using! Feel free to join our <a href="https://discord.gg/apache-iggy" rel="noreferrer noopener" target="_blank">Discord</a> community and let us know what do you think :)</p>
+<p>P.S.</p>
+<p>This blog uses <a href="https://www.getzola.org/" rel="noreferrer noopener" target="_blank">Rust</a>.</p></div><footer class="mt-16 border-t border-fd-border pt-8"><a class="inline-flex items-center gap-2 text-sm font-medium text-fd-primary transition-colors hover:opacity-80" href="/blogs/">← Back to all posts</a></footer></article></main><!--$--><!--/$--><footer class="border-t border-fd-border bg-fd-background px-6 py-14 md:px-12"><div class="mx-auto max-w-6xl"><div class="grid gap- [...]
\ No newline at end of file
diff --git a/blogs/2023/12/29/building-message-streaming-in-rust/index.txt b/blogs/2023/12/29/building-message-streaming-in-rust/index.txt
new file mode 100644
index 000000000..f4e5984a5
--- /dev/null
+++ b/blogs/2023/12/29/building-message-streaming-in-rust/index.txt
@@ -0,0 +1,113 @@
+1:"$Sreact.fragment"
+3:I[17751,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"RootProvider"]
+4:I[39756,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"default"]
+5:I[58298,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/3-_96y-evozm0.js"],"default"]
+6:I[37457,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"default"]
+7:I[22016,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],""]
+12:I[68027,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"default",1]
+:HL["/_next/static/chunks/1_55v0vlfews3.css","style"]
+2:T512,{"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://iggy.apache.org/#organization","name":"The Apache Software Foundation","url":"https://www.apache.org/","logo":"https://iggy.apache.org/img/asf_logo.svg","contactPoint":{"@type":"ContactPoint","contactType":"technical support","email":"dev@iggy.apache.org","url":"https://iggy.apache.org/community/"}},{"@type":"WebSite","@id":"https://iggy.apache.org/#website","name":"Apache Iggy","url":"https://iggy.a [...]
+0:{"P":null,"c":["","blogs","2023","12","29","building-message-streaming-in-rust",""],"q":"","i":false,"f":[[["",{"children":["(site)",{"children":["blogs",{"children":[["slug","2023/12/29/building-message-streaming-in-rust","c",[]],{"children":["__PAGE__",{},"$undefined","$undefined",4608]},"$undefined","$undefined",4608]},"$undefined","$undefined",4608]},"$undefined","$undefined",4608]},"$undefined","$undefined",4624],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","hr [...]
+14:I[79520,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],""]
+15:I[69877,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"Matomo"]
+16:I[5014,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],"default"]
+17:I[64345,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js"],"HomeLayout"]
+18:I[88760,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js"],"Logo"]
+19:I[15269,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js"],"CommunityDropdown"]
+1a:I[15269,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js"],"communityLinks"]
+1b:I[29966,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js"],"ASFDropdown"]
+1c:I[36330,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js"],"ASFMobileLinks"]
+25:I[97367,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"OutletBoundary"]
+26:"$Sreact.suspense"
+28:I[97367,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"ViewportBoundary"]
+2a:I[97367,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"MetadataBoundary"]
+8:["$","$L7","/community",{"href":"/community","className":"transition-colors hover:text-fd-primary","children":"Community"}]
+9:["$","p",null,{"className":"mt-6 max-w-md text-xs text-fd-muted-foreground","children":["Every page on this site is listed in"," ",["$","a",null,{"href":"/sitemap.xml","className":"underline hover:text-fd-primary","children":"/sitemap.xml"}],", and"," ",["$","a",null,{"href":"/llms.txt","className":"underline hover:text-fd-primary","children":"/llms.txt"}]," ","summarises the documentation."]}]
+a:["$","$L14",null,{"id":"matomo","strategy":"afterInteractive","children":"var _paq = window._paq = window._paq || [];\n_paq.push([\"setDoNotTrack\", true]);\n_paq.push([\"disableCookies\"]);\n_paq.push(['trackPageView']);\n_paq.push(['enableLinkTracking']);\n(function() {\n  var u=\"https://analytics.apache.org/\";\n  _paq.push(['setTrackerUrl', u+'matomo.php']);\n  _paq.push(['setSiteId', '80']);\n  var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];\n  [...]
+b:["$","$L15",null,{}]
+c:["$","$1","c",{"children":[[["$","script","script-0",{"src":"/_next/static/chunks/241-fa32f9zay.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/_next/static/chunks/3x8y3fmtn6lnc.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/_next/static/chunks/250gopd52txql.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/_next/static/chunks/0n3fueko2xquo.js","async":true,"nonce":"$undefined"}]],[["$","div",null,{"className" [...]
+d:["$","$1","c",{"children":[null,["$","$L4",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}]
+e:["$","$1","c",{"children":[null,["$","$L4",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}]
+f:["$","$1","c",{"children":["$L24",[["$","script","script-0",{"src":"/_next/static/chunks/1k39uva2a578s.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/_next/static/chunks/23ktdyx90z0v3.js","async":true,"nonce":"$undefined"}]],["$","$L25",null,{"children":["$","$26",null,{"name":"Next.MetadataOutlet","children":"$@27"}]}]]}]
+11:["$","$1","h",{"children":[null,["$","$L28",null,{"children":"$L29"}],["$","div",null,{"hidden":true,"children":["$","$L2a",null,{"children":["$","$26",null,{"name":"Next.Metadata","children":"$L2b"}]}]}],null]}]
+13:["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/1_55v0vlfews3.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]
+10:C
+1d:["$","$L7","/",{"href":"/","className":"transition-colors hover:text-fd-primary","children":"Home"}]
+1e:["$","$L7","/docs",{"href":"/docs","className":"transition-colors hover:text-fd-primary","children":"Documentation"}]
+1f:["$","$L7","/blogs",{"href":"/blogs","className":"transition-colors hover:text-fd-primary","children":"Blog"}]
+20:["$","$L7","/downloads",{"href":"/downloads","className":"transition-colors hover:text-fd-primary","children":"Downloads"}]
+21:["$","$L7","/community",{"href":"/community","className":"transition-colors hover:text-fd-primary","children":"Community"}]
+22:["$","p",null,{"className":"mt-6 max-w-md text-xs text-fd-muted-foreground","children":["Every page on this site is listed in"," ",["$","a",null,{"href":"/sitemap.xml","className":"underline hover:text-fd-primary","children":"/sitemap.xml"}],", and"," ",["$","a",null,{"href":"/llms.txt","className":"underline hover:text-fd-primary","children":"/llms.txt"}]," ","summarises the documentation."]}]
+23:["$","footer",null,{"className":"border-t border-fd-border bg-fd-background px-6 py-14 md:px-12","children":["$","div",null,{"className":"mx-auto max-w-6xl","children":[["$","div",null,{"className":"grid gap-10 sm:grid-cols-2 lg:grid-cols-4","children":[["$","div","Docs",{"children":[["$","h2",null,{"className":"mb-4 text-sm font-semibold uppercase tracking-wide text-fd-primary","children":"Docs"}],["$","ul",null,{"className":"space-y-2.5 text-sm","children":[["$","li","/docs",{"child [...]
+2c:["$","li","https://www.apache.org/foundation/contributing.html",{"children":["$","$L7",null,{"href":"https://www.apache.org/foundation/contributing.html","target":"_blank","rel":"noopener noreferrer","className":"text-fd-muted-foreground transition-colors hover:text-fd-foreground","children":"Donate"}]}]
+2d:["$","li","https://www.apache.org/foundation/sponsorship.html",{"children":["$","$L7",null,{"href":"https://www.apache.org/foundation/sponsorship.html","target":"_blank","rel":"noopener noreferrer","className":"text-fd-muted-foreground transition-colors hover:text-fd-foreground","children":"Sponsors"}]}]
+2e:["$","li","https://www.apache.org/security/",{"children":["$","$L7",null,{"href":"https://www.apache.org/security/","target":"_blank","rel":"noopener noreferrer","className":"text-fd-muted-foreground transition-colors hover:text-fd-foreground","children":"Security"}]}]
+2f:["$","li","https://privacy.apache.org/policies/privacy-policy-public.html",{"children":["$","$L7",null,{"href":"https://privacy.apache.org/policies/privacy-policy-public.html","target":"_blank","rel":"noopener noreferrer","className":"text-fd-muted-foreground transition-colors hover:text-fd-foreground","children":"Privacy"}]}]
+30:["$","div",null,{"className":"mt-12 border-t border-fd-border pt-8 text-xs leading-relaxed text-fd-muted-foreground/70","children":[["$","p",null,{"className":"mt-4","children":["Copyright © ",2026," The Apache Software Foundation, Licensed under the Apache License, Version 2.0."]}],["$","p",null,{"className":"mt-4","children":"Apache Iggy, Iggy, Apache, and the Apache Iggy logo are trademarks or registered trademarks of The Apache Software Foundation. All other marks mentioned may be [...]
+31:I[94157,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],"Heading"]
+32:I[47873,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],"default"]
+:HL["/img/authors/piotr.png","image"]
+24:["$","main",null,{"className":"min-h-screen px-6 py-16 md:px-12","children":["$","article",null,{"className":"mx-auto max-w-5xl","children":[["$","header",null,{"className":"mb-10","children":[["$","time",null,{"className":"text-sm font-medium text-fd-muted-foreground","children":"December 29, 2023"}],["$","h1",null,{"className":"mt-3 text-3xl font-extrabold tracking-tight text-fd-foreground md:text-5xl","children":"Iggy.rs - building message streaming in Rust"}],["$","div",null,{"cla [...]
+64:I[24110,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],"Image"]
+65:I[44324,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],"CodeBlock"]
+33:["$","$L32",null,{"href":"https://iggy.rs","children":"Iggy.rs"}]
+34:["$","$L32",null,{"href":"https://www.instagram.com/fabio.and.cookie/","children":"two of them"}]
+35:["$","p",null,{"children":["$","$L64",null,{"sizes":"(max-width: 768px) 100vw, (max-width: 1200px) 70vw, 900px","alt":"image","src":{"src":"/_next/static/media/iggys.26-hz1yki2g5f.jpeg","width":1506,"height":1282,"blurWidth":8,"blurHeight":7,"blurDataURL":"data:image/jpeg;base64,/9j/4AAQSkZJRgABAgAAAQABAAD/wAARCAAHAAgDAREAAhEBAxEB/9sAQwAKBwcIBwYKCAgICwoKCw4YEA4NDQ4dFRYRGCMfJSQiHyIhJis3LyYpNCkhIjBBMTQ5Oz4+PiUuRElDPEg3PT47/9sAQwEKCwsODQ4cEBAcOygiKDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O [...]
+36:["$","p",null,{"children":["Therefore, what I want, or actually ",["$","strong",null,{"children":"what we want"}]," (since there's a few of us working on it already) for Iggy.rs to be - the best message streaming platform in its class. ",["$","strong",null,{"children":"Lightweight"}]," in terms of the resource consumption, ",["$","strong",null,{"children":"fast"}]," (and predictable) when it comes to the throughput and latency, and ",["$","strong",null,{"children":"easy to use"}]," wh [...]
+37:["$","$L31",null,{"as":"h2","id":"project","children":"Project"}]
+38:["$","p",null,{"children":["At the very beginning, Iggy had rather limited functionality, and everything was handled using the ",["$","$L32",null,{"href":"https://www.chromium.org/quic/","children":"QUIC"}]," protocol based on ",["$","$L32",null,{"href":"https://github.com/quinn-rs/quinn","children":"Quinn"}]," library. You could connect multiple applications into the server, and start exchanging the messages between them, simply by appending the data to the stream (from the producer  [...]
+39:["$","p",null,{"children":["After spending a few weeks on building the initial version, and then another few weeks on rewriting its core part (yes, prototyping + validation repeated in a continuous loop worked quite well), I managed to implement the persistent streaming server being capable of parallel writes/reads to/from independent streams supporting many distinct apps connected into it. Simply put, one could easily have many applications, and even ",["$","strong",null,{"children": [...]
+3a:["$","p",null,{"children":["On top of this, the support for ",["$","strong",null,{"children":"TCP"}]," and ",["$","strong",null,{"children":"HTTP"}]," protocols have been added. Under the hood, the typical architecture of streams, consisting of the topics being split into the partitions, which eventually operate on a raw file data using so-called segments has been implemented as well."]}]
+3b:["$","p",null,{"children":["$","$L64",null,{"sizes":"(max-width: 768px) 100vw, (max-width: 1200px) 70vw, 900px","alt":"image","src":{"src":"/_next/static/media/iggy_sample.1qqv2qiduvn6g.jpeg","width":4064,"height":2408,"blurWidth":8,"blurHeight":5,"blurDataURL":"data:image/jpeg;base64,/9j/4AAQSkZJRgABAgAAAQABAAD/wAARCAAFAAgDAREAAhEBAxEB/9sAQwAKBwcIBwYKCAgICwoKCw4YEA4NDQ4dFRYRGCMfJSQiHyIhJis3LyYpNCkhIjBBMTQ5Oz4+PiUuRElDPEg3PT47/9sAQwEKCwsODQ4cEBAcOygiKDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs [...]
+3c:["$","p",null,{"children":[["$","strong",null,{"children":"It was one of the \"aha\" moments"}],", when reimplementing the parallel access to the data with the usage of underlying synchronization mechanism (",["$","em",null,{"children":"RwLock"}]," etc.), optimized data structures e.g. for dealing with ",["$","$L32",null,{"href":"https://crates.io/crates/bytes","children":"bytes"}],", along with the ",["$","$L32",null,{"href":"https://tokio.rs","children":"Tokio"}]," ",["$","strong",n [...]
+3d:["$","p",null,{"children":["I do believe, that somewhere at this point I had realized, that ",["$","strong",null,{"children":"Iggy might actually become something useful"}]," - not just a toy project, to be abandoned after reaching its initial goal (which was sort of already achieved)."]}]
+66:T1068,<svg viewBox="0 0 24 24"><path d="M23.8346 11.7033l-1.0073-.6236a13.7268 13.7268 0 00-.0283-.2936l.8656-.8069a.3483.3483 0 00-.1154-.578l-1.1066-.414a8.4958 8.4958 0 00-.087-.2856l.6904-.9587a.3462.3462 0 00-.2257-.5446l-1.1663-.1894a9.3574 9.3574 0 00-.1407-.2622l.49-1.0761a.3437.3437 0 00-.0274-.3361.3486.3486 0 00-.3006-.154l-1.1845.0416a6.7444 6.7444 0 00-.1873-.2268l.2723-1.153a.3472.3472 0 00-.417-.4172l-1.1532.2724a14.0183 14.0183 0 00-.2278-.1873l.0415-1.1845a.3442.3442  [...]
+3f:["$","p",null,{"children":["After running some benchmarks (yes, we have a dedicated app for the ",["$","strong",null,{"children":["$","$L32",null,{"href":"https://github.com/apache/iggy/tree/master/core/bench","children":"benchmarking purposes"}]}],") and seeing the promising numbers (",["$","strong",null,{"children":"range of 2-6 GB/s for both, writes & reads when processing millions of messages"}],"), I eventually decided to give it a long-term shot. Being fully aware that there's s [...]
+40:["$","p",null,{"children":["$","$L64",null,{"sizes":"(max-width: 768px) 100vw, (max-width: 1200px) 70vw, 900px","alt":"image","src":{"src":"/_next/static/media/iggy_bench.2bpvdoykamynj.jpeg","width":3494,"height":1750,"blurWidth":8,"blurHeight":4,"blurDataURL":"data:image/jpeg;base64,/9j/4AAQSkZJRgABAgAAAQABAAD/wAARCAAEAAgDAREAAhEBAxEB/9sAQwAKBwcIBwYKCAgICwoKCw4YEA4NDQ4dFRYRGCMfJSQiHyIhJis3LyYpNCkhIjBBMTQ5Oz4+PiUuRElDPEg3PT47/9sAQwEKCwsODQ4cEBAcOygiKDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7 [...]
+41:["$","$L31",null,{"as":"h2","id":"team","children":"Team"}]
+42:["$","p",null,{"children":["At the time of writing this post, ",["$","strong",null,{"children":"Iggy consists of around 10 members"}]," contributing to its different parts. Some of us do work on the core streaming server, while the other ones are focused on SDKs for the different programming languages or tooling such as Web UI or CLI - all these projects are equally important, as they add up to the overall ecosystem. But how do you actually gather a team of open source contributors, w [...]
+43:["$","p",null,{"children":["Well, I wish I had an answer to that question - honestly, in case of Iggy I wasn't actually looking for anyone, as I didn't think this could be an interesting project to work on (except for myself). Then how did that happen anyway? There were only 2 things in common - all the people that joined the project were part of the same Discord communities, yet more importantly ",["$","strong",null,{"children":"they all shared the passion for programming"}],", and I [...]
+44:["$","p",null,{"children":["$","$L64",null,{"sizes":"(max-width: 768px) 100vw, (max-width: 1200px) 70vw, 900px","alt":"image","src":{"src":"/_next/static/media/iggy_server.3f5vl0n4vscs5.jpeg","width":4088,"height":1610,"blurWidth":8,"blurHeight":3,"blurDataURL":"data:image/jpeg;base64,/9j/4AAQSkZJRgABAgAAAQABAAD/wAARCAADAAgDAREAAhEBAxEB/9sAQwAKBwcIBwYKCAgICwoKCw4YEA4NDQ4dFRYRGCMfJSQiHyIhJis3LyYpNCkhIjBBMTQ5Oz4+PiUuRElDPEg3PT47/9sAQwEKCwsODQ4cEBAcOygiKDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs [...]
+45:["$","p",null,{"children":"For example, when I asked one guy what was the reason behind building an SDK in Go, the reply was the need of playing with and learning a new language. Why C# SDK? Well, the other guy wanted to dive more into the low-level concepts and decided to squeeze out great performance from the managed runtime. Why build Web UI in Svelte? At work, I mostly use React, and I wanted to learn a new framework - another member said."}]
+46:["$","p",null,{"children":["My point is - as long as you believe in what you're building, and you're consistent about it (it was one of the main reasons why I've been contributing to Iggy every day since its inception, and still doing so), there's a chance that someone out there will notice it and happily join you in your efforts. ",["$","strong",null,{"children":"Lead by example, or whatever you call it."}]]}]
+47:["$","p",null,{"children":["At the same time, we've started receiving the first, ",["$","strong",null,{"children":"external contributions from all around the world"}]," - whether talking about simpler tasks, or the more sophisticated ones, requiring significant amount of time being spent on both, the implementation and the discussions to eventually deliver the code."]}]
+48:["$","p",null,{"children":"It gave us even more confidence, that there are other people (outside our internal bubble), who find this project to be interesting and worth spending their time. And without all these amazing contributors, it'd be much harder (or even impossible) to deliver so many features."}]
+49:["$","$L31",null,{"as":"h2","id":"features","children":"Features"}]
+4a:["$","p",null,{"children":"At first, let me just point out some of the properties and features that are part of the core streaming server:"}]
+4b:["$","ul",null,{"children":["\n",["$","li",null,{"children":[["$","strong",null,{"children":"Highly performant"}],", persistent append-only log for the message streaming"]}],"\n",["$","li",null,{"children":[["$","strong",null,{"children":"Very high throughput"}]," for both writes and reads"]}],"\n",["$","li",null,{"children":[["$","strong",null,{"children":"Low latency and predictable resource usage"}]," thanks to the Rust compiled language (no GC)"]}],"\n",["$","li",null,{"children": [...]
+4c:["$","p",null,{"children":"And as already mentioned, we've been working on SDKs for the multiple programming languages:"}]
+4d:["$","ul",null,{"children":["\n",["$","li",null,{"children":["$","$L32",null,{"href":"https://crates.io/crates/iggy","children":"Rust"}]}],"\n",["$","li",null,{"children":["$","$L32",null,{"href":"https://github.com/iggy-rs/iggy-dotnet-client","children":"C#"}]}],"\n",["$","li",null,{"children":["$","$L32",null,{"href":"https://github.com/iggy-rs/iggy-go-client","children":"Go"}]}],"\n",["$","li",null,{"children":["$","$L32",null,{"href":"https://github.com/iggy-rs/iggy-node-client"," [...]
+4e:["$","p",null,{"children":["Please keep in mind, though, that some of them e.g. for Rust or C# are more up to date with the recent server changes, while the other ones might still need to do some catching up with the latest features. However, given the amount of available methods on the server's API and the underlying TCP/UDP stack with custom serialization to be implemented from the scratch (except for HTTP transport, that's the easier one), I'd say we're doing quite ok, and I can't  [...]
+4f:["$","p",null,{"children":["But wait, there's even more - what would be a message streaming platform without some additional tooling for managing it? We've also been developing the ",["$","strong",null,{"children":["$","$L32",null,{"href":"https://github.com/apache/iggy/tree/master/cmd","children":"CLI"}]}],"."]}]
+50:["$","p",null,{"children":["$","$L64",null,{"sizes":"(max-width: 768px) 100vw, (max-width: 1200px) 70vw, 900px","alt":"image","src":{"src":"/_next/static/media/iggy_cli.3v4qrbskenyj6.jpeg","width":2942,"height":2162,"blurWidth":8,"blurHeight":6,"blurDataURL":"data:image/jpeg;base64,/9j/4AAQSkZJRgABAgAAAQABAAD/wAARCAAGAAgDAREAAhEBAxEB/9sAQwAKBwcIBwYKCAgICwoKCw4YEA4NDQ4dFRYRGCMfJSQiHyIhJis3LyYpNCkhIjBBMTQ5Oz4+PiUuRElDPEg3PT47/9sAQwEKCwsODQ4cEBAcOygiKDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Oz [...]
+51:["$","p",null,{"children":["As well as modern ",["$","strong",null,{"children":["$","$L32",null,{"href":"https://github.com/iggy-rs/iggy-web-ui","children":"Web UI"}]}]," to make it happen :)"]}]
+52:["$","p",null,{"children":["$","$L64",null,{"sizes":"(max-width: 768px) 100vw, (max-width: 1200px) 70vw, 900px","alt":"image","src":{"src":"/_next/static/media/iggy_web_ui.10pkflbhh3k76.jpeg","width":4060,"height":2408,"blurWidth":8,"blurHeight":5,"blurDataURL":"data:image/jpeg;base64,/9j/4AAQSkZJRgABAgAAAQABAAD/wAARCAAFAAgDAREAAhEBAxEB/9sAQwAKBwcIBwYKCAgICwoKCw4YEA4NDQ4dFRYRGCMfJSQiHyIhJis3LyYpNCkhIjBBMTQ5Oz4+PiUuRElDPEg3PT47/9sAQwEKCwsODQ4cEBAcOygiKDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs [...]
+53:["$","p",null,{"children":["Last but not least, we've got a fully-featured ",["$","$L32",null,{"href":"https://github.com/apache/iggy/actions","children":"CI/CD pipeline"}]," responsible for running all the checks and tests on multiple platforms, and finally producing the release artifacts and ",["$","$L32",null,{"href":"https://hub.docker.com/u/iggyrs","children":"Docker images"}],"."]}]
+54:["$","p",null,{"children":["$","$L64",null,{"sizes":"(max-width: 768px) 100vw, (max-width: 1200px) 70vw, 900px","alt":"image","src":{"src":"/_next/static/media/iggy_ci_cd.0753t43uxufyj.jpeg","width":2000,"height":1000,"blurWidth":8,"blurHeight":4,"blurDataURL":"data:image/jpeg;base64,/9j/4AAQSkZJRgABAgAAAQABAAD/wAARCAAEAAgDAREAAhEBAxEB/9sAQwAKBwcIBwYKCAgICwoKCw4YEA4NDQ4dFRYRGCMfJSQiHyIhJis3LyYpNCkhIjBBMTQ5Oz4+PiUuRElDPEg3PT47/9sAQwEKCwsODQ4cEBAcOygiKDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7 [...]
+55:["$","p",null,{"children":"At first glance, it might look like there's plenty of features already in place, but for anyone who has ever worked with the message streaming infrastructure before, that might be just a tip of an iceberg, thus let's discuss the roadmap."}]
+56:["$","$L31",null,{"as":"h2","id":"roadmap","children":"Roadmap"}]
+57:["$","p",null,{"children":["After gaining some traction a few months ago (mostly due to landing on the GitHub trending page in July), we've talked to some users potentially interested in making Iggy part of their infrastructure (there's even one ",["$","$L32",null,{"href":"https://neferdata.com","children":"company"}]," using it already), and discussed what features would be a good addition to the current stack."]}]
+58:["$","p",null,{"children":["$","$L64",null,{"sizes":"(max-width: 768px) 100vw, (max-width: 1200px) 70vw, 900px","alt":"image","src":{"src":"/_next/static/media/gh_trending.2y416vr29a0r9.jpeg","width":2234,"height":1830,"blurWidth":8,"blurHeight":7,"blurDataURL":"data:image/jpeg;base64,/9j/4AAQSkZJRgABAgAAAQABAAD/wAARCAAHAAgDAREAAhEBAxEB/9sAQwAKBwcIBwYKCAgICwoKCw4YEA4NDQ4dFRYRGCMfJSQiHyIhJis3LyYpNCkhIjBBMTQ5Oz4+PiUuRElDPEg3PT47/9sAQwEKCwsODQ4cEBAcOygiKDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs [...]
+59:["$","p",null,{"children":"Considering what's already there, being worked on or planned for the future releases, such as interactive CLI, modern Web UI, optional data compression and archivization, plugin support or multiple SDKs, there are at least three additional challenges to overcome:"}]
+5a:["$","p",null,{"children":[["$","strong",null,{"children":"Clustering"}]," - the possibility of having a ",["$","strong",null,{"children":"highly available and fault tolerant"}]," distributed message streaming platform in a production environment, is typically one of the most important aspects when considering the particular tool. While it wouldn't be too difficult to implement the extension (think of a simple proxy/load balancer), allowing to monitor and deliver the data either to th [...]
+5b:["$","p",null,{"children":["$","$L64",null,{"sizes":"(max-width: 768px) 100vw, (max-width: 1200px) 70vw, 900px","alt":"image","src":{"src":"/_next/static/media/leader_elections.0q2g_7a47wdz8.jpeg","width":4058,"height":2316,"blurWidth":8,"blurHeight":5,"blurDataURL":"data:image/jpeg;base64,/9j/4AAQSkZJRgABAgAAAQABAAD/wAARCAAFAAgDAREAAhEBAxEB/9sAQwAKBwcIBwYKCAgICwoKCw4YEA4NDQ4dFRYRGCMfJSQiHyIhJis3LyYpNCkhIjBBMTQ5Oz4+PiUuRElDPEg3PT47/9sAQwEKCwsODQ4cEBAcOygiKDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Oz [...]
+5c:["$","p",null,{"children":[["$","strong",null,{"children":"Low-level I/O"}]," - although the current results (based on the benchmarking tool measuring the throughput etc.) are satisfying, we strongly believe that there's still (potentially a huge) room for improvement. We're planning to use ",["$","strong",null,{"children":["$","$L32",null,{"href":"https://unixism.net/loti/what_is_io_uring.html","children":"io_uring"}]}]," for all I/O operations (disk or network related). The brand ne [...]
+5d:["$","p",null,{"children":[["$","strong",null,{"children":"Thread-per-core"}]," - in order to avoid the rather costly context switches due to the usage of synchronization mechanism when accessing the data from the different threads (e.g. via Tokio's work stealing mechanism), we're planning to explore (or actually, already doing it, in the previously mentioned repository for clustering sandbox) thread-per-core architecture, once again, delivered as part of ",["$","strong",null,{"childr [...]
+5e:["$","$L31",null,{"as":"h2","id":"future","children":"Future"}]
+5f:["$","p",null,{"children":[["$","strong",null,{"children":"Why building another message streaming then?"}]," A few months ago, I would probably answer - strictly for fun. Yet, after exploring more in-depth the status quo, what we would like to achieve is sort of twofold - on one hand, it'd be great to deliver the general-purpose tool, such as Kafka. On the other hand, why not to try and really push hard the OS and hardware to its limits when speaking of the performance, reliability, t [...]
+60:["$","p",null,{"children":["Only the time will tell, but ",["$","strong",null,{"children":"we're already excited enough to challenge ourselves"}],". We'd love to hear your thoughts, ideas and ",["$","strong",null,{"children":"feedback"}]," - anything that will help us in building the best message streaming platform in Rust that you will enjoy using! Feel free to join our ",["$","$L32",null,{"href":"https://discord.gg/apache-iggy","children":"Discord"}]," community and let us know what [...]
+61:["$","p",null,{"children":"P.S."}]
+62:["$","p",null,{"children":["This blog uses ",["$","$L32",null,{"href":"https://www.getzola.org/","children":"Rust"}],"."]}]
+63:["$","footer",null,{"className":"mt-16 border-t border-fd-border pt-8","children":["$","$L7",null,{"href":"/blogs","className":"inline-flex items-center gap-2 text-sm font-medium text-fd-primary transition-colors hover:opacity-80","children":"← Back to all posts"}]}]
+68:I[44324,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],"Pre"]
+67:["$","$L68",null,{"children":["$","code",null,{"children":[["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"let"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":" polled_messages "}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"="}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E [...]
+69:["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" None"}]
+6a:["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":","}]
+6b:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"  strategy"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":":"}],["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":" PollingStrategy"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":"::"}],["$","span",null,{"style":{"--s [...]
+6c:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"  count"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":":"}],["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":" 10"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":","}]]}]
+6d:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"  auto_commit"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":":"}],["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":" true"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":","}]]}]
+6e:["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":"})"}],["$","span",null,{"style":{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},"children":".await?"}],["$","span",null,{"style":{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},"children":";"}]]}]
+29:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]
+6f:I[27201,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"IconMark"]
+27:null
+2b:[["$","title","0",{"children":"Iggy.rs - building message streaming in Rust | Apache Iggy"}],["$","link","1",{"rel":"canonical","href":"https://iggy.apache.org/blogs/2023/12/29/building-message-streaming-in-rust/"}],["$","link","2",{"rel":"alternate","type":"text/markdown","href":"https://iggy.apache.org/blogs/2023/12/29/building-message-streaming-in-rust.md"}],["$","meta","3",{"property":"og:title","content":"Iggy.rs - building message streaming in Rust | Apache Iggy"}],["$","meta"," [...]
diff --git a/blogs/2024/05/29/one-year-of-building-the-message-streaming.md b/blogs/2024/05/29/one-year-of-building-the-message-streaming.md
new file mode 100644
index 000000000..9a051b710
--- /dev/null
+++ b/blogs/2024/05/29/one-year-of-building-the-message-streaming.md
@@ -0,0 +1,130 @@
+# Iggy.rs — one year of building the message streaming
+
+Published: 2024-05-29
+
+Rendered page: https://iggy.apache.org/blogs/2024/05/29/one-year-of-building-the-message-streaming/
+
+Source: https://github.com/apache/iggy-website/blob/main/content/blog/one-year-of-building-the-message-streaming.mdx
+
+## Throwback
+
+**It's been a little over a year**, since the [Iggy.rs](https://iggy.rs) was born. The initial idea of building a side project (as a way of studying Rust) — an infrastructure for the message streaming (think of Kafka, RedPanda, Aeron etc.) — eventually turned out to be something much bigger that I could've ever imagined. In the [previous post](https://blog.iggy.rs/posts/building-message-streaming-in-rust/) (from almost half a year ago), I did describe what's [Iggy.rs](https://github.com/ [...]
+
+
+This **particular article** turned out to be a sort of **catalyst**, as it received a really nice traction on [Reddit](https://www.reddit.com/r/rust/comments/18tgubd/iggyrs_building_message_streaming_in_rust/), and was also mentioned on the main site of [Hacker News](https://news.ycombinator.com/item?id=38868115), which I do believe were the two main reasons for the growing interest & community since then. At this point, I'd like to **thank you all very much** for such a kind feedback —  [...]
+
+And although it may seem as if the project development has recently slowed down a bit, I'd say it's quite the opposite — let me quickly summary, what we've achieved so far during the last few months and what we're focusing on now, as the future looks bright :)
+
+![image](https://iggy.apache.org/one-year-of-building-the-message-streaming/iggy_stars.png)
+
+## Community
+
+First and foremost, if it weren't for the community, we wouldn't have seen such an enormous growth of the Iggy's ecosystem — we've received the dozens of pull requests and there's ~250 members on our [Discord](https://discord.gg/apache-iggy). Whether we talk about bug fixes, improvements, new features, or just sharing the experiences and discussing potential ideas — it's all equally important.
+
+And it's been even more than that — we've seen our community members take on **building the new SDKs** in their favorite programming languages, fully on their own. Today, you can find the following list of supported SDKs for Iggy.rs — some of them could be lagging behind, but it's expected, as the project is still evolving, and it's not an easy task, to come up with a great development experience from the very beginning.
+
+- [Rust](https://github.com/apache/iggy)
+- [C#](https://github.com/iggy-rs/iggy-dotnet-client)
+- [C++](https://github.com/iggy-rs/iggy-cpp-client)
+- [Node (TS)](https://github.com/iggy-rs/iggy-node-client)
+- [Go](https://github.com/iggy-rs/iggy-go-client)
+- [Python](https://github.com/iggy-rs/iggy-python-client)
+- [Java](https://github.com/iggy-rs/iggy-java-client)
+- [Elixir](https://github.com/iggy-rs/iggy-elixir-client)
+
+## Changelog
+
+Adding the brand new SDKs wasn't the only great thing that has happened during last few months. We've also made quite a lot of improvements for the streaming server itself:
+
+- Increased the streaming server throughput by over 30% for both writes and reads
+- Added messages compression for client-side & server-side supporting the different algorithms
+- Implemented a new way of message batching with an additional tooling for data migration
+- Fixed the possible server-side deadlock that could happen for a specific configuration
+- Fixed issues with possible memory leaks when storing too many indices in memory
+- Rebuilt our custom benchmarking tool
+- Improved TCP connection handling
+- Constantly upgrading our CI/CD with lots of testing, different runtimes, artifacts, crates and Docker images releases
+- Refactored the existing Rust client SDK to follow the new conventions (without the breaking changes to the previous one)
+
+And at the same time, we've been experimenting a lot with some fancy stuff, which you can read about in the last paragraphs :)
+
+![image](https://iggy.apache.org/one-year-of-building-the-message-streaming/iggy_perf.png)
+
+## Tooling
+
+The core message streaming server and multiple SDKs might sound as the most important parts of the whole ecosystem, but let's not forget about the **management tools**. How to quickly connect to the server, create new topics, validate if the messages are being sent correctly, change the user permissions or check the node statistics?
+
+This is where our **[CLI](https://github.com/apache/iggy/tree/master/core/cli) and [Web UI](https://github.com/iggy-rs/iggy-web-ui) come in handy**. If you're a fan of working with the terminal and used to the great developer experience, you'll find our CLI a joy to work with.
+
+![image](https://iggy.apache.org/one-year-of-building-the-message-streaming/iggy_cli.png)
+
+On the other hand, if you prefer a graphical interface accessible via your browser, Web UI has got you covered. What's even more impressive, is that both of these tools have been developed by the single developers.
+
+![image](https://iggy.apache.org/one-year-of-building-the-message-streaming/iggy_web.png)
+
+Last but not least, in order to run the benchmarks, we have our own [bench](https://github.com/apache/iggy/tree/master/core/bench) available as a part of the core repository — you can easily configure the number of producers, consumers, streams, etc. and get an overview of the possible streaming performance on your machine.
+
+![image](https://iggy.apache.org/one-year-of-building-the-message-streaming/iggy_bench.png)
+
+## Early adopters
+
+Overall, coding and implementing new features is one side of the story, the other is making an actual use of it. You might have the most sophisticated/performant/reliable (you name it) tooling out there, however, if no one is using it or at least experimenting with it, how could you possibly know whether it's even worth an effort to continue with the further development of the project? Well, I truly wish I had an easy answer how to find users willing to play with your new shiny toy.
+
+In our case, I do believe, that it was a mix of two things — a limited amount of such tooling in the Rust ecosystem (so that the language enthusiasts could to try out something fresh), as well as a much more lightweight and (hopefully) performant message streaming infrastructure than some of the well-established solutions.
+
+I'm fully aware that it's a bold claim, and running the synthetic benchmarks is not a viable proof (e.g. on my 7950X, I was able to hit **3GB/s writes and up to 10 GB/s reads** with some additional caching enabled), yet, most of our early adopters were very happy with their results e.g. outnumbering Kafka while utilizing much less memory. For example, [Marvin](https://github.com/apache/iggy/issues/606) wrote:
+
+> 20 million msg/sec via tcp is pretty nuts and already blows several commercial systems out of the water.
+
+And he's not the only one who found Iggy.rs to be the right tool for his needs. For example, a few days ago, one of the users on our Discord said that thanks to Iggy he was able to **achieve 2ms latency when compared to 300ms** with Kafka. Again, just to make it clear, I'm not saying that we're better than X or Y — I'm simply stating that for some specific usages, we might be a better choice than X or Y.
+
+## Clustering & replication
+
+One of the most frequent questions we receive is whether we plan to incorporate some sort of data replication feature. Without any doubts, especially when considering the general system resiliency and reliability, being able to spin up a cluster of the particular piece of infrastructure (database/messaging/streaming/logging etc.) is quite often a critical feature.
+
+And yes, we will certainly implement clustering in Iggy — as a matter of fact, we've already built its basic version in the [sandbox repository](https://github.com/iggy-rs/iggy-cluster-sandbox). In order to achieve that, we've decided to (at least for now) stick to the [Raft](https://raft.github.io) consensus algorithm. However, adding the data replication feature to the core Iggy project will require a new way of storing the server metadata (most likely in a way of event-sourced message [...]
+
+![image](https://iggy.apache.org/one-year-of-building-the-message-streaming/iggy_cluster.png)
+
+## io_uring & thread-per-core + share-nothing
+
+What is a message streaming server, besides some more-or-less complicated logic regarding topics, partitioning, message ordering, consumer groups and a few more features? In its very core, **it's mostly I/O (disk + networking)** — the more efficient you can make it, the greater it will be. Of course, there's a major difference between throughput and latency, especially when talking about the so-called tail latency (p99 and more). Wouldn't it be great if we could have a very high throughp [...]
+
+However, due to the nature of tasks being shared across the different threads, **you can't simply avoid lots of context switches and data being shared & synchronized across these threads** (therefore even more context switches will occur). While it's probably not an issue for like 90% or maybe even 99% use-cases, there might be some (financial systems and similar), where an unpredictable tail latency is a total no-go.
+
+Certainly, there are already existing solutions dealing with such challenges, such as [Aeron](https://aeron.io), but **we do believe, that we can make Iggy something much easier to use** — one that can handle the typical workloads, as well as the very demanding ones, without the need of getting a PhD in specific tooling :)
+
+We've decided to **experiment with [io_uring](https://unixism.net/loti/what_is_io_uring.html) to maximize the I/O performance** (and at the same time vastly reduce the need of context switches), and at the same time utilize **thread-per-core architecture**, where **each thread is pinned to the CPU core**, thus keeping the data locally, without the need of sharing it with the other threads (share-nothing). In order to achieve this, we've picked up [monoio](https://github.com/bytedance/mon [...]
+
+And just recently, we've established yet another [sandbox repository](https://github.com/iggy-rs/iggy-thread-per-core-sandbox) to tackle the different challenges before deciding on the best solution possible and merging these changes into core Iggy streaming server.
+
+![image](https://iggy.apache.org/one-year-of-building-the-message-streaming/iggy_tpc.png)
+
+So far, we've got a very simple prototype in place, but there's still lots to be done, especially when thinking of:
+
+- How to evenly split partitions (the unit of data parallelism) between multiple cores?
+- How to efficiently rewrite existing server metadata heavily relying on synchronized data with `Arc<>` and `RwLock<>`?
+- Should we load into memory the same server metadata across all the threads (separately from each other) and notify all of them when something changes?
+- Should there be single or multiple threads handling the incoming TCP connections?
+- When `Thread #1` receives the request, which has to access the partition from `Thread #2`, should we use an async two-way channel (remember, no explicit locking and data synchronization between the threads) or maybe just send the descriptor using a one-way channel to the second thread to complete the request?
+- What and when could become a bottleneck in such architecture?
+
+This is just the tip of an iceberg, and we've already started [studying](https://penberg.org/papers/tpc-ancs19.pdf) some of the existing solutions out there, including [Seastar](https://seastar.io) framework. As you can see, this part has to be done before the clustering, as it involves lots of changes not only regarding the disk I/O, but also networking I/O.
+
+
+
+## Production readiness
+
+Is it ready for production deployment? When you look at the versioning, Rust SDK is at 0.4.* and the server is currently at 0.2.*, which may look like a very long way from v1.0.
+
+As mentioned before, **some of our users already experiment with Iggy** — and simply because of this, we haven't really introduced any significant breaking changes (except one regarding data compression, which was handled by the provided data migration feature).
+
+We can't guarantee that it will always be like this, but at least for now, we do not see anything that would dramatically impact the existing solution. One of such things could be the **redesigned storage, I/O, and clustering feature** (as described in the previous paragraph), but even then, we'll do our best to make it as seamless upgrade as possible — and once we achieve that, it means, we're getting very close to the version 1.0.
+
+For the time being, if you're fine with a **single-node solution that delivers a really good message streaming performance**, give Iggy a try, or at least run the benchmarks to see what are its possibilities and please share your results and thoughts on our [Discord](https://discord.gg/apache-iggy) — **your opinion is really important to us and we respect it no matter what**.
+
+It's been a very productive year for our core team (we've been and still are doing this in our free time), and once again, huge thanks to all our supporters and contributors!
+
+**We've got the fundamentals right, now it's high time to make Iggy blazingly fast!**
+
+![image](https://iggy.apache.org/one-year-of-building-the-message-streaming/iggy_rocket.png)
diff --git a/blogs/2024/05/29/one-year-of-building-the-message-streaming/__next.!KHNpdGUp.blogs.$c$slug.__PAGE__.txt b/blogs/2024/05/29/one-year-of-building-the-message-streaming/__next.!KHNpdGUp.blogs.$c$slug.__PAGE__.txt
new file mode 100644
index 000000000..748dd3efc
--- /dev/null
+++ b/blogs/2024/05/29/one-year-of-building-the-message-streaming/__next.!KHNpdGUp.blogs.$c$slug.__PAGE__.txt
@@ -0,0 +1,79 @@
+1:"$Sreact.fragment"
+2:I[94157,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],"Heading"]
+3:I[47873,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],"default"]
+:HL["/img/authors/piotr.png","image"]
+37:X
+3c:X
+3c:C
+0:{"buildId":"CEAllZE6ERPzzxzpa_n8G","data":[{"rsc":["$","$1","c",{"children":[["$","main",null,{"className":"min-h-screen px-6 py-16 md:px-12","children":["$","article",null,{"className":"mx-auto max-w-5xl","children":[["$","header",null,{"className":"mb-10","children":[["$","time",null,{"className":"text-sm font-medium text-fd-muted-foreground","children":"May 29, 2024"}],["$","h1",null,{"className":"mt-3 text-3xl font-extrabold tracking-tight text-fd-foreground md:text-5xl","children" [...]
+41:I[24110,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],"Image"]
+42:I[22016,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],""]
+43:I[97367,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"OutletBoundary"]
+44:"$Sreact.suspense"
+46:I[97367,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"ViewportBoundary"]
+47:I[97367,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"MetadataBoundary"]
+48:I[27201,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"IconMark"]
+49:I[39756,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"default"]
+4a:I[37457,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"default"]
+4:["$","p",null,{"children":["$","$L41",null,{"sizes":"(max-width: 768px) 100vw, (max-width: 1200px) 70vw, 900px","alt":"image","src":{"src":"/_next/static/media/iggy_stars.39e41437tycxn.png","width":795,"height":542,"blurWidth":8,"blurHeight":5,"blurDataURL":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAFCAYAAAB4ka1VAAAAZElEQVR42k2OWQ6AIAxEuYAoIFLWCPH+VxxbxcSPl2a2pIpyR6wDq4twocL6DGMJjrVllBQMm4sJD5qRUE+tUrugeSH8l99AHenExobfE4wjrFKe4VughlIG0vwl8BWodvjYcAPpazJO7CwojgAAAABJRU5ErkJgg [...]
+5:["$","$L2",null,{"as":"h2","id":"community","children":"Community"}]
+6:["$","p",null,{"children":["First and foremost, if it weren't for the community, we wouldn't have seen such an enormous growth of the Iggy's ecosystem — we've received the dozens of pull requests and there's ~250 members on our ",["$","$L3",null,{"href":"https://discord.gg/apache-iggy","children":"Discord"}],". Whether we talk about bug fixes, improvements, new features, or just sharing the experiences and discussing potential ideas — it's all equally important."]}]
+7:["$","p",null,{"children":["And it's been even more than that — we've seen our community members take on ",["$","strong",null,{"children":"building the new SDKs"}]," in their favorite programming languages, fully on their own. Today, you can find the following list of supported SDKs for Iggy.rs — some of them could be lagging behind, but it's expected, as the project is still evolving, and it's not an easy task, to come up with a great development experience from the very beginning."]}]
+8:["$","ul",null,{"children":["\n",["$","li",null,{"children":["$","$L3",null,{"href":"https://github.com/apache/iggy","children":"Rust"}]}],"\n",["$","li",null,{"children":["$","$L3",null,{"href":"https://github.com/iggy-rs/iggy-dotnet-client","children":"C#"}]}],"\n",["$","li",null,{"children":["$","$L3",null,{"href":"https://github.com/iggy-rs/iggy-cpp-client","children":"C++"}]}],"\n",["$","li",null,{"children":["$","$L3",null,{"href":"https://github.com/iggy-rs/iggy-node-client","ch [...]
+9:["$","$L2",null,{"as":"h2","id":"changelog","children":"Changelog"}]
+a:["$","p",null,{"children":"Adding the brand new SDKs wasn't the only great thing that has happened during last few months. We've also made quite a lot of improvements for the streaming server itself:"}]
+b:["$","ul",null,{"children":["\n",["$","li",null,{"children":"Increased the streaming server throughput by over 30% for both writes and reads"}],"\n",["$","li",null,{"children":"Added messages compression for client-side & server-side supporting the different algorithms"}],"\n",["$","li",null,{"children":"Implemented a new way of message batching with an additional tooling for data migration"}],"\n",["$","li",null,{"children":"Fixed the possible server-side deadlock that could happen fo [...]
+c:["$","p",null,{"children":"And at the same time, we've been experimenting a lot with some fancy stuff, which you can read about in the last paragraphs :)"}]
+d:["$","p",null,{"children":["$","$L41",null,{"sizes":"(max-width: 768px) 100vw, (max-width: 1200px) 70vw, 900px","alt":"image","src":{"src":"/_next/static/media/iggy_perf.0gkt2u6iax1h_.png","width":2117,"height":367,"blurWidth":8,"blurHeight":1,"blurDataURL":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAABCAYAAADjAO9DAAAAGklEQVR42mPg4+f7z8rK+p+ZmRkDMzEx/QcAgSgIZsYChBAAAAAASUVORK5CYII="},"className":"rounded-lg"}]}]
+e:["$","$L2",null,{"as":"h2","id":"tooling","children":"Tooling"}]
+f:["$","p",null,{"children":["The core message streaming server and multiple SDKs might sound as the most important parts of the whole ecosystem, but let's not forget about the ",["$","strong",null,{"children":"management tools"}],". How to quickly connect to the server, create new topics, validate if the messages are being sent correctly, change the user permissions or check the node statistics?"]}]
+10:["$","p",null,{"children":["This is where our ",["$","strong",null,{"children":[["$","$L3",null,{"href":"https://github.com/apache/iggy/tree/master/core/cli","children":"CLI"}]," and ",["$","$L3",null,{"href":"https://github.com/iggy-rs/iggy-web-ui","children":"Web UI"}]," come in handy"]}],". If you're a fan of working with the terminal and used to the great developer experience, you'll find our CLI a joy to work with."]}]
+11:["$","p",null,{"children":["$","$L41",null,{"sizes":"(max-width: 768px) 100vw, (max-width: 1200px) 70vw, 900px","alt":"image","src":{"src":"/_next/static/media/iggy_cli.3s80q2olm9gpf.png","width":1743,"height":766,"blurWidth":8,"blurHeight":4,"blurDataURL":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAECAYAAACzzX7wAAAAQ0lEQVR42mXMOQ7AIAxEUYOwbHmrfP+rTkRSBYrXjL6GRATbWgtzzguZGaoKzIwxxoUiAt2NHb4D0Z+7IzOhqt/lETx91CGCKbRFjQAAAABJRU5ErkJggg=="},"className":"rounded-lg"}]}]
+12:["$","p",null,{"children":"On the other hand, if you prefer a graphical interface accessible via your browser, Web UI has got you covered. What's even more impressive, is that both of these tools have been developed by the single developers."}]
+13:["$","p",null,{"children":["$","$L41",null,{"sizes":"(max-width: 768px) 100vw, (max-width: 1200px) 70vw, 900px","alt":"image","src":{"src":"/_next/static/media/iggy_web.1g9_wep0g51yk.png","width":2559,"height":1353,"blurWidth":8,"blurHeight":4,"blurDataURL":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAECAYAAACzzX7wAAAASklEQVR42nWKQRKAIAwD+x4HRmhpAYWL//9T1I5HOewkmSyJdlibjtaBYsPz3ee8QHEXsDRw6U7+uujh0BYSEpsff1CI+RHqUrgBREMzrbnu6jMAAAAASUVORK5CYII="},"className":"rounded-lg"}]}]
+14:["$","p",null,{"children":["Last but not least, in order to run the benchmarks, we have our own ",["$","$L3",null,{"href":"https://github.com/apache/iggy/tree/master/core/bench","children":"bench"}]," available as a part of the core repository — you can easily configure the number of producers, consumers, streams, etc. and get an overview of the possible streaming performance on your machine."]}]
+15:["$","p",null,{"children":["$","$L41",null,{"sizes":"(max-width: 768px) 100vw, (max-width: 1200px) 70vw, 900px","alt":"image","src":{"src":"/_next/static/media/iggy_bench.0ojommldlm3ph.png","width":1891,"height":803,"blurWidth":8,"blurHeight":3,"blurDataURL":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAADCAYAAACuyE5IAAAAQklEQVR42l3MwQ7AEBBF0dm3tI1UjCGIRPz/Dz5ix+LuTi5VZ1F+g/BqsL7B6tqiHgVNGMl8C/kDUQ8eeR7kUasTDKCFHY3Ur3EVAAAAAElFTkSuQmCC"},"className":"rounded-lg"}]}]
+16:["$","$L2",null,{"as":"h2","id":"early-adopters","children":"Early adopters"}]
+17:["$","p",null,{"children":"Overall, coding and implementing new features is one side of the story, the other is making an actual use of it. You might have the most sophisticated/performant/reliable (you name it) tooling out there, however, if no one is using it or at least experimenting with it, how could you possibly know whether it's even worth an effort to continue with the further development of the project? Well, I truly wish I had an easy answer how to find users willing to play [...]
+18:["$","p",null,{"children":"In our case, I do believe, that it was a mix of two things — a limited amount of such tooling in the Rust ecosystem (so that the language enthusiasts could to try out something fresh), as well as a much more lightweight and (hopefully) performant message streaming infrastructure than some of the well-established solutions."}]
+19:["$","p",null,{"children":["I'm fully aware that it's a bold claim, and running the synthetic benchmarks is not a viable proof (e.g. on my 7950X, I was able to hit ",["$","strong",null,{"children":"3GB/s writes and up to 10 GB/s reads"}]," with some additional caching enabled), yet, most of our early adopters were very happy with their results e.g. outnumbering Kafka while utilizing much less memory. For example, ",["$","$L3",null,{"href":"https://github.com/apache/iggy/issues/606","c [...]
+1a:["$","blockquote",null,{"children":["\n",["$","p",null,{"children":"20 million msg/sec via tcp is pretty nuts and already blows several commercial systems out of the water."}],"\n"]}]
+1b:["$","p",null,{"children":["And he's not the only one who found Iggy.rs to be the right tool for his needs. For example, a few days ago, one of the users on our Discord said that thanks to Iggy he was able to ",["$","strong",null,{"children":"achieve 2ms latency when compared to 300ms"}]," with Kafka. Again, just to make it clear, I'm not saying that we're better than X or Y — I'm simply stating that for some specific usages, we might be a better choice than X or Y."]}]
+1c:["$","$L2",null,{"as":"h2","id":"clustering--replication","children":"Clustering & replication"}]
+1d:["$","p",null,{"children":"One of the most frequent questions we receive is whether we plan to incorporate some sort of data replication feature. Without any doubts, especially when considering the general system resiliency and reliability, being able to spin up a cluster of the particular piece of infrastructure (database/messaging/streaming/logging etc.) is quite often a critical feature."}]
+1e:["$","p",null,{"children":["And yes, we will certainly implement clustering in Iggy — as a matter of fact, we've already built its basic version in the ",["$","$L3",null,{"href":"https://github.com/iggy-rs/iggy-cluster-sandbox","children":"sandbox repository"}],". In order to achieve that, we've decided to (at least for now) stick to the ",["$","$L3",null,{"href":"https://raft.github.io","children":"Raft"}]," consensus algorithm. However, adding the data replication feature to the cor [...]
+1f:["$","p",null,{"children":["$","$L41",null,{"sizes":"(max-width: 768px) 100vw, (max-width: 1200px) 70vw, 900px","alt":"image","src":{"src":"/_next/static/media/iggy_cluster.0vh8hf-jnuy59.png","width":2552,"height":1276,"blurWidth":8,"blurHeight":4,"blurDataURL":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAECAYAAACzzX7wAAAATElEQVR42i2MSw4AIQxCXRrtD+9/V0Y6Lkhf6AvDzDjn5FqLHt43IqhePIDqQsFBP6rqJrn35siMBnenZLGEvEIvmP9TEs5bANCs/gNIviTXgcxFfAAAAABJRU5ErkJggg=="},"className":"rounded-lg"}]}]
+20:["$","$L2",null,{"as":"h2","id":"io_uring--thread-per-core--share-nothing","children":"io_uring & thread-per-core + share-nothing"}]
+21:["$","p",null,{"children":["What is a message streaming server, besides some more-or-less complicated logic regarding topics, partitioning, message ordering, consumer groups and a few more features? In its very core, ",["$","strong",null,{"children":"it's mostly I/O (disk + networking)"}]," — the more efficient you can make it, the greater it will be. Of course, there's a major difference between throughput and latency, especially when talking about the so-called tail latency (p99 and [...]
+22:["$","p",null,{"children":["However, due to the nature of tasks being shared across the different threads, ",["$","strong",null,{"children":"you can't simply avoid lots of context switches and data being shared & synchronized across these threads"}]," (therefore even more context switches will occur). While it's probably not an issue for like 90% or maybe even 99% use-cases, there might be some (financial systems and similar), where an unpredictable tail latency is a total no-go."]}]
+23:["$","p",null,{"children":["Certainly, there are already existing solutions dealing with such challenges, such as ",["$","$L3",null,{"href":"https://aeron.io","children":"Aeron"}],", but ",["$","strong",null,{"children":"we do believe, that we can make Iggy something much easier to use"}]," — one that can handle the typical workloads, as well as the very demanding ones, without the need of getting a PhD in specific tooling :)"]}]
+24:["$","p",null,{"children":["We've decided to ",["$","strong",null,{"children":["experiment with ",["$","$L3",null,{"href":"https://unixism.net/loti/what_is_io_uring.html","children":"io_uring"}]," to maximize the I/O performance"]}]," (and at the same time vastly reduce the need of context switches), and at the same time utilize ",["$","strong",null,{"children":"thread-per-core architecture"}],", where ",["$","strong",null,{"children":"each thread is pinned to the CPU core"}],", thus  [...]
+25:["$","p",null,{"children":["And just recently, we've established yet another ",["$","$L3",null,{"href":"https://github.com/iggy-rs/iggy-thread-per-core-sandbox","children":"sandbox repository"}]," to tackle the different challenges before deciding on the best solution possible and merging these changes into core Iggy streaming server."]}]
+26:["$","p",null,{"children":["$","$L41",null,{"sizes":"(max-width: 768px) 100vw, (max-width: 1200px) 70vw, 900px","alt":"image","src":{"src":"/_next/static/media/iggy_tpc.0ejc62k9xqcu6.png","width":2298,"height":1232,"blurWidth":8,"blurHeight":4,"blurDataURL":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAECAYAAACzzX7wAAAASElEQVR42m3MsQrAMAhFUUOiLqKDOPj/H/pKWgItdLjb4VJ3IzNhZlhrYc6JMQaI6GmDqkJEQETAzF90gLtDVW+0T7/gHN7gAgOHI1PkicaLAAAAAElFTkSuQmCC"},"className":"rounded-lg"}]}]
+27:["$","p",null,{"children":"So far, we've got a very simple prototype in place, but there's still lots to be done, especially when thinking of:"}]
+28:["$","ul",null,{"children":["\n",["$","li",null,{"children":"How to evenly split partitions (the unit of data parallelism) between multiple cores?"}],"\n",["$","li",null,{"children":["How to efficiently rewrite existing server metadata heavily relying on synchronized data with ",["$","code",null,{"children":"Arc<>"}]," and ",["$","code",null,{"children":"RwLock<>"}],"?"]}],"\n",["$","li",null,{"children":"Should we load into memory the same server metadata across all the threads (sepa [...]
+29:["$","p",null,{"children":["This is just the tip of an iceberg, and we've already started ",["$","$L3",null,{"href":"https://penberg.org/papers/tpc-ancs19.pdf","children":"studying"}]," some of the existing solutions out there, including ",["$","$L3",null,{"href":"https://seastar.io","children":"Seastar"}]," framework. As you can see, this part has to be done before the clustering, as it involves lots of changes not only regarding the disk I/O, but also networking I/O."]}]
+2a:["$","$L2",null,{"as":"h2","id":"production-readiness","children":"Production readiness"}]
+2b:["$","p",null,{"children":"Is it ready for production deployment? When you look at the versioning, Rust SDK is at 0.4.* and the server is currently at 0.2.*, which may look like a very long way from v1.0."}]
+2c:["$","p",null,{"children":["As mentioned before, ",["$","strong",null,{"children":"some of our users already experiment with Iggy"}]," — and simply because of this, we haven't really introduced any significant breaking changes (except one regarding data compression, which was handled by the provided data migration feature)."]}]
+2d:["$","p",null,{"children":["We can't guarantee that it will always be like this, but at least for now, we do not see anything that would dramatically impact the existing solution. One of such things could be the ",["$","strong",null,{"children":"redesigned storage, I/O, and clustering feature"}]," (as described in the previous paragraph), but even then, we'll do our best to make it as seamless upgrade as possible — and once we achieve that, it means, we're getting very close to the ve [...]
+2e:["$","p",null,{"children":["For the time being, if you're fine with a ",["$","strong",null,{"children":"single-node solution that delivers a really good message streaming performance"}],", give Iggy a try, or at least run the benchmarks to see what are its possibilities and please share your results and thoughts on our ",["$","$L3",null,{"href":"https://discord.gg/apache-iggy","children":"Discord"}]," — ",["$","strong",null,{"children":"your opinion is really important to us and we re [...]
+2f:["$","p",null,{"children":"It's been a very productive year for our core team (we've been and still are doing this in our free time), and once again, huge thanks to all our supporters and contributors!"}]
+30:["$","p",null,{"children":["$","strong",null,{"children":"We've got the fundamentals right, now it's high time to make Iggy blazingly fast!"}]}]
+31:["$","p",null,{"children":["$","$L41",null,{"sizes":"(max-width: 768px) 100vw, (max-width: 1200px) 70vw, 900px","alt":"image","src":{"src":"/_next/static/media/iggy_rocket.15h9qw3pw3uoh.png","width":1920,"height":1080,"blurWidth":8,"blurHeight":5,"blurDataURL":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAFCAYAAAB4ka1VAAAAm0lEQVR42h2Ovw7BYBxFvz/9/FoSFS3SBYNIbB3MjYStXRhIxGKTiM0LSGxMPILB7AmPttu9Nzc5RymtEb+JtRZjDEqpOvc6IWLL7qTFPNvQ7Q/R5dkzmny54Pu8kU5GKPGE/fbEutgRBkISBvzedz6vB3EUo [...]
+32:["$","footer",null,{"className":"mt-16 border-t border-fd-border pt-8","children":["$","$L42",null,{"href":"/blogs","className":"inline-flex items-center gap-2 text-sm font-medium text-fd-primary transition-colors hover:opacity-80","children":"← Back to all posts"}]}]
+33:["$","script","script-0",{"src":"/_next/static/chunks/1k39uva2a578s.js","async":true}]
+34:["$","script","script-1",{"src":"/_next/static/chunks/23ktdyx90z0v3.js","async":true}]
+35:["$","$L43",null,{"children":["$","$44",null,{"name":"Next.MetadataOutlet","children":"$@45"}]}]
+38:["$","$1","h",{"children":[null,["$","$L46",null,{"children":[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]}],["$","div",null,{"hidden":true,"children":["$","$L47",null,{"children":["$","$44",null,{"name":"Next.Metadata","children":[["$","title","0",{"children":"Iggy.rs — one year of building the message streaming | Apache Iggy"}],["$","link","1",{"rel":"canonical","href":"https://iggy.apache.org/blogs/2024/0 [...]
+3a:["$","$1","c",{"children":[null,["$","$L49",null,{"parallelRouterKey":"children","template":["$","$L4a",null,{}]}]]}]
+3d:["$","$1","c",{"children":[null,["$","$L49",null,{"parallelRouterKey":"children","template":["$","$L4a",null,{}]}]]}]
+40:true
+45:null
+37:300
+37:C
+3f:0
+39:"$undefined"
+3b:"$undefined"
+3e:"$undefined"
+36:"$undefined"
diff --git a/blogs/2024/05/29/one-year-of-building-the-message-streaming/__next.!KHNpdGUp.txt b/blogs/2024/05/29/one-year-of-building-the-message-streaming/__next.!KHNpdGUp.txt
new file mode 100644
index 000000000..940e917aa
--- /dev/null
+++ b/blogs/2024/05/29/one-year-of-building-the-message-streaming/__next.!KHNpdGUp.txt
@@ -0,0 +1,30 @@
+1:"$Sreact.fragment"
+2:I[22016,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],""]
+3:I[5014,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],"default"]
+4:I[64345,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js"],"HomeLayout"]
+5:I[88760,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js"],"Logo"]
+6:I[15269,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js"],"CommunityDropdown"]
+7:I[15269,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js"],"communityLinks"]
+8:I[29966,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js"],"ASFDropdown"]
+9:I[36330,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js"],"ASFMobileLinks"]
+a:I[39756,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"default"]
+b:I[37457,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"default"]
+14:X
+0:{"buildId":"CEAllZE6ERPzzxzpa_n8G","data":[{"rsc":["$","$1","c",{"children":[[["$","script","script-0",{"src":"/_next/static/chunks/241-fa32f9zay.js","async":true}],["$","script","script-1",{"src":"/_next/static/chunks/3x8y3fmtn6lnc.js","async":true}],["$","script","script-2",{"src":"/_next/static/chunks/250gopd52txql.js","async":true}],["$","script","script-3",{"src":"/_next/static/chunks/0n3fueko2xquo.js","async":true}]],[["$","div",null,{"className":"relative border-b border-white/[ [...]
+c:["$","$L2","/",{"href":"/","className":"transition-colors hover:text-fd-primary","children":"Home"}]
+d:["$","$L2","/docs",{"href":"/docs","className":"transition-colors hover:text-fd-primary","children":"Documentation"}]
+e:["$","$L2","/blogs",{"href":"/blogs","className":"transition-colors hover:text-fd-primary","children":"Blog"}]
+f:["$","$L2","/downloads",{"href":"/downloads","className":"transition-colors hover:text-fd-primary","children":"Downloads"}]
+10:["$","$L2","/community",{"href":"/community","className":"transition-colors hover:text-fd-primary","children":"Community"}]
+11:["$","p",null,{"className":"mt-6 max-w-md text-xs text-fd-muted-foreground","children":["Every page on this site is listed in"," ",["$","a",null,{"href":"/sitemap.xml","className":"underline hover:text-fd-primary","children":"/sitemap.xml"}],", and"," ",["$","a",null,{"href":"/llms.txt","className":"underline hover:text-fd-primary","children":"/llms.txt"}]," ","summarises the documentation."]}]
+12:["$","footer",null,{"className":"border-t border-fd-border bg-fd-background px-6 py-14 md:px-12","children":["$","div",null,{"className":"mx-auto max-w-6xl","children":[["$","div",null,{"className":"grid gap-10 sm:grid-cols-2 lg:grid-cols-4","children":[["$","div","Docs",{"children":[["$","h2",null,{"className":"mb-4 text-sm font-semibold uppercase tracking-wide text-fd-primary","children":"Docs"}],["$","ul",null,{"className":"space-y-2.5 text-sm","children":[["$","li","/docs",{"child [...]
+16:true
+17:["$","$L2",null,{"href":"https://www.apache.org/foundation/contributing.html","target":"_blank","rel":"noopener noreferrer","className":"text-fd-muted-foreground transition-colors hover:text-fd-foreground","children":"Donate"}]
+18:["$","li","https://www.apache.org/foundation/sponsorship.html",{"children":["$","$L2",null,{"href":"https://www.apache.org/foundation/sponsorship.html","target":"_blank","rel":"noopener noreferrer","className":"text-fd-muted-foreground transition-colors hover:text-fd-foreground","children":"Sponsors"}]}]
+19:["$","li","https://www.apache.org/security/",{"children":["$","$L2",null,{"href":"https://www.apache.org/security/","target":"_blank","rel":"noopener noreferrer","className":"text-fd-muted-foreground transition-colors hover:text-fd-foreground","children":"Security"}]}]
+1a:["$","li","https://privacy.apache.org/policies/privacy-policy-public.html",{"children":["$","$L2",null,{"href":"https://privacy.apache.org/policies/privacy-policy-public.html","target":"_blank","rel":"noopener noreferrer","className":"text-fd-muted-foreground transition-colors hover:text-fd-foreground","children":"Privacy"}]}]
+1b:["$","div",null,{"className":"mt-12 border-t border-fd-border pt-8 text-xs leading-relaxed text-fd-muted-foreground/70","children":[["$","p",null,{"className":"mt-4","children":["Copyright © ",2026," The Apache Software Foundation, Licensed under the Apache License, Version 2.0."]}],["$","p",null,{"className":"mt-4","children":"Apache Iggy, Iggy, Apache, and the Apache Iggy logo are trademarks or registered trademarks of The Apache Software Foundation. All other marks mentioned may be [...]
+14:300
+14:C
+15:0
+13:"$undefined"
diff --git a/blogs/2024/05/29/one-year-of-building-the-message-streaming/__next._full.txt b/blogs/2024/05/29/one-year-of-building-the-message-streaming/__next._full.txt
new file mode 100644
index 000000000..f5d4f0e18
--- /dev/null
+++ b/blogs/2024/05/29/one-year-of-building-the-message-streaming/__next._full.txt
@@ -0,0 +1,102 @@
+1:"$Sreact.fragment"
+3:I[17751,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"RootProvider"]
+4:I[39756,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"default"]
+5:I[58298,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/3-_96y-evozm0.js"],"default"]
+6:I[37457,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"default"]
+7:I[22016,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],""]
+12:I[68027,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"default",1]
+:HL["/_next/static/chunks/1_55v0vlfews3.css","style"]
+2:T512,{"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://iggy.apache.org/#organization","name":"The Apache Software Foundation","url":"https://www.apache.org/","logo":"https://iggy.apache.org/img/asf_logo.svg","contactPoint":{"@type":"ContactPoint","contactType":"technical support","email":"dev@iggy.apache.org","url":"https://iggy.apache.org/community/"}},{"@type":"WebSite","@id":"https://iggy.apache.org/#website","name":"Apache Iggy","url":"https://iggy.a [...]
+0:{"P":null,"c":["","blogs","2024","05","29","one-year-of-building-the-message-streaming",""],"q":"","i":false,"f":[[["",{"children":["(site)",{"children":["blogs",{"children":[["slug","2024/05/29/one-year-of-building-the-message-streaming","c",[]],{"children":["__PAGE__",{},"$undefined","$undefined",4608]},"$undefined","$undefined",4608]},"$undefined","$undefined",4608]},"$undefined","$undefined",4608]},"$undefined","$undefined",4624],[["$","$1","c",{"children":[[["$","link","0",{"rel": [...]
+14:I[79520,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],""]
+15:I[69877,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"Matomo"]
+16:I[5014,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],"default"]
+17:I[64345,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js"],"HomeLayout"]
+18:I[88760,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js"],"Logo"]
+19:I[15269,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js"],"CommunityDropdown"]
+1a:I[15269,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js"],"communityLinks"]
+1b:I[29966,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js"],"ASFDropdown"]
+1c:I[36330,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js"],"ASFMobileLinks"]
+25:I[97367,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"OutletBoundary"]
+26:"$Sreact.suspense"
+28:I[97367,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"ViewportBoundary"]
+2a:I[97367,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"MetadataBoundary"]
+8:["$","$L7","/community",{"href":"/community","className":"transition-colors hover:text-fd-primary","children":"Community"}]
+9:["$","p",null,{"className":"mt-6 max-w-md text-xs text-fd-muted-foreground","children":["Every page on this site is listed in"," ",["$","a",null,{"href":"/sitemap.xml","className":"underline hover:text-fd-primary","children":"/sitemap.xml"}],", and"," ",["$","a",null,{"href":"/llms.txt","className":"underline hover:text-fd-primary","children":"/llms.txt"}]," ","summarises the documentation."]}]
+a:["$","$L14",null,{"id":"matomo","strategy":"afterInteractive","children":"var _paq = window._paq = window._paq || [];\n_paq.push([\"setDoNotTrack\", true]);\n_paq.push([\"disableCookies\"]);\n_paq.push(['trackPageView']);\n_paq.push(['enableLinkTracking']);\n(function() {\n  var u=\"https://analytics.apache.org/\";\n  _paq.push(['setTrackerUrl', u+'matomo.php']);\n  _paq.push(['setSiteId', '80']);\n  var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];\n  [...]
+b:["$","$L15",null,{}]
+c:["$","$1","c",{"children":[[["$","script","script-0",{"src":"/_next/static/chunks/241-fa32f9zay.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/_next/static/chunks/3x8y3fmtn6lnc.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/_next/static/chunks/250gopd52txql.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/_next/static/chunks/0n3fueko2xquo.js","async":true,"nonce":"$undefined"}]],[["$","div",null,{"className" [...]
+d:["$","$1","c",{"children":[null,["$","$L4",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}]
+e:["$","$1","c",{"children":[null,["$","$L4",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}]
+f:["$","$1","c",{"children":["$L24",[["$","script","script-0",{"src":"/_next/static/chunks/1k39uva2a578s.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/_next/static/chunks/23ktdyx90z0v3.js","async":true,"nonce":"$undefined"}]],["$","$L25",null,{"children":["$","$26",null,{"name":"Next.MetadataOutlet","children":"$@27"}]}]]}]
+11:["$","$1","h",{"children":[null,["$","$L28",null,{"children":"$L29"}],["$","div",null,{"hidden":true,"children":["$","$L2a",null,{"children":["$","$26",null,{"name":"Next.Metadata","children":"$L2b"}]}]}],null]}]
+13:["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/1_55v0vlfews3.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]
+10:C
+1d:["$","$L7","/",{"href":"/","className":"transition-colors hover:text-fd-primary","children":"Home"}]
+1e:["$","$L7","/docs",{"href":"/docs","className":"transition-colors hover:text-fd-primary","children":"Documentation"}]
+1f:["$","$L7","/blogs",{"href":"/blogs","className":"transition-colors hover:text-fd-primary","children":"Blog"}]
+20:["$","$L7","/downloads",{"href":"/downloads","className":"transition-colors hover:text-fd-primary","children":"Downloads"}]
+21:["$","$L7","/community",{"href":"/community","className":"transition-colors hover:text-fd-primary","children":"Community"}]
+22:["$","p",null,{"className":"mt-6 max-w-md text-xs text-fd-muted-foreground","children":["Every page on this site is listed in"," ",["$","a",null,{"href":"/sitemap.xml","className":"underline hover:text-fd-primary","children":"/sitemap.xml"}],", and"," ",["$","a",null,{"href":"/llms.txt","className":"underline hover:text-fd-primary","children":"/llms.txt"}]," ","summarises the documentation."]}]
+23:["$","footer",null,{"className":"border-t border-fd-border bg-fd-background px-6 py-14 md:px-12","children":["$","div",null,{"className":"mx-auto max-w-6xl","children":[["$","div",null,{"className":"grid gap-10 sm:grid-cols-2 lg:grid-cols-4","children":[["$","div","Docs",{"children":[["$","h2",null,{"className":"mb-4 text-sm font-semibold uppercase tracking-wide text-fd-primary","children":"Docs"}],["$","ul",null,{"className":"space-y-2.5 text-sm","children":[["$","li","/docs",{"child [...]
+2c:["$","li","https://www.apache.org/foundation/contributing.html",{"children":["$","$L7",null,{"href":"https://www.apache.org/foundation/contributing.html","target":"_blank","rel":"noopener noreferrer","className":"text-fd-muted-foreground transition-colors hover:text-fd-foreground","children":"Donate"}]}]
+2d:["$","li","https://www.apache.org/foundation/sponsorship.html",{"children":["$","$L7",null,{"href":"https://www.apache.org/foundation/sponsorship.html","target":"_blank","rel":"noopener noreferrer","className":"text-fd-muted-foreground transition-colors hover:text-fd-foreground","children":"Sponsors"}]}]
+2e:["$","li","https://www.apache.org/security/",{"children":["$","$L7",null,{"href":"https://www.apache.org/security/","target":"_blank","rel":"noopener noreferrer","className":"text-fd-muted-foreground transition-colors hover:text-fd-foreground","children":"Security"}]}]
+2f:["$","li","https://privacy.apache.org/policies/privacy-policy-public.html",{"children":["$","$L7",null,{"href":"https://privacy.apache.org/policies/privacy-policy-public.html","target":"_blank","rel":"noopener noreferrer","className":"text-fd-muted-foreground transition-colors hover:text-fd-foreground","children":"Privacy"}]}]
+30:["$","div",null,{"className":"mt-12 border-t border-fd-border pt-8 text-xs leading-relaxed text-fd-muted-foreground/70","children":[["$","p",null,{"className":"mt-4","children":["Copyright © ",2026," The Apache Software Foundation, Licensed under the Apache License, Version 2.0."]}],["$","p",null,{"className":"mt-4","children":"Apache Iggy, Iggy, Apache, and the Apache Iggy logo are trademarks or registered trademarks of The Apache Software Foundation. All other marks mentioned may be [...]
+31:I[94157,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],"Heading"]
+32:I[47873,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],"default"]
+:HL["/img/authors/piotr.png","image"]
+24:["$","main",null,{"className":"min-h-screen px-6 py-16 md:px-12","children":["$","article",null,{"className":"mx-auto max-w-5xl","children":[["$","header",null,{"className":"mb-10","children":[["$","time",null,{"className":"text-sm font-medium text-fd-muted-foreground","children":"May 29, 2024"}],["$","h1",null,{"className":"mt-3 text-3xl font-extrabold tracking-tight text-fd-foreground md:text-5xl","children":"Iggy.rs — one year of building the message streaming"}],["$","div",null,{" [...]
+62:I[24110,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],"Image"]
+33:["$","p",null,{"children":["$","$L62",null,{"sizes":"(max-width: 768px) 100vw, (max-width: 1200px) 70vw, 900px","alt":"image","src":{"src":"/_next/static/media/iggy_stars.39e41437tycxn.png","width":795,"height":542,"blurWidth":8,"blurHeight":5,"blurDataURL":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAFCAYAAAB4ka1VAAAAZElEQVR42k2OWQ6AIAxEuYAoIFLWCPH+VxxbxcSPl2a2pIpyR6wDq4twocL6DGMJjrVllBQMm4sJD5qRUE+tUrugeSH8l99AHenExobfE4wjrFKe4VughlIG0vwl8BWodvjYcAPpazJO7CwojgAAAABJRU5ErkJg [...]
+34:["$","$L31",null,{"as":"h2","id":"community","children":"Community"}]
+35:["$","p",null,{"children":["First and foremost, if it weren't for the community, we wouldn't have seen such an enormous growth of the Iggy's ecosystem — we've received the dozens of pull requests and there's ~250 members on our ",["$","$L32",null,{"href":"https://discord.gg/apache-iggy","children":"Discord"}],". Whether we talk about bug fixes, improvements, new features, or just sharing the experiences and discussing potential ideas — it's all equally important."]}]
+36:["$","p",null,{"children":["And it's been even more than that — we've seen our community members take on ",["$","strong",null,{"children":"building the new SDKs"}]," in their favorite programming languages, fully on their own. Today, you can find the following list of supported SDKs for Iggy.rs — some of them could be lagging behind, but it's expected, as the project is still evolving, and it's not an easy task, to come up with a great development experience from the very beginning."]}]
+37:["$","ul",null,{"children":["\n",["$","li",null,{"children":["$","$L32",null,{"href":"https://github.com/apache/iggy","children":"Rust"}]}],"\n",["$","li",null,{"children":["$","$L32",null,{"href":"https://github.com/iggy-rs/iggy-dotnet-client","children":"C#"}]}],"\n",["$","li",null,{"children":["$","$L32",null,{"href":"https://github.com/iggy-rs/iggy-cpp-client","children":"C++"}]}],"\n",["$","li",null,{"children":["$","$L32",null,{"href":"https://github.com/iggy-rs/iggy-node-client [...]
+38:["$","$L31",null,{"as":"h2","id":"changelog","children":"Changelog"}]
+39:["$","p",null,{"children":"Adding the brand new SDKs wasn't the only great thing that has happened during last few months. We've also made quite a lot of improvements for the streaming server itself:"}]
+3a:["$","ul",null,{"children":["\n",["$","li",null,{"children":"Increased the streaming server throughput by over 30% for both writes and reads"}],"\n",["$","li",null,{"children":"Added messages compression for client-side & server-side supporting the different algorithms"}],"\n",["$","li",null,{"children":"Implemented a new way of message batching with an additional tooling for data migration"}],"\n",["$","li",null,{"children":"Fixed the possible server-side deadlock that could happen f [...]
+3b:["$","p",null,{"children":"And at the same time, we've been experimenting a lot with some fancy stuff, which you can read about in the last paragraphs :)"}]
+3c:["$","p",null,{"children":["$","$L62",null,{"sizes":"(max-width: 768px) 100vw, (max-width: 1200px) 70vw, 900px","alt":"image","src":{"src":"/_next/static/media/iggy_perf.0gkt2u6iax1h_.png","width":2117,"height":367,"blurWidth":8,"blurHeight":1,"blurDataURL":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAABCAYAAADjAO9DAAAAGklEQVR42mPg4+f7z8rK+p+ZmRkDMzEx/QcAgSgIZsYChBAAAAAASUVORK5CYII="},"className":"rounded-lg"}]}]
+3d:["$","$L31",null,{"as":"h2","id":"tooling","children":"Tooling"}]
+3e:["$","p",null,{"children":["The core message streaming server and multiple SDKs might sound as the most important parts of the whole ecosystem, but let's not forget about the ",["$","strong",null,{"children":"management tools"}],". How to quickly connect to the server, create new topics, validate if the messages are being sent correctly, change the user permissions or check the node statistics?"]}]
+3f:["$","p",null,{"children":["This is where our ",["$","strong",null,{"children":[["$","$L32",null,{"href":"https://github.com/apache/iggy/tree/master/core/cli","children":"CLI"}]," and ",["$","$L32",null,{"href":"https://github.com/iggy-rs/iggy-web-ui","children":"Web UI"}]," come in handy"]}],". If you're a fan of working with the terminal and used to the great developer experience, you'll find our CLI a joy to work with."]}]
+40:["$","p",null,{"children":["$","$L62",null,{"sizes":"(max-width: 768px) 100vw, (max-width: 1200px) 70vw, 900px","alt":"image","src":{"src":"/_next/static/media/iggy_cli.3s80q2olm9gpf.png","width":1743,"height":766,"blurWidth":8,"blurHeight":4,"blurDataURL":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAECAYAAACzzX7wAAAAQ0lEQVR42mXMOQ7AIAxEUYOwbHmrfP+rTkRSBYrXjL6GRATbWgtzzguZGaoKzIwxxoUiAt2NHb4D0Z+7IzOhqt/lETx91CGCKbRFjQAAAABJRU5ErkJggg=="},"className":"rounded-lg"}]}]
+41:["$","p",null,{"children":"On the other hand, if you prefer a graphical interface accessible via your browser, Web UI has got you covered. What's even more impressive, is that both of these tools have been developed by the single developers."}]
+42:["$","p",null,{"children":["$","$L62",null,{"sizes":"(max-width: 768px) 100vw, (max-width: 1200px) 70vw, 900px","alt":"image","src":{"src":"/_next/static/media/iggy_web.1g9_wep0g51yk.png","width":2559,"height":1353,"blurWidth":8,"blurHeight":4,"blurDataURL":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAECAYAAACzzX7wAAAASklEQVR42nWKQRKAIAwD+x4HRmhpAYWL//9T1I5HOewkmSyJdlibjtaBYsPz3ee8QHEXsDRw6U7+uujh0BYSEpsff1CI+RHqUrgBREMzrbnu6jMAAAAASUVORK5CYII="},"className":"rounded-lg"}]}]
+43:["$","p",null,{"children":["Last but not least, in order to run the benchmarks, we have our own ",["$","$L32",null,{"href":"https://github.com/apache/iggy/tree/master/core/bench","children":"bench"}]," available as a part of the core repository — you can easily configure the number of producers, consumers, streams, etc. and get an overview of the possible streaming performance on your machine."]}]
+44:["$","p",null,{"children":["$","$L62",null,{"sizes":"(max-width: 768px) 100vw, (max-width: 1200px) 70vw, 900px","alt":"image","src":{"src":"/_next/static/media/iggy_bench.0ojommldlm3ph.png","width":1891,"height":803,"blurWidth":8,"blurHeight":3,"blurDataURL":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAADCAYAAACuyE5IAAAAQklEQVR42l3MwQ7AEBBF0dm3tI1UjCGIRPz/Dz5ix+LuTi5VZ1F+g/BqsL7B6tqiHgVNGMl8C/kDUQ8eeR7kUasTDKCFHY3Ur3EVAAAAAElFTkSuQmCC"},"className":"rounded-lg"}]}]
+45:["$","$L31",null,{"as":"h2","id":"early-adopters","children":"Early adopters"}]
+46:["$","p",null,{"children":"Overall, coding and implementing new features is one side of the story, the other is making an actual use of it. You might have the most sophisticated/performant/reliable (you name it) tooling out there, however, if no one is using it or at least experimenting with it, how could you possibly know whether it's even worth an effort to continue with the further development of the project? Well, I truly wish I had an easy answer how to find users willing to play [...]
+47:["$","p",null,{"children":"In our case, I do believe, that it was a mix of two things — a limited amount of such tooling in the Rust ecosystem (so that the language enthusiasts could to try out something fresh), as well as a much more lightweight and (hopefully) performant message streaming infrastructure than some of the well-established solutions."}]
+48:["$","p",null,{"children":["I'm fully aware that it's a bold claim, and running the synthetic benchmarks is not a viable proof (e.g. on my 7950X, I was able to hit ",["$","strong",null,{"children":"3GB/s writes and up to 10 GB/s reads"}]," with some additional caching enabled), yet, most of our early adopters were very happy with their results e.g. outnumbering Kafka while utilizing much less memory. For example, ",["$","$L32",null,{"href":"https://github.com/apache/iggy/issues/606"," [...]
+49:["$","blockquote",null,{"children":["\n",["$","p",null,{"children":"20 million msg/sec via tcp is pretty nuts and already blows several commercial systems out of the water."}],"\n"]}]
+4a:["$","p",null,{"children":["And he's not the only one who found Iggy.rs to be the right tool for his needs. For example, a few days ago, one of the users on our Discord said that thanks to Iggy he was able to ",["$","strong",null,{"children":"achieve 2ms latency when compared to 300ms"}]," with Kafka. Again, just to make it clear, I'm not saying that we're better than X or Y — I'm simply stating that for some specific usages, we might be a better choice than X or Y."]}]
+4b:["$","$L31",null,{"as":"h2","id":"clustering--replication","children":"Clustering & replication"}]
+4c:["$","p",null,{"children":"One of the most frequent questions we receive is whether we plan to incorporate some sort of data replication feature. Without any doubts, especially when considering the general system resiliency and reliability, being able to spin up a cluster of the particular piece of infrastructure (database/messaging/streaming/logging etc.) is quite often a critical feature."}]
+4d:["$","p",null,{"children":["And yes, we will certainly implement clustering in Iggy — as a matter of fact, we've already built its basic version in the ",["$","$L32",null,{"href":"https://github.com/iggy-rs/iggy-cluster-sandbox","children":"sandbox repository"}],". In order to achieve that, we've decided to (at least for now) stick to the ",["$","$L32",null,{"href":"https://raft.github.io","children":"Raft"}]," consensus algorithm. However, adding the data replication feature to the c [...]
+4e:["$","p",null,{"children":["$","$L62",null,{"sizes":"(max-width: 768px) 100vw, (max-width: 1200px) 70vw, 900px","alt":"image","src":{"src":"/_next/static/media/iggy_cluster.0vh8hf-jnuy59.png","width":2552,"height":1276,"blurWidth":8,"blurHeight":4,"blurDataURL":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAECAYAAACzzX7wAAAATElEQVR42i2MSw4AIQxCXRrtD+9/V0Y6Lkhf6AvDzDjn5FqLHt43IqhePIDqQsFBP6rqJrn35siMBnenZLGEvEIvmP9TEs5bANCs/gNIviTXgcxFfAAAAABJRU5ErkJggg=="},"className":"rounded-lg"}]}]
+4f:["$","$L31",null,{"as":"h2","id":"io_uring--thread-per-core--share-nothing","children":"io_uring & thread-per-core + share-nothing"}]
+50:["$","p",null,{"children":["What is a message streaming server, besides some more-or-less complicated logic regarding topics, partitioning, message ordering, consumer groups and a few more features? In its very core, ",["$","strong",null,{"children":"it's mostly I/O (disk + networking)"}]," — the more efficient you can make it, the greater it will be. Of course, there's a major difference between throughput and latency, especially when talking about the so-called tail latency (p99 and [...]
+51:["$","p",null,{"children":["However, due to the nature of tasks being shared across the different threads, ",["$","strong",null,{"children":"you can't simply avoid lots of context switches and data being shared & synchronized across these threads"}]," (therefore even more context switches will occur). While it's probably not an issue for like 90% or maybe even 99% use-cases, there might be some (financial systems and similar), where an unpredictable tail latency is a total no-go."]}]
+52:["$","p",null,{"children":["Certainly, there are already existing solutions dealing with such challenges, such as ",["$","$L32",null,{"href":"https://aeron.io","children":"Aeron"}],", but ",["$","strong",null,{"children":"we do believe, that we can make Iggy something much easier to use"}]," — one that can handle the typical workloads, as well as the very demanding ones, without the need of getting a PhD in specific tooling :)"]}]
+53:["$","p",null,{"children":["We've decided to ",["$","strong",null,{"children":["experiment with ",["$","$L32",null,{"href":"https://unixism.net/loti/what_is_io_uring.html","children":"io_uring"}]," to maximize the I/O performance"]}]," (and at the same time vastly reduce the need of context switches), and at the same time utilize ",["$","strong",null,{"children":"thread-per-core architecture"}],", where ",["$","strong",null,{"children":"each thread is pinned to the CPU core"}],", thus [...]
+54:["$","p",null,{"children":["And just recently, we've established yet another ",["$","$L32",null,{"href":"https://github.com/iggy-rs/iggy-thread-per-core-sandbox","children":"sandbox repository"}]," to tackle the different challenges before deciding on the best solution possible and merging these changes into core Iggy streaming server."]}]
+55:["$","p",null,{"children":["$","$L62",null,{"sizes":"(max-width: 768px) 100vw, (max-width: 1200px) 70vw, 900px","alt":"image","src":{"src":"/_next/static/media/iggy_tpc.0ejc62k9xqcu6.png","width":2298,"height":1232,"blurWidth":8,"blurHeight":4,"blurDataURL":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAECAYAAACzzX7wAAAASElEQVR42m3MsQrAMAhFUUOiLqKDOPj/H/pKWgItdLjb4VJ3IzNhZlhrYc6JMQaI6GmDqkJEQETAzF90gLtDVW+0T7/gHN7gAgOHI1PkicaLAAAAAElFTkSuQmCC"},"className":"rounded-lg"}]}]
+56:["$","p",null,{"children":"So far, we've got a very simple prototype in place, but there's still lots to be done, especially when thinking of:"}]
+57:["$","ul",null,{"children":["\n",["$","li",null,{"children":"How to evenly split partitions (the unit of data parallelism) between multiple cores?"}],"\n",["$","li",null,{"children":["How to efficiently rewrite existing server metadata heavily relying on synchronized data with ",["$","code",null,{"children":"Arc<>"}]," and ",["$","code",null,{"children":"RwLock<>"}],"?"]}],"\n",["$","li",null,{"children":"Should we load into memory the same server metadata across all the threads (sepa [...]
+58:["$","p",null,{"children":["This is just the tip of an iceberg, and we've already started ",["$","$L32",null,{"href":"https://penberg.org/papers/tpc-ancs19.pdf","children":"studying"}]," some of the existing solutions out there, including ",["$","$L32",null,{"href":"https://seastar.io","children":"Seastar"}]," framework. As you can see, this part has to be done before the clustering, as it involves lots of changes not only regarding the disk I/O, but also networking I/O."]}]
+59:["$","$L31",null,{"as":"h2","id":"production-readiness","children":"Production readiness"}]
+5a:["$","p",null,{"children":"Is it ready for production deployment? When you look at the versioning, Rust SDK is at 0.4.* and the server is currently at 0.2.*, which may look like a very long way from v1.0."}]
+5b:["$","p",null,{"children":["As mentioned before, ",["$","strong",null,{"children":"some of our users already experiment with Iggy"}]," — and simply because of this, we haven't really introduced any significant breaking changes (except one regarding data compression, which was handled by the provided data migration feature)."]}]
+5c:["$","p",null,{"children":["We can't guarantee that it will always be like this, but at least for now, we do not see anything that would dramatically impact the existing solution. One of such things could be the ",["$","strong",null,{"children":"redesigned storage, I/O, and clustering feature"}]," (as described in the previous paragraph), but even then, we'll do our best to make it as seamless upgrade as possible — and once we achieve that, it means, we're getting very close to the ve [...]
+5d:["$","p",null,{"children":["For the time being, if you're fine with a ",["$","strong",null,{"children":"single-node solution that delivers a really good message streaming performance"}],", give Iggy a try, or at least run the benchmarks to see what are its possibilities and please share your results and thoughts on our ",["$","$L32",null,{"href":"https://discord.gg/apache-iggy","children":"Discord"}]," — ",["$","strong",null,{"children":"your opinion is really important to us and we r [...]
+5e:["$","p",null,{"children":"It's been a very productive year for our core team (we've been and still are doing this in our free time), and once again, huge thanks to all our supporters and contributors!"}]
+5f:["$","p",null,{"children":["$","strong",null,{"children":"We've got the fundamentals right, now it's high time to make Iggy blazingly fast!"}]}]
+60:["$","p",null,{"children":["$","$L62",null,{"sizes":"(max-width: 768px) 100vw, (max-width: 1200px) 70vw, 900px","alt":"image","src":{"src":"/_next/static/media/iggy_rocket.15h9qw3pw3uoh.png","width":1920,"height":1080,"blurWidth":8,"blurHeight":5,"blurDataURL":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAFCAYAAAB4ka1VAAAAm0lEQVR42h2Ovw7BYBxFvz/9/FoSFS3SBYNIbB3MjYStXRhIxGKTiM0LSGxMPILB7AmPttu9Nzc5RymtEb+JtRZjDEqpOvc6IWLL7qTFPNvQ7Q/R5dkzmny54Pu8kU5GKPGE/fbEutgRBkISBvzedz6vB3EUo [...]
+61:["$","footer",null,{"className":"mt-16 border-t border-fd-border pt-8","children":["$","$L7",null,{"href":"/blogs","className":"inline-flex items-center gap-2 text-sm font-medium text-fd-primary transition-colors hover:opacity-80","children":"← Back to all posts"}]}]
+29:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]
+63:I[27201,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"IconMark"]
+27:null
+2b:[["$","title","0",{"children":"Iggy.rs — one year of building the message streaming | Apache Iggy"}],["$","link","1",{"rel":"canonical","href":"https://iggy.apache.org/blogs/2024/05/29/one-year-of-building-the-message-streaming/"}],["$","link","2",{"rel":"alternate","type":"text/markdown","href":"https://iggy.apache.org/blogs/2024/05/29/one-year-of-building-the-message-streaming.md"}],["$","meta","3",{"property":"og:title","content":"Iggy.rs — one year of building the message streamin [...]
diff --git a/blogs/2024/05/29/one-year-of-building-the-message-streaming/__next._index.txt b/blogs/2024/05/29/one-year-of-building-the-message-streaming/__next._index.txt
new file mode 100644
index 000000000..42b058136
--- /dev/null
+++ b/blogs/2024/05/29/one-year-of-building-the-message-streaming/__next._index.txt
@@ -0,0 +1,20 @@
+1:"$Sreact.fragment"
+3:I[17751,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"RootProvider"]
+4:I[39756,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"default"]
+5:I[58298,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/3-_96y-evozm0.js"],"default"]
+6:I[37457,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"default"]
+7:I[22016,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],""]
+:HL["/_next/static/chunks/1_55v0vlfews3.css","style"]
+2:T512,{"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://iggy.apache.org/#organization","name":"The Apache Software Foundation","url":"https://www.apache.org/","logo":"https://iggy.apache.org/img/asf_logo.svg","contactPoint":{"@type":"ContactPoint","contactType":"technical support","email":"dev@iggy.apache.org","url":"https://iggy.apache.org/community/"}},{"@type":"WebSite","@id":"https://iggy.apache.org/#website","name":"Apache Iggy","url":"https://iggy.a [...]
+0:{"buildId":"CEAllZE6ERPzzxzpa_n8G","data":[{"rsc":["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/1_55v0vlfews3.css","precedence":"next"}],["$","script","script-0",{"src":"/_next/static/chunks/05hk4ely-lns6.js","async":true}],["$","script","script-1",{"src":"/_next/static/chunks/2tvyahbdutabx.js","async":true}]],["$","html",null,{"lang":"en","suppressHydrationWarning":true,"children":["$","body",null,{"className":"flex min-h-screen flex-col  [...]
+10:I[79520,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],""]
+11:I[69877,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"Matomo"]
+8:["$","a",null,{"href":"/sitemap.xml","className":"underline hover:text-fd-primary","children":"/sitemap.xml"}]
+9:["$","a",null,{"href":"/llms.txt","className":"underline hover:text-fd-primary","children":"/llms.txt"}]
+a:["$","$L10",null,{"id":"matomo","strategy":"afterInteractive","children":"var _paq = window._paq = window._paq || [];\n_paq.push([\"setDoNotTrack\", true]);\n_paq.push([\"disableCookies\"]);\n_paq.push(['trackPageView']);\n_paq.push(['enableLinkTracking']);\n(function() {\n  var u=\"https://analytics.apache.org/\";\n  _paq.push(['setTrackerUrl', u+'matomo.php']);\n  _paq.push(['setSiteId', '80']);\n  var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];\n  [...]
+b:["$","$L11",null,{}]
+d:300
+f:true
+d:C
+e:0
+c:"$undefined"
diff --git a/blogs/2024/05/29/one-year-of-building-the-message-streaming/__next._tree.txt b/blogs/2024/05/29/one-year-of-building-the-message-streaming/__next._tree.txt
new file mode 100644
index 000000000..f6f2ce4f5
--- /dev/null
+++ b/blogs/2024/05/29/one-year-of-building-the-message-streaming/__next._tree.txt
@@ -0,0 +1,3 @@
+:HL["/_next/static/chunks/1_55v0vlfews3.css","style"]
+:HL["/img/authors/piotr.png","image"]
+0:{"tree":{"name":"","param":null,"prefetchHints":4112,"slots":{"children":{"name":"(site)","param":null,"prefetchHints":4096,"slots":{"children":{"name":"blogs","param":null,"prefetchHints":4160,"slots":{"children":{"name":"slug","param":{"type":"c","key":"2024/05/29/one-year-of-building-the-message-streaming","siblings":[]},"prefetchHints":4192,"slots":{"children":{"name":"__PAGE__","param":null,"prefetchHints":4256,"slots":null}}}}}}}}},"staleTime":300,"buildId":"CEAllZE6ERPzzxzpa_n8G"}
diff --git a/blogs/2024/05/29/one-year-of-building-the-message-streaming/index.html b/blogs/2024/05/29/one-year-of-building-the-message-streaming/index.html
new file mode 100644
index 000000000..5176871ef
--- /dev/null
+++ b/blogs/2024/05/29/one-year-of-building-the-message-streaming/index.html
@@ -0,0 +1,78 @@
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" href="/img/authors/piotr.png" as="image"/><link rel="stylesheet" href="/_next/static/chunks/1_55v0vlfews3.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/1qt6pht_u0de1.js"/><script src="/_next/static/chunks/1iye7dwhtxrnu.js" async=""></script><script src="/_next/static/chunks/1t7fq8 [...]
+<p><strong>It&#x27;s been a little over a year</strong>, since the <a href="https://iggy.rs" rel="noreferrer noopener" target="_blank">Iggy.rs</a> was born. The initial idea of building a side project (as a way of studying Rust) — an infrastructure for the message streaming (think of Kafka, RedPanda, Aeron etc.) — eventually turned out to be something much bigger that I could&#x27;ve ever imagined. In the <a href="https://blog.iggy.rs/posts/building-message-streaming-in-rust/" rel="noref [...]
+<p>This <strong>particular article</strong> turned out to be a sort of <strong>catalyst</strong>, as it received a really nice traction on <a href="https://www.reddit.com/r/rust/comments/18tgubd/iggyrs_building_message_streaming_in_rust/" rel="noreferrer noopener" target="_blank">Reddit</a>, and was also mentioned on the main site of <a href="https://news.ycombinator.com/item?id=38868115" rel="noreferrer noopener" target="_blank">Hacker News</a>, which I do believe were the two main reas [...]
+<p>And although it may seem as if the project development has recently slowed down a bit, I&#x27;d say it&#x27;s quite the opposite — let me quickly summary, what we&#x27;ve achieved so far during the last few months and what we&#x27;re focusing on now, as the future looks bright :)</p>
+<p><img alt="image" loading="lazy" width="795" height="542" decoding="async" data-nimg="1" class="rounded-lg" style="color:transparent" src="/_next/static/media/iggy_stars.39e41437tycxn.png"/></p>
+<h2 id="community" class="group/heading flex scroll-m-28 flex-row items-center gap-1"><a data-card="" href="#community">Community</a><button aria-label="Copy Anchor Link" class="inline-flex items-center justify-center rounded-md text-sm font-medium duration-100 disabled:pointer-events-none disabled:opacity-50 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-fd-ring hover:bg-fd-accent hover:text-fd-accent-foreground p-1 [&amp;_svg]:size-4 not-prose shrink-0 text-fd-muted [...]
+<p>First and foremost, if it weren&#x27;t for the community, we wouldn&#x27;t have seen such an enormous growth of the Iggy&#x27;s ecosystem — we&#x27;ve received the dozens of pull requests and there&#x27;s ~250 members on our <a href="https://discord.gg/apache-iggy" rel="noreferrer noopener" target="_blank">Discord</a>. Whether we talk about bug fixes, improvements, new features, or just sharing the experiences and discussing potential ideas — it&#x27;s all equally important.</p>
+<p>And it&#x27;s been even more than that — we&#x27;ve seen our community members take on <strong>building the new SDKs</strong> in their favorite programming languages, fully on their own. Today, you can find the following list of supported SDKs for Iggy.rs — some of them could be lagging behind, but it&#x27;s expected, as the project is still evolving, and it&#x27;s not an easy task, to come up with a great development experience from the very beginning.</p>
+<ul>
+<li><a href="https://github.com/apache/iggy" rel="noreferrer noopener" target="_blank">Rust</a></li>
+<li><a href="https://github.com/iggy-rs/iggy-dotnet-client" rel="noreferrer noopener" target="_blank">C#</a></li>
+<li><a href="https://github.com/iggy-rs/iggy-cpp-client" rel="noreferrer noopener" target="_blank">C++</a></li>
+<li><a href="https://github.com/iggy-rs/iggy-node-client" rel="noreferrer noopener" target="_blank">Node (TS)</a></li>
+<li><a href="https://github.com/iggy-rs/iggy-go-client" rel="noreferrer noopener" target="_blank">Go</a></li>
+<li><a href="https://github.com/iggy-rs/iggy-python-client" rel="noreferrer noopener" target="_blank">Python</a></li>
+<li><a href="https://github.com/iggy-rs/iggy-java-client" rel="noreferrer noopener" target="_blank">Java</a></li>
+<li><a href="https://github.com/iggy-rs/iggy-elixir-client" rel="noreferrer noopener" target="_blank">Elixir</a></li>
+</ul>
+<h2 id="changelog" class="group/heading flex scroll-m-28 flex-row items-center gap-1"><a data-card="" href="#changelog">Changelog</a><button aria-label="Copy Anchor Link" class="inline-flex items-center justify-center rounded-md text-sm font-medium duration-100 disabled:pointer-events-none disabled:opacity-50 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-fd-ring hover:bg-fd-accent hover:text-fd-accent-foreground p-1 [&amp;_svg]:size-4 not-prose shrink-0 text-fd-muted [...]
+<p>Adding the brand new SDKs wasn&#x27;t the only great thing that has happened during last few months. We&#x27;ve also made quite a lot of improvements for the streaming server itself:</p>
+<ul>
+<li>Increased the streaming server throughput by over 30% for both writes and reads</li>
+<li>Added messages compression for client-side &amp; server-side supporting the different algorithms</li>
+<li>Implemented a new way of message batching with an additional tooling for data migration</li>
+<li>Fixed the possible server-side deadlock that could happen for a specific configuration</li>
+<li>Fixed issues with possible memory leaks when storing too many indices in memory</li>
+<li>Rebuilt our custom benchmarking tool</li>
+<li>Improved TCP connection handling</li>
+<li>Constantly upgrading our CI/CD with lots of testing, different runtimes, artifacts, crates and Docker images releases</li>
+<li>Refactored the existing Rust client SDK to follow the new conventions (without the breaking changes to the previous one)</li>
+</ul>
+<p>And at the same time, we&#x27;ve been experimenting a lot with some fancy stuff, which you can read about in the last paragraphs :)</p>
+<p><img alt="image" loading="lazy" width="2117" height="367" decoding="async" data-nimg="1" class="rounded-lg" style="color:transparent" src="/_next/static/media/iggy_perf.0gkt2u6iax1h_.png"/></p>
+<h2 id="tooling" class="group/heading flex scroll-m-28 flex-row items-center gap-1"><a data-card="" href="#tooling">Tooling</a><button aria-label="Copy Anchor Link" class="inline-flex items-center justify-center rounded-md text-sm font-medium duration-100 disabled:pointer-events-none disabled:opacity-50 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-fd-ring hover:bg-fd-accent hover:text-fd-accent-foreground p-1 [&amp;_svg]:size-4 not-prose shrink-0 text-fd-muted-foreg [...]
+<p>The core message streaming server and multiple SDKs might sound as the most important parts of the whole ecosystem, but let&#x27;s not forget about the <strong>management tools</strong>. How to quickly connect to the server, create new topics, validate if the messages are being sent correctly, change the user permissions or check the node statistics?</p>
+<p>This is where our <strong><a href="https://github.com/apache/iggy/tree/master/core/cli" rel="noreferrer noopener" target="_blank">CLI</a> and <a href="https://github.com/iggy-rs/iggy-web-ui" rel="noreferrer noopener" target="_blank">Web UI</a> come in handy</strong>. If you&#x27;re a fan of working with the terminal and used to the great developer experience, you&#x27;ll find our CLI a joy to work with.</p>
+<p><img alt="image" loading="lazy" width="1743" height="766" decoding="async" data-nimg="1" class="rounded-lg" style="color:transparent" src="/_next/static/media/iggy_cli.3s80q2olm9gpf.png"/></p>
+<p>On the other hand, if you prefer a graphical interface accessible via your browser, Web UI has got you covered. What&#x27;s even more impressive, is that both of these tools have been developed by the single developers.</p>
+<p><img alt="image" loading="lazy" width="2559" height="1353" decoding="async" data-nimg="1" class="rounded-lg" style="color:transparent" src="/_next/static/media/iggy_web.1g9_wep0g51yk.png"/></p>
+<p>Last but not least, in order to run the benchmarks, we have our own <a href="https://github.com/apache/iggy/tree/master/core/bench" rel="noreferrer noopener" target="_blank">bench</a> available as a part of the core repository — you can easily configure the number of producers, consumers, streams, etc. and get an overview of the possible streaming performance on your machine.</p>
+<p><img alt="image" loading="lazy" width="1891" height="803" decoding="async" data-nimg="1" class="rounded-lg" style="color:transparent" src="/_next/static/media/iggy_bench.0ojommldlm3ph.png"/></p>
+<h2 id="early-adopters" class="group/heading flex scroll-m-28 flex-row items-center gap-1"><a data-card="" href="#early-adopters">Early adopters</a><button aria-label="Copy Anchor Link" class="inline-flex items-center justify-center rounded-md text-sm font-medium duration-100 disabled:pointer-events-none disabled:opacity-50 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-fd-ring hover:bg-fd-accent hover:text-fd-accent-foreground p-1 [&amp;_svg]:size-4 not-prose shrink- [...]
+<p>Overall, coding and implementing new features is one side of the story, the other is making an actual use of it. You might have the most sophisticated/performant/reliable (you name it) tooling out there, however, if no one is using it or at least experimenting with it, how could you possibly know whether it&#x27;s even worth an effort to continue with the further development of the project? Well, I truly wish I had an easy answer how to find users willing to play with your new shiny toy.</p>
+<p>In our case, I do believe, that it was a mix of two things — a limited amount of such tooling in the Rust ecosystem (so that the language enthusiasts could to try out something fresh), as well as a much more lightweight and (hopefully) performant message streaming infrastructure than some of the well-established solutions.</p>
+<p>I&#x27;m fully aware that it&#x27;s a bold claim, and running the synthetic benchmarks is not a viable proof (e.g. on my 7950X, I was able to hit <strong>3GB/s writes and up to 10 GB/s reads</strong> with some additional caching enabled), yet, most of our early adopters were very happy with their results e.g. outnumbering Kafka while utilizing much less memory. For example, <a href="https://github.com/apache/iggy/issues/606" rel="noreferrer noopener" target="_blank">Marvin</a> wrote:</p>
+<blockquote>
+<p>20 million msg/sec via tcp is pretty nuts and already blows several commercial systems out of the water.</p>
+</blockquote>
+<p>And he&#x27;s not the only one who found Iggy.rs to be the right tool for his needs. For example, a few days ago, one of the users on our Discord said that thanks to Iggy he was able to <strong>achieve 2ms latency when compared to 300ms</strong> with Kafka. Again, just to make it clear, I&#x27;m not saying that we&#x27;re better than X or Y — I&#x27;m simply stating that for some specific usages, we might be a better choice than X or Y.</p>
+<h2 id="clustering--replication" class="group/heading flex scroll-m-28 flex-row items-center gap-1"><a data-card="" href="#clustering--replication">Clustering &amp; replication</a><button aria-label="Copy Anchor Link" class="inline-flex items-center justify-center rounded-md text-sm font-medium duration-100 disabled:pointer-events-none disabled:opacity-50 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-fd-ring hover:bg-fd-accent hover:text-fd-accent-foreground p-1 [&am [...]
+<p>One of the most frequent questions we receive is whether we plan to incorporate some sort of data replication feature. Without any doubts, especially when considering the general system resiliency and reliability, being able to spin up a cluster of the particular piece of infrastructure (database/messaging/streaming/logging etc.) is quite often a critical feature.</p>
+<p>And yes, we will certainly implement clustering in Iggy — as a matter of fact, we&#x27;ve already built its basic version in the <a href="https://github.com/iggy-rs/iggy-cluster-sandbox" rel="noreferrer noopener" target="_blank">sandbox repository</a>. In order to achieve that, we&#x27;ve decided to (at least for now) stick to the <a href="https://raft.github.io" rel="noreferrer noopener" target="_blank">Raft</a> consensus algorithm. However, adding the data replication feature to the [...]
+<p><img alt="image" loading="lazy" width="2552" height="1276" decoding="async" data-nimg="1" class="rounded-lg" style="color:transparent" src="/_next/static/media/iggy_cluster.0vh8hf-jnuy59.png"/></p>
+<h2 id="io_uring--thread-per-core--share-nothing" class="group/heading flex scroll-m-28 flex-row items-center gap-1"><a data-card="" href="#io_uring--thread-per-core--share-nothing">io_uring &amp; thread-per-core + share-nothing</a><button aria-label="Copy Anchor Link" class="inline-flex items-center justify-center rounded-md text-sm font-medium duration-100 disabled:pointer-events-none disabled:opacity-50 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-fd-ring hover:b [...]
+<p>What is a message streaming server, besides some more-or-less complicated logic regarding topics, partitioning, message ordering, consumer groups and a few more features? In its very core, <strong>it&#x27;s mostly I/O (disk + networking)</strong> — the more efficient you can make it, the greater it will be. Of course, there&#x27;s a major difference between throughput and latency, especially when talking about the so-called tail latency (p99 and more). Wouldn&#x27;t it be great if we  [...]
+<p>However, due to the nature of tasks being shared across the different threads, <strong>you can&#x27;t simply avoid lots of context switches and data being shared &amp; synchronized across these threads</strong> (therefore even more context switches will occur). While it&#x27;s probably not an issue for like 90% or maybe even 99% use-cases, there might be some (financial systems and similar), where an unpredictable tail latency is a total no-go.</p>
+<p>Certainly, there are already existing solutions dealing with such challenges, such as <a href="https://aeron.io" rel="noreferrer noopener" target="_blank">Aeron</a>, but <strong>we do believe, that we can make Iggy something much easier to use</strong> — one that can handle the typical workloads, as well as the very demanding ones, without the need of getting a PhD in specific tooling :)</p>
+<p>We&#x27;ve decided to <strong>experiment with <a href="https://unixism.net/loti/what_is_io_uring.html" rel="noreferrer noopener" target="_blank">io_uring</a> to maximize the I/O performance</strong> (and at the same time vastly reduce the need of context switches), and at the same time utilize <strong>thread-per-core architecture</strong>, where <strong>each thread is pinned to the CPU core</strong>, thus keeping the data locally, without the need of sharing it with the other threads  [...]
+<p>And just recently, we&#x27;ve established yet another <a href="https://github.com/iggy-rs/iggy-thread-per-core-sandbox" rel="noreferrer noopener" target="_blank">sandbox repository</a> to tackle the different challenges before deciding on the best solution possible and merging these changes into core Iggy streaming server.</p>
+<p><img alt="image" loading="lazy" width="2298" height="1232" decoding="async" data-nimg="1" class="rounded-lg" style="color:transparent" src="/_next/static/media/iggy_tpc.0ejc62k9xqcu6.png"/></p>
+<p>So far, we&#x27;ve got a very simple prototype in place, but there&#x27;s still lots to be done, especially when thinking of:</p>
+<ul>
+<li>How to evenly split partitions (the unit of data parallelism) between multiple cores?</li>
+<li>How to efficiently rewrite existing server metadata heavily relying on synchronized data with <code>Arc&lt;&gt;</code> and <code>RwLock&lt;&gt;</code>?</li>
+<li>Should we load into memory the same server metadata across all the threads (separately from each other) and notify all of them when something changes?</li>
+<li>Should there be single or multiple threads handling the incoming TCP connections?</li>
+<li>When <code>Thread #1</code> receives the request, which has to access the partition from <code>Thread #2</code>, should we use an async two-way channel (remember, no explicit locking and data synchronization between the threads) or maybe just send the descriptor using a one-way channel to the second thread to complete the request?</li>
+<li>What and when could become a bottleneck in such architecture?</li>
+</ul>
+<p>This is just the tip of an iceberg, and we&#x27;ve already started <a href="https://penberg.org/papers/tpc-ancs19.pdf" rel="noreferrer noopener" target="_blank">studying</a> some of the existing solutions out there, including <a href="https://seastar.io" rel="noreferrer noopener" target="_blank">Seastar</a> framework. As you can see, this part has to be done before the clustering, as it involves lots of changes not only regarding the disk I/O, but also networking I/O.</p>
+<h2 id="production-readiness" class="group/heading flex scroll-m-28 flex-row items-center gap-1"><a data-card="" href="#production-readiness">Production readiness</a><button aria-label="Copy Anchor Link" class="inline-flex items-center justify-center rounded-md text-sm font-medium duration-100 disabled:pointer-events-none disabled:opacity-50 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-fd-ring hover:bg-fd-accent hover:text-fd-accent-foreground p-1 [&amp;_svg]:size-4 [...]
+<p>Is it ready for production deployment? When you look at the versioning, Rust SDK is at 0.4.* and the server is currently at 0.2.*, which may look like a very long way from v1.0.</p>
+<p>As mentioned before, <strong>some of our users already experiment with Iggy</strong> — and simply because of this, we haven&#x27;t really introduced any significant breaking changes (except one regarding data compression, which was handled by the provided data migration feature).</p>
+<p>We can&#x27;t guarantee that it will always be like this, but at least for now, we do not see anything that would dramatically impact the existing solution. One of such things could be the <strong>redesigned storage, I/O, and clustering feature</strong> (as described in the previous paragraph), but even then, we&#x27;ll do our best to make it as seamless upgrade as possible — and once we achieve that, it means, we&#x27;re getting very close to the version 1.0.</p>
+<p>For the time being, if you&#x27;re fine with a <strong>single-node solution that delivers a really good message streaming performance</strong>, give Iggy a try, or at least run the benchmarks to see what are its possibilities and please share your results and thoughts on our <a href="https://discord.gg/apache-iggy" rel="noreferrer noopener" target="_blank">Discord</a> — <strong>your opinion is really important to us and we respect it no matter what</strong>.</p>
+<p>It&#x27;s been a very productive year for our core team (we&#x27;ve been and still are doing this in our free time), and once again, huge thanks to all our supporters and contributors!</p>
+<p><strong>We&#x27;ve got the fundamentals right, now it&#x27;s high time to make Iggy blazingly fast!</strong></p>
+<p><img alt="image" loading="lazy" width="1920" height="1080" decoding="async" data-nimg="1" class="rounded-lg" style="color:transparent" src="/_next/static/media/iggy_rocket.15h9qw3pw3uoh.png"/></p></div><footer class="mt-16 border-t border-fd-border pt-8"><a class="inline-flex items-center gap-2 text-sm font-medium text-fd-primary transition-colors hover:opacity-80" href="/blogs/">← Back to all posts</a></footer></article></main><!--$--><!--/$--><footer class="border-t border-fd-border [...]
\ No newline at end of file
diff --git a/blogs/2024/05/29/one-year-of-building-the-message-streaming/index.txt b/blogs/2024/05/29/one-year-of-building-the-message-streaming/index.txt
new file mode 100644
index 000000000..f5d4f0e18
--- /dev/null
+++ b/blogs/2024/05/29/one-year-of-building-the-message-streaming/index.txt
@@ -0,0 +1,102 @@
+1:"$Sreact.fragment"
+3:I[17751,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"RootProvider"]
+4:I[39756,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"default"]
+5:I[58298,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/3-_96y-evozm0.js"],"default"]
+6:I[37457,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"default"]
+7:I[22016,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],""]
+12:I[68027,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"default",1]
+:HL["/_next/static/chunks/1_55v0vlfews3.css","style"]
+2:T512,{"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://iggy.apache.org/#organization","name":"The Apache Software Foundation","url":"https://www.apache.org/","logo":"https://iggy.apache.org/img/asf_logo.svg","contactPoint":{"@type":"ContactPoint","contactType":"technical support","email":"dev@iggy.apache.org","url":"https://iggy.apache.org/community/"}},{"@type":"WebSite","@id":"https://iggy.apache.org/#website","name":"Apache Iggy","url":"https://iggy.a [...]
+0:{"P":null,"c":["","blogs","2024","05","29","one-year-of-building-the-message-streaming",""],"q":"","i":false,"f":[[["",{"children":["(site)",{"children":["blogs",{"children":[["slug","2024/05/29/one-year-of-building-the-message-streaming","c",[]],{"children":["__PAGE__",{},"$undefined","$undefined",4608]},"$undefined","$undefined",4608]},"$undefined","$undefined",4608]},"$undefined","$undefined",4608]},"$undefined","$undefined",4624],[["$","$1","c",{"children":[[["$","link","0",{"rel": [...]
+14:I[79520,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],""]
+15:I[69877,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"Matomo"]
+16:I[5014,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],"default"]
+17:I[64345,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js"],"HomeLayout"]
+18:I[88760,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js"],"Logo"]
+19:I[15269,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js"],"CommunityDropdown"]
+1a:I[15269,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js"],"communityLinks"]
+1b:I[29966,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js"],"ASFDropdown"]
+1c:I[36330,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js"],"ASFMobileLinks"]
+25:I[97367,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"OutletBoundary"]
+26:"$Sreact.suspense"
+28:I[97367,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"ViewportBoundary"]
+2a:I[97367,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js"],"MetadataBoundary"]
+8:["$","$L7","/community",{"href":"/community","className":"transition-colors hover:text-fd-primary","children":"Community"}]
+9:["$","p",null,{"className":"mt-6 max-w-md text-xs text-fd-muted-foreground","children":["Every page on this site is listed in"," ",["$","a",null,{"href":"/sitemap.xml","className":"underline hover:text-fd-primary","children":"/sitemap.xml"}],", and"," ",["$","a",null,{"href":"/llms.txt","className":"underline hover:text-fd-primary","children":"/llms.txt"}]," ","summarises the documentation."]}]
+a:["$","$L14",null,{"id":"matomo","strategy":"afterInteractive","children":"var _paq = window._paq = window._paq || [];\n_paq.push([\"setDoNotTrack\", true]);\n_paq.push([\"disableCookies\"]);\n_paq.push(['trackPageView']);\n_paq.push(['enableLinkTracking']);\n(function() {\n  var u=\"https://analytics.apache.org/\";\n  _paq.push(['setTrackerUrl', u+'matomo.php']);\n  _paq.push(['setSiteId', '80']);\n  var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];\n  [...]
+b:["$","$L15",null,{}]
+c:["$","$1","c",{"children":[[["$","script","script-0",{"src":"/_next/static/chunks/241-fa32f9zay.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/_next/static/chunks/3x8y3fmtn6lnc.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/_next/static/chunks/250gopd52txql.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/_next/static/chunks/0n3fueko2xquo.js","async":true,"nonce":"$undefined"}]],[["$","div",null,{"className" [...]
+d:["$","$1","c",{"children":[null,["$","$L4",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}]
+e:["$","$1","c",{"children":[null,["$","$L4",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}]
+f:["$","$1","c",{"children":["$L24",[["$","script","script-0",{"src":"/_next/static/chunks/1k39uva2a578s.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/_next/static/chunks/23ktdyx90z0v3.js","async":true,"nonce":"$undefined"}]],["$","$L25",null,{"children":["$","$26",null,{"name":"Next.MetadataOutlet","children":"$@27"}]}]]}]
+11:["$","$1","h",{"children":[null,["$","$L28",null,{"children":"$L29"}],["$","div",null,{"hidden":true,"children":["$","$L2a",null,{"children":["$","$26",null,{"name":"Next.Metadata","children":"$L2b"}]}]}],null]}]
+13:["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/1_55v0vlfews3.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]
+10:C
+1d:["$","$L7","/",{"href":"/","className":"transition-colors hover:text-fd-primary","children":"Home"}]
+1e:["$","$L7","/docs",{"href":"/docs","className":"transition-colors hover:text-fd-primary","children":"Documentation"}]
+1f:["$","$L7","/blogs",{"href":"/blogs","className":"transition-colors hover:text-fd-primary","children":"Blog"}]
+20:["$","$L7","/downloads",{"href":"/downloads","className":"transition-colors hover:text-fd-primary","children":"Downloads"}]
+21:["$","$L7","/community",{"href":"/community","className":"transition-colors hover:text-fd-primary","children":"Community"}]
+22:["$","p",null,{"className":"mt-6 max-w-md text-xs text-fd-muted-foreground","children":["Every page on this site is listed in"," ",["$","a",null,{"href":"/sitemap.xml","className":"underline hover:text-fd-primary","children":"/sitemap.xml"}],", and"," ",["$","a",null,{"href":"/llms.txt","className":"underline hover:text-fd-primary","children":"/llms.txt"}]," ","summarises the documentation."]}]
+23:["$","footer",null,{"className":"border-t border-fd-border bg-fd-background px-6 py-14 md:px-12","children":["$","div",null,{"className":"mx-auto max-w-6xl","children":[["$","div",null,{"className":"grid gap-10 sm:grid-cols-2 lg:grid-cols-4","children":[["$","div","Docs",{"children":[["$","h2",null,{"className":"mb-4 text-sm font-semibold uppercase tracking-wide text-fd-primary","children":"Docs"}],["$","ul",null,{"className":"space-y-2.5 text-sm","children":[["$","li","/docs",{"child [...]
+2c:["$","li","https://www.apache.org/foundation/contributing.html",{"children":["$","$L7",null,{"href":"https://www.apache.org/foundation/contributing.html","target":"_blank","rel":"noopener noreferrer","className":"text-fd-muted-foreground transition-colors hover:text-fd-foreground","children":"Donate"}]}]
+2d:["$","li","https://www.apache.org/foundation/sponsorship.html",{"children":["$","$L7",null,{"href":"https://www.apache.org/foundation/sponsorship.html","target":"_blank","rel":"noopener noreferrer","className":"text-fd-muted-foreground transition-colors hover:text-fd-foreground","children":"Sponsors"}]}]
+2e:["$","li","https://www.apache.org/security/",{"children":["$","$L7",null,{"href":"https://www.apache.org/security/","target":"_blank","rel":"noopener noreferrer","className":"text-fd-muted-foreground transition-colors hover:text-fd-foreground","children":"Security"}]}]
+2f:["$","li","https://privacy.apache.org/policies/privacy-policy-public.html",{"children":["$","$L7",null,{"href":"https://privacy.apache.org/policies/privacy-policy-public.html","target":"_blank","rel":"noopener noreferrer","className":"text-fd-muted-foreground transition-colors hover:text-fd-foreground","children":"Privacy"}]}]
+30:["$","div",null,{"className":"mt-12 border-t border-fd-border pt-8 text-xs leading-relaxed text-fd-muted-foreground/70","children":[["$","p",null,{"className":"mt-4","children":["Copyright © ",2026," The Apache Software Foundation, Licensed under the Apache License, Version 2.0."]}],["$","p",null,{"className":"mt-4","children":"Apache Iggy, Iggy, Apache, and the Apache Iggy logo are trademarks or registered trademarks of The Apache Software Foundation. All other marks mentioned may be [...]
+31:I[94157,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],"Heading"]
+32:I[47873,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],"default"]
+:HL["/img/authors/piotr.png","image"]
+24:["$","main",null,{"className":"min-h-screen px-6 py-16 md:px-12","children":["$","article",null,{"className":"mx-auto max-w-5xl","children":[["$","header",null,{"className":"mb-10","children":[["$","time",null,{"className":"text-sm font-medium text-fd-muted-foreground","children":"May 29, 2024"}],["$","h1",null,{"className":"mt-3 text-3xl font-extrabold tracking-tight text-fd-foreground md:text-5xl","children":"Iggy.rs — one year of building the message streaming"}],["$","div",null,{" [...]
+62:I[24110,["/_next/static/chunks/05hk4ely-lns6.js","/_next/static/chunks/2tvyahbdutabx.js","/_next/static/chunks/241-fa32f9zay.js","/_next/static/chunks/3x8y3fmtn6lnc.js","/_next/static/chunks/250gopd52txql.js","/_next/static/chunks/0n3fueko2xquo.js","/_next/static/chunks/1k39uva2a578s.js","/_next/static/chunks/23ktdyx90z0v3.js"],"Image"]
+33:["$","p",null,{"children":["$","$L62",null,{"sizes":"(max-width: 768px) 100vw, (max-width: 1200px) 70vw, 900px","alt":"image","src":{"src":"/_next/static/media/iggy_stars.39e41437tycxn.png","width":795,"height":542,"blurWidth":8,"blurHeight":5,"blurDataURL":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAFCAYAAAB4ka1VAAAAZElEQVR42k2OWQ6AIAxEuYAoIFLWCPH+VxxbxcSPl2a2pIpyR6wDq4twocL6DGMJjrVllBQMm4sJD5qRUE+tUrugeSH8l99AHenExobfE4wjrFKe4VughlIG0vwl8BWodvjYcAPpazJO7CwojgAAAABJRU5ErkJg [...]
+34:["$","$L31",null,{"as":"h2","id":"community","children":"Community"}]
+35:["$","p",null,{"children":["First and foremost, if it weren't for the community, we wouldn't have seen such an enormous growth of the Iggy's ecosystem — we've received the dozens of pull requests and there's ~250 members on our ",["$","$L32",null,{"href":"https://discord.gg/apache-iggy","children":"Discord"}],". Whether we talk about bug fixes, improvements, new features, or just sharing the experiences and discussing potential ideas — it's all equally important."]}]
+36:["$","p",null,{"children":["And it's been even more than that — we've seen our community members take on ",["$","strong",null,{"children":"building the new SDKs"}]," in their favorite programming languages, fully on their own. Today, you can find the following list of supported SDKs for Iggy.rs — some of them could be lagging behind, but it's expected, as the project is still evolving, and it's not an easy task, to come up with a great development experience from the very beginning."]}]
+37:["$","ul",null,{"children":["\n",["$","li",null,{"children":["$","$L32",null,{"href":"https://github.com/apache/iggy","children":"Rust"}]}],"\n",["$","li",null,{"children":["$","$L32",null,{"href":"https://github.com/iggy-rs/iggy-dotnet-client","children":"C#"}]}],"\n",["$","li",null,{"children":["$","$L32",null,{"href":"https://github.com/iggy-rs/iggy-cpp-client","children":"C++"}]}],"\n",["$","li",null,{"children":["$","$L32",null,{"href":"https://github.com/iggy-rs/iggy-node-client [...]
+38:["$","$L31",null,{"as":"h2","id":"changelog","children":"Changelog"}]
+39:["$","p",null,{"children":"Adding the brand new SDKs wasn't the only great thing that has happened during last few months. We've also made quite a lot of improvements for the streaming server itself:"}]
+3a:["$","ul",null,{"children":["\n",["$","li",null,{"children":"Increased the streaming server throughput by over 30% for both writes and reads"}],"\n",["$","li",null,{"children":"Added messages compression for client-side & server-side supporting the different algorithms"}],"\n",["$","li",null,{"children":"Implemented a new way of message batching with an additional tooling for data migration"}],"\n",["$","li",null,{"children":"Fixed the possible server-side deadlock that could happen f [...]
+3b:["$","p",null,{"children":"And at the same time, we've been experimenting a lot with some fancy stuff, which you can read about in the last paragraphs :)"}]
+3c:["$","p",null,{"children":["$","$L62",null,{"sizes":"(max-width: 768px) 100vw, (max-width: 1200px) 70vw, 900px","alt":"image","src":{"src":"/_next/static/media/iggy_perf.0gkt2u6iax1h_.png","width":2117,"height":367,"blurWidth":8,"blurHeight":1,"blurDataURL":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAABCAYAAADjAO9DAAAAGklEQVR42mPg4+f7z8rK+p+ZmRkDMzEx/QcAgSgIZsYChBAAAAAASUVORK5CYII="},"className":"rounded-lg"}]}]
... 149068 lines suppressed ...