<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Dhruba Patra</title>
    <description>The latest articles on Forem by Dhruba Patra (@dhruv2038).</description>
    <link>https://forem.com/dhruv2038</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3654149%2F6b1dc8cf-8122-4768-a7cf-c5dd2a73cbb4.jpg</url>
      <title>Forem: Dhruba Patra</title>
      <link>https://forem.com/dhruv2038</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/dhruv2038"/>
    <language>en</language>
    <item>
      <title>OAuth in Voiden</title>
      <dc:creator>Dhruba Patra</dc:creator>
      <pubDate>Thu, 12 Mar 2026 12:35:36 +0000</pubDate>
      <link>https://forem.com/dhruv2038/oauth-in-voiden-7ck</link>
      <guid>https://forem.com/dhruv2038/oauth-in-voiden-7ck</guid>
      <description>&lt;p&gt;In the world of API design, authentication is not a detail - it's architecture.&lt;/p&gt;

&lt;p&gt;Yet, in many API clients, authentication is abstracted away, treated as a quiet dropdown or a hidden side panel. While this works, it can hide crucial mechanisms, leading to confusion, duplication, and fragile configurations that are difficult to manage as a system evolves.&lt;/p&gt;

&lt;p&gt;Voiden was built to challenge this model. Because Voiden is fundamentally based on composable blocks, authentication is not a hidden configuration. It is a first-class, reusable unit in your API system, making dependencies explicit and structure transparent.Authentication as a First-Class Block&lt;/p&gt;

&lt;p&gt;In Voiden, authentication settings are not duplicated across requests or buried inside environment configurations. They exist as visible, versionable, and reusable blocks.&lt;/p&gt;

&lt;p&gt;Why this matters:&lt;br&gt;
Transparency: When you view a request, you immediately see how authentication is attached. There is no hidden behavior or silent injection of headers.&lt;br&gt;
Coherence: When credentials rotate or token formats change, you update the modular block once. Every request that references it reflects the change, maintaining system-wide coherence.&lt;br&gt;
Full Support for OAuth 1.0 and OAuth 2.0&lt;/p&gt;

&lt;p&gt;Voiden allows you to integrate both signature-based legacy systems and modern delegated authorization within the same modular framework.1. OAuth 1.0 Authorization Block&lt;/p&gt;

&lt;p&gt;Although older, OAuth 1.0 remains vital in certain enterprise environments where signature-based verification is preferred. In Voiden, this is a dedicated Authorization Block, created by typing /auth-oauth1 in your file.&lt;br&gt;
Parameter&lt;br&gt;
Description&lt;br&gt;
consumer_key&lt;br&gt;
The public identifier for your application.&lt;br&gt;
consumer_secret&lt;br&gt;
The private key used in generating request signatures.&lt;br&gt;
access_token&lt;br&gt;
The token representing the user’s authorization.&lt;br&gt;
token_secret&lt;br&gt;
The secret tied to the access token.&lt;br&gt;
signature_method&lt;br&gt;
The cryptographic algorithm for signing the request (e.g., HMAC-SHA1).&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;OAuth 2.0 Authorization Block&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;OAuth 2.0 is the modern standard used by most major identity providers (Google, GitHub, Microsoft). It’s also implemented as a modular Authorization Block, created by typing /auth-oauth2.&lt;br&gt;
Parameter&lt;br&gt;
Description&lt;br&gt;
access_token&lt;br&gt;
The token issued by the authorization server granting access to protected resources.&lt;br&gt;
token_type&lt;br&gt;
Specifies the token type (commonly "Bearer").&lt;br&gt;
header_prefix&lt;br&gt;
The prefix added before the token in the Authorization header (e.g., Authorization: Bearer ).&lt;/p&gt;

&lt;p&gt;OAuth Flow Tips and Gotchas&lt;/p&gt;

&lt;p&gt;For those working with complex OAuth 2.0 flows, here are essential tips to ensure a smooth integration:Callback URL &amp;amp; Port Whitelisting&lt;br&gt;
Voiden listens for the OAuth redirect on &lt;a href="http://localhost:9090/callback" rel="noopener noreferrer"&gt;http://localhost:9090/callback&lt;/a&gt; by default.&lt;br&gt;
Critical: This exact URL must be registered in your OAuth provider's dashboard under "Allowed Redirect URIs" (or equivalent). Mismatches, even a trailing slash, will cause rejection.&lt;br&gt;
The Discover Button&lt;br&gt;
If your provider supports OpenID Connect, you can use the Discover button (available in Authorization Code and Implicit flows).&lt;br&gt;
Simply enter the provider's root URL (e.g., &lt;a href="https://accounts.google.com/" rel="noopener noreferrer"&gt;https://accounts.google.com/&lt;/a&gt;), and Voiden will automatically look up and populate the required auth_url, token_url, and scope fields.&lt;br&gt;
Advanced Settings Control&lt;/p&gt;

&lt;p&gt;Collapsed by default, these settings offer fine-grained control:&lt;br&gt;
add_token_to: Determines where the token is attached (most APIs expect the Header).&lt;br&gt;
header_prefix: The word before the token (default: Bearer). Change this only if explicitly required by your API.&lt;br&gt;
variable_prefix: Used to namespace stored token variables (default: oauth2). Crucial to prevent collisions: Assign a unique prefix (e.g., google, github) to every OAuth2 block to avoid authentication errors when using multiple providers.&lt;br&gt;
client_auth: Controls how client_id and client_secret are sent during token exchange (in the Body or as a Basic Auth header).&lt;br&gt;
Auto-Refresh&lt;/p&gt;

&lt;p&gt;Enable Auto-Refresh via the checkbox for silent token renewal. For this feature to work:&lt;br&gt;
Your provider must return a refresh_token during the initial token exchange.&lt;br&gt;
Token configuration (like token_url and client_id) is snapshotted when you first click Get Token. If you edit these fields later, you must click Get Token again to update the snapshot.&lt;br&gt;
You have a 120-second timeout to complete the browser login after clicking Get Token.&lt;br&gt;
By treating OAuth as a composable, visible block, Voiden helps engineers think architecturally instead of administratively, ensuring that authentication is a robust part of the system, not a vulnerable side note.&lt;/p&gt;

&lt;p&gt;If you believe API tooling should move beyond better forms and toward better system design, Voiden is worth exploring&lt;/p&gt;

&lt;p&gt;Take a look at us here : &lt;a href="https://voiden.md/" rel="noopener noreferrer"&gt;https://voiden.md/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Github : &lt;a href="https://github.com/VoidenHQ/voiden" rel="noopener noreferrer"&gt;https://github.com/VoidenHQ/voiden&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>api</category>
      <category>programming</category>
      <category>backend</category>
    </item>
    <item>
      <title>Are you still stuck in 2010?</title>
      <dc:creator>Dhruba Patra</dc:creator>
      <pubDate>Mon, 23 Feb 2026 08:12:42 +0000</pubDate>
      <link>https://forem.com/dhruv2038/are-you-still-stuck-in-2010-3hbh</link>
      <guid>https://forem.com/dhruv2038/are-you-still-stuck-in-2010-3hbh</guid>
      <description>&lt;p&gt;Most API tooling is stuck in 2010.&lt;/p&gt;

&lt;p&gt;They still assume every API request is a form:  with a fixed layout, fixed sections, fixed mental model regardless of how your API actually works.&lt;/p&gt;

&lt;p&gt;But is UI useful? Why do we accept all this copy-pasting, clutter, and inconsistency as “normal”?&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Headers that are not needed.&lt;/li&gt;
&lt;li&gt;Bodies that are not used.&lt;/li&gt;
&lt;li&gt;Params scattered across requests &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And somehow we call that “API documentation.”&lt;/p&gt;

&lt;p&gt;Most API clients are optimized for filling out forms, not for designing, understanding, or maintaining APIs.&lt;/p&gt;

&lt;p&gt;hashtag#Voiden was built around a different idea:mThat APIs are systems.&lt;/p&gt;

&lt;p&gt;And since systems are modular, the API client should be modular as well.&lt;/p&gt;

&lt;p&gt;In Voiden, everything is a Block: Endpoints, headers, query params, bodies, files. You assemble requests from parts, reuse them across projects, and version them like code.&lt;/p&gt;

&lt;p&gt;No fixed forms, No fake simplicity, No pretending APIs are paperwork.&lt;/p&gt;

&lt;p&gt;If you think API tooling should evolve past “better forms,” Voiden is worth a look.&lt;/p&gt;

&lt;p&gt;Try out here: &lt;a href="https://voiden.md/download" rel="noopener noreferrer"&gt;https://voiden.md/download&lt;/a&gt;&lt;br&gt;
Github repo: &lt;a href="https://github.com/VoidenHQ/voiden" rel="noopener noreferrer"&gt;https://github.com/VoidenHQ/voiden&lt;/a&gt;&lt;/p&gt;

</description>
      <category>api</category>
      <category>webdev</category>
      <category>programming</category>
      <category>javascript</category>
    </item>
    <item>
      <title>Voiden Blocks: Building APIs Like LEGO</title>
      <dc:creator>Dhruba Patra</dc:creator>
      <pubDate>Mon, 09 Feb 2026 11:13:41 +0000</pubDate>
      <link>https://forem.com/dhruv2038/voiden-blocks-building-apis-like-lego-330f</link>
      <guid>https://forem.com/dhruv2038/voiden-blocks-building-apis-like-lego-330f</guid>
      <description>&lt;p&gt;t Voiden, we believe API development should feel like writing clean, reusable code, because it IS code.&lt;/p&gt;

&lt;p&gt;That’s why everything in Voiden is a Block,  the smallest, most flexible piece of your API world. Your endpoints, headers, query params, JSON bodies, even file attachments,  all are individual Blocks you can add, remove, reorder, and reuse.&lt;/p&gt;

&lt;p&gt;Think of it as LEGO for HTTP: snap together Blocks to build clean, modular API requests that are easy to read, maintain, and share.&lt;/p&gt;

&lt;p&gt;But it gets better. With Reusable Blocks, you create a Block once and import it everywhere you need it, just like importing functions in your code. Update the Block once, and changes ripple through all your requests automatically.&lt;/p&gt;

&lt;p&gt;Why this matters:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Save time &amp;amp; energy, no more repeating the same thing over and over&lt;/li&gt;
&lt;li&gt;Stay consistent, headers, params, and auth always match across your projects&lt;/li&gt;
&lt;li&gt;Keep your workspace clean &amp;amp; focused, add only the Blocks you need&lt;/li&gt;
&lt;li&gt;Collaborate with confidence , modular, maintainable API workflows&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Voiden brings developer best practices — modularity, reusability, and version control to API development and testing, helping you build smarter and faster.&lt;/p&gt;

&lt;p&gt;Want to see how Blocks can transform your API workflow? &lt;/p&gt;

&lt;p&gt;Check out Voiden, open source and ready to use.&lt;/p&gt;

&lt;p&gt;Github : &lt;a href="https://github.com/VoidenHQ/voiden" rel="noopener noreferrer"&gt;https://github.com/VoidenHQ/voiden&lt;/a&gt;&lt;/p&gt;

</description>
      <category>api</category>
      <category>backend</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Voiden Blocks: Building APIs Like LEGO</title>
      <dc:creator>Dhruba Patra</dc:creator>
      <pubDate>Mon, 09 Feb 2026 11:07:26 +0000</pubDate>
      <link>https://forem.com/dhruv2038/voiden-blocks-building-apis-like-lego-15jb</link>
      <guid>https://forem.com/dhruv2038/voiden-blocks-building-apis-like-lego-15jb</guid>
      <description>&lt;p&gt;At Voiden, we believe API development should feel like writing clean, reusable code, because it IS code.&lt;/p&gt;

&lt;p&gt;That’s why everything in Voiden is a Block,  the smallest, most flexible piece of your API world. Your endpoints, headers, query params, JSON bodies, even file attachments,  all are individual Blocks you can add, remove, reorder, and reuse.&lt;/p&gt;

&lt;p&gt;Think of it as LEGO for HTTP: snap together Blocks to build clean, modular API requests that are easy to read, maintain, and share.&lt;/p&gt;

&lt;p&gt;But it gets better. With Reusable Blocks, you create a Block once and import it everywhere you need it, just like importing functions in your code. Update the Block once, and changes ripple through all your requests automatically.&lt;/p&gt;

&lt;p&gt;Why this matters:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Save time &amp;amp; energy, no more repeating the same thing over and over&lt;/li&gt;
&lt;li&gt;Stay consistent, headers, params, and auth always match across your projects&lt;/li&gt;
&lt;li&gt;Keep your workspace clean &amp;amp; focused, add only the Blocks you need&lt;/li&gt;
&lt;li&gt;Collaborate with confidence , modular, maintainable API workflows&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Voiden brings developer best practices — modularity, reusability, and version control to API development and testing, helping you build smarter and faster.&lt;/p&gt;

&lt;p&gt;Want to see how Blocks can transform your API workflow? &lt;/p&gt;

&lt;p&gt;Check out Voiden, open source and ready to use.&lt;/p&gt;

&lt;p&gt;Github : &lt;a href="https://github.com/VoidenHQ/voiden" rel="noopener noreferrer"&gt;https://github.com/VoidenHQ/voiden&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>api</category>
      <category>backend</category>
      <category>programming</category>
    </item>
    <item>
      <title>How do you handle test data in your API requests?</title>
      <dc:creator>Dhruba Patra</dc:creator>
      <pubDate>Mon, 19 Jan 2026 14:02:46 +0000</pubDate>
      <link>https://forem.com/dhruv2038/how-do-you-handle-test-data-in-your-api-requests-53o6</link>
      <guid>https://forem.com/dhruv2038/how-do-you-handle-test-data-in-your-api-requests-53o6</guid>
      <description>&lt;p&gt;We know generating realistic, dynamic test data can be a hassle - most folks rely on scripts or manual copy-pasting, which gets messy fast.&lt;br&gt;
At Voiden, we built Voiden Faker to generate fresh, realistic data right inside your HTTP requests using Faker.js expressions, no extra setup needed.&lt;/p&gt;

&lt;p&gt;We’d love to hear from you:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What’s your biggest challenge with test data?&lt;/li&gt;
&lt;li&gt;How do you currently generate or manage it?&lt;/li&gt;
&lt;li&gt;Would embedding Faker-like data generation inside requests help your workflow?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Try Voiden Faker here: &lt;a href="https://voiden.md/" rel="noopener noreferrer"&gt;https://voiden.md/&lt;/a&gt; and share your thoughts!&lt;/p&gt;

</description>
      <category>api</category>
      <category>webdev</category>
      <category>programming</category>
    </item>
    <item>
      <title>API Key Authentication in Voiden</title>
      <dc:creator>Dhruba Patra</dc:creator>
      <pubDate>Thu, 15 Jan 2026 07:09:25 +0000</pubDate>
      <link>https://forem.com/dhruv2038/api-key-authentication-in-voiden-pi5</link>
      <guid>https://forem.com/dhruv2038/api-key-authentication-in-voiden-pi5</guid>
      <description>&lt;p&gt;Voiden makes it easy to work with APIs that use API Key Authentication by giving you a clean and organized way to attach API keys to every request.&lt;/p&gt;

&lt;p&gt;API keys are a common way for APIs to identify and authorize clients. With Voiden, every request sent to your workspace APIs automatically includes the correct API key - so the API provider always knows who’s calling and whether the request is allowed.&lt;/p&gt;

&lt;p&gt;Each client or service uses a unique API key, acting as a secure identifier attached to every request.&lt;/p&gt;

&lt;p&gt;How it works in Voiden :&lt;/p&gt;

&lt;p&gt;When you configure API Key Authentication, you simply:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Add api-key-auth table using /auth-api-key &lt;/li&gt;
&lt;li&gt;Define the key name&lt;/li&gt;
&lt;li&gt;Provide the API key value&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That’s it. Voiden takes care of the rest by automatically attaching the API key to every request in your workspace. &lt;/p&gt;

&lt;p&gt;Try Voiden here : &lt;a href="https://voiden.md/" rel="noopener noreferrer"&gt;https://voiden.md/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>api</category>
      <category>webdev</category>
      <category>programming</category>
    </item>
    <item>
      <title>Using GraphQL in Voiden</title>
      <dc:creator>Dhruba Patra</dc:creator>
      <pubDate>Wed, 14 Jan 2026 05:15:19 +0000</pubDate>
      <link>https://forem.com/dhruv2038/using-graphql-in-voiden-3b7p</link>
      <guid>https://forem.com/dhruv2038/using-graphql-in-voiden-3b7p</guid>
      <description>&lt;p&gt;Voiden gives you two flexible ways to work with GraphQL so you can focus on writing and testing queries with confidence.&lt;br&gt;
Both approaches let Voiden fully understand your types, queries, mutations, and subscriptions.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Importing a GraphQL Schema File&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;You can import a GraphQL schema file such as .graphql or .gql directly into Voiden.&lt;br&gt;
When you do this:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Voiden reads all types, queries, mutations, and subscriptions from the schema&lt;/li&gt;
&lt;li&gt;The schema becomes available locally and works well in offline scenarios&lt;/li&gt;
&lt;li&gt;You get a stable, version-controlled setup that aligns nicely with Git workflows
This approach is ideal when you already have the schema file and want full control over it.&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;Using GraphQL Introspection
Alternatively, you can provide a GraphQL endpoint URL to Voiden.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;In this case :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Voiden make an introspection query to the GraphQL server&lt;/li&gt;
&lt;li&gt;The server returns all available types, queries, mutations, and subscriptions&lt;/li&gt;
&lt;li&gt;Voiden automatically loads this information so you can start querying immediately&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This option is perfect for quickly exploring a live GraphQL API or when the schema file is not available locally.&lt;/p&gt;

&lt;p&gt;Use GraphQL in our beta version : &lt;a href="https://voiden.md/beta" rel="noopener noreferrer"&gt;https://voiden.md/beta&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwlc5eeiowvccjhsmfk4f.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwlc5eeiowvccjhsmfk4f.png" alt=" " width="800" height="526"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>api</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Using GraphQL in Voiden</title>
      <dc:creator>Dhruba Patra</dc:creator>
      <pubDate>Tue, 13 Jan 2026 07:26:53 +0000</pubDate>
      <link>https://forem.com/dhruv2038/using-graphql-in-voiden-pc3</link>
      <guid>https://forem.com/dhruv2038/using-graphql-in-voiden-pc3</guid>
      <description>&lt;p&gt;Voiden gives you two flexible ways to work with GraphQL so you can focus on writing and testing queries with confidence.&lt;br&gt;
Both approaches let Voiden fully understand your types, queries, mutations, and subscriptions.&lt;/p&gt;

&lt;p&gt;Importing a GraphQL Schema File&lt;/p&gt;

&lt;p&gt;You can import a GraphQL schema file such as .graphql or .gql directly into Voiden.&lt;/p&gt;

&lt;p&gt;When you do this:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Voiden reads all types, queries, mutations, and subscriptions from the schema&lt;/li&gt;
&lt;li&gt;The schema becomes available locally and works well in offline scenarios&lt;/li&gt;
&lt;li&gt;You get a stable, version-controlled setup that aligns nicely with Git workflows&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This approach is ideal when you already have the schema file and want full control over it.&lt;/p&gt;

&lt;p&gt;Using GraphQL Introspection&lt;/p&gt;

&lt;p&gt;Alternatively, you can provide a GraphQL endpoint URL to Voiden.&lt;/p&gt;

&lt;p&gt;In this case :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Voiden make an introspection query to the GraphQL server&lt;/li&gt;
&lt;li&gt;The server returns all available types, queries, mutations, and subscriptions&lt;/li&gt;
&lt;li&gt;Voiden automatically loads this information so you can start querying immediately&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This option is perfect for quickly exploring a live GraphQL API or when the schema file is not available locally.&lt;/p&gt;

&lt;p&gt;Use GraphQL in our beta version : &lt;a href="https://voiden.md/beta" rel="noopener noreferrer"&gt;https://voiden.md/beta&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>api</category>
    </item>
    <item>
      <title>Reusable Blocks in Voiden</title>
      <dc:creator>Dhruba Patra</dc:creator>
      <pubDate>Mon, 12 Jan 2026 06:05:19 +0000</pubDate>
      <link>https://forem.com/dhruv2038/reusable-blocks-in-voiden-205p</link>
      <guid>https://forem.com/dhruv2038/reusable-blocks-in-voiden-205p</guid>
      <description>&lt;p&gt;What Are Reusable Blocks in Voiden?&lt;/p&gt;

&lt;p&gt;Instead of typing the same Voiden blocks again and again (and again…), you just create a block once in a Voiden file and reuse it everywhere you want. &lt;/p&gt;

&lt;p&gt;This saves time but also helps you keep things coinsistent: The block values can be inherited to all the documents you create and link these blocks to. &lt;/p&gt;

&lt;p&gt;How it works : &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Before importing, first create a block that can be reused across multiple Void files. Define your content and save it as a reusable block.&lt;/li&gt;
&lt;li&gt;Type @ to show the list of linkable files or blocks&lt;/li&gt;
&lt;li&gt;Focus on a void file and press Space bar to see the blocks of that file&lt;/li&gt;
&lt;li&gt;Done! Your block is imported. Yes, that was simple right?&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Use Voiden here : &lt;a href="https://voiden.md/" rel="noopener noreferrer"&gt;https://voiden.md/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>api</category>
      <category>programming</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Assertion Blocks in Voiden</title>
      <dc:creator>Dhruba Patra</dc:creator>
      <pubDate>Thu, 08 Jan 2026 08:21:46 +0000</pubDate>
      <link>https://forem.com/dhruv2038/assertion-blocks-in-voiden-22k2</link>
      <guid>https://forem.com/dhruv2038/assertion-blocks-in-voiden-22k2</guid>
      <description>&lt;p&gt;We recently added assertion blocks to Voiden.&lt;br&gt;
Not because assertions are new but because they’re usually treated as an afterthought.&lt;br&gt;
When testing APIs, most of us:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Send a request&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Inspect the response&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Mentally verify “yeah, that looks right”&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Or scatter assertions across scripts, test files, or CI configs&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That works… until it doesn’t.&lt;br&gt;
Assertion blocks are our attempt to make expectations explicit and first-class.&lt;br&gt;
Instead of burying checks in code or external tools, you define what must be true:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Status codes&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Response structure&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Field values&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Edge cases that shouldn’t silently pass&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Right next to the request itself.&lt;br&gt;
This does a few important things:&lt;br&gt;
Tests become readable, not just executable&lt;/p&gt;

&lt;p&gt;Failures explain what broke, not just that something broke&lt;/p&gt;

&lt;p&gt;API behavior becomes documented by usage, not just specs&lt;/p&gt;

&lt;p&gt;For teams building and testing APIs, this reduces the gap between:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;“I think this endpoint works”&lt;/li&gt;
&lt;li&gt;“We know exactly what guarantees this endpoint provides.”&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We are still refining how assertion blocks evolve, but the goal is simple: less guessing, more confidence, closer to how developers actually think about APIs.&lt;/p&gt;

&lt;p&gt;If you’re testing APIs regularly, we’d love to hear how you currently handle assertions, and what’s still painful about it.&lt;/p&gt;

&lt;p&gt;Download Voiden here : &lt;a href="https://voiden.md/" rel="noopener noreferrer"&gt;https://voiden.md/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>api</category>
      <category>programming</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Assertion Blocks in Voiden</title>
      <dc:creator>Dhruba Patra</dc:creator>
      <pubDate>Thu, 08 Jan 2026 08:21:46 +0000</pubDate>
      <link>https://forem.com/dhruv2038/assertion-blocks-in-voiden-fhm</link>
      <guid>https://forem.com/dhruv2038/assertion-blocks-in-voiden-fhm</guid>
      <description>&lt;p&gt;We recently added assertion blocks to Voiden.&lt;br&gt;
Not because assertions are new but because they’re usually treated as an afterthought.&lt;br&gt;
When testing APIs, most of us:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Send a request&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Inspect the response&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Mentally verify “yeah, that looks right”&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Or scatter assertions across scripts, test files, or CI configs&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That works… until it doesn’t.&lt;br&gt;
Assertion blocks are our attempt to make expectations explicit and first-class.&lt;br&gt;
Instead of burying checks in code or external tools, you define what must be true:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Status codes&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Response structure&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Field values&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Edge cases that shouldn’t silently pass&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Right next to the request itself.&lt;br&gt;
This does a few important things:&lt;br&gt;
Tests become readable, not just executable&lt;/p&gt;

&lt;p&gt;Failures explain what broke, not just that something broke&lt;/p&gt;

&lt;p&gt;API behavior becomes documented by usage, not just specs&lt;/p&gt;

&lt;p&gt;For teams building and testing APIs, this reduces the gap between:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;“I think this endpoint works”&lt;/li&gt;
&lt;li&gt;“We know exactly what guarantees this endpoint provides.”&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We are still refining how assertion blocks evolve, but the goal is simple: less guessing, more confidence, closer to how developers actually think about APIs.&lt;/p&gt;

&lt;p&gt;If you’re testing APIs regularly, we’d love to hear how you currently handle assertions, and what’s still painful about it.&lt;/p&gt;

&lt;p&gt;Download Voiden here : &lt;a href="https://voiden.md/" rel="noopener noreferrer"&gt;https://voiden.md/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>api</category>
      <category>programming</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Postman vs Voiden : Not a feature comparison but a workflow choice.</title>
      <dc:creator>Dhruba Patra</dc:creator>
      <pubDate>Wed, 07 Jan 2026 07:25:46 +0000</pubDate>
      <link>https://forem.com/dhruv2038/postman-vs-voiden-not-a-feature-comparison-but-a-workflow-choice-4fo7</link>
      <guid>https://forem.com/dhruv2038/postman-vs-voiden-not-a-feature-comparison-but-a-workflow-choice-4fo7</guid>
      <description>&lt;p&gt;Most API friction doesn’t come from bugs.&lt;br&gt;
It comes from context switching and out-of-sync tools.&lt;br&gt;
Here’s how the two approaches differ in practice:&lt;/p&gt;

&lt;p&gt;Postman&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;GUI-first, platform-centric workflow&lt;/li&gt;
&lt;li&gt;Collections live inside the tool&lt;/li&gt;
&lt;li&gt;Git is an export / sync step&lt;/li&gt;
&lt;li&gt;Specs, tests, and docs are maintained separately&lt;/li&gt;
&lt;li&gt;Docs are generated artifacts and often lag behind&lt;/li&gt;
&lt;li&gt;Cloud-first, limited offline workflows&lt;/li&gt;
&lt;li&gt;Easy to drift out of sync during fast-moving sprints&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Voiden&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;File-first, Git-native workflow&lt;/li&gt;
&lt;li&gt;Plain Markdown files live directly in the repo&lt;/li&gt;
&lt;li&gt;Git is the source of truth&lt;/li&gt;
&lt;li&gt;Specs, tests, and docs live in the same file&lt;/li&gt;
&lt;li&gt;What you execute is the documentation&lt;/li&gt;
&lt;li&gt;Local-first, fully offline&lt;/li&gt;
&lt;li&gt;No manual syncing, no stale docs, minimal context switching&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;As teams scale, API work stops being just testing endpoints and becomes engineering.&lt;/p&gt;

&lt;p&gt;That’s the shift Voiden is built for.&lt;/p&gt;

&lt;p&gt;How do you manage APIs today tool-first or Git-first?&lt;/p&gt;

&lt;p&gt;Download Voiden here : &lt;a href="https://voiden.md/" rel="noopener noreferrer"&gt;https://voiden.md/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>api</category>
      <category>programming</category>
      <category>webdev</category>
      <category>electron</category>
    </item>
  </channel>
</rss>
