<?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: Soumik Dhar</title>
    <description>The latest articles on DEV Community by Soumik Dhar (@soumikdhar).</description>
    <link>https://dev.to/soumikdhar</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%2F454942%2F8a8e007c-243c-4d9a-90bc-014884925687.jpeg</url>
      <title>DEV Community: Soumik Dhar</title>
      <link>https://dev.to/soumikdhar</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/soumikdhar"/>
    <language>en</language>
    <item>
      <title>Test Automation Meets AI — Smarter QA with Playwright + LLMs</title>
      <dc:creator>Soumik Dhar</dc:creator>
      <pubDate>Sat, 27 Sep 2025 18:49:44 +0000</pubDate>
      <link>https://dev.to/soumikdhar/test-automation-meets-ai-smarter-qa-with-playwright-llms-50f0</link>
      <guid>https://dev.to/soumikdhar/test-automation-meets-ai-smarter-qa-with-playwright-llms-50f0</guid>
      <description>&lt;h2&gt;
  
  
  Why Bring AI Into Test Automation?
&lt;/h2&gt;

&lt;p&gt;UI test automation is great… until it isn’t.&lt;br&gt;&lt;br&gt;
You’ve seen it:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;brittle selectors&lt;/li&gt;
&lt;li&gt;flaky tests&lt;/li&gt;
&lt;li&gt;endless test case writing&lt;/li&gt;
&lt;li&gt;log hunting after failures&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Large Language Models (LLMs) can help you &lt;strong&gt;write, maintain, and debug tests faster&lt;/strong&gt;.&lt;br&gt;&lt;br&gt;
This post shows how to blend &lt;a href="https://playwright.dev/" rel="noopener noreferrer"&gt;Playwright&lt;/a&gt; + &lt;a href="https://cucumber.io/" rel="noopener noreferrer"&gt;Cucumber&lt;/a&gt; with LLMs to get a smarter QA workflow.&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%2Fimages.unsplash.com%2Fphoto-1517694712202-14dd9538aa97%3Fw%3D1200" 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%2Fimages.unsplash.com%2Fphoto-1517694712202-14dd9538aa97%3Fw%3D1200" alt="Playwright dashboard" width="1200" height="800"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Core Idea
&lt;/h2&gt;

&lt;p&gt;Instead of writing every test from scratch and manually debugging, use an AI assistant (Gemini, GPT, Claude, etc.) to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Generate test cases from requirements or PR descriptions.&lt;/li&gt;
&lt;li&gt;Suggest robust selectors.&lt;/li&gt;
&lt;li&gt;Analyze failed logs and propose fixes.&lt;/li&gt;
&lt;li&gt;Refactor flaky steps automatically.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Think of it as &lt;strong&gt;pair testing with AI&lt;/strong&gt;.&lt;/p&gt;
&lt;h2&gt;
  
  
  Workflow Overview
&lt;/h2&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%2F93etem51zws1rxdwyd7n.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%2F93etem51zws1rxdwyd7n.png" alt="Workflow" width="800" height="343"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Feed User Stories / Requirements&lt;/strong&gt; → LLM suggests test scenarios.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Convert to Playwright + Cucumber Steps&lt;/strong&gt; with AI help.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Run Tests&lt;/strong&gt; — AI assists with debugging flaky steps.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Refine &amp;amp; Commit&lt;/strong&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;
  
  
  1. Generate Test Cases Automatically
&lt;/h2&gt;

&lt;p&gt;Open &lt;a href="https://aistudio.google.com/" rel="noopener noreferrer"&gt;Google AI Studio&lt;/a&gt; or ChatGPT with your project context.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Generate Playwright login test cases for:
- Email/password login
- OTP fallback
- SSO (Google + GitHub)
- Invalid email format
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Output might look like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight gherkin"&gt;&lt;code&gt;&lt;span class="kd"&gt;Feature&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; Login

  &lt;span class="kn"&gt;Scenario&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; Successful login with email and password
    &lt;span class="nf"&gt;Given &lt;/span&gt;I am on the login page
    &lt;span class="nf"&gt;When &lt;/span&gt;I enter a valid email and password
    &lt;span class="nf"&gt;Then &lt;/span&gt;I should land on the dashboard

  &lt;span class="kn"&gt;Scenario&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; OTP login fallback
    &lt;span class="nf"&gt;Given &lt;/span&gt;I enter a valid email but wrong password
    &lt;span class="nf"&gt;Then &lt;/span&gt;I should be prompted for OTP
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Paste this into your &lt;code&gt;tests/features/login.feature&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Implement Step Definitions With AI Help
&lt;/h2&gt;

&lt;p&gt;Your &lt;code&gt;pages/login/steps.js&lt;/code&gt; might start like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;Given&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;When&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;Then&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@cucumber/cucumber&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;expect&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@playwright/test&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;loc&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;../../locators/login.json&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="nc"&gt;Given&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;I am on the login page&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="nf"&gt;function &lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;page&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;goto&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;BASE_URL&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/login&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="nc"&gt;When&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;I enter a valid email and password&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="nf"&gt;function &lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;page&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;fill&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;loc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;email&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;TEST_EMAIL&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;page&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;fill&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;loc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;password&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;TEST_PASSWORD&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;page&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;click&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;loc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;submit&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="nc"&gt;Then&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;I should land on the dashboard&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="nf"&gt;function &lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;expect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;page&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;locator&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;loc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;dashboard&lt;/span&gt;&lt;span class="p"&gt;)).&lt;/span&gt;&lt;span class="nf"&gt;toBeVisible&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;timeout&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;30000&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;p&gt;If a locator breaks, ask your LLM:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Suggest a more stable Playwright selector for the login submit button&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  3. Debug Failures with AI
&lt;/h2&gt;

&lt;p&gt;Instead of digging logs, paste failure output into your AI tool:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Error: strict mode violation: locator("button[type=submit]") resolved to 2 elements
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Prompt:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Suggest a unique Playwright selector based on this HTML snippet …&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  4. Keep Your Tests Clean
&lt;/h2&gt;

&lt;p&gt;Ask the model to refactor:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Refactor these Playwright steps to use page objects and reduce duplication.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;It can rewrite step definitions into reusable page objects.&lt;/p&gt;

&lt;h2&gt;
  
  
  Tools &amp;amp; Integrations
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;VS Code / Windsurf AI plugins&lt;/strong&gt; — inline suggestions &amp;amp; refactoring.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Google AI Studio&lt;/strong&gt; — better prompt engineering.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;LangChain&lt;/strong&gt; — automate repetitive log analysis.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Key Wins
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Faster test case creation
&lt;/li&gt;
&lt;li&gt;Robust selectors → less flakiness
&lt;/li&gt;
&lt;li&gt;Easier debugging
&lt;/li&gt;
&lt;li&gt;Cleaner, maintainable test code&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%2Ffpo5kz8imnq5gce9an1s.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%2Ffpo5kz8imnq5gce9an1s.png" alt="Test Away!" width="800" height="440"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;p&gt;Bring AI into your QA loop:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Generate tests&lt;/strong&gt; from requirements&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Debug failures&lt;/strong&gt; faster&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Refactor&lt;/strong&gt; for maintainability&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Your Playwright + Cucumber stack just got smarter.&lt;/p&gt;

&lt;p&gt;Try it:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://playwright.dev/" rel="noopener noreferrer"&gt;Playwright Docs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://aistudio.google.com/" rel="noopener noreferrer"&gt;Google AI Studio&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Comment below if you’re experimenting with AI-powered testing!&lt;/p&gt;

</description>
      <category>ai</category>
      <category>testing</category>
      <category>playwright</category>
      <category>llm</category>
    </item>
    <item>
      <title>Vibe Coding with Windsurf + Google AI Studio — Your New Creative Coding Workflow</title>
      <dc:creator>Soumik Dhar</dc:creator>
      <pubDate>Sat, 27 Sep 2025 18:32:21 +0000</pubDate>
      <link>https://dev.to/soumikdhar/vibe-coding-with-windsurf-google-ai-studio-your-new-creative-coding-workflow-5pl</link>
      <guid>https://dev.to/soumikdhar/vibe-coding-with-windsurf-google-ai-studio-your-new-creative-coding-workflow-5pl</guid>
      <description>&lt;h2&gt;
  
  
  What is “Vibe Coding”?
&lt;/h2&gt;

&lt;p&gt;Some days you just want to code without overthinking setup — no wrestling with config files, no context-switching between docs, no breaking your rhythm. That’s vibe coding — where the tooling fades away and you can just create.&lt;/p&gt;

&lt;p&gt;Recently, I’ve been experimenting with a powerful combo:&lt;br&gt;&lt;br&gt;
&lt;a href="https://codeium.com/windsurf" rel="noopener noreferrer"&gt;&lt;strong&gt;Windsurf&lt;/strong&gt;&lt;/a&gt; (a lightning-fast AI-powered IDE) + &lt;a href="https://aistudio.google.com/" rel="noopener noreferrer"&gt;&lt;strong&gt;Google AI Studio&lt;/strong&gt;&lt;/a&gt; (prompt engineering &amp;amp; generative AI from Gemini).&lt;/p&gt;

&lt;p&gt;It’s been a game-changer.&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%2Fu94bpuddcndwpr95az8r.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%2Fu94bpuddcndwpr95az8r.png" alt=" " width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;Windsurf is a next-gen IDE from the Codeium team — imagine VS Code’s familiarity, but infused with native AI and blazing speed.&lt;/p&gt;

&lt;p&gt;Key highlights:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Zero setup friction — works out of the box
&lt;/li&gt;
&lt;li&gt;Smart completions &amp;amp; refactorings powered by Codeium AI
&lt;/li&gt;
&lt;li&gt;Very fast — no waiting for suggestions to catch up
&lt;/li&gt;
&lt;li&gt;Multi-file context — AI can understand your whole repo&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Perfect for when you want to iterate fast and stay in the zone.&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%2Fl1pvn9z8n3ajx8e4s44t.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%2Fl1pvn9z8n3ajx8e4s44t.png" alt="Google AI Studio" width="800" height="369"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Google AI Studio?
&lt;/h2&gt;

&lt;p&gt;While Windsurf helps inside your code, Google AI Studio helps before you code.&lt;br&gt;&lt;br&gt;
Use it to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Prototype ideas — generate boilerplate, brainstorm solutions
&lt;/li&gt;
&lt;li&gt;Design better prompts for your AI assistant
&lt;/li&gt;
&lt;li&gt;Analyze text, logs, or data
&lt;/li&gt;
&lt;li&gt;Access Gemini models easily&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Think of it as your AI sketchpad — get quick answers, refine them, and bring back the output into your coding session.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Workflow — Vibe Coding in Action
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Ideate &amp;amp; Draft in AI Studio
&lt;/h3&gt;

&lt;p&gt;Before touching the repo, I’ll hop into Google AI Studio:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Draft an API call structure&lt;/li&gt;
&lt;li&gt;Generate test scenarios for a feature&lt;/li&gt;
&lt;li&gt;Brainstorm edge cases for user flows
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Generate test cases for a login page with email, password, OTP, and SSO support.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Studio gives me a clean, structured list I can drop into my Playwright/Cucumber tests.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Switch to Windsurf for Implementation
&lt;/h3&gt;

&lt;p&gt;Open Windsurf, and let AI help me:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Scaffold files &amp;amp; folders&lt;/li&gt;
&lt;li&gt;Suggest Playwright selectors&lt;/li&gt;
&lt;li&gt;Refactor async code&lt;/li&gt;
&lt;li&gt;Auto-complete repetitive test cases
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;expect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;page&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;locator&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;loc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;damLogo&lt;/span&gt;&lt;span class="p"&gt;)).&lt;/span&gt;&lt;span class="nf"&gt;toBeVisible&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;timeout&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;30000&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Need to debug? Just ask the AI inside Windsurf what’s wrong — no context lost.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Iterate Without Losing Flow
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Stay in Windsurf to tweak logic, run tests, and refactor.&lt;/li&gt;
&lt;li&gt;If something needs deeper exploration (prompt optimization, text transformation), jump back to AI Studio.&lt;/li&gt;
&lt;li&gt;Copy/paste refined prompts or outputs back into your code or docs.&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%2F9ahbx91zdjbtrvywzc06.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%2F9ahbx91zdjbtrvywzc06.png" alt=" " width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Quick Wins from This Setup
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Rapid prototyping: Build a POC in hours, not days.
&lt;/li&gt;
&lt;li&gt;Better testing: AI-generated scenarios and easy script completion.
&lt;/li&gt;
&lt;li&gt;Cleaner code: AI-driven refactors that respect your context.
&lt;/li&gt;
&lt;li&gt;Creative problem solving: Use AI Studio to think through tricky flows before you code.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Use Google AI Studio as your brainstorming and AI sandbox
&lt;/li&gt;
&lt;li&gt;Code with Windsurf for an ultra-fast, AI-augmented IDE experience
&lt;/li&gt;
&lt;li&gt;Stay in flow — fewer distractions, faster iteration, cleaner output&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Try it out:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://codeium.com/windsurf" rel="noopener noreferrer"&gt;Download Windsurf&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://aistudio.google.com/" rel="noopener noreferrer"&gt;Open Google AI Studio&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Curious — what’s your vibe coding stack? Drop your setup or hacks in the comments.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>productivity</category>
      <category>vibecoding</category>
      <category>development</category>
    </item>
    <item>
      <title>How To Write Better &amp; Cleaner Markdown: The Definitive Guide</title>
      <dc:creator>Soumik Dhar</dc:creator>
      <pubDate>Mon, 31 Aug 2020 15:08:25 +0000</pubDate>
      <link>https://dev.to/soumikdhar/how-to-write-better-cleaner-markdown-the-definitive-guide-3fif</link>
      <guid>https://dev.to/soumikdhar/how-to-write-better-cleaner-markdown-the-definitive-guide-3fif</guid>
      <description>&lt;p&gt;It's happening again. You stare at your screen, trying to figure out why your write-up looks like an IKEA manual, written using only the stuff that comes after the question mark in an URL. Wouldn't it be great to create content and format it seamlessly without making it less human-readable in the process?&lt;/p&gt;

&lt;p&gt;This is where Markdown comes in. Markdown allows you to quickly write and format structured content for the web. It is easy to learn and can be used to create websites, notes, technical documentation, and even books! &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fun Fact&lt;/strong&gt;: This entire tutorial has been designed and formatted using Markdown itself! Read till the end to find an awesome &lt;u&gt;cheat sheet&lt;/u&gt; for this tutorial which has also been created using Markdown!&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%2Fi%2F5dujgfm2j742eg6cbmoa.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%2Fi%2F5dujgfm2j742eg6cbmoa.png" alt="cheat-sheet" width="800" height="439"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h1&gt;
  
  
  Wait...What's Markdown Again?
&lt;/h1&gt;

&lt;p&gt;Markdown is a lightweight markup language used for formatting plain text documents with a simple, unobtrusive syntax. It was created by &lt;a href="https://en.wikipedia.org/wiki/John_Gruber" rel="noopener noreferrer"&gt;John Gruber&lt;/a&gt; with &lt;a href="https://en.wikipedia.org/wiki/Aaron_Swartz" rel="noopener noreferrer"&gt;Aaron Swartz&lt;/a&gt; in 2004. From the official documentation at &lt;a href="https://daringfireball.net/projects/markdown/" rel="noopener noreferrer"&gt;Daring Fireball&lt;/a&gt;, Markdown can be defined as,&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"a text-to-HTML conversion tool for web writers. Markdown allows you to write using an easy-to-read, easy-to-write plain text format, then convert it to structurally valid XHTML (or HTML)."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Okay, let's break that down. A Markup language is a human-readable language that provides a system to annotate text inside a document. These annotations (or tags) can then be used to structure and format the document.&lt;/p&gt;

&lt;p&gt;One of the most commonly used markup languages is the HyperText Markup Language, better known as HTML. Despite being the de facto standard for web design, HTML comes with a few downsides.&lt;/p&gt;

&lt;p&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimgs.xkcd.com%2Fcomics%2Ftags.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%2Fimgs.xkcd.com%2Fcomics%2Ftags.png" alt="xkcd-tag-comic" width="451" height="57"&gt;&lt;/a&gt;&lt;/p&gt;
 
source: &lt;a href="https://xkcd.com/1144" rel="noopener noreferrer"&gt;xkcd comics&lt;/a&gt;






&lt;p&gt;HTML relies heavily on syntax-specific tags which make the content hard to read. This problem inspired John Gruber to come up with a cleaner, more readable markup language called Markdown. In his own words,&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"The overriding design goal for Markdown's formatting syntax is to make it as readable as possible. The idea is that a Markdown-formatted document should be publishable as-is, as plain text, without looking like it’s been marked up with tags or formatting instructions."&lt;br&gt;
(&lt;em&gt;&lt;a href="https://daringfireball.net/projects/markdown/" rel="noopener noreferrer"&gt;https://daringfireball.net/projects/markdown/&lt;/a&gt;&lt;/em&gt;)&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Here's a small clip of Markdown in action - &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%2Fi%2Fkx1i4ce4hlxmbd6dr87d.gif" 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%2Fi%2Fkx1i4ce4hlxmbd6dr87d.gif" alt="markdown-in-action" width="600" height="199"&gt;&lt;/a&gt;&lt;/p&gt;


&lt;h1&gt;
  
  
  &lt;del&gt;Turn down&lt;/del&gt; Markdown For What!?
&lt;/h1&gt;

&lt;p&gt;Due to its highly intuitive and portable nature, Markdown is used in a wide variety of applications. Some of its use cases are -&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Documents&lt;/strong&gt; - While Markdown is not as powerful as Microsoft Word or similar What You See Is What You Get (&lt;a href="https://en.wikipedia.org/wiki/WYSIWYG" rel="noopener noreferrer"&gt;WYSIWYG&lt;/a&gt;) editors, it is good enough for lightweight formatting&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Websites&lt;/strong&gt; - Static site generators like &lt;a href="https://jekyllrb.com/" rel="noopener noreferrer"&gt;Jekyll&lt;/a&gt; convert Markdown files into static HTML websites that can be hosted for free on platforms like &lt;a href="https://pages.github.com/" rel="noopener noreferrer"&gt;GitHub Pages&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Documentation&lt;/strong&gt; - Markdown offers the ideal syntax for technical documentation and is widely used for writing scientific papers, articles, and even the &lt;code&gt;README.md&lt;/code&gt; files in GitHub (like the one shown below)&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%2Fi%2F8g79m7dxbymal6skqxop.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%2Fi%2F8g79m7dxbymal6skqxop.png" alt="markdown-in-readme" width="800" height="413"&gt;&lt;/a&gt;&lt;/p&gt;


&lt;h1&gt;
  
  
  How To Get Started
&lt;/h1&gt;

&lt;p&gt;One of the biggest advantages of learning Markdown is that it does not require downloading a whole bunch of applications (paid or otherwise) to create Markdown-formatted documents. Simply choose from a wide array of free online Markdown editors to learn and practice the syntax or, just launch your favorite text editor and you're good to go!&lt;/p&gt;
&lt;h2&gt;
  
  
  Markdown Editors
&lt;/h2&gt;

&lt;p&gt;To get started with Markdown, you have the following options (and more) at your disposal -&lt;/p&gt;
&lt;h3&gt;
  
  
  Online Markdown Editors -
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;u&gt;&lt;a href="https://dillinger.io/" rel="noopener noreferrer"&gt;Dillinger&lt;/a&gt;&lt;/u&gt;&lt;/li&gt;
&lt;li&gt;&lt;u&gt;&lt;a href="https://stackedit.io/" rel="noopener noreferrer"&gt;StackEdit&lt;/a&gt;&lt;/u&gt;&lt;/li&gt;
&lt;li&gt;&lt;u&gt;&lt;a href="https://jbt.github.io/markdown-editor/" rel="noopener noreferrer"&gt;Markdown Editor&lt;/a&gt;&lt;/u&gt;&lt;/li&gt;
&lt;li&gt;&lt;u&gt;&lt;a href="https://markdownlivepreview.com/" rel="noopener noreferrer"&gt;Markdown Live Preview&lt;/a&gt;&lt;/u&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  Desktop Applications -
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;u&gt;&lt;a href="https://code.visualstudio.com/" rel="noopener noreferrer"&gt;Visual Studio Code&lt;/a&gt;&lt;/u&gt;&lt;/li&gt;
&lt;li&gt;&lt;u&gt;&lt;a href="https://atom.io/" rel="noopener noreferrer"&gt;Atom&lt;/a&gt;&lt;/u&gt;&lt;/li&gt;
&lt;li&gt;&lt;u&gt;&lt;a href="https://typora.io/" rel="noopener noreferrer"&gt;Typora&lt;/a&gt;&lt;/u&gt;&lt;/li&gt;
&lt;li&gt;
&lt;u&gt;&lt;a href="https://macdown.uranusjr.com/" rel="noopener noreferrer"&gt;MacDown&lt;/a&gt;&lt;/u&gt; (only available for macOS)&lt;/li&gt;
&lt;/ul&gt;


&lt;h1&gt;
  
  
  How to get the most out of this tutorial?
&lt;/h1&gt;

&lt;p&gt;To follow along with the tutorial, choose an online editor like &lt;strong&gt;Dillinger&lt;/strong&gt; and try out the syntax as you learn it. After you get accustomed to the syntax, you can switch to an offline text editor like &lt;strong&gt;VS Code&lt;/strong&gt; to create fully-fledged Markdown documents. Just create a plain text file with the &lt;code&gt;.md&lt;/code&gt; or &lt;code&gt;.markdown&lt;/code&gt; extension, open it using your editor of choice and you're off to the races!&lt;/p&gt;

&lt;p&gt;For this tutorial, I've used &lt;u&gt;&lt;a href="https://code.visualstudio.com/" rel="noopener noreferrer"&gt;VS Code&lt;/a&gt;&lt;/u&gt; with the extension &lt;u&gt;&lt;a href="https://shd101wyy.github.io/markdown-preview-enhanced/#/" rel="noopener noreferrer"&gt;Markdown Preview Enhanced&lt;/a&gt;&lt;/u&gt; installed. You can use the Markdown previewer that comes bundled with VS Code as well. Also included at the very end, is a cheat sheet summarizing the entire tutorial. So, without any further ado, let's get started!&lt;/p&gt;

&lt;p&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fjbg87bx3v0xxmtu0qlr3.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%2Fi%2Fjbg87bx3v0xxmtu0qlr3.png" alt="Dillinger" width="800" height="378"&gt;&lt;/a&gt;&lt;/p&gt;
 
&lt;a href="https://dillinger.io/" rel="noopener noreferrer"&gt;Dillinger&lt;/a&gt;







&lt;h1&gt;
  
  
  Basic Markdown Syntax
&lt;/h1&gt;

&lt;p&gt;Almost all Markdown applications support the basic syntax outlined in John Gruber's original documentation. The most commonly used elements in the basic Markdown syntax are discussed below.&lt;/p&gt;
&lt;h2&gt;
  
  
  Headings
&lt;/h2&gt;

&lt;p&gt;Heading elements in Markdown can be created by prepending the number symbol &lt;code&gt;#&lt;/code&gt; to a word or phrase.&lt;br&gt;
The number of hashes (#) indicates the level of the heading. One hash (#) corresponds to a level 1 heading - all the way up to six hashes (######) for a level 6 heading.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pro-tip&lt;/strong&gt;: Always add a space between the hash symbol and the heading name for consistent results.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
  &lt;tr&gt;
    &lt;th&gt;&lt;center&gt;Markdown&lt;/center&gt;&lt;/th&gt;
    &lt;th&gt;&lt;center&gt;Equivalent HTML&lt;/center&gt;&lt;/th&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;
      &lt;pre&gt;
# Level 1 Heading
## Level 2 Heading
### Level 3 Heading
#### Level 4 Heading
##### Level 5 Heading
###### Level 6 Heading
&lt;/pre&gt;  
    &lt;/td&gt;
    &lt;td&gt;
      &lt;pre&gt;
&amp;lt;h1&amp;gt;Level 1 Heading&amp;lt;/h1&amp;gt;
&amp;lt;h2&amp;gt;Level 2 Heading&amp;lt;/h2&amp;gt;
&amp;lt;h3&amp;gt;Level 3 Heading&amp;lt;/h3&amp;gt;
&amp;lt;h4&amp;gt;Level 4 Heading&amp;lt;/h4&amp;gt;
&amp;lt;h5&amp;gt;Level 5 Heading&amp;lt;/h5&amp;gt;
&amp;lt;h6&amp;gt;Level 6 Heading&amp;lt;/h6&amp;gt;
&lt;/pre&gt;
    &lt;/td&gt;
  &lt;/tr&gt;
&lt;/table&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%2Fi%2Fg86wpg4t37zthnyx8vgc.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%2Fi%2Fg86wpg4t37zthnyx8vgc.png" alt="headings-in-markdown" width="800" height="253"&gt;&lt;/a&gt;&lt;/p&gt;


&lt;h2&gt;
  
  
  Paragraphs
&lt;/h2&gt;

&lt;p&gt;To separate multiple lines of text into paragraphs, simply use one or more blank lines.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pro-tip&lt;/strong&gt;: To force a line break (without using the &lt;code&gt;&amp;lt;br /&amp;gt;&lt;/code&gt; tag), end a line or paragraph with two or more spaces, and then press return (enter).&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
  &lt;tr&gt;
    &lt;th&gt;&lt;center&gt;Markdown&lt;/center&gt;&lt;/th&gt;
    &lt;th&gt;&lt;center&gt;Equivalent HTML&lt;/center&gt;&lt;/th&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;
      &lt;pre&gt;
This is a paragraph. 
Insert a blank line 
to add another one!

This is another paragraph.
It's that simple!
&lt;/pre&gt;  
 &lt;/td&gt;
&lt;td&gt;
&lt;pre&gt;
&amp;lt;p&amp;gt;This is a paragraph.
Insert a blank line to
add another one!&amp;lt;/p&amp;gt;
&amp;lt;br /&amp;gt;
&amp;lt;p&amp;gt;This is another paragraph.
It's that simple!&amp;lt;/p&amp;gt;
&lt;/pre&gt;
&lt;/td&gt;
  &lt;/tr&gt;
&lt;/table&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%2Fi%2F0u3ng1tcbm2cs5ozrkhu.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%2Fi%2F0u3ng1tcbm2cs5ozrkhu.png" alt="paragraphs-in-markdown" width="800" height="156"&gt;&lt;/a&gt;&lt;/p&gt;


&lt;h2&gt;
  
  
  Horizontal Rules
&lt;/h2&gt;

&lt;p&gt;Thematic breaks in the form of horizontal rules can be inserted by using three or more asterisks &lt;code&gt;***&lt;/code&gt;, hyphens &lt;code&gt;---&lt;/code&gt;, or underscores &lt;code&gt;___&lt;/code&gt;, with or without spaces in between.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
  &lt;tr&gt;
    &lt;th&gt;&lt;center&gt;Markdown&lt;/center&gt;&lt;/th&gt;
    &lt;th&gt;&lt;center&gt;Equivalent HTML&lt;/center&gt;&lt;/th&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;
      &lt;pre&gt;
***
---
___ 
&lt;/pre&gt;  
    &lt;/td&gt;
    &lt;td&gt;
      &lt;pre&gt;
&amp;lt;hr /&amp;gt;
&amp;lt;hr /&amp;gt;
&amp;lt;hr /&amp;gt; 
&lt;/pre&gt;
    &lt;/td&gt;
  &lt;/tr&gt;
&lt;/table&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%2Fi%2Fw70ul8qclvdbnyvpier4.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%2Fi%2Fw70ul8qclvdbnyvpier4.png" alt="horizontal-rules-in-markdown" width="800" height="156"&gt;&lt;/a&gt;&lt;/p&gt;


&lt;h2&gt;
  
  
  Text Formatting - Emphasis
&lt;/h2&gt;

&lt;p&gt;Text can be emphasized by making it &lt;strong&gt;bold&lt;/strong&gt; or &lt;em&gt;italicized&lt;/em&gt;.&lt;br&gt;&lt;br&gt;
To make the text &lt;strong&gt;bold&lt;/strong&gt;, add double asterisks &lt;code&gt;**&lt;/code&gt; or double underscores &lt;code&gt;__&lt;/code&gt; before and after a word or phrase. To &lt;em&gt;italicize&lt;/em&gt; text, wrap the word or phrase inside a pair of a single asterisk &lt;code&gt;*&lt;/code&gt; or a single underscore &lt;code&gt;_&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pro-tip&lt;/strong&gt;: Use asterisks instead of underscores when formatting words inside of a phrase.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
  &lt;tr&gt;
    &lt;th&gt;&lt;center&gt;Markdown&lt;/center&gt;&lt;/th&gt;
    &lt;th&gt;&lt;center&gt;Equivalent HTML&lt;/center&gt;&lt;/th&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;
      &lt;pre&gt;
__This text is in bold__
And so is this **word**

_This text is italicized_
And so is this _word_

**_This text is in
both bold and italics_**
And so is this **_word_**
&lt;/pre&gt;  
 &lt;/td&gt;
&lt;td&gt;
&lt;pre&gt;
&amp;lt;strong&amp;gt;This text is in bold&amp;lt;/strong&amp;gt;
And so is this &amp;lt;strong&amp;gt;word&amp;lt;/strong&amp;gt;

&amp;lt;em&amp;gt;This text is italicized&amp;lt;/em&amp;gt;
And so is this &amp;lt;em&amp;gt;word&amp;lt;/em&amp;gt;

&amp;lt;strong&amp;gt;&amp;lt;em&amp;gt;This text is in
both bold and italics&amp;lt;/em&amp;gt;&amp;lt;/strong&amp;gt;
And so is this &amp;lt;em&amp;gt;&amp;lt;strong&amp;gt;word&amp;lt;/strong&amp;gt;&amp;lt;/em&amp;gt;
&lt;/pre&gt;
&lt;/td&gt;
  &lt;/tr&gt;
&lt;/table&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%2Fi%2F65ibj19w8o0makhtv0wp.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%2Fi%2F65ibj19w8o0makhtv0wp.png" alt="text-formatting-in-markdown" width="800" height="214"&gt;&lt;/a&gt;&lt;/p&gt;


&lt;h2&gt;
  
  
  Blockquotes
&lt;/h2&gt;

&lt;p&gt;Blockquotes can be created by adding the &lt;code&gt;&amp;gt;&lt;/code&gt; symbol in front of a line of text.&lt;br&gt;
To add blockquotes comprising of multiple paragraphs, add a &lt;code&gt;&amp;gt;&lt;/code&gt; on each black line.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pro-tip&lt;/strong&gt;: To create nested blockquotes, add two or more &lt;code&gt;&amp;gt;&lt;/code&gt; symbols depending upon the level.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
  &lt;tr&gt;
    &lt;th&gt;&lt;center&gt;Markdown&lt;/center&gt;&lt;/th&gt;
    &lt;th&gt;&lt;center&gt;Equivalent HTML&lt;/center&gt;&lt;/th&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;
      &lt;pre&gt;
&amp;gt;"I'm gonna make him an 
offer he can't refuse."

&amp;gt; Fate whispers to the Warrior,
&amp;gt; A storm is coming,
&amp;gt;
&amp;gt; &amp;gt; And the Warrior whispers back,
&amp;gt; &amp;gt; I am the Storm.
&lt;/pre&gt;
    &lt;/td&gt;
    &lt;td&gt;
      &lt;pre&gt;
&amp;lt;blockquote&amp;gt;"I'm gonna
make him an offer he can't
refuse."&amp;lt;/blockquote&amp;gt;

&amp;lt;blockquote&amp;gt;
Fate whispers to the Warrior,
A storm is coming,
&amp;lt;blockquote&amp;gt;And the Warrior
whispers back, I am the Storm.
&amp;lt;/blockquote&amp;gt;
&amp;lt;/blockquote&amp;gt;
&lt;/pre&gt;
&lt;/td&gt;
  &lt;/tr&gt;
&lt;/table&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%2Fi%2Flyw725ozxgdlqjdhewgp.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%2Fi%2Flyw725ozxgdlqjdhewgp.png" alt="blockquotes-in-markdown" width="800" height="195"&gt;&lt;/a&gt;&lt;/p&gt;


&lt;h2&gt;
  
  
  Lists
&lt;/h2&gt;

&lt;p&gt;Using Markdown, related items can be grouped in the form of unordered or ordered lists.&lt;/p&gt;
&lt;h3&gt;
  
  
  Unordered Lists
&lt;/h3&gt;

&lt;p&gt;To create unordered (bullet) lists, prefix the list items with asterisks &lt;code&gt;*&lt;/code&gt;, hyphens &lt;code&gt;-&lt;/code&gt; or plus signs &lt;code&gt;+&lt;/code&gt;.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
  &lt;tr&gt;
    &lt;th&gt;&lt;center&gt;Markdown&lt;/center&gt;&lt;/th&gt;
    &lt;th&gt;&lt;center&gt;Equivalent HTML&lt;/center&gt;&lt;/th&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;
      &lt;pre&gt;
* First list item
* Second list item
* Third list item

- Element 1
- Element 2
- Element 3

* List item 1
* List item 2
* List item 3
&lt;/pre&gt;  
   &lt;/td&gt;
  &lt;td&gt;
  &lt;pre&gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;First list item&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;Second list item&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;Third list item&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;

&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;List item 1&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;List item 2&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;List item 3&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&lt;/pre&gt;
&lt;/td&gt;
  &lt;/tr&gt;
&lt;/table&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%2Fi%2Fyht3d1z3f1g5019jsu2l.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%2Fi%2Fyht3d1z3f1g5019jsu2l.png" alt="unordered-lists-in-markdown" width="800" height="253"&gt;&lt;/a&gt;&lt;/p&gt;


&lt;h3&gt;
  
  
  Ordered Lists
&lt;/h3&gt;

&lt;p&gt;To create ordered lists, prefix the list items with numbers followed by periods. The labels do not even need to be in the correct numerical order - Markdown does that for you automatically!&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
  &lt;tr&gt;
    &lt;th&gt;&lt;center&gt;Markdown&lt;/center&gt;&lt;/th&gt;
    &lt;th&gt;&lt;center&gt;Equivalent HTML&lt;/center&gt;&lt;/th&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;
      &lt;pre&gt;
1. First list item
1. Second list item
1. Third list item

a. List item 1
b. List item 2
c. List item 3
&lt;/pre&gt;  
 &lt;/td&gt;
&lt;td&gt;
&lt;pre&gt;
&amp;lt;ol&amp;gt;
&amp;lt;li&amp;gt;First list item&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;Second list item&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;Third list item&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;List item 4&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;List item 5&amp;lt;/li&amp;gt;
&amp;lt;/ol&amp;gt;
&lt;/pre&gt;
&lt;/td&gt;
  &lt;/tr&gt;
&lt;/table&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%2Fi%2Foqiyrfj0shxxmijox8q8.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%2Fi%2Foqiyrfj0shxxmijox8q8.png" alt="ordered-lists-in-markdown" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pro-tip&lt;/strong&gt;: You can also create &lt;strong&gt;nested lists&lt;/strong&gt; (sublists) made up of both ordered and unordered lists by simply indenting the nested list items.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
  &lt;tr&gt;
    &lt;th&gt;&lt;center&gt;Markdown&lt;/center&gt;&lt;/th&gt;
    &lt;th&gt;&lt;center&gt;Equivalent HTML&lt;/center&gt;&lt;/th&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;
      &lt;pre&gt;
1. Parent list item 1
1. Parent list item 2
 a. Child list item a
 b. Child list item b
1. Parent list item 3
    * Child item 1 
    * Child item 2
&lt;/pre&gt;  
    &lt;/td&gt;
    &lt;td&gt;
      &lt;pre&gt;
&amp;lt;ol&amp;gt;
  &amp;lt;li&amp;gt;Parent list item 1&amp;lt;/li&amp;gt;
  &amp;lt;li&amp;gt;Parent list item 2&amp;lt;/li&amp;gt;
  &amp;lt;ol&amp;gt;
    &amp;lt;li&amp;gt;Child list item a&amp;lt;/li&amp;gt;
    &amp;lt;li&amp;gt;Child list item b&amp;lt;/li&amp;gt;
  &amp;lt;/ol&amp;gt;
  &amp;lt;li&amp;gt;Parent list item 3&amp;lt;/li&amp;gt;
  &amp;lt;ul&amp;gt;
    &amp;lt;li&amp;gt;Child item 1&amp;lt;/li&amp;gt;
    &amp;lt;li&amp;gt;Child item 2&amp;lt;/li&amp;gt;
  &amp;lt;/ul&amp;gt;
&amp;lt;/ol&amp;gt;
&lt;/pre&gt;
    &lt;/td&gt;
  &lt;/tr&gt;
&lt;/table&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%2Fi%2Fu90p213sms6anzv69lcw.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%2Fi%2Fu90p213sms6anzv69lcw.png" alt="nested-lists-in-markdown" width="800" height="195"&gt;&lt;/a&gt;&lt;/p&gt;


&lt;h2&gt;
  
  
  Links
&lt;/h2&gt;

&lt;p&gt;Links in Markdown can be created in the following ways:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Inline-style links&lt;/strong&gt; - Wrap the link text in brackets &lt;code&gt;[]&lt;/code&gt; followed by the link URL in parenthesis &lt;code&gt;()&lt;/code&gt;. To add an optional tooltip, enclose the title within quotes and add it right after the URL. &lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;reference-style links&lt;/strong&gt; - Instead of inserting the URL inside the parenthesis, a reference to the link can also be made. Create such a link by enclosing the reference inside square brackets &lt;code&gt;[]&lt;/code&gt; and linking it to the URL from anywhere in the document.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Pro-tip&lt;/strong&gt;: To quickly add a clickable URL or email address, enclose the link inside a pair of angle brackets &lt;code&gt;&amp;lt;&amp;gt;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Markdown&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[An inline-style Link](http://example.com/)

[A reference-style link][Reference]
&amp;lt;!-- linking --&amp;gt;[Reference]: http://example.com/

&amp;lt;http://example.com/&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Equivalent HTML&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;a href="http://example.com/"&amp;gt;Links in HTML&amp;lt;/a&amp;gt;

&amp;lt;a href="http://example.com/" title="Tooltip"&amp;gt; 
Links in HTML with an optional title
&amp;lt;/a&amp;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%2Fi%2Fqbq4hnahkvqk67smqo26.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%2Fi%2Fqbq4hnahkvqk67smqo26.png" alt="links-in-markdown" width="800" height="195"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Images
&lt;/h2&gt;

&lt;p&gt;Images can be created the same way as links - the only thing that needs to be added is an exclamation mark &lt;code&gt;!&lt;/code&gt; before the link syntax.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Inline-style images&lt;/strong&gt; - &lt;code&gt;![alt text](image URL)&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Reference-style images&lt;/strong&gt; - &lt;code&gt;![alt text][reference]&lt;/code&gt;
&lt;code&gt;[reference]: image URL&lt;/code&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Pro-tip&lt;/strong&gt;: Images can also be used as links themselves. Simply enclose the Markdown syntax for the image in brackets and append the link URL in parenthesis - &lt;br&gt;
&lt;code&gt;[![alt text](image URL)](link URL)&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Markdown&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;![Markdown-mark](https://upload.wikimedia.org/wikipedia/commons/4/48/Markdown-mark.svg)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Equivalent HTML&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;img src="https://upload.wikimedia.org/wikipedia/commons/4/48/Markdown-mark.svg" alt="Markdown-mark"&amp;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%2Fi%2Fj5x66nsligj3stgmakds.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%2Fi%2Fj5x66nsligj3stgmakds.png" alt="images-in-markdown" width="800" height="163"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h1&gt;
  
  
  Extended Markdown Syntax
&lt;/h1&gt;

&lt;p&gt;To overcome the unambiguous specs proposed by John Gruber's Markdown syntax, several individuals and organizations came up with specific implementations - often referred to as &lt;em&gt;flavors&lt;/em&gt; of Markdown. These lightweight markup languages provide extended features and improve on some of the drawbacks of the original syntax. Some of these are - &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;u&gt;&lt;a href="https://github.github.com/gfm/" rel="noopener noreferrer"&gt;GitHub Flavored Markdown (GFM)&lt;/a&gt;&lt;/u&gt;&lt;/li&gt;
&lt;li&gt;&lt;u&gt;&lt;a href="https://commonmark.org/" rel="noopener noreferrer"&gt;CommonMark&lt;/a&gt;&lt;/u&gt;&lt;/li&gt;
&lt;li&gt;&lt;u&gt;&lt;a href="https://michelf.ca/projects/php-markdown/extra/" rel="noopener noreferrer"&gt;Markdown Extra&lt;/a&gt;&lt;/u&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Some of the elements supported by these lightweight markup languages are discussed below.&lt;/p&gt;

&lt;h2&gt;
  
  
  Tables
&lt;/h2&gt;

&lt;p&gt;Tables are available in GitHub Flavored Markdown (GFM). To create a table, separate each column with the pipe symbol &lt;code&gt;|&lt;/code&gt; and use three or more hyphens &lt;code&gt;---&lt;/code&gt; to indicate the first row (column headers). &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pro-tip&lt;/strong&gt;: To left, right or center align text in the columns, simply add a colon &lt;code&gt;:&lt;/code&gt; to the left, right, or both sides of the column header hyphens respectively. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Syntax&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;| First Name | Last Name | Age |
| :--------- | :-------: | --: |
| John       |    Doe    |  28 |
| Jane       |    Doe    |  52 |
&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%2Fi%2F1k5majlhkurxf21ulhr2.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%2Fi%2F1k5majlhkurxf21ulhr2.png" alt="tables-in-markdown" width="800" height="163"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Extended Text Formatting
&lt;/h2&gt;

&lt;p&gt;Extended Markdown syntax allows text to be struck-through and highlighted. To strikethrough text, wrap the word or phrase inside a pair of double tildes &lt;code&gt;~~&lt;/code&gt;. To highlight text, use a pair of double equality signs &lt;code&gt;==&lt;/code&gt; before and after the word or phrase. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Syntax&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Strikethrough text ~~like this~~ using a pair of double tildes

Highlight text ==like this== using a pair of double equality signs
&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%2Fi%2F1d1dvkxki0imjui9hv7b.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%2Fi%2F1d1dvkxki0imjui9hv7b.png" alt="extended-text-formatting-in-markdown" width="800" height="163"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Task Lists
&lt;/h2&gt;

&lt;p&gt;Task lists are used to provide progress indicators in the form of list items with checkboxes. &lt;br&gt;
To create a task list, simply add double brackets with a space between them &lt;code&gt;[ ]&lt;/code&gt;  before the list item in an unordered or ordered list. To check off a list item, add an &lt;code&gt;x&lt;/code&gt; inside the brackets &lt;code&gt;[x]&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Syntax&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;1. [ ] Unchecked list item
1. [x] Checked list item
1. [ ] Another unchecked list item

- [x] Research
- [x] Compose
- [ ] Publish
&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%2Fi%2Fckw3vawjfn40w4v4ya6v.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%2Fi%2Fckw3vawjfn40w4v4ya6v.png" alt="task-lists-in-markdown" width="800" height="195"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Code
&lt;/h2&gt;

&lt;p&gt;Although inline code and code blocks can be created using the original Markdown syntax, it is convenient to discuss all the various ways to embed code in Markdown in one place.&lt;/p&gt;

&lt;h3&gt;
  
  
  Inline Code
&lt;/h3&gt;

&lt;p&gt;To include inline code snippets, enclose the code in a pair of backticks &lt;code&gt;`&lt;/code&gt;.&lt;/p&gt;

&lt;pre&gt;
Run `npm install` to install all dependencies
&lt;/pre&gt;

&lt;h3&gt;
  
  
  Code Blocks
&lt;/h3&gt;

&lt;p&gt;To create a block of code (without using extended syntax), indent each line of code by one or more tabs (at least 4 spaces).&lt;/p&gt;

&lt;pre&gt;
      while (--i &amp;gt;= 0) {
         free_page((unsigned long);
      }
      kfree(group_info);
      return NULL;
&lt;/pre&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%2Fi%2F6tuw5bgbdyhtsvwzt0vo.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%2Fi%2F6tuw5bgbdyhtsvwzt0vo.png" alt="code-in-blocks" width="800" height="195"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Fenced Code Blocks
&lt;/h3&gt;

&lt;p&gt;Using the extended Markdown syntax, blocks of code can be created by wrapping the code block inside a pair of triple backticks.&lt;/p&gt;

&lt;pre&gt;
```
// function to add two numbers
function add(num1, num2) {
   return num1 + num2
}
```
&lt;/pre&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%2Fi%2Frkcc2w1yc8m9bxixyl0g.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%2Fi%2Frkcc2w1yc8m9bxixyl0g.png" alt="fenced-code-blocks-in-markdown" width="800" height="175"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Syntax Highlighting
&lt;/h3&gt;

&lt;p&gt;To add syntax highlighting to a fenced code block, append the language name after the starting backticks &lt;code&gt;```&lt;/code&gt; before the code block begins.&lt;/p&gt;

&lt;pre&gt;
```js
// function to add two numbers using javascript
function add(num1, num2) {
   return num1 + num2
}
```

```c++
// function to add two numbers using c++
double add (double num1, double num2) {
   return (num1 + num2);
}
```
&lt;/pre&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%2Fi%2Fgvnfaa5zauo70f1j6lo1.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%2Fi%2Fgvnfaa5zauo70f1j6lo1.png" alt="syntax-highlighting-in-markdown" width="800" height="284"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h4&gt;
  
  
  Escaping Characters
&lt;/h4&gt;

&lt;p&gt;In case you actually want to use certain literals like &lt;code&gt;*&lt;/code&gt; and &lt;code&gt;#&lt;/code&gt; without having them formatted, simply prefix a backslash &lt;code&gt;\&lt;/code&gt; before the character or wrap it inside a pair of backticks &lt;code&gt;`&lt;/code&gt; (similar to inline code). &lt;/p&gt;

&lt;pre&gt;
\# Without the backslash, this would be a level 1 heading!
&lt;/pre&gt;




&lt;h1&gt;
  
  
  Cheat Sheet
&lt;/h1&gt;

&lt;p&gt;A list of frequently used basic and extended Markdown syntax has been provided in the cheat sheet linked below. Go ahead, fork this gist or bookmark it and use it as a quick reference to take your Markdown skills to the next level!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fun fact&lt;/strong&gt;: This entire cheat sheet has been created using Markdown itself!&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;center&gt;&lt;u&gt; &lt;a href="https://gist.github.com/Soumik-Dhar/29c9be8431660f16bf1db5248367a23f" rel="noopener noreferrer"&gt;Markdown Cheat Sheet&lt;/a&gt; &lt;/u&gt;&lt;/center&gt;
&lt;/h3&gt;




&lt;h1&gt;
  
  
  Wrapping it up
&lt;/h1&gt;

&lt;p&gt;Now that you know how to use Markdown to format plain text, it's your turn to play around with the syntax, build cool projects with it, and have fun along the way! &lt;/p&gt;

&lt;p&gt;Here's a list of useful resources you can utilize to elevate your Markdown skills - &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;u&gt;&lt;a href="https://daringfireball.net/projects/markdown/" rel="noopener noreferrer"&gt;Daring Fireball&lt;/a&gt;&lt;/u&gt; - The official Markdown guide written by John Gruber&lt;/li&gt;
&lt;li&gt;
&lt;u&gt;&lt;a href="https://www.markdowntutorial.com/" rel="noopener noreferrer"&gt;Markdown Tutorial&lt;/a&gt;&lt;/u&gt; - An interactive browser-based markdown tutorial&lt;/li&gt;
&lt;li&gt;
&lt;u&gt;&lt;a href="https://www.markdownguide.org/" rel="noopener noreferrer"&gt;The Markdown Guide&lt;/a&gt;&lt;/u&gt; - A free and open-source Markdown reference guide&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Whenever you get stuck over a particular syntax or feel like reviewing some of the concepts, give this tutorial a shot and hold on to that cheat sheet as a handy reference. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Final pro-tip&lt;/strong&gt;: Never hesitate to use HTML for advanced formatting, as Markdown is more or less a superset of HTML.&lt;/p&gt;

&lt;p&gt;If there's any syntax that I missed or anything that I wasn't able to explain clearly, feel free to hit me up in the comments below. Your feedback means a lot to me.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;&lt;em&gt;Disclaimer: Markdown is an incredibly powerful tool meant for composing rich content for the web and hence, is widely used across a large number of platforms and applications. This guide has been written in an effort to make Markdown accessible to beginners as well as, to serve as a quick reference for experienced users.&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>writing</category>
      <category>markdown</category>
      <category>tutorial</category>
      <category>beginners</category>
    </item>
  </channel>
</rss>
