{"id":551184,"date":"2026-07-31T05:20:39","date_gmt":"2026-07-31T05:20:39","guid":{"rendered":"https:\/\/webkul.com\/blog\/?p=551184"},"modified":"2026-07-31T05:20:47","modified_gmt":"2026-07-31T05:20:47","slug":"cloudflare-open-sources-pvcli","status":"publish","type":"post","link":"https:\/\/webkul.com\/blog\/cloudflare-open-sources-pvcli\/","title":{"rendered":"Cloudflare Open Sources pvcli"},"content":{"rendered":"\n<p>Debugging privacy-preserving protocols has always been painful, and that&#8217;s exactly the gap Cloudflare pvcli was built to close.<\/p>\n\n\n\n<p>You can&#8217;t just log the request and look at it, because most of it is encrypted by design.<\/p>\n\n\n\n<p>Cloudflare just made this easier.<\/p>\n\n\n\n<p>It open-sourced Cloudflare pvcli, a command-line tool built to debug protocols like Oblivious HTTP (OHTTP).<\/p>\n\n\n\n<p>The same privacy-first approach also powers <a href=\"https:\/\/store.webkul.com\/woocommerce-turnstile-captcha.html\">WooCommerce Cloudflare Turnstile<\/a>, which verifies real users without relying on traditional CAPTCHA challenges or invasive tracking.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Why This Is Hard in the First Place<\/h2>\n\n\n\n<p>Normal HTTP debugging is simple.<\/p>\n\n\n\n<p>You send a request, read the response, and you&#8217;re done.<\/p>\n\n\n\n<p>Privacy protocols don&#8217;t work that way.<\/p>\n\n\n\n<p>A single OHTTP request passes through multiple parties before it reaches its destination.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">How a Request Travels<\/h2>\n\n\n\n<p>Here&#8217;s what happens at each hop:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>The client encrypts the request and sends it to a relay.<\/li>\n\n\n\n<li>The relay sees the client&#8217;s IP, but can&#8217;t decrypt the request.<\/li>\n\n\n\n<li>The gateway decrypts the request, but never learns the client&#8217;s IP.<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" width=\"1200\" height=\"955\" src=\"https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/07\/cloudflare-open-sources-pvcli-1200x955.webp\" alt=\"Cloudflare pvcli OHTTP request workflow\" class=\"wp-image-551215\" srcset=\"https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/07\/cloudflare-open-sources-pvcli-1200x955.webp 1200w, https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/07\/cloudflare-open-sources-pvcli-300x239.webp 300w, https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/07\/cloudflare-open-sources-pvcli-250x199.webp 250w, https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/07\/cloudflare-open-sources-pvcli-768x611.webp 768w, https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/07\/cloudflare-open-sources-pvcli.webp 1406w\" sizes=\"(max-width: 1200px) 100vw, 1200px\" loading=\"lazy\" \/><\/figure>\n\n\n\n<p>Each of these steps can fail on its own.<\/p>\n\n\n\n<p>Key retrieval, encryption, binary encoding, relay forwarding, and response decryption all add their own points of failure.<\/p>\n\n\n\n<p>Without the right tooling, debugging any of this means manually inspecting binary payloads and cryptographic handshakes.<\/p>\n\n\n\n<p>That&#8217;s slow, and it&#8217;s easy to get wrong.<\/p>\n\n\n\n<p>If you want the full technical background, the <a href=\"https:\/\/www.rfc-editor.org\/rfc\/rfc9458\">OHTTP specification (RFC 9458)<\/a> Covers the protocol in detail.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">How Cloudflare pvcli Simplifies OHTTP Debugging<\/h2>\n\n\n\n<p>Cloudflare pvcli handles the repetitive parts of working with OHTTP automatically.<\/p>\n\n\n\n<p>It fetches the gateway&#8217;s public key, builds the Binary HTTP request, and encrypts the payload.<\/p>\n\n\n\n<p>It then routes that payload through the relay and gateway, and decrypts the response.<\/p>\n\n\n\n<p>All of this happens with a single command.<\/p>\n\n\n\n<p>If something goes wrong, pvcli can print detailed logs.<\/p>\n\n\n\n<p>You can see exactly what happened at each step, right in your terminal.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Before and After pvcli<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">The Old Way<\/h3>\n\n\n\n<p>Before pvcli, developers debugging OHTTP usually wrote custom scripts for each step.<\/p>\n\n\n\n<p>That meant manually building Binary HTTP payloads and handling encryption by hand.<\/p>\n\n\n\n<p>It also meant checking hex-encoded fields by eye to catch typos.<\/p>\n\n\n\n<p>A single small mistake in that process could break the entire request.<\/p>\n\n\n\n<p>Finding it often took hours of manual digging.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">The Cloudflare pvcli Way<\/h3>\n\n\n\n<p>pvcli removes that fragility.<\/p>\n\n\n\n<p>What used to take hours now takes seconds.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Using <strong>Cloudflare pvcli<\/strong><\/h2>\n\n\n\n<p>Here&#8217;s what sending an OHTTP request with pvcli looks like:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\">\npvcli -vvv --ohttp \\\n    --first-hop https:\/\/relay-cloudflare.ohttp.info \\\n    --proxy https:\/\/gateway.ohttp.info \\\n    -X POST \\\n    --header &quot;content-type: application\/json&quot; \\\n    --data &#039;{&quot;test&quot;:1}&#039; \\\n    https:&#047;&#047;target.ohttp.info\/anything<\/pre>\n\n\n\n<p>This one command builds the request, encrypts it, routes it through the relay and gateway, and prints the decrypted result.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Getting Started with Cloudflare pvcli<\/h2>\n\n\n\n<p>Installation<\/p>\n\n\n\n<p>pvcli is written in Rust and released under the Apache 2.0 license.<\/p>\n\n\n\n<p>If you already have Rust installed, you can install it straight from the <a href=\"https:\/\/github.com\/cloudflareresearch\/pvcli\">pvcli GitHub repository<\/a>:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\"># install rust if not already installed\ncurl https:\/\/sh.rustup.rs -sSf | sh\n# install pvcli\ncargo install --git https:\/\/github.com\/cloudflareresearch\/pvcli<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Documentation<\/h3>\n\n\n\n<p>The source code and full docs live on Cloudflare Research&#8217;s GitHub.<\/p>\n\n\n\n<p>It covers advanced setups like custom relays, gateways, target servers, and mTLS authentication.<\/p>\n\n\n\n<p>pvcli is also open to contributions \u2014 if you&#8217;d like to help build out support for <a href=\"https:\/\/blog.cloudflare.com\/tag\/masque\/\">MASQUE<\/a> or Privacy Pass, you can open a pull request on the GitHub repo.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Why Open Source Matters<\/h2>\n\n\n\n<p>Cloudflare pvcli started as an internal tool.<\/p>\n\n\n\n<p>Cloudflare built it to debug OHTTP while running privacy proxy infrastructure at scale.<\/p>\n\n\n\n<p>Open-sourcing it was the natural next step.<\/p>\n\n\n\n<p>It lets the wider community test, audit, and build on top of it.<\/p>\n\n\n\n<p>pvcli is useful for OHTTP today.<\/p>\n\n\n\n<p>Cloudflare expects it to extend to related privacy protocols like MASQUE over time.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Conclusion<\/h2>\n\n\n\n<p>pvcli fills a real gap in privacy protocol tooling.<\/p>\n\n\n\n<p>It turns a slow, error-prone debugging process into a single command.<\/p>\n\n\n\n<p>By open-sourcing it, Cloudflare is making privacy-preserving protocols a little more approachable for everyone building with them.<\/p>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Debugging privacy-preserving protocols has always been painful, and that&#8217;s exactly the gap Cloudflare pvcli was built to close. You can&#8217;t just log the request and look at it, because most of it is encrypted by design. Cloudflare just made this easier. It open-sourced Cloudflare pvcli, a command-line tool built to debug protocols like Oblivious HTTP <a href=\"https:\/\/webkul.com\/blog\/cloudflare-open-sources-pvcli\/\">[&#8230;]<\/a><\/p>\n","protected":false},"author":787,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-551184","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v24.5 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Cloudflare pvcli: Simplifying Privacy Protocol Debugging<\/title>\n<meta name=\"description\" content=\"Cloudflare pvcli simplifies debugging OHTTP and other privacy-preserving protocols with automated encryption, routing, and detailed logging.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/webkul.com\/blog\/cloudflare-open-sources-pvcli\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Cloudflare pvcli: Simplifying Privacy Protocol Debugging\" \/>\n<meta property=\"og:description\" content=\"Cloudflare pvcli simplifies debugging OHTTP and other privacy-preserving protocols with automated encryption, routing, and detailed logging.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/webkul.com\/blog\/cloudflare-open-sources-pvcli\/\" \/>\n<meta property=\"og:site_name\" content=\"Webkul Blog\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/webkul\/\" \/>\n<meta property=\"article:published_time\" content=\"2026-07-31T05:20:39+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-07-31T05:20:47+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/webkul.com\/blog\/wp-content\/uploads\/2026\/07\/cloudflare-open-sources-pvcli-1200x955.webp\" \/>\n<meta name=\"author\" content=\"Nainshi\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@webkul\" \/>\n<meta name=\"twitter:site\" content=\"@webkul\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Nainshi\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"3 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/webkul.com\/blog\/cloudflare-open-sources-pvcli\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/webkul.com\/blog\/cloudflare-open-sources-pvcli\/\"},\"author\":{\"name\":\"Nainshi\",\"@id\":\"https:\/\/webkul.com\/blog\/#\/schema\/person\/d957f83d1191a90aa19c28cd8712bdab\"},\"headline\":\"Cloudflare Open Sources pvcli\",\"datePublished\":\"2026-07-31T05:20:39+00:00\",\"dateModified\":\"2026-07-31T05:20:47+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/webkul.com\/blog\/cloudflare-open-sources-pvcli\/\"},\"wordCount\":608,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/webkul.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/webkul.com\/blog\/cloudflare-open-sources-pvcli\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/webkul.com\/blog\/wp-content\/uploads\/2026\/07\/cloudflare-open-sources-pvcli-1200x955.webp\",\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/webkul.com\/blog\/cloudflare-open-sources-pvcli\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/webkul.com\/blog\/cloudflare-open-sources-pvcli\/\",\"url\":\"https:\/\/webkul.com\/blog\/cloudflare-open-sources-pvcli\/\",\"name\":\"Cloudflare pvcli: Simplifying Privacy Protocol Debugging\",\"isPartOf\":{\"@id\":\"https:\/\/webkul.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/webkul.com\/blog\/cloudflare-open-sources-pvcli\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/webkul.com\/blog\/cloudflare-open-sources-pvcli\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/webkul.com\/blog\/wp-content\/uploads\/2026\/07\/cloudflare-open-sources-pvcli-1200x955.webp\",\"datePublished\":\"2026-07-31T05:20:39+00:00\",\"dateModified\":\"2026-07-31T05:20:47+00:00\",\"description\":\"Cloudflare pvcli simplifies debugging OHTTP and other privacy-preserving protocols with automated encryption, routing, and detailed logging.\",\"breadcrumb\":{\"@id\":\"https:\/\/webkul.com\/blog\/cloudflare-open-sources-pvcli\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/webkul.com\/blog\/cloudflare-open-sources-pvcli\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/webkul.com\/blog\/cloudflare-open-sources-pvcli\/#primaryimage\",\"url\":\"https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/07\/cloudflare-open-sources-pvcli.webp\",\"contentUrl\":\"https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/07\/cloudflare-open-sources-pvcli.webp\",\"width\":1406,\"height\":1119},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/webkul.com\/blog\/cloudflare-open-sources-pvcli\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/webkul.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Cloudflare Open Sources pvcli\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/webkul.com\/blog\/#website\",\"url\":\"https:\/\/webkul.com\/blog\/\",\"name\":\"Webkul Blog\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\/\/webkul.com\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/webkul.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/webkul.com\/blog\/#organization\",\"name\":\"WebKul Software Private Limited\",\"url\":\"https:\/\/webkul.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/webkul.com\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2021\/08\/webkul-logo-accent-sq.png\",\"contentUrl\":\"https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2021\/08\/webkul-logo-accent-sq.png\",\"width\":380,\"height\":380,\"caption\":\"WebKul Software Private Limited\"},\"image\":{\"@id\":\"https:\/\/webkul.com\/blog\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/webkul\/\",\"https:\/\/x.com\/webkul\",\"https:\/\/www.instagram.com\/webkul\/\",\"https:\/\/www.linkedin.com\/company\/webkul\",\"https:\/\/www.youtube.com\/user\/webkul\/\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/webkul.com\/blog\/#\/schema\/person\/d957f83d1191a90aa19c28cd8712bdab\",\"name\":\"Nainshi\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/webkul.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/22cf3b1727987fd1721098d2ece1d366aae894b669868a97dadf7fedcffd8599?s=96&d=https%3A%2F%2Fcdnblog.webkul.com%2Fblog%2Fwp-content%2Fuploads%2F2019%2F10%2Fmike.png&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/22cf3b1727987fd1721098d2ece1d366aae894b669868a97dadf7fedcffd8599?s=96&d=https%3A%2F%2Fcdnblog.webkul.com%2Fblog%2Fwp-content%2Fuploads%2F2019%2F10%2Fmike.png&r=g\",\"caption\":\"Nainshi\"},\"url\":\"https:\/\/webkul.com\/blog\/author\/nainshi-uxlab026\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Cloudflare pvcli: Simplifying Privacy Protocol Debugging","description":"Cloudflare pvcli simplifies debugging OHTTP and other privacy-preserving protocols with automated encryption, routing, and detailed logging.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/webkul.com\/blog\/cloudflare-open-sources-pvcli\/","og_locale":"en_US","og_type":"article","og_title":"Cloudflare pvcli: Simplifying Privacy Protocol Debugging","og_description":"Cloudflare pvcli simplifies debugging OHTTP and other privacy-preserving protocols with automated encryption, routing, and detailed logging.","og_url":"https:\/\/webkul.com\/blog\/cloudflare-open-sources-pvcli\/","og_site_name":"Webkul Blog","article_publisher":"https:\/\/www.facebook.com\/webkul\/","article_published_time":"2026-07-31T05:20:39+00:00","article_modified_time":"2026-07-31T05:20:47+00:00","og_image":[{"url":"https:\/\/webkul.com\/blog\/wp-content\/uploads\/2026\/07\/cloudflare-open-sources-pvcli-1200x955.webp","type":"","width":"","height":""}],"author":"Nainshi","twitter_card":"summary_large_image","twitter_creator":"@webkul","twitter_site":"@webkul","twitter_misc":{"Written by":"Nainshi","Est. reading time":"3 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/webkul.com\/blog\/cloudflare-open-sources-pvcli\/#article","isPartOf":{"@id":"https:\/\/webkul.com\/blog\/cloudflare-open-sources-pvcli\/"},"author":{"name":"Nainshi","@id":"https:\/\/webkul.com\/blog\/#\/schema\/person\/d957f83d1191a90aa19c28cd8712bdab"},"headline":"Cloudflare Open Sources pvcli","datePublished":"2026-07-31T05:20:39+00:00","dateModified":"2026-07-31T05:20:47+00:00","mainEntityOfPage":{"@id":"https:\/\/webkul.com\/blog\/cloudflare-open-sources-pvcli\/"},"wordCount":608,"commentCount":0,"publisher":{"@id":"https:\/\/webkul.com\/blog\/#organization"},"image":{"@id":"https:\/\/webkul.com\/blog\/cloudflare-open-sources-pvcli\/#primaryimage"},"thumbnailUrl":"https:\/\/webkul.com\/blog\/wp-content\/uploads\/2026\/07\/cloudflare-open-sources-pvcli-1200x955.webp","inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/webkul.com\/blog\/cloudflare-open-sources-pvcli\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/webkul.com\/blog\/cloudflare-open-sources-pvcli\/","url":"https:\/\/webkul.com\/blog\/cloudflare-open-sources-pvcli\/","name":"Cloudflare pvcli: Simplifying Privacy Protocol Debugging","isPartOf":{"@id":"https:\/\/webkul.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/webkul.com\/blog\/cloudflare-open-sources-pvcli\/#primaryimage"},"image":{"@id":"https:\/\/webkul.com\/blog\/cloudflare-open-sources-pvcli\/#primaryimage"},"thumbnailUrl":"https:\/\/webkul.com\/blog\/wp-content\/uploads\/2026\/07\/cloudflare-open-sources-pvcli-1200x955.webp","datePublished":"2026-07-31T05:20:39+00:00","dateModified":"2026-07-31T05:20:47+00:00","description":"Cloudflare pvcli simplifies debugging OHTTP and other privacy-preserving protocols with automated encryption, routing, and detailed logging.","breadcrumb":{"@id":"https:\/\/webkul.com\/blog\/cloudflare-open-sources-pvcli\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/webkul.com\/blog\/cloudflare-open-sources-pvcli\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/webkul.com\/blog\/cloudflare-open-sources-pvcli\/#primaryimage","url":"https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/07\/cloudflare-open-sources-pvcli.webp","contentUrl":"https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/07\/cloudflare-open-sources-pvcli.webp","width":1406,"height":1119},{"@type":"BreadcrumbList","@id":"https:\/\/webkul.com\/blog\/cloudflare-open-sources-pvcli\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/webkul.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Cloudflare Open Sources pvcli"}]},{"@type":"WebSite","@id":"https:\/\/webkul.com\/blog\/#website","url":"https:\/\/webkul.com\/blog\/","name":"Webkul Blog","description":"","publisher":{"@id":"https:\/\/webkul.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/webkul.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/webkul.com\/blog\/#organization","name":"WebKul Software Private Limited","url":"https:\/\/webkul.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/webkul.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2021\/08\/webkul-logo-accent-sq.png","contentUrl":"https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2021\/08\/webkul-logo-accent-sq.png","width":380,"height":380,"caption":"WebKul Software Private Limited"},"image":{"@id":"https:\/\/webkul.com\/blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/webkul\/","https:\/\/x.com\/webkul","https:\/\/www.instagram.com\/webkul\/","https:\/\/www.linkedin.com\/company\/webkul","https:\/\/www.youtube.com\/user\/webkul\/"]},{"@type":"Person","@id":"https:\/\/webkul.com\/blog\/#\/schema\/person\/d957f83d1191a90aa19c28cd8712bdab","name":"Nainshi","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/webkul.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/22cf3b1727987fd1721098d2ece1d366aae894b669868a97dadf7fedcffd8599?s=96&d=https%3A%2F%2Fcdnblog.webkul.com%2Fblog%2Fwp-content%2Fuploads%2F2019%2F10%2Fmike.png&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/22cf3b1727987fd1721098d2ece1d366aae894b669868a97dadf7fedcffd8599?s=96&d=https%3A%2F%2Fcdnblog.webkul.com%2Fblog%2Fwp-content%2Fuploads%2F2019%2F10%2Fmike.png&r=g","caption":"Nainshi"},"url":"https:\/\/webkul.com\/blog\/author\/nainshi-uxlab026\/"}]}},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/webkul.com\/blog\/wp-json\/wp\/v2\/posts\/551184","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/webkul.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/webkul.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/webkul.com\/blog\/wp-json\/wp\/v2\/users\/787"}],"replies":[{"embeddable":true,"href":"https:\/\/webkul.com\/blog\/wp-json\/wp\/v2\/comments?post=551184"}],"version-history":[{"count":13,"href":"https:\/\/webkul.com\/blog\/wp-json\/wp\/v2\/posts\/551184\/revisions"}],"predecessor-version":[{"id":551712,"href":"https:\/\/webkul.com\/blog\/wp-json\/wp\/v2\/posts\/551184\/revisions\/551712"}],"wp:attachment":[{"href":"https:\/\/webkul.com\/blog\/wp-json\/wp\/v2\/media?parent=551184"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/webkul.com\/blog\/wp-json\/wp\/v2\/categories?post=551184"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/webkul.com\/blog\/wp-json\/wp\/v2\/tags?post=551184"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}