<?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: zhuzhushiwojia</title>
    <description>The latest articles on DEV Community by zhuzhushiwojia (@zhuzhushiwojia).</description>
    <link>https://dev.to/zhuzhushiwojia</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%2F3886670%2F06961b27-994f-4bc6-8622-a87fdd218465.jpeg</url>
      <title>DEV Community: zhuzhushiwojia</title>
      <link>https://dev.to/zhuzhushiwojia</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/zhuzhushiwojia"/>
    <language>en</language>
    <item>
      <title>Midnight Development on Windows via WSL2: Complete Setup Guide</title>
      <dc:creator>zhuzhushiwojia</dc:creator>
      <pubDate>Sat, 18 Apr 2026 23:39:20 +0000</pubDate>
      <link>https://dev.to/zhuzhushiwojia/midnight-development-on-windows-via-wsl2-complete-setup-guide-1667</link>
      <guid>https://dev.to/zhuzhushiwojia/midnight-development-on-windows-via-wsl2-complete-setup-guide-1667</guid>
      <description>&lt;p&gt;title: "Midnight Development on Windows via WSL2: Complete Setup Guide"&lt;br&gt;
published: true&lt;br&gt;
description: "A comprehensive guide to setting up Midnight development environment on Windows using WSL2"&lt;br&gt;
tags: ["midnight", "wsl2", "blockchain", "zkshield", "web3"]&lt;br&gt;
cover_image: &lt;a href="https://images.unsplash.com/photo-1629654297299-c8506221ca97?w=800" rel="noopener noreferrer"&gt;https://images.unsplash.com/photo-1629654297299-c8506221ca97?w=800&lt;/a&gt;&lt;br&gt;
canonical_url: null&lt;/p&gt;
&lt;h2&gt;
  
  
  series: null
&lt;/h2&gt;
&lt;h1&gt;
  
  
  Midnight Development on Windows via WSL2: Complete Setup Guide
&lt;/h1&gt;

&lt;p&gt;Midnight's toolchain is designed to run on Linux and macOS, which presents a challenge for Windows developers. While native Windows development isn't supported, WSL2 (Windows Subsystem for Linux) provides an excellent workaround. This tutorial walks you through setting up a complete Midnight development environment on Windows 10/11.&lt;/p&gt;
&lt;h2&gt;
  
  
  Prerequisites
&lt;/h2&gt;

&lt;p&gt;Before we begin, ensure you have:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Windows 10 (version 2004+) or Windows 11&lt;/li&gt;
&lt;li&gt;At least 8GB RAM (16GB recommended)&lt;/li&gt;
&lt;li&gt;20GB free disk space&lt;/li&gt;
&lt;li&gt;Administrator access on your Windows machine&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  Part 1: Installing WSL2
&lt;/h2&gt;
&lt;h3&gt;
  
  
  Enable WSL2
&lt;/h3&gt;

&lt;p&gt;First, open &lt;strong&gt;Windows PowerShell as Administrator&lt;/strong&gt; and run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Enable required Windows features&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;wsl&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;--install&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;⚠️ WSL Terminal:&lt;/strong&gt; These commands run in Windows PowerShell&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;After installation, restart your computer. On restart, Ubuntu will automatically install. Create your Linux username and password when prompted.&lt;/p&gt;

&lt;h3&gt;
  
  
  Install Ubuntu (Recommended)
&lt;/h3&gt;

&lt;p&gt;If WSL installed a different distribution, install Ubuntu explicitly:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="c"&gt;# WSL Terminal&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;wsl&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;--install&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-d&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Ubuntu-22.04&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Configure .wslconfig
&lt;/h3&gt;

&lt;p&gt;This is the &lt;strong&gt;most critical step&lt;/strong&gt; for Midnight development. The default WSL2 memory allocation (usually 2GB) is insufficient for the proof server, which requires at least 4GB.&lt;/p&gt;

&lt;p&gt;Create or edit &lt;code&gt;.wslconfig&lt;/code&gt; in your Windows user home directory:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Windows Terminal (not WSL):&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Create the config file&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;notepad&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$&lt;/span&gt;&lt;span class="nn"&gt;env&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nv"&gt;USERPROFILE&lt;/span&gt;&lt;span class="nx"&gt;\.wslconfig&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Add the following content:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ini"&gt;&lt;code&gt;&lt;span class="nn"&gt;[wsl2]&lt;/span&gt;
&lt;span class="c"&gt;# Allocate 6GB memory to WSL2 (adjust based on your RAM)
&lt;/span&gt;&lt;span class="py"&gt;memory&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;6GB &lt;/span&gt;

&lt;span class="c"&gt;# Use all available processors
&lt;/span&gt;&lt;span class="py"&gt;processors&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;8&lt;/span&gt;

&lt;span class="c"&gt;# Set appropriate swap size
&lt;/span&gt;&lt;span class="py"&gt;swap&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;4GB&lt;/span&gt;

&lt;span class="c"&gt;# Enable DNS tunneling
&lt;/span&gt;&lt;span class="py"&gt;dnsTunneling&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;true&lt;/span&gt;

&lt;span class="c"&gt;# Enable automatic memory reclamation
&lt;/span&gt;&lt;span class="py"&gt;autoMemoryReclaim&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;gradual&lt;/span&gt;

&lt;span class="c"&gt;# Enable local port forwarding
&lt;/span&gt;&lt;span class="py"&gt;localhostForwarding&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;true&lt;/span&gt;

&lt;span class="c"&gt;# Set localhostForwarding
&lt;/span&gt;&lt;span class="py"&gt;localhostForwarding&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;true&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Important:&lt;/strong&gt; After saving &lt;code&gt;.wslconfig&lt;/code&gt;, restart WSL from PowerShell:&lt;br&gt;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;wsl&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;--shutdown&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Part 2: Docker Desktop Configuration
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Install Docker Desktop
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Download Docker Desktop from &lt;a href="https://www.docker.com/products/docker-desktop/" rel="noopener noreferrer"&gt;docker.com&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;During installation, check &lt;strong&gt;"Use WSL2 instead of Hyper-V"&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Start Docker Desktop&lt;/li&gt;
&lt;li&gt;Go to Settings → Resources → WSL Integration&lt;/li&gt;
&lt;li&gt;Enable integration with your Ubuntu distribution&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Verify Docker in WSL
&lt;/h3&gt;

&lt;p&gt;Open a new WSL terminal and verify Docker is accessible:&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;# WSL Terminal&lt;/span&gt;
docker &lt;span class="nt"&gt;--version&lt;/span&gt;
docker-compose &lt;span class="nt"&gt;--version&lt;/span&gt;

&lt;span class="c"&gt;# Test Docker is running&lt;/span&gt;
docker run hello-world
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;💡 Pro Tip:&lt;/strong&gt; If you get "permission denied while trying to connect to the Docker daemon," add your user to the docker group:&lt;br&gt;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# WSL Terminal&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;usermod &lt;span class="nt"&gt;-aG&lt;/span&gt; docker &lt;span class="nv"&gt;$USER&lt;/span&gt;
newgrp docker
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Part 3: Midnight Toolchain Setup
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Install Node.js
&lt;/h3&gt;

&lt;p&gt;Midnight requires Node.js 18+. Install using nvm for version 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;# WSL Terminal&lt;/span&gt;
&lt;span class="c"&gt;# Install nvm if not already installed&lt;/span&gt;
curl &lt;span class="nt"&gt;-o-&lt;/span&gt; https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash

&lt;span class="c"&gt;# Reload shell&lt;/span&gt;
&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;NVM_DIR&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$HOME&lt;/span&gt;&lt;span class="s2"&gt;/.nvm"&lt;/span&gt;
&lt;span class="o"&gt;[&lt;/span&gt; &lt;span class="nt"&gt;-s&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$NVM_DIR&lt;/span&gt;&lt;span class="s2"&gt;/nvm.sh"&lt;/span&gt; &lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="se"&gt;\.&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$NVM_DIR&lt;/span&gt;&lt;span class="s2"&gt;/nvm.sh"&lt;/span&gt;

&lt;span class="c"&gt;# Install and use Node.js 20&lt;/span&gt;
nvm &lt;span class="nb"&gt;install &lt;/span&gt;20
nvm use 20

&lt;span class="c"&gt;# Verify installation&lt;/span&gt;
node &lt;span class="nt"&gt;--version&lt;/span&gt;  &lt;span class="c"&gt;# Should output v20.x.x&lt;/span&gt;
npm &lt;span class="nt"&gt;--version&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Install Compact Compiler
&lt;/h3&gt;

&lt;p&gt;Install the Midnight Compact compiler:&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;# WSL Terminal&lt;/span&gt;
curl &lt;span class="nt"&gt;--proto&lt;/span&gt; &lt;span class="s1"&gt;'=https'&lt;/span&gt; &lt;span class="nt"&gt;--tlsv1&lt;/span&gt;.2 &lt;span class="nt"&gt;-LsSf&lt;/span&gt; https://github.com/midnightntwrk/compact/releases/latest/download/compact-installer.sh | sh

&lt;span class="c"&gt;# Reload shell configuration&lt;/span&gt;
&lt;span class="nb"&gt;source&lt;/span&gt; ~/.bashrc

&lt;span class="c"&gt;# Verify installation&lt;/span&gt;
compact &lt;span class="nt"&gt;--version&lt;/span&gt;
compact compile &lt;span class="nt"&gt;--version&lt;/span&gt;
which compact
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;⚠️ Common Issue:&lt;/strong&gt; If &lt;code&gt;compact&lt;/code&gt; command is not found after installation, manually add it to your PATH:&lt;br&gt;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# WSL Terminal&lt;/span&gt;
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s1"&gt;'export PATH="$HOME/.compact/bin:$PATH"'&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt; ~/.bashrc
&lt;span class="nb"&gt;source&lt;/span&gt; ~/.bashrc
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Install Midnight MCP
&lt;/h3&gt;

&lt;p&gt;The Midnight MCP (Model Context Protocol) provides essential tooling:&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;# WSL Terminal&lt;/span&gt;
npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-g&lt;/span&gt; @midnight/mcp
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Setup Docker Stack for Local Development
&lt;/h3&gt;

&lt;p&gt;Create a docker-compose file for the Midnight local stack:&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;# WSL Terminal&lt;/span&gt;
&lt;span class="nb"&gt;mkdir&lt;/span&gt; &lt;span class="nt"&gt;-p&lt;/span&gt; ~/midnight-project
&lt;span class="nb"&gt;cd&lt;/span&gt; ~/midnight-project
&lt;span class="nb"&gt;mkdir&lt;/span&gt; &lt;span class="nt"&gt;-p&lt;/span&gt; docker
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Create &lt;code&gt;docker/docker-compose.yml&lt;/code&gt;:&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;version&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;3.8'&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;proof-server&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;image&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;ghcr.io/midnightntwrk/proof-server:latest&lt;/span&gt;
    &lt;span class="na"&gt;container_name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;midnight-proof-server&lt;/span&gt;
    &lt;span class="na"&gt;ports&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;8080:8080"&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;PROOF_SERVER_PORT=8080&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;RUST_LOG=info&lt;/span&gt;
    &lt;span class="na"&gt;mem_limit&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;4g&lt;/span&gt;
    &lt;span class="na"&gt;mem_reservation&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;2g&lt;/span&gt;
    &lt;span class="na"&gt;shm_size&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;2g&lt;/span&gt;
    &lt;span class="na"&gt;volumes&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;proof-data:/data&lt;/span&gt;
    &lt;span class="na"&gt;networks&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;midnight-network&lt;/span&gt;
    &lt;span class="na"&gt;healthcheck&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;test&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;CMD"&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;curl"&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;-f"&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;http://localhost:8080/health"&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;
      &lt;span class="na"&gt;interval&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;30s&lt;/span&gt;
      &lt;span class="na"&gt;timeout&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;10s&lt;/span&gt;
      &lt;span class="na"&gt;retries&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;3&lt;/span&gt;

  &lt;span class="na"&gt;indexer&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;image&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;ghcr.io/midnightntwrk/indexer:latest&lt;/span&gt;
    &lt;span class="na"&gt;container_name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;midnight-indexer&lt;/span&gt;
    &lt;span class="na"&gt;ports&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;3000:3000"&lt;/span&gt;
    &lt;span class="na"&gt;depends_on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;proof-server&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;PROOF_SERVER_URL=http://proof-server:8080&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;NETWORK=devnet&lt;/span&gt;
    &lt;span class="na"&gt;networks&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;midnight-network&lt;/span&gt;

&lt;span class="na"&gt;volumes&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;proof-data&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;

&lt;span class="na"&gt;networks&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;midnight-network&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;bridge&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Start the stack:&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;# WSL Terminal&lt;/span&gt;
&lt;span class="nb"&gt;cd&lt;/span&gt; ~/midnight-project/docker
docker-compose up &lt;span class="nt"&gt;-d&lt;/span&gt;

&lt;span class="c"&gt;# Check services are running&lt;/span&gt;
docker-compose ps
docker-compose logs &lt;span class="nt"&gt;-f&lt;/span&gt; proof-server
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Part 4: End-to-End Verification
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Create Your First Midnight Contract
&lt;/h3&gt;

&lt;p&gt;Create a new project:&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;# WSL Terminal&lt;/span&gt;
&lt;span class="nb"&gt;cd&lt;/span&gt; ~/midnight-project
compact new hello-midnight
&lt;span class="nb"&gt;cd &lt;/span&gt;hello-midnight
&lt;span class="nb"&gt;ls&lt;/span&gt; &lt;span class="nt"&gt;-la&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Edit &lt;code&gt;contract.compact&lt;/code&gt; with a simple counter contract:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight rust"&gt;&lt;code&gt;&lt;span class="c1"&gt;// A simple counter contract for Midnight&lt;/span&gt;
&lt;span class="c1"&gt;// Demonstrates basic state management and increment operations&lt;/span&gt;

&lt;span class="n"&gt;contract&lt;/span&gt; &lt;span class="n"&gt;hello_midnight&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// Store a counter value&lt;/span&gt;
    &lt;span class="k"&gt;pub&lt;/span&gt; &lt;span class="n"&gt;counter&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;u32&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="c1"&gt;// Constructor - initialize counter to 0&lt;/span&gt;
    &lt;span class="k"&gt;pub&lt;/span&gt; &lt;span class="k"&gt;fn&lt;/span&gt; &lt;span class="nf"&gt;new&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="k"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="k"&gt;Self&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;Self&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="n"&gt;counter&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="c1"&gt;// Increment the counter&lt;/span&gt;
    &lt;span class="k"&gt;pub&lt;/span&gt; &lt;span class="k"&gt;fn&lt;/span&gt; &lt;span class="nf"&gt;increment&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;mut&lt;/span&gt; &lt;span class="n"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;Context&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;u32&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;self&lt;/span&gt;&lt;span class="py"&gt;.counter&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;self&lt;/span&gt;&lt;span class="py"&gt;.counter&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;self&lt;/span&gt;&lt;span class="py"&gt;.counter&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="c1"&gt;// Get current counter value&lt;/span&gt;
    &lt;span class="k"&gt;pub&lt;/span&gt; &lt;span class="k"&gt;fn&lt;/span&gt; &lt;span class="nf"&gt;get_counter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;Context&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;u32&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;self&lt;/span&gt;&lt;span class="py"&gt;.counter&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Compile the Contract
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# WSL Terminal&lt;/span&gt;
&lt;span class="nb"&gt;cd&lt;/span&gt; ~/midnight-project/hello-midnight
compact compile contract.compact
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If successful, you'll see:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;✓ Compiled successfully
Output: build/contract.json
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Deploy to Local Devnet
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# WSL Terminal&lt;/span&gt;
&lt;span class="c"&gt;# Ensure proof server is running&lt;/span&gt;
curl http://localhost:8080/health

&lt;span class="c"&gt;# Deploy using the CLI (requires Lace wallet installed)&lt;/span&gt;
compact deploy &lt;span class="nt"&gt;--network&lt;/span&gt; devnet &lt;span class="nt"&gt;--proof-server&lt;/span&gt; http://localhost:8080
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; For deployment, you'll need the Lace wallet browser extension installed and configured with testnet tokens. See the &lt;a href="https://docs.midnight.network/getting-started/installation" rel="noopener noreferrer"&gt;Midnight Documentation&lt;/a&gt; for details.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Part 5: What Does NOT Work
&lt;/h2&gt;

&lt;p&gt;Understanding what doesn't work is crucial to avoid frustration:&lt;/p&gt;

&lt;h3&gt;
  
  
  ❌ Native Windows PowerShell
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;The Compact compiler &lt;strong&gt;does not work&lt;/strong&gt; in Windows PowerShell or CMD&lt;/li&gt;
&lt;li&gt;All compilation must happen inside WSL2&lt;/li&gt;
&lt;li&gt;Even with WSLg (WSL GUI), some tools may behave unexpectedly&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ❌ Windows-native Node.js/npm
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Do not install Node.js directly on Windows&lt;/li&gt;
&lt;li&gt;Use Node.js only inside WSL2&lt;/li&gt;
&lt;li&gt;Windows npm packages may have binary dependencies that won't work&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ❌ Windows Docker without WSL2
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Docker Desktop without WSL2 backend is not supported&lt;/li&gt;
&lt;li&gt;Ensure Docker is using WSL2 backend (check Docker Desktop settings)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ❌ VSCode Remote-WSL Without Proper Setup
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;When using VSCode with Remote-WSL extension, ensure your terminal is actually in WSL&lt;/li&gt;
&lt;li&gt;Always verify with &lt;code&gt;uname -a&lt;/code&gt; showing "Linux"&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Part 6: Troubleshooting
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Proof Server Out of Memory (OOM)
&lt;/h3&gt;

&lt;p&gt;If you see errors like "memory allocation failed":&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Verify &lt;code&gt;.wslconfig&lt;/code&gt; has sufficient memory allocation (minimum 4GB, recommended 6GB)&lt;/li&gt;
&lt;li&gt;Restart WSL: &lt;code&gt;wsl --shutdown&lt;/code&gt; in PowerShell&lt;/li&gt;
&lt;li&gt;Restart Docker Desktop&lt;/li&gt;
&lt;li&gt;Check container memory: &lt;code&gt;docker stats&lt;/code&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Detailed fix for OOM:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Windows PowerShell (Administrator)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="c"&gt;# Check current WSL memory allocation&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;wsl&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-e&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;cat&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;/proc/meminfo&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="c"&gt;# If you see less than 4GB available, update .wslconfig&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;notepad&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$&lt;/span&gt;&lt;span class="nn"&gt;env&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nv"&gt;USERPROFILE&lt;/span&gt;&lt;span class="nx"&gt;\.wslconfig&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="c"&gt;# Ensure these settings:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;wsl2&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;memory&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="n"&gt;GB&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="nx"&gt;swap&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;GB&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Docker Access Denied
&lt;/h3&gt;

&lt;p&gt;If you get "Cannot connect to Docker daemon":&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;# WSL Terminal&lt;/span&gt;
&lt;span class="c"&gt;# Check if Docker is running&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;systemctl status docker

&lt;span class="c"&gt;# Start Docker if needed&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;systemctl start docker

&lt;span class="c"&gt;# Add user to docker group&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;usermod &lt;span class="nt"&gt;-aG&lt;/span&gt; docker &lt;span class="nv"&gt;$USER&lt;/span&gt;
&lt;span class="c"&gt;# Log out and back in, or run:&lt;/span&gt;
newgrp docker

&lt;span class="c"&gt;# Alternative: Use Docker without systemd&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;service docker start
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Compact Command Not Found
&lt;/h3&gt;

&lt;p&gt;If &lt;code&gt;compact&lt;/code&gt; is not recognized:&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;# WSL Terminal&lt;/span&gt;
&lt;span class="c"&gt;# Check if it's installed&lt;/span&gt;
&lt;span class="nb"&gt;ls&lt;/span&gt; &lt;span class="nt"&gt;-la&lt;/span&gt; ~/.compact/bin/

&lt;span class="c"&gt;# Add to PATH manually&lt;/span&gt;
&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;PATH&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$HOME&lt;/span&gt;&lt;span class="s2"&gt;/.compact/bin:&lt;/span&gt;&lt;span class="nv"&gt;$PATH&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s1"&gt;'export PATH="$HOME/.compact/bin:$PATH"'&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt; ~/.bashrc

&lt;span class="c"&gt;# Reload&lt;/span&gt;
&lt;span class="nb"&gt;source&lt;/span&gt; ~/.bashrc

&lt;span class="c"&gt;# Verify with full path&lt;/span&gt;
~/.compact/bin/compact &lt;span class="nt"&gt;--version&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  PATH Issues Between Windows and WSL
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Never mix Windows and WSL paths&lt;/li&gt;
&lt;li&gt;Always use &lt;code&gt;/home/username/&lt;/code&gt; not &lt;code&gt;C:\Users\...&lt;/code&gt; paths inside WSL&lt;/li&gt;
&lt;li&gt;VSCode Remote-WSL will handle path translation automatically&lt;/li&gt;
&lt;li&gt;If VSCode opens files in Windows temp directory, use &lt;code&gt;code .&lt;/code&gt; from WSL terminal&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Network Connectivity Issues
&lt;/h3&gt;

&lt;p&gt;If proof server cannot connect to indexer:&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;# Check Docker network&lt;/span&gt;
docker network &lt;span class="nb"&gt;ls
&lt;/span&gt;docker network inspect midnight-network

&lt;span class="c"&gt;# Restart services&lt;/span&gt;
&lt;span class="nb"&gt;cd&lt;/span&gt; ~/midnight-project/docker
docker-compose down
docker-compose up &lt;span class="nt"&gt;-d&lt;/span&gt;

&lt;span class="c"&gt;# Check logs&lt;/span&gt;
docker-compose logs &lt;span class="nt"&gt;--tail&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;50
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Disk Space Issues
&lt;/h3&gt;

&lt;p&gt;WSL2 can consume significant disk space. Clean up periodically:&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;# WSL Terminal&lt;/span&gt;
&lt;span class="c"&gt;# Clean Docker&lt;/span&gt;
docker system prune &lt;span class="nt"&gt;-a&lt;/span&gt;

&lt;span class="c"&gt;# Clean WSL&lt;/span&gt;
wsl &lt;span class="nt"&gt;--shutdown&lt;/span&gt;
&lt;span class="c"&gt;# Then run Disk Cleanup on Windows and select "Clean up system files" &amp;gt; "Windows Update Cleanup"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Performance Optimization
&lt;/h3&gt;

&lt;p&gt;For faster development:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Use VSCode Remote-WSL&lt;/strong&gt; - Best development experience&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Enable WSL2 localhost forwarding&lt;/strong&gt; - Reduces network latency&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Store projects in WSL&lt;/strong&gt; - Not on Windows filesystem&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Use SSD for WSL&lt;/strong&gt; - If possible, store WSL on SSD
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Recommended VSCode extensions for Midnight development:&lt;/span&gt;
&lt;span class="c"&gt;# - Remote - WSL&lt;/span&gt;
&lt;span class="c"&gt;# - Compact&lt;/span&gt;
&lt;span class="c"&gt;# - Docker&lt;/span&gt;
&lt;span class="c"&gt;# - GitLens&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Common Error Messages
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Error&lt;/th&gt;
&lt;th&gt;Solution&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;"proof-server OOM"&lt;/td&gt;
&lt;td&gt;Increase &lt;code&gt;.wslconfig&lt;/code&gt; memory to 6GB+&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;"docker: permission denied"&lt;/td&gt;
&lt;td&gt;Add user to docker group&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;"compact: command not found"&lt;/td&gt;
&lt;td&gt;Add &lt;code&gt;~/.compact/bin&lt;/code&gt; to PATH&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;"Connection refused"&lt;/td&gt;
&lt;td&gt;Ensure Docker containers are running&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;"Node version mismatch"&lt;/td&gt;
&lt;td&gt;Use Node.js 18+ inside WSL&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

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

&lt;p&gt;You now have a fully functional Midnight development environment running on Windows via WSL2. The key takeaways are:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Always use WSL2&lt;/strong&gt; - Never try to run Midnight tools directly on Windows&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Configure &lt;code&gt;.wslconfig&lt;/code&gt;&lt;/strong&gt; - Allocate sufficient memory (6GB recommended)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Use Docker with WSL2 backend&lt;/strong&gt; - Not Hyper-V or native Windows&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Keep all development inside WSL&lt;/strong&gt; - Including Node.js, npm, and Compact&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Use VSCode Remote-WSL&lt;/strong&gt; - For the best development experience&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;With this setup, you can now develop privacy-preserving DApps on Midnight directly from your Windows machine. The initial setup takes about 30-45 minutes, but you'll have a production-ready development environment.&lt;/p&gt;

&lt;h3&gt;
  
  
  Quick Reference Commands
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Start development&lt;/span&gt;
wsl  &lt;span class="c"&gt;# Enter WSL&lt;/span&gt;
&lt;span class="nb"&gt;cd&lt;/span&gt; ~/midnight-project/docker &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; docker-compose up &lt;span class="nt"&gt;-d&lt;/span&gt;

&lt;span class="c"&gt;# Compile contract&lt;/span&gt;
&lt;span class="nb"&gt;cd&lt;/span&gt; ~/midnight-project/hello-midnight
compact compile contract.compact

&lt;span class="c"&gt;# Deploy (requires Lace wallet)&lt;/span&gt;
compact deploy &lt;span class="nt"&gt;--network&lt;/span&gt; devnet

&lt;span class="c"&gt;# Check proof server&lt;/span&gt;
curl http://localhost:8080/health

&lt;span class="c"&gt;# Stop development&lt;/span&gt;
docker-compose down
&lt;span class="nb"&gt;exit&lt;/span&gt;  &lt;span class="c"&gt;# Exit WSL&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;p&gt;&lt;strong&gt;Next Steps:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Explore the &lt;a href="https://docs.midnight.network/" rel="noopener noreferrer"&gt;Midnight Documentation&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Join the &lt;a href="https://discord.com/invite/midnightnetwork" rel="noopener noreferrer"&gt;Midnight Discord&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Try the &lt;a href="https://docs.midnight.network/getting-started/hello-world" rel="noopener noreferrer"&gt;Hello World Tutorial&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Build your first privacy-preserving DApp!&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;em&gt;Published on Dev.to | #MidnightforDevs | @midnightntwrk&lt;/em&gt;&lt;/p&gt;

</description>
      <category>midnight</category>
      <category>wsl2</category>
      <category>blockchain</category>
      <category>tutorial</category>
    </item>
  </channel>
</rss>
