<?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: Valiantsin Lutchanka</title>
    <description>The latest articles on DEV Community by Valiantsin Lutchanka (@valiantsin2021).</description>
    <link>https://dev.to/valiantsin2021</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%2F971949%2Fca582e05-5ecf-4b30-8845-421ca27256b1.jpeg</url>
      <title>DEV Community: Valiantsin Lutchanka</title>
      <link>https://dev.to/valiantsin2021</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/valiantsin2021"/>
    <language>en</language>
    <item>
      <title>My first VSCode extension playground</title>
      <dc:creator>Valiantsin Lutchanka</dc:creator>
      <pubDate>Tue, 24 Feb 2026 20:21:34 +0000</pubDate>
      <link>https://dev.to/valiantsin2021/my-first-vscode-extension-playground-3k5i</link>
      <guid>https://dev.to/valiantsin2021/my-first-vscode-extension-playground-3k5i</guid>
      <description>&lt;h2&gt;
  
  
  What is it about?
&lt;/h2&gt;

&lt;p&gt;The idea of my first VSCode extension was inspired by weathr cli app from this project - &lt;a href="https://github.com/Veirt/weathr" rel="noopener noreferrer"&gt;https://github.com/Veirt/weathr&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;I know there are plenty of different extensions already on the market, but this one is just my playground to try to do something new 😄.&lt;/p&gt;

&lt;p&gt;I was planning to build it for a Github Copilot CLI challenge, but was late hehe, so I did it just for fan.&lt;/p&gt;

&lt;p&gt;The process of extension creation is quite simple, having all the AI power at your fingertips, you can do so in a couple of hours - it is just a matter of having an idea to implement. My colleague Copilot has done all the hard work, so I was just sitting in a sidecar giving advices 😂.&lt;/p&gt;

&lt;p&gt;So if you would like to create one by your own, the process is simple.&lt;/p&gt;

&lt;p&gt;First you will need actually to develop one.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/Valiantsin2021/vscode-weathr" rel="noopener noreferrer"&gt;Working example repo can be found here&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;My idea was to have a realtime weather app in a bottom panel along with the terminal and in a side panel where explorer tab of VSCode is which will look like this:&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%2Fq2ynkp0htbba7u5n3vka.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%2Fq2ynkp0htbba7u5n3vka.png" alt="Extension view" width="800" height="407"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Features
&lt;/h2&gt;

&lt;p&gt;It has two modes - canvas or pixel modes.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🌦️ &lt;strong&gt;Live weather animations&lt;/strong&gt; — rain, snow, thunderstorm, drizzle, fog, clear, partly-cloudy, overcast&lt;/li&gt;
&lt;li&gt;🌅 &lt;strong&gt;Day/night cycle&lt;/strong&gt; — stars, moon, fireflies at night; sun, birds, airplanes during the day&lt;/li&gt;
&lt;li&gt;📍 &lt;strong&gt;Flexible location&lt;/strong&gt; — auto-detect via IP, specify by town/postcode, or use coordinates&lt;/li&gt;
&lt;li&gt;🏠 &lt;strong&gt;Animated scene&lt;/strong&gt; — house with chimney smoke, trees, fence, road&lt;/li&gt;
&lt;li&gt;🍂 &lt;strong&gt;Falling leaves&lt;/strong&gt; — optional autumn leaves animation&lt;/li&gt;
&lt;li&gt;⚡ &lt;strong&gt;Thunderstorm lightning&lt;/strong&gt; — screen flashes, animated bolts&lt;/li&gt;
&lt;li&gt;🌡️ &lt;strong&gt;HUD overlay&lt;/strong&gt; — condition, temperature, wind, precipitation, coordinates&lt;/li&gt;
&lt;li&gt;🎨 &lt;strong&gt;Configurable&lt;/strong&gt; — all weathr config options exposed as VS Code settings&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How to use it?
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Open the &lt;strong&gt;Command Palette&lt;/strong&gt; (&lt;code&gt;Ctrl+Shift+P&lt;/code&gt; / &lt;code&gt;Cmd+Shift+P&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Run &lt;code&gt;Weathr: Start Weather Animation&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Or find &lt;strong&gt;Weathr&lt;/strong&gt; in the bottom panel tabs&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Commands
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Command&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Weathr: Start Weather Animation&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Open the animation panel&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Weathr: Refresh Weather&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Re-fetch weather from Open-Meteo&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Weathr: Simulate Weather Condition&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Pick any weather condition to preview&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Weathr: Toggle HUD&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Show/hide the status bar overlay&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Weathr: Toggle Falling Leaves&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Enable/disable autumn leaves&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Weathr: Set Location by Town or Postcode&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Manually set location (e.g., "London" or "SW1A 1AA")&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Configuration
&lt;/h2&gt;

&lt;p&gt;All settings are under &lt;code&gt;vscode-weathr.*&lt;/code&gt; in VS Code Settings:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Setting&lt;/th&gt;
&lt;th&gt;Default&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;location.mode&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;auto&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Location mode: &lt;code&gt;auto&lt;/code&gt; (IP), &lt;code&gt;manual&lt;/code&gt; (town/postcode), &lt;code&gt;coordinates&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;location.manual&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;``&lt;/td&gt;
&lt;td&gt;Manual location string (e.g., "London" or "SW1A 1AA"), used when mode is &lt;code&gt;manual&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;location.latitude&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;36.60&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Latitude (–90 to 90)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;location.longitude&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;4.52&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Longitude (–180 to 180)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;location.hide&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;false&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Hide coordinates in HUD&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;hideHUD&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;false&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Hide weather HUD overlay&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;units.temperature&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;celsius&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;celsius&lt;/code&gt; or &lt;code&gt;fahrenheit&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;units.windSpeed&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;kmh&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;kmh&lt;/code&gt;, &lt;code&gt;ms&lt;/code&gt;, &lt;code&gt;mph&lt;/code&gt;, &lt;code&gt;kn&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;units.precipitation&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;mm&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;mm&lt;/code&gt; or &lt;code&gt;inch&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;showLeaves&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;false&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Autumn leaves animation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;animationSpeed&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;normal&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;slow&lt;/code&gt;, &lt;code&gt;normal&lt;/code&gt;, &lt;code&gt;fast&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;theme&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;auto&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;auto&lt;/code&gt;, &lt;code&gt;dark&lt;/code&gt;, &lt;code&gt;light&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Weather Conditions (Simulate)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Clear skies&lt;/strong&gt;: clear, partly-cloudy, cloudy, overcast&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Precipitation&lt;/strong&gt;: fog, drizzle, rain, freezing-rain, rain-showers&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Snow&lt;/strong&gt;: snow, snow-grains, snow-showers&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Storms&lt;/strong&gt;: thunderstorm, thunderstorm-hail&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Setting Location
&lt;/h2&gt;

&lt;p&gt;You have three options to set your location:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Auto-detect (default)
&lt;/h3&gt;

&lt;p&gt;Set &lt;code&gt;location.mode&lt;/code&gt; to &lt;code&gt;auto&lt;/code&gt; to detect your location using your IP address.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Manual location (town or postcode)
&lt;/h3&gt;

&lt;p&gt;Run the &lt;strong&gt;&lt;code&gt;Weathr: Set Location by Town or Postcode&lt;/code&gt;&lt;/strong&gt; command and enter a location name:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Town names: "London", "New York", "Tokyo"&lt;/li&gt;
&lt;li&gt;Postcodes: "SW1A 1AA", "10001", "100-0001"&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The location will be automatically geocoded and weather will update immediately.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Manual coordinates
&lt;/h3&gt;

&lt;p&gt;Set &lt;code&gt;location.mode&lt;/code&gt; to &lt;code&gt;coordinates&lt;/code&gt; and configure:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;location.latitude&lt;/code&gt; — latitude of your location&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;location.longitude&lt;/code&gt; — longitude of your location&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Configuration Example
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;`json&lt;br&gt;
{&lt;br&gt;
  "vscode-weathr.location.mode": "manual",&lt;br&gt;
  "vscode-weathr.location.manual": "Paris",&lt;br&gt;
  "vscode-weathr.units.temperature": "celsius",&lt;br&gt;
  "vscode-weathr.units.windSpeed": "kmh",&lt;br&gt;
  "vscode-weathr.units.precipitation": "mm"&lt;br&gt;
}&lt;br&gt;
`&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Or use coordinates-based location:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;`json&lt;br&gt;
{&lt;br&gt;
  "vscode-weathr.location.mode": "coordinates",&lt;br&gt;
  "vscode-weathr.location.latitude": 40.7128,&lt;br&gt;
  "vscode-weathr.location.longitude": -74.0060,&lt;br&gt;
  "vscode-weathr.units.temperature": "celsius",&lt;br&gt;
  "vscode-weathr.units.windSpeed": "kmh",&lt;br&gt;
  "vscode-weathr.units.precipitation": "mm"&lt;br&gt;
}&lt;br&gt;
`&lt;/code&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Geocoding
&lt;/h2&gt;

&lt;p&gt;When using manual location mode, town/postcode names are converted to coordinates using the &lt;a href="https://nominatim.org/" rel="noopener noreferrer"&gt;Nominatim API&lt;/a&gt; (free OpenStreetMap geocoding service). No API key is required.&lt;/p&gt;

&lt;h2&gt;
  
  
  Here's the full publishing process for a VS Code extension:
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Install the packaging tool:&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;`&lt;code&gt;&lt;/code&gt;&lt;br&gt;
npm install -g @vscode/vsce&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&lt;/code&gt;`&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Create a publisher account at marketplace.visualstudio.com/manage — sign in with a Microsoft account.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Create a Personal Access Token (PAT):&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Go to dev.azure.com → your org → User Settings → Personal Access Tokens&lt;br&gt;
New token → set Marketplace scope to Manage&lt;br&gt;
Copy the token (you only see it once)&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Log in from the terminal:&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;`&lt;code&gt;&lt;/code&gt;&lt;br&gt;
vsce login YOUR_PUBLISHER_NAME&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&lt;/code&gt;`&lt;/p&gt;

&lt;h1&gt;
  
  
  paste your PAT when prompted
&lt;/h1&gt;

&lt;ol&gt;
&lt;li&gt;Make sure package.json has the required fields:
json{
"publisher": "your-publisher-name",
"name": "vscode-,name.",
"displayName": "Weathr",
"description": "Meaningful description",
"version": "1.0.0",
"icon": "icon.png",
"repository": {
"type": "git",
"url": "&lt;a href="https://github.com/you/vscode-weathr" rel="noopener noreferrer"&gt;https://github.com/you/vscode-weathr&lt;/a&gt;"
},
"license": "MIT",
"engines": { "vscode": "^1.80.0" }
}&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The icon.png must be 128×128px and is required — the publish will fail without it.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Package and inspect it first (optional but recommended):&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;`&lt;code&gt;&lt;/code&gt;&lt;br&gt;
 vsce package&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&lt;/code&gt;`&lt;/p&gt;

&lt;h1&gt;
  
  
  produces vscode-weathr-1.0.0.vsix — you can install it locally to
&lt;/h1&gt;

&lt;p&gt;test:&lt;/p&gt;

&lt;p&gt;`&lt;code&gt;&lt;/code&gt;&lt;br&gt;
code --install-extension vscode-weathr-1.0.0.vsix&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&lt;/code&gt;`&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Publish:&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;`&lt;code&gt;&lt;/code&gt;&lt;br&gt;
vsce publish&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&lt;/code&gt;`&lt;/p&gt;

&lt;p&gt;Or publish and bump the version in one command:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;`&lt;br&gt;
vsce publish minor   # 1.0.0 → 1.1.0&lt;br&gt;
vsce publish patch   # 1.0.0 → 1.0.1&lt;br&gt;
`&lt;/code&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Write a good README.md — it becomes the marketplace listing page. Include a screenshot or GIF of the extension in action, which makes a big difference for discoverability.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;After publishing it takes about 5 minutes to appear on the marketplace. You can manage it, see install counts, and publish updates at marketplace.visualstudio.com/manage.&lt;/p&gt;

&lt;p&gt;Hope it will be useful for anyone who wants to create and publish his/her own extension! 😄&lt;/p&gt;

</description>
      <category>vscode</category>
      <category>development</category>
      <category>typescript</category>
      <category>javascript</category>
    </item>
    <item>
      <title>My first VSCode extension playground</title>
      <dc:creator>Valiantsin Lutchanka</dc:creator>
      <pubDate>Tue, 24 Feb 2026 20:21:34 +0000</pubDate>
      <link>https://dev.to/valiantsin2021/my-first-vscode-extension-playground-12gb</link>
      <guid>https://dev.to/valiantsin2021/my-first-vscode-extension-playground-12gb</guid>
      <description>&lt;h2&gt;
  
  
  What is it about?
&lt;/h2&gt;

&lt;p&gt;The idea of my first VSCode extension was inspired by weathr cli app from this project - &lt;a href="https://github.com/Veirt/weathr" rel="noopener noreferrer"&gt;https://github.com/Veirt/weathr&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;I know there are plenty of different extensions already on the market, but this one is just my playground to try to do something new 😄.&lt;/p&gt;

&lt;p&gt;I was planning to build it for a Github Copilot CLI challenge, but was late hehe, so I did it just for fan.&lt;/p&gt;

&lt;p&gt;The process of extension creation is quite simple, having all the AI power at your fingertips, you can do so in a couple of hours - it is just a matter of having an idea to implement. My colleague Copilot has done all the hard work, so I was just sitting in a sidecar giving advices 😂.&lt;/p&gt;

&lt;p&gt;So if you would like to create one by your own, the process is simple.&lt;/p&gt;

&lt;p&gt;First you will need actually to develop one.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/Valiantsin2021/vscode-weathr" rel="noopener noreferrer"&gt;Working example repo can be found here&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;My idea was to have a realtime weather app in a bottom panel along with the terminal and in a side panel where explorer tab of VSCode is which will look like this:&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%2Fq2ynkp0htbba7u5n3vka.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%2Fq2ynkp0htbba7u5n3vka.png" alt="Extension view" width="800" height="407"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Features
&lt;/h2&gt;

&lt;p&gt;It has two modes - canvas or pixel modes.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🌦️ &lt;strong&gt;Live weather animations&lt;/strong&gt; — rain, snow, thunderstorm, drizzle, fog, clear, partly-cloudy, overcast&lt;/li&gt;
&lt;li&gt;🌅 &lt;strong&gt;Day/night cycle&lt;/strong&gt; — stars, moon, fireflies at night; sun, birds, airplanes during the day&lt;/li&gt;
&lt;li&gt;📍 &lt;strong&gt;Flexible location&lt;/strong&gt; — auto-detect via IP, specify by town/postcode, or use coordinates&lt;/li&gt;
&lt;li&gt;🏠 &lt;strong&gt;Animated scene&lt;/strong&gt; — house with chimney smoke, trees, fence, road&lt;/li&gt;
&lt;li&gt;🍂 &lt;strong&gt;Falling leaves&lt;/strong&gt; — optional autumn leaves animation&lt;/li&gt;
&lt;li&gt;⚡ &lt;strong&gt;Thunderstorm lightning&lt;/strong&gt; — screen flashes, animated bolts&lt;/li&gt;
&lt;li&gt;🌡️ &lt;strong&gt;HUD overlay&lt;/strong&gt; — condition, temperature, wind, precipitation, coordinates&lt;/li&gt;
&lt;li&gt;🎨 &lt;strong&gt;Configurable&lt;/strong&gt; — all weathr config options exposed as VS Code settings&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How to use it?
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Open the &lt;strong&gt;Command Palette&lt;/strong&gt; (&lt;code&gt;Ctrl+Shift+P&lt;/code&gt; / &lt;code&gt;Cmd+Shift+P&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Run &lt;code&gt;Weathr: Start Weather Animation&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Or find &lt;strong&gt;Weathr&lt;/strong&gt; in the bottom panel tabs&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Commands
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Command&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Weathr: Start Weather Animation&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Open the animation panel&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Weathr: Refresh Weather&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Re-fetch weather from Open-Meteo&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Weathr: Simulate Weather Condition&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Pick any weather condition to preview&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Weathr: Toggle HUD&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Show/hide the status bar overlay&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Weathr: Toggle Falling Leaves&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Enable/disable autumn leaves&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Weathr: Set Location by Town or Postcode&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Manually set location (e.g., "London" or "SW1A 1AA")&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Configuration
&lt;/h2&gt;

&lt;p&gt;All settings are under &lt;code&gt;vscode-weathr.*&lt;/code&gt; in VS Code Settings:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Setting&lt;/th&gt;
&lt;th&gt;Default&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;location.mode&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;auto&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Location mode: &lt;code&gt;auto&lt;/code&gt; (IP), &lt;code&gt;manual&lt;/code&gt; (town/postcode), &lt;code&gt;coordinates&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;location.manual&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;``&lt;/td&gt;
&lt;td&gt;Manual location string (e.g., "London" or "SW1A 1AA"), used when mode is &lt;code&gt;manual&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;location.latitude&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;36.60&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Latitude (–90 to 90)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;location.longitude&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;4.52&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Longitude (–180 to 180)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;location.hide&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;false&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Hide coordinates in HUD&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;hideHUD&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;false&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Hide weather HUD overlay&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;units.temperature&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;celsius&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;celsius&lt;/code&gt; or &lt;code&gt;fahrenheit&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;units.windSpeed&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;kmh&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;kmh&lt;/code&gt;, &lt;code&gt;ms&lt;/code&gt;, &lt;code&gt;mph&lt;/code&gt;, &lt;code&gt;kn&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;units.precipitation&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;mm&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;mm&lt;/code&gt; or &lt;code&gt;inch&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;showLeaves&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;false&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Autumn leaves animation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;animationSpeed&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;normal&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;slow&lt;/code&gt;, &lt;code&gt;normal&lt;/code&gt;, &lt;code&gt;fast&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;theme&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;auto&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;auto&lt;/code&gt;, &lt;code&gt;dark&lt;/code&gt;, &lt;code&gt;light&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Weather Conditions (Simulate)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Clear skies&lt;/strong&gt;: clear, partly-cloudy, cloudy, overcast&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Precipitation&lt;/strong&gt;: fog, drizzle, rain, freezing-rain, rain-showers&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Snow&lt;/strong&gt;: snow, snow-grains, snow-showers&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Storms&lt;/strong&gt;: thunderstorm, thunderstorm-hail&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Setting Location
&lt;/h2&gt;

&lt;p&gt;You have three options to set your location:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Auto-detect (default)
&lt;/h3&gt;

&lt;p&gt;Set &lt;code&gt;location.mode&lt;/code&gt; to &lt;code&gt;auto&lt;/code&gt; to detect your location using your IP address.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Manual location (town or postcode)
&lt;/h3&gt;

&lt;p&gt;Run the &lt;strong&gt;&lt;code&gt;Weathr: Set Location by Town or Postcode&lt;/code&gt;&lt;/strong&gt; command and enter a location name:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Town names: "London", "New York", "Tokyo"&lt;/li&gt;
&lt;li&gt;Postcodes: "SW1A 1AA", "10001", "100-0001"&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The location will be automatically geocoded and weather will update immediately.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Manual coordinates
&lt;/h3&gt;

&lt;p&gt;Set &lt;code&gt;location.mode&lt;/code&gt; to &lt;code&gt;coordinates&lt;/code&gt; and configure:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;location.latitude&lt;/code&gt; — latitude of your location&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;location.longitude&lt;/code&gt; — longitude of your location&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Configuration Example
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;`json&lt;br&gt;
{&lt;br&gt;
  "vscode-weathr.location.mode": "manual",&lt;br&gt;
  "vscode-weathr.location.manual": "Paris",&lt;br&gt;
  "vscode-weathr.units.temperature": "celsius",&lt;br&gt;
  "vscode-weathr.units.windSpeed": "kmh",&lt;br&gt;
  "vscode-weathr.units.precipitation": "mm"&lt;br&gt;
}&lt;br&gt;
`&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Or use coordinates-based location:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;`json&lt;br&gt;
{&lt;br&gt;
  "vscode-weathr.location.mode": "coordinates",&lt;br&gt;
  "vscode-weathr.location.latitude": 40.7128,&lt;br&gt;
  "vscode-weathr.location.longitude": -74.0060,&lt;br&gt;
  "vscode-weathr.units.temperature": "celsius",&lt;br&gt;
  "vscode-weathr.units.windSpeed": "kmh",&lt;br&gt;
  "vscode-weathr.units.precipitation": "mm"&lt;br&gt;
}&lt;br&gt;
`&lt;/code&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Geocoding
&lt;/h2&gt;

&lt;p&gt;When using manual location mode, town/postcode names are converted to coordinates using the &lt;a href="https://nominatim.org/" rel="noopener noreferrer"&gt;Nominatim API&lt;/a&gt; (free OpenStreetMap geocoding service). No API key is required.&lt;/p&gt;

&lt;h2&gt;
  
  
  Here's the full publishing process for a VS Code extension:
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Install the packaging tool:&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;`&lt;code&gt;&lt;/code&gt;&lt;br&gt;
npm install -g @vscode/vsce&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&lt;/code&gt;`&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Create a publisher account at marketplace.visualstudio.com/manage — sign in with a Microsoft account.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Create a Personal Access Token (PAT):&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Go to dev.azure.com → your org → User Settings → Personal Access Tokens&lt;br&gt;
New token → set Marketplace scope to Manage&lt;br&gt;
Copy the token (you only see it once)&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Log in from the terminal:&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;`&lt;code&gt;&lt;/code&gt;&lt;br&gt;
vsce login YOUR_PUBLISHER_NAME&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&lt;/code&gt;`&lt;/p&gt;

&lt;h1&gt;
  
  
  paste your PAT when prompted
&lt;/h1&gt;

&lt;ol&gt;
&lt;li&gt;Make sure package.json has the required fields:
json{
"publisher": "your-publisher-name",
"name": "vscode-,name.",
"displayName": "Weathr",
"description": "Meaningful description",
"version": "1.0.0",
"icon": "icon.png",
"repository": {
"type": "git",
"url": "&lt;a href="https://github.com/you/vscode-weathr" rel="noopener noreferrer"&gt;https://github.com/you/vscode-weathr&lt;/a&gt;"
},
"license": "MIT",
"engines": { "vscode": "^1.80.0" }
}&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The icon.png must be 128×128px and is required — the publish will fail without it.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Package and inspect it first (optional but recommended):&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;`&lt;code&gt;&lt;/code&gt;&lt;br&gt;
 vsce package&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&lt;/code&gt;`&lt;/p&gt;

&lt;h1&gt;
  
  
  produces vscode-weathr-1.0.0.vsix — you can install it locally to
&lt;/h1&gt;

&lt;p&gt;test:&lt;/p&gt;

&lt;p&gt;`&lt;code&gt;&lt;/code&gt;&lt;br&gt;
code --install-extension vscode-weathr-1.0.0.vsix&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&lt;/code&gt;`&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Publish:&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;`&lt;code&gt;&lt;/code&gt;&lt;br&gt;
vsce publish&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&lt;/code&gt;`&lt;/p&gt;

&lt;p&gt;Or publish and bump the version in one command:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;`&lt;br&gt;
vsce publish minor   # 1.0.0 → 1.1.0&lt;br&gt;
vsce publish patch   # 1.0.0 → 1.0.1&lt;br&gt;
`&lt;/code&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Write a good README.md — it becomes the marketplace listing page. Include a screenshot or GIF of the extension in action, which makes a big difference for discoverability.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;After publishing it takes about 5 minutes to appear on the marketplace. You can manage it, see install counts, and publish updates at marketplace.visualstudio.com/manage.&lt;/p&gt;

&lt;p&gt;Hope it will be useful for anyone who wants to create and publish his/her own extension! 😄&lt;/p&gt;

</description>
      <category>vscode</category>
      <category>development</category>
      <category>typescript</category>
      <category>javascript</category>
    </item>
    <item>
      <title>Create ZOD schema generator app with GitHub Copilot CLI</title>
      <dc:creator>Valiantsin Lutchanka</dc:creator>
      <pubDate>Sat, 07 Feb 2026 09:36:05 +0000</pubDate>
      <link>https://dev.to/valiantsin2021/create-zod-schema-generator-app-with-github-copilot-cli-1jab</link>
      <guid>https://dev.to/valiantsin2021/create-zod-schema-generator-app-with-github-copilot-cli-1jab</guid>
      <description>&lt;h2&gt;
  
  
  Hi folks!
&lt;/h2&gt;

&lt;p&gt;Year ago, I have been playing out of curiosity with AI tools like Claude or ChatGPT to create some apps just for fun and to try what they are capable for. The results were not so impressive.&lt;/p&gt;

&lt;p&gt;Days are past and now with all the progress that big AI players made I decided to give a second try to tools like cli agents.&lt;/p&gt;

&lt;p&gt;I am heavily involved into API testing and as far as Zod has become my go-to library for schema validation, and writing Zod schemas from scratch can be tedious, especially for complex data structures, I decided to create a small app to generate ZOD schemas out of JSON responses and JSON schemas with GitHub Copilot CLI.&lt;/p&gt;

&lt;p&gt;I do not have a GitHub subscription so I was suffering in a free tier mode with Haiku model :).&lt;/p&gt;

&lt;p&gt;Surprisingly enough it was doing quite well and udnerstood the requirements quickly. I did not want to have a complex structure or use any frameworks, maybe this was a reason Haiku handled this task after some back and forwards, and errors fixing.&lt;/p&gt;

&lt;p&gt;So the app was finally created using vanilla JS - all-in-one web page. And Copilot CLI even did not run out of free tier :).&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%2Ffa8cg30oc6uxdn7te5pb.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%2Ffa8cg30oc6uxdn7te5pb.png" alt=" " width="800" height="302"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The idea was simple - parse the users' input - if it is a normal JSON - generate ZOD schema using regex matchers. If users' input is a JSON schema - use the library to convert it to ZOD schema as a string.&lt;/p&gt;

&lt;p&gt;The result is quite pleasant and at least useful for me (hope someone will find it useful as well).&lt;/p&gt;

&lt;p&gt;This is how it 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%2F1espf9vqitaxv2d3759w.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%2F1espf9vqitaxv2d3759w.png" alt="ZOD generator" width="800" height="573"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://valiantsin2021.github.io/schema-generator/" rel="noopener noreferrer"&gt;You can try it live here:&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;What I took out of this?&lt;/p&gt;

&lt;p&gt;Well - the AI is evolving quite fast, and tasks that before have been taking significant time and tokens to generate with more advanced models, now can be acomplished with much lesser efforts and with simplier models. But I am sure you all know this :)&lt;/p&gt;

&lt;p&gt;It is very interesting were we will come with all this progress, and how it will look like in 1 year, especially with tools like BMAD or Beads.&lt;/p&gt;

&lt;p&gt;Would be glad to hear about your experience, and what things you been creating with AI!&lt;/p&gt;

</description>
      <category>typescript</category>
      <category>api</category>
      <category>json</category>
      <category>testing</category>
    </item>
    <item>
      <title>Cypress Performance Plugin "cypress-performance": A Guide to automate the Web Performance Testing</title>
      <dc:creator>Valiantsin Lutchanka</dc:creator>
      <pubDate>Thu, 19 Dec 2024 15:29:20 +0000</pubDate>
      <link>https://dev.to/valiantsin2021/cypress-performance-plugin-cypress-performance-a-guide-to-automate-the-web-performance-testing-3p02</link>
      <guid>https://dev.to/valiantsin2021/cypress-performance-plugin-cypress-performance-a-guide-to-automate-the-web-performance-testing-3p02</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;This is my first post on dev.to, so I hope it will be welcomed &lt;/p&gt;

&lt;p&gt;The idea to create this plugin came to my mind when I was struggling to measure the web UI performance and the existing plugins were not providing me with the flexibility I needed. The "cypress-performance" plugin introduces a powerful way to measure and assert web performance metrics directly in your Cypress tests. Unlike traditional end-to-end testing that focuses on functionality, this plugin enables teams to catch performance regressions early and maintain high-performance standards through automated testing.&lt;/p&gt;

&lt;p&gt;Web performance testing has become crucial today. Users expect lightning-fast experiences, and slow-loading pages can significantly impact business metrics. While Cypress is an excellent tool for end-to-end testing, it lacks built-in performance measurement capabilities. &lt;/p&gt;

&lt;p&gt;Today, I'm excited to introduce "cypress-performance", a new plugin that brings performance measurement capabilities to your Cypress tests.&lt;/p&gt;

&lt;h3&gt;
  
  
  You can check it out here:
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://www.npmjs.com/package/cypress-performance" rel="noopener noreferrer"&gt;https://www.npmjs.com/package/cypress-performance&lt;/a&gt; &lt;a href="https://github.com/Valiantsin2021/cypress-performance" rel="noopener noreferrer"&gt;https://github.com/Valiantsin2021/cypress-performance&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Key Features
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Real-time performance metrics collection during test execution&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Built-in retry mechanisms for reliable measurements&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Support for Core Web Vitals and other key performance indicators&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Seamless integration with existing Cypress tests&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Type definitions for TypeScript support&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Configurable thresholds and timing options&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Why Another Performance Testing Plugin?
&lt;/h2&gt;

&lt;p&gt;You might be wondering, "Don't we already have "@cypress-audit/lighthouse"?" Yes, we do, and it's an excellent tool. However, "cypress-performance" takes a different approach:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Real User Metrics: While Lighthouse simulates performance under specific conditions, cypress-performance captures metrics during actual test execution, giving you insights into real user scenarios.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Test Integration: The plugin seamlessly integrates with your existing tests, allowing you to measure performance while executing your regular test flows, not as a separate audit.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Granular Control: You get fine-grained control over when and how to measure performance, with built-in retry mechanisms for reliable results.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Core Web Vitals: Focus on modern performance metrics that matter, including Largest Contentful Paint (LCP), First Input Delay (FID), and Cumulative Layout Shift (CLS).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Lower overhead - no need for separate Lighthouse runs&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Less configuration - minimal setup required for basic usage&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Specific metrics focus - Core Web Vitals and key timings&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Test integration - natural fit in existing test flows the command is chainable and returns all collected metrics to be asserted&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Retry capability - built-in reliability mechanisms to ensure the metrics are collected&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Resource timing - detailed resource-level metrics&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Total bytes - size of all resources&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;On the other side - @cypress-audit/lighthouse provides us with&lt;br&gt;
Comprehensive audits including SEO, accessibility&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Scoring system aligned with Lighthouse&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Static analysis of best practices&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Recommendations for improvements&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Performance simulation under various conditions&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Broader metrics beyond just performance&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  So what is it and how to use it?
&lt;/h2&gt;

&lt;p&gt;This is a standalone Cypress plugin with 0 external dependencies.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;First, install the plugin:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;&lt;code&gt;npm install -D cypress-performance&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;Add to your cypress/support/e2e.js:&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;&lt;code&gt;import 'cypress-performance'&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;For TypeScript users, include types in tsconfig.json:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{
  "compilerOptions": {
    "types": ["cypress", "cypress-performance"]
  }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now you're ready to start measuring performance!&lt;/p&gt;

&lt;h2&gt;
  
  
  Usage
&lt;/h2&gt;

&lt;p&gt;The plugin exposes the single Cypress method: &lt;/p&gt;

&lt;p&gt;cy.performance()&lt;/p&gt;

&lt;p&gt;The cy.performance() command itself is retriable, meaning Cypress will retry the command until it either:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Gets valid metrics&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Reaches the retryTimeout&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Default options for the command:&lt;/strong&gt;&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;MetricsOptions{
  startMark?: keyof PerformanceTiming // Default: 'navigationStart'
  endMark?: keyof PerformanceTiming // Default: 'loadEventEnd'
  timeout?: number // Timeout in milliseconds (default: 10000)
  initialDelay?: number // Initial delay in milliseconds (default: 1000)
  retryTimeout?: number // Retry timeout in milliseconds (default: 5000)
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;A typical test will look like this:&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%2Fdox04czig3o1x6lkokxi.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%2Fdox04czig3o1x6lkokxi.png" alt="Test script" width="800" height="541"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And her like it will look in the Cypress test runner:&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%2Fiad3ieoopuim9addl22b.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%2Fiad3ieoopuim9addl22b.png" alt="Cypress runner screenshot" width="800" height="505"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Best Practices
&lt;/h2&gt;

&lt;p&gt;Set Realistic Thresholds Consider your users and application when setting performance thresholds: LCP: &amp;lt; 2.5s (good), &amp;lt; 4s (needs improvement) CLS: &amp;lt; 0.1 (good), &amp;lt; 0.25 (needs improvement) TBT: &amp;lt; 300ms (good), &amp;lt; 600ms (needs improvement)&lt;/p&gt;

&lt;p&gt;Use Custom Marks For single-page applications or complex user flows, use custom performance marks to measure specific interactions.&lt;/p&gt;

&lt;p&gt;Consider Environment Variations Remember that CI environments might perform differently than local development. Adjust thresholds accordingly or use relative comparisons.&lt;/p&gt;

&lt;p&gt;Combine with Other Metrics Use cypress-performance alongside other tools like Lighthouse for a complete performance picture&lt;/p&gt;

&lt;h2&gt;
  
  
  Epilogue
&lt;/h2&gt;

&lt;p&gt;My "cypress-performance" plugin serves for quick valuable and most important web performance metrics collection and brings performance testing capabilities to your Cypress test suite. By focusing on real user metrics and providing fine-grained control, it helps ensure your application performs well under actual use conditions.&lt;/p&gt;

&lt;p&gt;Whether you're monitoring Core Web Vitals, measuring specific user interactions, or ensuring smooth resource loading, "cypress-performance" provides the tools you need to catch performance regressions before they reach production.&lt;/p&gt;

&lt;p&gt;The good performance is not just about speed—it's about consistency and reliability. With "cypress-performance", you can ensure your application maintains high-performance standards throughout its development lifecycle.&lt;/p&gt;

&lt;p&gt;Give it a try in your project, and let me know how it works for you! The plugin is open source, and I welcome all contributions and feedback.&lt;/p&gt;

</description>
      <category>cypress</category>
      <category>javascript</category>
      <category>webdev</category>
    </item>
  </channel>
</rss>
