<?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>DEV Community: Andrii Klymiuk</title>
    <description>The latest articles on DEV Community by Andrii Klymiuk (@andriiklymiuk).</description>
    <link>https://dev.to/andriiklymiuk</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%2F1151530%2Ff1602735-4a26-46f6-baec-524df6a286b9.jpeg</url>
      <title>DEV Community: Andrii Klymiuk</title>
      <link>https://dev.to/andriiklymiuk</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/andriiklymiuk"/>
    <language>en</language>
    <item>
      <title>Corgi: The CLI That Tames Your Local Microservices Chaos</title>
      <dc:creator>Andrii Klymiuk</dc:creator>
      <pubDate>Mon, 24 Mar 2025 12:07:21 +0000</pubDate>
      <link>https://dev.to/andriiklymiuk/corgi-the-cli-that-tames-your-local-microservices-chaos-45nd</link>
      <guid>https://dev.to/andriiklymiuk/corgi-the-cli-that-tames-your-local-microservices-chaos-45nd</guid>
      <description>&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/rlMCjs4EoFs"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;Microservices architecture gives us flexibility and scale, but the local development experience? It's a nightmare of tangled dependencies, Docker scripts, and that recurring question: 'How do I seed this database again?'. After one too many onboarding sessions that took hours instead of minutes, I built Corgi, an open-source Go CLI that launches your entire stack with a single command. It's not Docker Compose with a pretty face—it's a fundamentally different approach that containerizes only what needs isolation (databases) while running your services natively for better performance and lower resource usage&lt;/p&gt;

&lt;p&gt;In this post, I'll walk you through why I created Corgi, what makes it special, and how it can transform your team's development workflow—all from a simple YAML file.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Problem: Microservices Development Was Too Chaotic
&lt;/h2&gt;

&lt;p&gt;A while back, I was working on a project with multiple microservices, each with its own database requirements. We faced several challenges:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Onboarding new developers&lt;/strong&gt; took hours of explanation and troubleshooting&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Database seeding&lt;/strong&gt; was inconsistent and required manual steps&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Service dependencies&lt;/strong&gt; had to be launched in a specific order&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Environment variables&lt;/strong&gt; were difficult to manage across services and filled manually&lt;/li&gt;
&lt;/ul&gt;

&lt;p&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%2F0u627v2rbxetl75hvcnt.jpg" 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%2F0u627v2rbxetl75hvcnt.jpg" alt="Why" width="600" height="389"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I tried existing solutions like Docker Compose and Kubernetes, but they either felt too heavy or didn't solve our specific problems:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Docker Compose&lt;/strong&gt; is solid but lacks native DB seeding or service orchestration smarts. It also runs everything in containers, which consumes more resources than necessary for local development.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Custom Scripts&lt;/strong&gt; are a maintenance nightmare and don't scale across teams&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cloud Tools&lt;/strong&gt; want your data and your wallet, neither of which I'm keen to hand over&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I wanted something that would make running our entire stack locally as simple as a single command, but with the efficiency of running services natively when appropriate. When I couldn't find it, I built &lt;a href="https://andriiklymiuk.github.io/corgi/" rel="noopener noreferrer"&gt;Corgi&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Makes Corgi Special?
&lt;/h2&gt;

&lt;p&gt;Corgi is like a loyal companion that cuts through the chaos. Here's what sets it apart:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Define Once, Run Anywhere&lt;/strong&gt;: Write a &lt;code&gt;corgi-compose.yml&lt;/code&gt; file with your services and DBs. One command &lt;code&gt;corgi run&lt;/code&gt; and everything launches. Share that file with your team, and they're up in minutes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Database Superpowers&lt;/strong&gt;: Seed Postgres, MongoDB, Redis (and 30+ others) from SQL dumps or remote DBs. No more manual imports or stale test data.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Parallel Power&lt;/strong&gt;: Services start concurrently, not in some sluggish sequence. Your API and frontend are live at the same time, every time.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Auto Git Clone&lt;/strong&gt;: Repositories specified with cloneFrom are automatically cloned during initialization, ensuring everyone on your team has the exact same code structure. If they were cloned already, they are not cloned again. &lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Smart Environment Management&lt;/strong&gt;: Automatically connect services with the right environment variables. When you specify dependencies using depends_on_services and depends_on_db, Corgi populates each service's .env file with the correct connection information. For database dependencies, it adds credentials (DB_HOST, DB_USER, etc.), and for service dependencies, it adds URLs like SERVICE_NAME=&lt;a href="http://localhost:3000" rel="noopener noreferrer"&gt;http://localhost:3000&lt;/a&gt;. No more manual environment configuration or copying connection strings.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Resource Efficiency&lt;/strong&gt;: Only containerizes databases while running your services natively, saving significant CPU and memory compared to full containerization&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Simple YAML Configuration&lt;/strong&gt;: Describe your entire project in one readable file and check its syntax with dedicated vscode corgi extension&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It's not flashy—it's functional.&lt;/p&gt;

&lt;h2&gt;
  
  
  Getting Started
&lt;/h2&gt;

&lt;p&gt;Ready to give Corgi a spin? Here's how to get started:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Install Corgi with Homebrew:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   brew &lt;span class="nb"&gt;install &lt;/span&gt;andriiklymiuk/homebrew-tools/corgi

   &lt;span class="c"&gt;# Check if it works&lt;/span&gt;
   corgi &lt;span class="nt"&gt;-h&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Create a simple &lt;code&gt;corgi-compose.yml&lt;/code&gt; file in your project with db or services part&lt;/li&gt;
&lt;li&gt;Run &lt;code&gt;corgi init&lt;/code&gt; followed by &lt;code&gt;corgi run&lt;/code&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Want to try an example project? Run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;corgi run &lt;span class="nt"&gt;-t&lt;/span&gt; https://github.com/Andriiklymiuk/corgi_examples/blob/main/honoExpoTodo/hono-bun-expo.corgi-compose.yml
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This will download and run a sample Todo app with a Hono backend and an Expo frontend.&lt;/p&gt;

&lt;h2&gt;
  
  
  Under the Hood: How Corgi Works
&lt;/h2&gt;

&lt;p&gt;Unlike Docker Compose, which containerizes everything, Corgi takes a hybrid approach:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Databases run in Docker&lt;/strong&gt;: Corgi creates Docker container templates for your databases, making them easy to start, stop, and clean up.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Services run natively&lt;/strong&gt;: Your actual applications (Node.js servers, Go APIs, React frontends, etc.) run directly on your machine, saving CPU and memory.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Environment auto-wiring&lt;/strong&gt;: Corgi automatically connects everything by generating the right environment variables and .env files.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Parallel execution&lt;/strong&gt;: Service commands run concurrently, making startup much faster.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This hybrid approach gives you the best of both worlds: the isolation of Docker for databases with the performance of native execution for your applications.&lt;/p&gt;

&lt;h2&gt;
  
  
  How I Use It (and Why You'll Love It)
&lt;/h2&gt;

&lt;p&gt;Here's a glimpse of how Corgi fits into my workflow:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Team Onboarding&lt;/strong&gt;: New teammate? Send them the corgi-compose.yml. They run corgi run, and they're coding, not debugging setup.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Prototyping&lt;/strong&gt;: Testing a new service? Clone it, tweak the YAML, and run it alongside the rest. Ports and dependencies sort themselves out.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Prod Parity&lt;/strong&gt;: Seed your local DB from a prod dump. Catch issues before they hit staging.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Resource Management&lt;/strong&gt;: Run a complex stack on a laptop without fans spinning up, since only the databases are containerized.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cleanup&lt;/strong&gt;: Ctrl+C kills everything cleanly, with optional afterStart commands to tidy up.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Let's look at a simple example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="c1"&gt;# corgi-compose.yml&lt;/span&gt;
&lt;span class="na"&gt;db_services&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;postgres_main&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;driver&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;postgres&lt;/span&gt;
    &lt;span class="na"&gt;databaseName&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;app_db&lt;/span&gt;
    &lt;span class="na"&gt;user&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;admin&lt;/span&gt;
    &lt;span class="na"&gt;password&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;secret&lt;/span&gt;
    &lt;span class="na"&gt;port&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;5432&lt;/span&gt;
    &lt;span class="na"&gt;seedFromFilePath&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;./seed.sql&lt;/span&gt;

&lt;span class="na"&gt;services&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;backend&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;cloneFrom&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;https://github.com/myorg/backend-api.git&lt;/span&gt;
    &lt;span class="na"&gt;path&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;./backend&lt;/span&gt;
    &lt;span class="na"&gt;port&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;8080&lt;/span&gt;
    &lt;span class="na"&gt;depends_on_db&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;postgres_main&lt;/span&gt;
    &lt;span class="na"&gt;beforeStart&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;go mod tidy&lt;/span&gt;
    &lt;span class="na"&gt;start&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;go run main.go&lt;/span&gt;

  &lt;span class="na"&gt;frontend&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;cloneFrom&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;https://github.com/myorg/frontend-app.git&lt;/span&gt;
    &lt;span class="na"&gt;path&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;./frontend&lt;/span&gt;
    &lt;span class="na"&gt;port&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;3000&lt;/span&gt;
    &lt;span class="na"&gt;depends_on_services&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;backend&lt;/span&gt;
    &lt;span class="na"&gt;start&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;npm run dev&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;With this file, anyone on your team can run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# First time setup&lt;/span&gt;
corgi init

&lt;span class="c"&gt;# Run everything&lt;/span&gt;
corgi run
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And Corgi will:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Clone both repositories (if they don't exist)&lt;/li&gt;
&lt;li&gt;Create and start the Postgres database in Docker&lt;/li&gt;
&lt;li&gt;Seed the database from your SQL file&lt;/li&gt;
&lt;li&gt;Configure environment variables to connect everything&lt;/li&gt;
&lt;li&gt;Start both services concurrently (directly on your machine, not in Docker)&lt;/li&gt;
&lt;li&gt;Handle clean shutdown when you hit Ctrl+C&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;No more "it works on my machine" problems!&lt;/p&gt;

&lt;h2&gt;
  
  
  Real-World Examples
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Example 1: Todo App with Bun and Expo
&lt;/h3&gt;

&lt;p&gt;Here's a simple Todo application setup with React Native/Expo frontend and a Bun-powered backend:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;services&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;dodoApp&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;cloneFrom&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;https://github.com/Andriiklymiuk/dodo.git&lt;/span&gt;
    &lt;span class="na"&gt;path&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;./dodo&lt;/span&gt;
    &lt;span class="na"&gt;depends_on_services&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;dodoServer&lt;/span&gt;
        &lt;span class="na"&gt;envAlias&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;EXPO_PUBLIC_TODO_URL&lt;/span&gt;
        &lt;span class="na"&gt;suffix&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;/&lt;/span&gt;
    &lt;span class="na"&gt;environment&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;EXPO_PUBLIC_TODO_WEBSOCKET_URL=ws://localhost:65533&lt;/span&gt;
    &lt;span class="na"&gt;beforeStart&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;yarn install&lt;/span&gt;
    &lt;span class="na"&gt;start&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="c1"&gt;# you can run yarn startAll to open web, android and ios all at once&lt;/span&gt;
      &lt;span class="c1"&gt;# - yarn startAll&lt;/span&gt;
      &lt;span class="c1"&gt;# or you can run yarn web, yarn ios, yarn android separately&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;yarn ios&lt;/span&gt;
    &lt;span class="na"&gt;afterStart&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="c1"&gt;# close ios emulator&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;killall Simulator 2&amp;gt;/dev/null || &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;
      &lt;span class="c1"&gt;# close android emulator&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;killall qemu-system-aarch64 2&amp;gt;/dev/null || &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;
  &lt;span class="na"&gt;dodoServer&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;cloneFrom&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;https://github.com/Andriiklymiuk/dodoServer.git&lt;/span&gt;
    &lt;span class="na"&gt;path&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;./dodoServer&lt;/span&gt;
    &lt;span class="na"&gt;port&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;65533&lt;/span&gt;
    &lt;span class="na"&gt;beforeStart&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;bun install&lt;/span&gt;
    &lt;span class="na"&gt;start&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;bun dev&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Notice how this configuration handles mobile development cleanly, automatically connecting the Expo app to its backend and even providing cleanup commands to close simulators when you're done.&lt;/p&gt;

&lt;h3&gt;
  
  
  Example 2: Go and Deno with AWS SQS
&lt;/h3&gt;

&lt;p&gt;This example showcases a Go service that listens to SQS messages sent by a Deno service, with a Postgres database:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;db_services&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;postgres-db-for-go-example&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;driver&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;postgres&lt;/span&gt;
    &lt;span class="na"&gt;databaseName&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;best_name_for_database&lt;/span&gt;
    &lt;span class="na"&gt;user&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;woof&lt;/span&gt;
    &lt;span class="na"&gt;password&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;woof_database_password&lt;/span&gt;
    &lt;span class="na"&gt;port&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;5234&lt;/span&gt;
  &lt;span class="na"&gt;aws-sqs-queue-for-go&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;driver&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;sqs&lt;/span&gt;
    &lt;span class="na"&gt;databaseName&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;sqs_queue_name&lt;/span&gt;
    &lt;span class="na"&gt;port&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;4599&lt;/span&gt;

&lt;span class="na"&gt;services&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;go_aws_sqs_listener&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;cloneFrom&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;https://github.com/Andriiklymiuk/go_aws_sqs_listener.git&lt;/span&gt;
    &lt;span class="na"&gt;path&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;./go_aws_sqs_listener&lt;/span&gt;
    &lt;span class="na"&gt;depends_on_db&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;postgres-db-for-go-example&lt;/span&gt;
        &lt;span class="na"&gt;envAlias&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;none&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;aws-sqs-queue-for-go&lt;/span&gt;
        &lt;span class="na"&gt;envAlias&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;none&lt;/span&gt;
    &lt;span class="na"&gt;port&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;7092&lt;/span&gt;
    &lt;span class="na"&gt;start&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;go run .&lt;/span&gt;
  &lt;span class="na"&gt;deno_aws_sqs_emitter&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;cloneFrom&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;https://github.com/Andriiklymiuk/deno_aws_sqs_emitter.git&lt;/span&gt;
    &lt;span class="na"&gt;path&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;./deno_aws_sqs_emitter&lt;/span&gt;
    &lt;span class="na"&gt;depends_on_db&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;aws-sqs-queue-for-go&lt;/span&gt;
        &lt;span class="na"&gt;envAlias&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;none&lt;/span&gt;
    &lt;span class="na"&gt;port&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;7098&lt;/span&gt;
    &lt;span class="na"&gt;start&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;deno run --allow-net --allow-read --allow-env server.ts&lt;/span&gt;

&lt;span class="na"&gt;required&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;go&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;why&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;To launch locally service manually&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;You need to install it yourself brew install go&lt;/span&gt;
    &lt;span class="na"&gt;checkCmd&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;go version&lt;/span&gt;
  &lt;span class="na"&gt;deno&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;why&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;Needed to launch deno_aws_sqs_emitter&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;You need to install it yourself from https://deno.land/manual/getting_started/installation&lt;/span&gt;
    &lt;span class="na"&gt;checkCmd&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;deno --version&lt;/span&gt;
  &lt;span class="na"&gt;docker&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;why&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;To launch databases&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;You need to install it yourself from https://docs.docker.com/desktop/install/mac-install/&lt;/span&gt;
    &lt;span class="na"&gt;checkCmd&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;docker -v&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This example shows how Corgi handles more complex infrastructure like message queues just as easily as databases, connecting the services together automatically.&lt;/p&gt;

&lt;h3&gt;
  
  
  Example 3: React Native App with Go Backend and Seeded Postgres
&lt;/h3&gt;

&lt;p&gt;Here's an example that includes database seeding from a dump file:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;db_services&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;postgres_with_data_for_go_reactnative&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;driver&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;postgres&lt;/span&gt;
    &lt;span class="na"&gt;databaseName&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;bestDbName&lt;/span&gt;
    &lt;span class="na"&gt;user&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;awesomeUser&lt;/span&gt;
    &lt;span class="na"&gt;password&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;themostsecurepasswordyoucanimaging&lt;/span&gt;
    &lt;span class="na"&gt;port&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;5511&lt;/span&gt;
    &lt;span class="na"&gt;seedFromFilePath&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;./users_dump.sql&lt;/span&gt;

&lt;span class="na"&gt;services&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;reactnative_app_get_user&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;cloneFrom&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;https://github.com/Andriiklymiuk/reactnative_app_get_user.git&lt;/span&gt;
    &lt;span class="na"&gt;path&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;./reactnative_app_get_user&lt;/span&gt;
    &lt;span class="na"&gt;depends_on_services&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;go_server_user_data&lt;/span&gt;
    &lt;span class="na"&gt;beforeStart&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;yarn install&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;npx pod-install&lt;/span&gt;
    &lt;span class="na"&gt;start&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;yarn start&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;yarn ios&lt;/span&gt;
    &lt;span class="na"&gt;afterStart&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;yarn ios:simulator:close&lt;/span&gt;
  &lt;span class="na"&gt;go_server_user_data&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;cloneFrom&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;https://github.com/Andriiklymiuk/go_server_user_data.git&lt;/span&gt;
    &lt;span class="na"&gt;path&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;./go_server_user_data&lt;/span&gt;
    &lt;span class="na"&gt;port&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;7012&lt;/span&gt;
    &lt;span class="na"&gt;depends_on_db&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;postgres_with_data_for_go_reactnative&lt;/span&gt;
        &lt;span class="na"&gt;envAlias&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;none&lt;/span&gt;
    &lt;span class="na"&gt;start&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;go run .&lt;/span&gt;

&lt;span class="na"&gt;required&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;go&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;why&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;To launch locally go service manually&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;You need to install it yourself brew install go&lt;/span&gt;
    &lt;span class="na"&gt;checkCmd&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;go version&lt;/span&gt;
  &lt;span class="na"&gt;yarn&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;why&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;To build and launch some of the repos locally with yarn&lt;/span&gt;
    &lt;span class="na"&gt;install&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;brew install yarn&lt;/span&gt;
    &lt;span class="na"&gt;checkCmd&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;yarn -v&lt;/span&gt;
  &lt;span class="na"&gt;node&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;why&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;To build and launch some of the repos locally with npm&lt;/span&gt;
    &lt;span class="na"&gt;install&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;brew install node&lt;/span&gt;
    &lt;span class="na"&gt;checkCmd&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;node -v&lt;/span&gt;
  &lt;span class="na"&gt;docker&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;why&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;To launch databases&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;You need to install it yourself from https://docs.docker.com/desktop/install/mac-install/&lt;/span&gt;
    &lt;span class="na"&gt;checkCmd&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;docker -v&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For this example, the &lt;code&gt;users_dump.sql&lt;/code&gt; file contains a schema and sample data:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;SET&lt;/span&gt; &lt;span class="n"&gt;statement_timeout&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;SET&lt;/span&gt; &lt;span class="n"&gt;lock_timeout&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;SET&lt;/span&gt; &lt;span class="n"&gt;idle_in_transaction_session_timeout&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;SET&lt;/span&gt; &lt;span class="n"&gt;client_encoding&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'UTF8'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;SET&lt;/span&gt; &lt;span class="n"&gt;standard_conforming_strings&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;on&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="n"&gt;pg_catalog&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;set_config&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'search_path'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;''&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;false&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="k"&gt;SET&lt;/span&gt; &lt;span class="n"&gt;check_function_bodies&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;false&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;SET&lt;/span&gt; &lt;span class="n"&gt;xmloption&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;SET&lt;/span&gt; &lt;span class="n"&gt;client_min_messages&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;warning&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;SET&lt;/span&gt; &lt;span class="n"&gt;row_security&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;off&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;CREATE&lt;/span&gt; &lt;span class="n"&gt;EXTENSION&lt;/span&gt; &lt;span class="n"&gt;IF&lt;/span&gt; &lt;span class="k"&gt;NOT&lt;/span&gt; &lt;span class="k"&gt;EXISTS&lt;/span&gt; &lt;span class="n"&gt;pgcrypto&lt;/span&gt; &lt;span class="k"&gt;WITH&lt;/span&gt; &lt;span class="k"&gt;SCHEMA&lt;/span&gt; &lt;span class="k"&gt;public&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;COMMENT&lt;/span&gt; &lt;span class="k"&gt;ON&lt;/span&gt; &lt;span class="n"&gt;EXTENSION&lt;/span&gt; &lt;span class="n"&gt;pgcrypto&lt;/span&gt; &lt;span class="k"&gt;IS&lt;/span&gt; &lt;span class="s1"&gt;'cryptographic functions'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;SET&lt;/span&gt; &lt;span class="n"&gt;default_tablespace&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;''&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;SET&lt;/span&gt; &lt;span class="n"&gt;default_table_access_method&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;heap&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;CREATE&lt;/span&gt; &lt;span class="k"&gt;TABLE&lt;/span&gt; &lt;span class="k"&gt;public&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;schema_migrations&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="k"&gt;version&lt;/span&gt; &lt;span class="nb"&gt;bigint&lt;/span&gt; &lt;span class="k"&gt;NOT&lt;/span&gt; &lt;span class="k"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="n"&gt;dirty&lt;/span&gt; &lt;span class="nb"&gt;boolean&lt;/span&gt; &lt;span class="k"&gt;NOT&lt;/span&gt; &lt;span class="k"&gt;NULL&lt;/span&gt;
&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="k"&gt;CREATE&lt;/span&gt; &lt;span class="k"&gt;TABLE&lt;/span&gt; &lt;span class="k"&gt;public&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;users&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="n"&gt;id&lt;/span&gt; &lt;span class="n"&gt;uuid&lt;/span&gt; &lt;span class="k"&gt;DEFAULT&lt;/span&gt; &lt;span class="n"&gt;gen_random_uuid&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="k"&gt;NOT&lt;/span&gt; &lt;span class="k"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="n"&gt;name&lt;/span&gt; &lt;span class="nb"&gt;text&lt;/span&gt; &lt;span class="k"&gt;NOT&lt;/span&gt; &lt;span class="k"&gt;NULL&lt;/span&gt;
&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="k"&gt;COPY&lt;/span&gt; &lt;span class="k"&gt;public&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;schema_migrations&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;version&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;dirty&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="k"&gt;stdin&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt;
&lt;span class="err"&gt;\&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;

&lt;span class="k"&gt;COPY&lt;/span&gt; &lt;span class="k"&gt;public&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;users&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="k"&gt;stdin&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="mi"&gt;0961&lt;/span&gt;&lt;span class="n"&gt;f8ea&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="n"&gt;a94&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="n"&gt;f2f&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;ba09&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;f41c802465b4&lt;/span&gt; &lt;span class="k"&gt;Some&lt;/span&gt; &lt;span class="n"&gt;random&lt;/span&gt; &lt;span class="k"&gt;user&lt;/span&gt;
&lt;span class="mi"&gt;0961&lt;/span&gt;&lt;span class="n"&gt;f8ea&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="n"&gt;a94&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="n"&gt;f2f&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;ba09&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;f41c802465b5&lt;/span&gt; &lt;span class="n"&gt;Another&lt;/span&gt; &lt;span class="n"&gt;random&lt;/span&gt; &lt;span class="k"&gt;user&lt;/span&gt;
&lt;span class="err"&gt;\&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;

&lt;span class="k"&gt;ALTER&lt;/span&gt; &lt;span class="k"&gt;TABLE&lt;/span&gt; &lt;span class="k"&gt;ONLY&lt;/span&gt; &lt;span class="k"&gt;public&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;schema_migrations&lt;/span&gt;
  &lt;span class="k"&gt;ADD&lt;/span&gt; &lt;span class="k"&gt;CONSTRAINT&lt;/span&gt; &lt;span class="n"&gt;schema_migrations_pkey&lt;/span&gt; &lt;span class="k"&gt;PRIMARY&lt;/span&gt; &lt;span class="k"&gt;KEY&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;version&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="k"&gt;ALTER&lt;/span&gt; &lt;span class="k"&gt;TABLE&lt;/span&gt; &lt;span class="k"&gt;ONLY&lt;/span&gt; &lt;span class="k"&gt;public&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;users&lt;/span&gt;
  &lt;span class="k"&gt;ADD&lt;/span&gt; &lt;span class="k"&gt;CONSTRAINT&lt;/span&gt; &lt;span class="n"&gt;users_pkey&lt;/span&gt; &lt;span class="k"&gt;PRIMARY&lt;/span&gt; &lt;span class="k"&gt;KEY&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;To use this configuration:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Download the corgi-compose.yml file and the users_dump.sql file&lt;/li&gt;
&lt;li&gt;Run &lt;code&gt;corgi init&lt;/code&gt; to initialize repos&lt;/li&gt;
&lt;li&gt;Run &lt;code&gt;corgi run --seed&lt;/code&gt; to start everything with database seeding&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This will start up the iOS app and Go server with a seeded Postgres database containing sample user data.&lt;/p&gt;

&lt;h3&gt;
  
  
  Example 4: RabbitMQ with NestJS and Go
&lt;/h3&gt;

&lt;p&gt;This example showcases a message queue setup with NestJS sending messages to a Go service:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;db_services&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;rabbitmq-for-go-nestjs&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;user&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;best_user&lt;/span&gt;
    &lt;span class="na"&gt;password&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;most_secure_password&lt;/span&gt;
    &lt;span class="na"&gt;driver&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;rabbitmq&lt;/span&gt;
    &lt;span class="na"&gt;databaseName&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;rabbitmq-for-go-nestjs-db&lt;/span&gt;
    &lt;span class="na"&gt;port&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;4577&lt;/span&gt;

&lt;span class="na"&gt;services&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;nestjs_rabbitmq_emitter&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;cloneFrom&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;https://github.com/Andriiklymiuk/nestjs_rabbitmq_emitter.git&lt;/span&gt;
    &lt;span class="na"&gt;path&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;./nestjs_rabbitmq_emitter&lt;/span&gt;
    &lt;span class="na"&gt;port&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;7856&lt;/span&gt;
    &lt;span class="na"&gt;depends_on_db&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;rabbitmq-for-go-nestjs&lt;/span&gt;
    &lt;span class="na"&gt;beforeStart&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;pnpm install&lt;/span&gt;
    &lt;span class="na"&gt;start&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;pnpm start:dev&lt;/span&gt;
  &lt;span class="na"&gt;go_rabbitmq_listener&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;cloneFrom&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;https://github.com/Andriiklymiuk/go_rabbitmq_listener.git&lt;/span&gt;
    &lt;span class="na"&gt;path&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;./go_rabbitmq_listener&lt;/span&gt;
    &lt;span class="na"&gt;port&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;7854&lt;/span&gt;
    &lt;span class="na"&gt;depends_on_db&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;rabbitmq-for-go-nestjs&lt;/span&gt;
    &lt;span class="na"&gt;beforeStart&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;go run .&lt;/span&gt;

&lt;span class="na"&gt;required&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;go&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;why&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;To launch locally sync-go-trigger service manually&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;You need to install it yourself brew install go&lt;/span&gt;
    &lt;span class="na"&gt;checkCmd&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;go version&lt;/span&gt;
  &lt;span class="na"&gt;pnpm&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;why&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;To launch products service locally&lt;/span&gt;
    &lt;span class="na"&gt;install&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;brew install pnpm&lt;/span&gt;
    &lt;span class="na"&gt;checkCmd&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;pnpm -v&lt;/span&gt;
  &lt;span class="na"&gt;docker&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;why&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;To launch databases&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;You need to install it yourself from https://docs.docker.com/desktop/install/mac-install/&lt;/span&gt;
    &lt;span class="na"&gt;checkCmd&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;docker -v&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Example 5: Redis with Bun Server and Expo Client
&lt;/h3&gt;

&lt;p&gt;This example shows a Redis-backed application with a Bun server and Expo client:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;db_services&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;redis-for-bun&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;driver&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;redis&lt;/span&gt;
    &lt;span class="na"&gt;host&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;localhost&lt;/span&gt;
    &lt;span class="na"&gt;user&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;best_user_for_this_serivce&lt;/span&gt;
    &lt;span class="na"&gt;password&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;most_secure_password_ever&lt;/span&gt;
    &lt;span class="na"&gt;port&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;2911&lt;/span&gt;

&lt;span class="na"&gt;services&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;expo_redis_listener&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;cloneFrom&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;https://github.com/Andriiklymiuk/expo_redis_listener.git&lt;/span&gt;
    &lt;span class="na"&gt;depends_on_services&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;bun_redis_server&lt;/span&gt;
        &lt;span class="na"&gt;envAlias&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;EXPO_PUBLIC_API_URL&lt;/span&gt;
    &lt;span class="na"&gt;beforeStart&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;yarn install&lt;/span&gt;
    &lt;span class="na"&gt;start&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;yarn ios&lt;/span&gt;
    &lt;span class="na"&gt;afterStart&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;yarn ios:simulator:close&lt;/span&gt;
  &lt;span class="na"&gt;bun_redis_server&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;cloneFrom&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;https://github.com/Andriiklymiuk/bun_redis_server.git&lt;/span&gt;
    &lt;span class="na"&gt;port&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1022&lt;/span&gt;
    &lt;span class="na"&gt;depends_on_db&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;redis-for-bun&lt;/span&gt;
    &lt;span class="na"&gt;beforeStart&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;bun install&lt;/span&gt;
    &lt;span class="na"&gt;start&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;bun start&lt;/span&gt;

&lt;span class="na"&gt;required&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;yarn&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;why&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;To build and launch some of the repos locally with yarn&lt;/span&gt;
    &lt;span class="na"&gt;install&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;brew install yarn&lt;/span&gt;
    &lt;span class="na"&gt;checkCmd&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;yarn -v&lt;/span&gt;
  &lt;span class="na"&gt;bun&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;why&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;To launch products service locally&lt;/span&gt;
    &lt;span class="na"&gt;install&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;curl -fsSL https://bun.sh/install | bash&lt;/span&gt;
    &lt;span class="na"&gt;checkCmd&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;bun -v&lt;/span&gt;
  &lt;span class="na"&gt;docker&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;why&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;To launch database services&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;You need to install it yourself from https://docs.docker.com/desktop/install/mac-install/&lt;/span&gt;
    &lt;span class="na"&gt;checkCmd&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;docker -v&lt;/span&gt;
  &lt;span class="na"&gt;jq&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;why&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;To format server output in nice format&lt;/span&gt;
    &lt;span class="na"&gt;install&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;brew install jq&lt;/span&gt;
    &lt;span class="na"&gt;checkCmd&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;jq --version&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Database Support: Not Just Postgres
&lt;/h2&gt;

&lt;p&gt;One of my favorite features is Corgi's extensive database support. While the examples above use several different databases, Corgi supports a huge range:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.postgresql.org" rel="noopener noreferrer"&gt;postgres&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.mongodb.com" rel="noopener noreferrer"&gt;mongodb&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.rabbitmq.com" rel="noopener noreferrer"&gt;rabbitmq&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.localstack.cloud/user-guide/aws/sqs/" rel="noopener noreferrer"&gt;aws sqs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://redis.io" rel="noopener noreferrer"&gt;redis&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.mysql.com" rel="noopener noreferrer"&gt;mysql&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://mariadb.org" rel="noopener noreferrer"&gt;mariadb&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://aws.amazon.com/dynamodb/" rel="noopener noreferrer"&gt;dynamodb&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://kafka.apache.org" rel="noopener noreferrer"&gt;kafka&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.elastic.co/elasticsearch#" rel="noopener noreferrer"&gt;elasticsearch&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://neo4j.com" rel="noopener noreferrer"&gt;neo4j&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And over 20 more specialized databases like CockroachDB, SurrealDB, and Timescale. You can find the full list and examples in the &lt;a href="https://andriiklymiuk.github.io/corgi/" rel="noopener noreferrer"&gt;Corgi documentation&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Each database type comes with sensible defaults, but you can configure them exactly as needed for your project.&lt;/p&gt;

&lt;h2&gt;
  
  
  Database Helpers: Seeding and Management
&lt;/h2&gt;

&lt;p&gt;Working with databases locally is one of the biggest pain points in microservices development. Corgi makes this easy with built-in database helpers:&lt;/p&gt;

&lt;h3&gt;
  
  
  Automated Database Seeding
&lt;/h3&gt;

&lt;p&gt;You can seed your databases in two ways:&lt;/p&gt;

&lt;h4&gt;
  
  
  Automatically (recommended)
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Run with the seed flag&lt;/span&gt;
corgi run &lt;span class="nt"&gt;--seed&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This will automatically create dumps and seed your databases based on the configuration in your &lt;code&gt;corgi-compose.yml&lt;/code&gt; file.&lt;/p&gt;

&lt;h4&gt;
  
  
  Manually
&lt;/h4&gt;

&lt;p&gt;If you need more control:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Run &lt;code&gt;corgi db&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Choose your service&lt;/li&gt;
&lt;li&gt;Select &lt;code&gt;dump&lt;/code&gt; to create a dump&lt;/li&gt;
&lt;li&gt;Select &lt;code&gt;seed&lt;/code&gt; to populate the database&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Database Commands
&lt;/h3&gt;

&lt;p&gt;Corgi provides a simple CLI for database management:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Start all databases&lt;/span&gt;
corgi db &lt;span class="nt"&gt;-u&lt;/span&gt;

&lt;span class="c"&gt;# Stop all databases&lt;/span&gt;
corgi db &lt;span class="nt"&gt;-s&lt;/span&gt;

&lt;span class="c"&gt;# Remove all databases&lt;/span&gt;
corgi db &lt;span class="nt"&gt;-r&lt;/span&gt;

&lt;span class="c"&gt;# Combination: stop, remove, and start all databases&lt;/span&gt;
corgi db &lt;span class="nt"&gt;-rsu&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Or work with individual databases using the interactive menu:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;corgi db
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This gives you an interactive menu to choose your service and the operation you want to perform:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Use the arrow keys to navigate: ↓ ↑ → ← 
? Select service: 
  ▸ 🛑  close program
    postgres_with_data_for_go_reactnative
    rabbitmq-for-go-nestjs
    redis-for-bun
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;After selecting a service, you'll see connection info and available commands:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Connection info to postgres_with_data_for_go_reactnative:

PORT 5511
USER awesomeUser
PASSWORD themostsecurepasswordyoucanimaging
DB bestDbName

postgres_with_data_for_go_reactnative is running 🟢
Use the arrow keys to navigate: ↓ ↑ → ← 
? Select command: 
  ▸ ⬅️  go back
    down
    help
    id
    listDocker
    seed
    up
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Advanced Commands and Options
&lt;/h2&gt;

&lt;p&gt;Corgi offers a range of commands to help manage your development environment:&lt;/p&gt;

&lt;h3&gt;
  
  
  Selective Running
&lt;/h3&gt;

&lt;p&gt;Want to run just specific services or databases?&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Run only selected services&lt;/span&gt;
corgi run &lt;span class="nt"&gt;--services&lt;/span&gt; app,server

&lt;span class="c"&gt;# Run only selected databases&lt;/span&gt;
corgi run &lt;span class="nt"&gt;--dbServices&lt;/span&gt; postgres,redis

&lt;span class="c"&gt;# Skip certain parts of the process&lt;/span&gt;
corgi run &lt;span class="nt"&gt;--omit&lt;/span&gt; beforeStart,afterStart
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Git Operations
&lt;/h3&gt;

&lt;p&gt;Keep your repositories up to date:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Pull updates for all service repositories&lt;/span&gt;
corgi pull
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Service Management
&lt;/h3&gt;

&lt;p&gt;Initialize and clean up as needed:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Initialize everything from your corgi-compose.yml&lt;/span&gt;
corgi init

&lt;span class="c"&gt;# Clean all services&lt;/span&gt;
corgi clean
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Watch Mode
&lt;/h3&gt;

&lt;p&gt;Corgi automatically watches for changes to your &lt;code&gt;corgi-compose.yml&lt;/code&gt; file and reloads when changes are detected. If you want to disable this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Run without watching for config changes&lt;/span&gt;
corgi run &lt;span class="nt"&gt;--no-watch&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Docker Compose vs. Corgi: Why Choose Corgi?
&lt;/h2&gt;

&lt;p&gt;While Docker Compose is a fantastic tool, Corgi addresses several pain points for local development:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Resource Efficiency&lt;/strong&gt;: Docker Compose runs everything in containers. Corgi only containerizes databases while running your services natively, saving significant CPU and memory.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Simpler Database Management&lt;/strong&gt;: Corgi has built-in commands for database operations (seeding, dumping, etc.) that would require custom scripts in Docker Compose.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Environment Variable Wiring&lt;/strong&gt;: Corgi automatically connects services with the right environment variables, handling the tedious .env file management for you.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Service Commands&lt;/strong&gt;: Corgi can run pre-start, start, and post-start commands for each service, giving you full control over the lifecycle.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Native Performance&lt;/strong&gt;: Services running directly on your machine often perform better than containerized ones, especially for development tasks like hot reloading.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Smaller Footprint&lt;/strong&gt;: Corgi itself is a tiny Go binary (~5MB) compared to the Docker ecosystem.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Corgi isn't trying to replace Docker Compose for production deployments—it's focused on making local development smoother and more efficient.&lt;/p&gt;

&lt;h2&gt;
  
  
  VS Code Integration
&lt;/h2&gt;

&lt;p&gt;If you're a VS Code user like me, you'll love the &lt;a href="https://marketplace.visualstudio.com/items?itemName=corgi.corgi" rel="noopener noreferrer"&gt;Corgi Checker extension&lt;/a&gt;. It provides:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Syntax highlighting for &lt;code&gt;corgi-compose.yml&lt;/code&gt; files&lt;/li&gt;
&lt;li&gt;Command palette integration for common Corgi commands&lt;/li&gt;
&lt;li&gt;IntelliSense autocompletion for Corgi configuration options&lt;/li&gt;
&lt;li&gt;Quick access to example templates&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The extension makes working with Corgi even more seamless, especially when you're tweaking your configuration.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Go?
&lt;/h2&gt;

&lt;p&gt;You might wonder why I built Corgi in Go rather than JavaScript or Python. There were several reasons:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Speed&lt;/strong&gt;: Go is fast and creates small, efficient binaries&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cross-platform&lt;/strong&gt;: Go makes it easy to build for multiple operating systems&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Simplicity&lt;/strong&gt;: Go's standard library covers most of what's needed&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Concurrency&lt;/strong&gt;: Go's goroutines make it easy to run services in parallel&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The result is a lightweight CLI (around 5MB) that starts instantly and efficiently manages your services. The source code is fully open-sourced, so you can contribute or customize it to fit your specific needs.&lt;/p&gt;

&lt;h2&gt;
  
  
  In Conclusion
&lt;/h2&gt;

&lt;p&gt;Corgi was born out of real developer frustration, and its focused approach to local microservices development has already saved countless hours for me and my fellow developers. By containerizing only what needs isolation while running services natively, it delivers the perfect balance of isolation and performance. As microservices continue to dominate architecture patterns, tools that simplify the local development experience become increasingly valuable. Looking ahead, I plan to extend Corgi with more useful stuff. The goal remains the same: make local development so seamless that you forget it's supposed to be hard.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why "Corgi"?
&lt;/h2&gt;

&lt;p&gt;I love them to be short)) Cli gets job done—like the dog that stares down chaos and wins. Corgis are loyal, hardworking, and surprisingly powerful for their size—just like this tool. They're also excellent herders, which fits perfectly with the tool's ability to corral multiple services and databases.&lt;/p&gt;

&lt;p&gt;I've been using Corgi daily for more than a year, so that's battle tested and today I decided to share it with the world broadly. Whether you're a solo developer juggling multiple projects or part of a team managing a complex microservice architecture, I think you'll find it as helpful as I do.&lt;/p&gt;

&lt;p&gt;And if you enjoyed this, you might also like my VS Code extension &lt;a href="https://marketplace.visualstudio.com/items?itemName=andriiklymiuk.golden-retriever" rel="noopener noreferrer"&gt;Golden Retriever&lt;/a&gt; for API testing within VS Code. There's even a sneak peek of Corgi at the end of my &lt;a href="https://youtu.be/HwkEzFDT0RM?si=EFfTPiy_skGO-lqC&amp;amp;t=1422" rel="noopener noreferrer"&gt;Golden Retriever demo&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;So, what do you think? Grab Corgi from Homebrew, try it out, and let me know your thoughts in the comments. How's your dev setup looking these days?&lt;/p&gt;

&lt;p&gt;Let's build smarter. 🚀&lt;/p&gt;

&lt;p&gt;Photo by &lt;a href="https://unsplash.com/@jarrelng?utm_content=creditCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=unsplash" rel="noopener noreferrer"&gt;Jarrel Ng&lt;/a&gt; on &lt;a href="https://unsplash.com/photos/a-brown-and-white-dog-wearing-a-red-white-and-blue-bandanna-uZZcpeYVKs8?utm_content=creditCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=unsplash" rel="noopener noreferrer"&gt;Unsplash&lt;/a&gt;&lt;/p&gt;

</description>
      <category>devops</category>
      <category>webdev</category>
      <category>microservices</category>
      <category>go</category>
    </item>
    <item>
      <title>Golden Retriever: Testing REST APIs in VS Code made easy</title>
      <dc:creator>Andrii Klymiuk</dc:creator>
      <pubDate>Mon, 24 Mar 2025 08:39:43 +0000</pubDate>
      <link>https://dev.to/andriiklymiuk/golden-retriever-your-new-best-friend-for-testing-rest-apis-in-vs-code-25e8</link>
      <guid>https://dev.to/andriiklymiuk/golden-retriever-your-new-best-friend-for-testing-rest-apis-in-vs-code-25e8</guid>
      <description>&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/HwkEzFDT0RM"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;As developers, we're always on the hunt for tools that streamline our workflows without forcing us out of our favorite environments. If you're like me—someone who lives in Visual Studio Code and dreads switching apps just to test an API—then I've got something exciting to share. Meet &lt;strong&gt;Golden Retriever&lt;/strong&gt;, a VS Code extension I built to make API testing fast, collaborative, and, dare I say, fun. Think of it as Postman's loyal cousin who stays local, syncs with Git, and doesn't demand a cloud subscription.&lt;/p&gt;

&lt;p&gt;In this post, I'll walk you through why I created Golden Retriever, what makes it stand out, and how it can level up your API testing game—all from the comfort of VS Code.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Problem: API Testing Felt Clunky
&lt;/h2&gt;

&lt;p&gt;A while back, I was working with my team on a project with a bunch of REST APIs. We needed a way to test them locally, share collections, and run Postman-style tests—all without jumping between tools. I'd tried the usual suspects: Postman, Thunder Client, Bruno, you name it. But each had its quirks:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Postman&lt;/strong&gt; has a VS Code extension, but it doesn't provide a straightforward way to save collections directly in your own Git repo alongside your code. Plus, many features require a subscription.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Thunder Client&lt;/strong&gt; stayed in VS Code, but it didn't support Postman's test format and had premium features locked behind a paywall.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Bruno&lt;/strong&gt; was free and Git-friendly, but it lived outside VS Code and used its own collection format.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I wanted something that checked all my boxes: Git-syncable, Postman-compatible, local-first, and—most importantly—inside VS Code. When I couldn't find it, I decided to build it. Enter Golden Retriever.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Makes Golden Retriever Special?
&lt;/h2&gt;

&lt;p&gt;Golden Retriever is like a trusty dog that fetches exactly what you need. Here's what it brings to the table:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Git-Synced Collections&lt;/strong&gt;: Store your API collections as JSON files in a &lt;code&gt;/collections&lt;/code&gt; folder, version them with Git, and share them with your team. No cloud required.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Postman Compatibility&lt;/strong&gt;: Import your Postman collections and run Newman-powered tests right in VS Code. If your team already uses Postman, this is a seamless transition.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Performance Testing&lt;/strong&gt;: Repeat requests with customizable iterations to stress-test your APIs and catch performance hiccups.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Environment Variables&lt;/strong&gt;: Manage variables via &lt;code&gt;.env&lt;/code&gt; files (e.g., &lt;code&gt;BASE_URL=http://localhost:3000&lt;/code&gt;) and use them with &lt;code&gt;{{VARIABLE_NAME}}&lt;/code&gt; syntax. Toggle between local, staging, and production effortlessly.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Local &amp;amp; Secure&lt;/strong&gt;: Everything stays on your machine. No data leaves unless you push it to Git. Even your request history clears when you close request tab or VS Code.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;REST and GraphQL&lt;/strong&gt;: Whether you're hitting REST endpoints or querying GraphQL, Golden Retriever has you covered with dedicated editors.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And the best part? It's free and lives right in your VS Code sidebar.&lt;/p&gt;

&lt;h2&gt;
  
  
  How I Use It (and Why You'll Love It)
&lt;/h2&gt;

&lt;p&gt;Here's a glimpse of how Golden Retriever fits into my workflow:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Team Collaboration&lt;/strong&gt;: I store collections in my repo, tweak them (e.g., adding a new &lt;code&gt;POST /users&lt;/code&gt; request), and push them to Git. My team pulls the updates—no extra steps.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Performance Checks&lt;/strong&gt;: I'll run a request 50 times to see if my API holds up under load. The stats panel shows me response times and failures instantly.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pre-Deployment Testing&lt;/strong&gt;: Before pushing to staging, I test endpoints locally with real data, using variables to swap environments.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Quick Experiments&lt;/strong&gt;: For one-off tests, I use a &lt;code&gt;.tmp&lt;/code&gt; folder (ignored by Git) to mess around without cluttering the shared collections.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Check out this simple example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# .env&lt;/span&gt;
&lt;span class="nv"&gt;BASE_URL&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;http://localhost:3009/api
&lt;span class="nv"&gt;API_KEY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;super-secret-key
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In Golden Retriever, my request looks like:&lt;/p&gt;

&lt;p&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%2F47jnuozlac6k6exf677j.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%2F47jnuozlac6k6exf677j.png" alt="Request demo" width="800" height="430"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Hit "Send," and I see the response right there—no context-switching. The extension uses Postman's schema, so if you're familiar with Postman, you'll feel right at home.&lt;/p&gt;

&lt;h2&gt;
  
  
  Run Collections: Test Everything at Once
&lt;/h2&gt;

&lt;p&gt;One of my favorite features is the Collection Runner. When you're developing an API, you often need to test multiple endpoints to make sure everything works together properly. With Golden Retriever, you can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Run an entire collection of requests with a single click&lt;/li&gt;
&lt;li&gt;Test with multiple iterations to check for consistency and performance&lt;/li&gt;
&lt;li&gt;View detailed statistics for each request&lt;/li&gt;
&lt;li&gt;Easily identify slow endpoints or failures&lt;/li&gt;
&lt;/ul&gt;

&lt;p&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%2Fdygho60tz605vdu3i8wu.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%2Fdygho60tz605vdu3i8wu.png" alt="Collection Runner" width="800" height="490"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This is incredibly useful when:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You've made changes to your API and want to ensure nothing broke&lt;/li&gt;
&lt;li&gt;You're preparing for a release and need to validate all endpoints&lt;/li&gt;
&lt;li&gt;You want to stress-test your API under load&lt;/li&gt;
&lt;li&gt;You're onboarding a new team member and want to show them how the API works&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The Collection Runner supports all the same features as individual requests, including environment variables and tests.&lt;/p&gt;

&lt;h2&gt;
  
  
  GraphQL Support
&lt;/h2&gt;

&lt;p&gt;Golden Retriever isn't just for REST APIs. It provides first-class support for GraphQL with a dedicated editor experience. Here's how it works:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight graphql"&gt;&lt;code&gt;&lt;span class="k"&gt;query&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;GetUser&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;ID&lt;/span&gt;&lt;span class="p"&gt;!)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="n"&gt;user&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$id&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="n"&gt;email&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"123e4567-e89b-12d3-a456-426614174000"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&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%2Fn4ezydytmbn4abbv032p.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%2Fn4ezydytmbn4abbv032p.png" alt="Graphql demo" width="800" height="487"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The GraphQL editor gives you:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A separate variables section for your JSON inputs&lt;/li&gt;
&lt;li&gt;The ability to use collection environment variables within both queries and variables&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Whether you're working with SpaceX's public GraphQL API or your own custom schema, just set the URL to your graphql, hit send, and you're good to go.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try It Out Yourself
&lt;/h2&gt;

&lt;p&gt;Ready to give it a spin? Here's how to get started:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Install &lt;a href="https://marketplace.visualstudio.com/items?itemName=andriiklymiuk.golden-retriever" rel="noopener noreferrer"&gt;Golden Retriever from the VS Code Marketplace&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Open VS Code, create a collections folder in your workspace, and start adding requests.&lt;/li&gt;
&lt;li&gt;Need a sample project? Clone &lt;a href="https://github.com/Andriiklymiuk/golden-example" rel="noopener noreferrer"&gt;this Hono-based example&lt;/a&gt; to see it in action with a real server.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The extension welcomes you with a clean interface, and if you've used Postman, it'll feel familiar.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why "Golden Retriever"?
&lt;/h2&gt;

&lt;p&gt;Because it's loyal, dependable, and fetches your API responses with a wagging tail (metaphorically speaking). I've been using it daily, and it's saved me countless hours. Whether you're a solo dev tinkering with APIs or part of a team juggling microservices, I think you'll find it as handy as I do.&lt;/p&gt;

&lt;p&gt;Oh, and if you're curious about more tool automation, check out my other extension &lt;a href="https://marketplace.visualstudio.com/items?itemName=andriiklymiuk.corgi-checker" rel="noopener noreferrer"&gt;Corgi&lt;/a&gt; that helps manage local development setup of multiple microservices and databases. Its primary use case is to syntax highlight &lt;a href="https://github.com/Andriiklymiuk/corgi" rel="noopener noreferrer"&gt;Corgi go cli&lt;/a&gt; and to add useful commands to it. There is a sneak peak of it in my YouTube video in the end of golden retriever &lt;a href="https://youtu.be/HwkEzFDT0RM?si=cvLrXrhIQ7YrdWhq" rel="noopener noreferrer"&gt;demo&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;So, what do you think? Grab it from the Marketplace, play around, and let me know your thoughts in the comments. Got questions? I'd love to hear them!&lt;/p&gt;

&lt;p&gt;Happy testing! 🐾&lt;/p&gt;

&lt;p&gt;Photo by &lt;a href="https://unsplash.com/@filios_sazeides?utm_content=creditCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=unsplash" rel="noopener noreferrer"&gt;Filios Sazeides&lt;/a&gt; on &lt;a href="https://unsplash.com/photos/dog-running-near-shoree--OyPnq6HgMc?utm_content=creditCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=unsplash" rel="noopener noreferrer"&gt;Unsplash&lt;/a&gt;&lt;/p&gt;

</description>
      <category>vscode</category>
      <category>testing</category>
      <category>api</category>
      <category>rest</category>
    </item>
  </channel>
</rss>
