<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>Plugin on Producthunt daily</title>
        <link>https://producthunt.programnotes.cn/en/tags/plugin/</link>
        <description>Recent content in Plugin on Producthunt daily</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>en</language>
        <lastBuildDate>Sat, 21 Mar 2026 15:38:03 +0800</lastBuildDate><atom:link href="https://producthunt.programnotes.cn/en/tags/plugin/index.xml" rel="self" type="application/rss+xml" /><item>
        <title>claude-hud</title>
        <link>https://producthunt.programnotes.cn/en/p/claude-hud/</link>
        <pubDate>Sat, 21 Mar 2026 15:38:03 +0800</pubDate>
        
        <guid>https://producthunt.programnotes.cn/en/p/claude-hud/</guid>
        <description>&lt;img src="https://images.unsplash.com/photo-1715390321213-c8d88b3e024a?ixid=M3w0NjAwMjJ8MHwxfHJhbmRvbXx8fHx8fHx8fDE3NzQwNzg2NzN8&amp;ixlib=rb-4.1.0" alt="Featured image of post claude-hud" /&gt;&lt;h1 id=&#34;jarrodwattsclaude-hud&#34;&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/jarrodwatts/claude-hud&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;jarrodwatts/claude-hud&lt;/a&gt;
&lt;/h1&gt;&lt;h1 id=&#34;claude-hud&#34;&gt;Claude HUD
&lt;/h1&gt;&lt;p&gt;A Claude Code plugin that shows what&amp;rsquo;s happening — context usage, active tools, running agents, and todo progress. Always visible below your input.&lt;/p&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;LICENSE&#34; &gt;&lt;img src=&#34;https://img.shields.io/github/license/jarrodwatts/claude-hud?v=2&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;License&#34;
	
	
&gt;&lt;/a&gt;
&lt;a class=&#34;link&#34; href=&#34;https://github.com/jarrodwatts/claude-hud/stargazers&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;&lt;img src=&#34;https://img.shields.io/github/stars/jarrodwatts/claude-hud&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;Stars&#34;
	
	
&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://producthunt.programnotes.cn/claude-hud-preview-5-2.png&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;Claude HUD in action&#34;
	
	
&gt;&lt;/p&gt;
&lt;h2 id=&#34;install&#34;&gt;Install
&lt;/h2&gt;&lt;p&gt;Inside a Claude Code instance, run the following commands:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Step 1: Add the marketplace&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/plugin marketplace add jarrodwatts/claude-hud
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Step 2: Install the plugin&lt;/strong&gt;&lt;/p&gt;
&lt;details&gt;
&lt;summary&gt;&lt;strong&gt;⚠️ Linux users: Click here first&lt;/strong&gt;&lt;/summary&gt;
&lt;p&gt;On Linux, &lt;code&gt;/tmp&lt;/code&gt; is often a separate filesystem (tmpfs), which causes plugin installation to fail with:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;EXDEV: cross-device link not permitted
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Fix&lt;/strong&gt;: Set TMPDIR before installing:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mkdir -p ~/.cache/tmp &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;TMPDIR&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;~/.cache/tmp claude
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Then run the install command below in that session. This is a &lt;a class=&#34;link&#34; href=&#34;https://github.com/anthropics/claude-code/issues/14799&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Claude Code platform limitation&lt;/a&gt;.&lt;/p&gt;
&lt;/details&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/plugin install claude-hud
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Step 3: Configure the statusline&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/claude-hud:setup
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Done! Restart Claude Code to load the new statusLine config, then the HUD will appear.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;what-is-claude-hud&#34;&gt;What is Claude HUD?
&lt;/h2&gt;&lt;p&gt;Claude HUD gives you better insights into what&amp;rsquo;s happening in your Claude Code session.&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;What You See&lt;/th&gt;
          &lt;th&gt;Why It Matters&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;Project path&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;Know which project you&amp;rsquo;re in (configurable 1-3 directory levels)&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;Context health&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;Know exactly how full your context window is before it&amp;rsquo;s too late&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;Tool activity&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;Watch Claude read, edit, and search files as it happens&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;Agent tracking&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;See which subagents are running and what they&amp;rsquo;re doing&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;Todo progress&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;Track task completion in real-time&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&#34;what-you-see&#34;&gt;What You See
&lt;/h2&gt;&lt;h3 id=&#34;default-2-lines&#34;&gt;Default (2 lines)
&lt;/h3&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;[Opus | Max] │ my-project git:(main*)
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Context █████░░░░░ 45% │ Usage ██░░░░░░░░ 25% (1h 30m / 5h)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Line 1&lt;/strong&gt; — Model, plan name (or &lt;code&gt;Bedrock&lt;/code&gt;), project path, git branch&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Line 2&lt;/strong&gt; — Context bar (green → yellow → red) and usage rate limits&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;optional-lines-enable-via-claude-hudconfigure&#34;&gt;Optional lines (enable via &lt;code&gt;/claude-hud:configure&lt;/code&gt;)
&lt;/h3&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;◐ Edit: auth.ts | ✓ Read ×3 | ✓ Grep ×2        ← Tools activity
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;◐ explore [haiku]: Finding auth code (2m 15s)    ← Agent status
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;▸ Fix authentication bug (2/5)                   ← Todo progress
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;hr&gt;
&lt;h2 id=&#34;how-it-works&#34;&gt;How It Works
&lt;/h2&gt;&lt;p&gt;Claude HUD uses Claude Code&amp;rsquo;s native &lt;strong&gt;statusline API&lt;/strong&gt; — no separate window, no tmux required, works in any terminal.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-gdscript3&#34; data-lang=&#34;gdscript3&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;Claude&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Code&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;→&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;stdin&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;JSON&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;→&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;claude&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;hud&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;→&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;stdout&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;→&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;displayed&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;your&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;terminal&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           &lt;span class=&#34;err&#34;&gt;↘&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;transcript&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;JSONL&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;tools&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;agents&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;todos&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Key features:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Native token data from Claude Code (not estimated)&lt;/li&gt;
&lt;li&gt;Scales with Claude Code&amp;rsquo;s reported context window size, including newer 1M-context sessions&lt;/li&gt;
&lt;li&gt;Parses the transcript for tool/agent activity&lt;/li&gt;
&lt;li&gt;Updates every ~300ms&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id=&#34;configuration&#34;&gt;Configuration
&lt;/h2&gt;&lt;p&gt;Customize your HUD anytime:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/claude-hud:configure
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;The guided flow handles layout and display toggles. Advanced overrides such as
custom colors and thresholds are preserved there, but you set them by editing the config file directly:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;First time setup&lt;/strong&gt;: Choose a preset (Full/Essential/Minimal), then fine-tune individual elements&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Customize anytime&lt;/strong&gt;: Toggle items on/off, adjust git display style, switch layouts&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Preview before saving&lt;/strong&gt;: See exactly how your HUD will look before committing changes&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;presets&#34;&gt;Presets
&lt;/h3&gt;&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;Preset&lt;/th&gt;
          &lt;th&gt;What&amp;rsquo;s Shown&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;Full&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;Everything enabled — tools, agents, todos, git, usage, duration&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;Essential&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;Activity lines + git status, minimal info clutter&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;Minimal&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;Core only — just model name and context bar&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;After choosing a preset, you can turn individual elements on or off.&lt;/p&gt;
&lt;h3 id=&#34;manual-configuration&#34;&gt;Manual Configuration
&lt;/h3&gt;&lt;p&gt;Edit &lt;code&gt;~/.claude/plugins/claude-hud/config.json&lt;/code&gt; directly for advanced settings such as &lt;code&gt;colors.*&lt;/code&gt;,
&lt;code&gt;pathLevels&lt;/code&gt;, and threshold overrides. Running &lt;code&gt;/claude-hud:configure&lt;/code&gt; preserves those manual settings.&lt;/p&gt;
&lt;h3 id=&#34;options&#34;&gt;Options
&lt;/h3&gt;&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;Option&lt;/th&gt;
          &lt;th&gt;Type&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;lineLayout&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;string&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;expanded&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;Layout: &lt;code&gt;expanded&lt;/code&gt; (multi-line) or &lt;code&gt;compact&lt;/code&gt; (single line)&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;pathLevels&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;1-3&lt;/td&gt;
          &lt;td&gt;1&lt;/td&gt;
          &lt;td&gt;Directory levels to show in project path&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;elementOrder&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;string[]&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;[&amp;quot;project&amp;quot;,&amp;quot;context&amp;quot;,&amp;quot;usage&amp;quot;,&amp;quot;environment&amp;quot;,&amp;quot;tools&amp;quot;,&amp;quot;agents&amp;quot;,&amp;quot;todos&amp;quot;]&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;Expanded-mode element order. Omit entries to hide them in expanded mode.&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;gitStatus.enabled&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;boolean&lt;/td&gt;
          &lt;td&gt;true&lt;/td&gt;
          &lt;td&gt;Show git branch in HUD&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;gitStatus.showDirty&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;boolean&lt;/td&gt;
          &lt;td&gt;true&lt;/td&gt;
          &lt;td&gt;Show &lt;code&gt;*&lt;/code&gt; for uncommitted changes&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;gitStatus.showAheadBehind&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;boolean&lt;/td&gt;
          &lt;td&gt;false&lt;/td&gt;
          &lt;td&gt;Show &lt;code&gt;↑N ↓N&lt;/code&gt; for ahead/behind remote&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;gitStatus.showFileStats&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;boolean&lt;/td&gt;
          &lt;td&gt;false&lt;/td&gt;
          &lt;td&gt;Show file change counts &lt;code&gt;!M +A ✘D ?U&lt;/code&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;display.showModel&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;boolean&lt;/td&gt;
          &lt;td&gt;true&lt;/td&gt;
          &lt;td&gt;Show model name &lt;code&gt;[Opus]&lt;/code&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;display.showContextBar&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;boolean&lt;/td&gt;
          &lt;td&gt;true&lt;/td&gt;
          &lt;td&gt;Show visual context bar &lt;code&gt;████░░░░░░&lt;/code&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;display.contextValue&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;percent&lt;/code&gt; | &lt;code&gt;tokens&lt;/code&gt; | &lt;code&gt;remaining&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;percent&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;Context display format (&lt;code&gt;45%&lt;/code&gt;, &lt;code&gt;45k/200k&lt;/code&gt;, or &lt;code&gt;55%&lt;/code&gt; remaining)&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;display.showConfigCounts&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;boolean&lt;/td&gt;
          &lt;td&gt;false&lt;/td&gt;
          &lt;td&gt;Show CLAUDE.md, rules, MCPs, hooks counts&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;display.showDuration&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;boolean&lt;/td&gt;
          &lt;td&gt;false&lt;/td&gt;
          &lt;td&gt;Show session duration &lt;code&gt;⏱️ 5m&lt;/code&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;display.showSpeed&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;boolean&lt;/td&gt;
          &lt;td&gt;false&lt;/td&gt;
          &lt;td&gt;Show output token speed &lt;code&gt;out: 42.1 tok/s&lt;/code&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;display.showUsage&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;boolean&lt;/td&gt;
          &lt;td&gt;true&lt;/td&gt;
          &lt;td&gt;Show usage limits (Pro/Max/Team only)&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;display.usageBarEnabled&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;boolean&lt;/td&gt;
          &lt;td&gt;true&lt;/td&gt;
          &lt;td&gt;Display usage as visual bar instead of text&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;display.sevenDayThreshold&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;0-100&lt;/td&gt;
          &lt;td&gt;80&lt;/td&gt;
          &lt;td&gt;Show 7-day usage when &amp;gt;= threshold (0 = always)&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;display.showTokenBreakdown&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;boolean&lt;/td&gt;
          &lt;td&gt;true&lt;/td&gt;
          &lt;td&gt;Show token details at high context (85%+)&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;display.showTools&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;boolean&lt;/td&gt;
          &lt;td&gt;false&lt;/td&gt;
          &lt;td&gt;Show tools activity line&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;display.showAgents&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;boolean&lt;/td&gt;
          &lt;td&gt;false&lt;/td&gt;
          &lt;td&gt;Show agents activity line&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;display.showTodos&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;boolean&lt;/td&gt;
          &lt;td&gt;false&lt;/td&gt;
          &lt;td&gt;Show todos progress line&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;display.showSessionName&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;boolean&lt;/td&gt;
          &lt;td&gt;false&lt;/td&gt;
          &lt;td&gt;Show session slug or custom title from &lt;code&gt;/rename&lt;/code&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;usage.cacheTtlSeconds&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;number&lt;/td&gt;
          &lt;td&gt;60&lt;/td&gt;
          &lt;td&gt;How long (seconds) to cache a successful usage API response&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;usage.failureCacheTtlSeconds&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;number&lt;/td&gt;
          &lt;td&gt;15&lt;/td&gt;
          &lt;td&gt;How long (seconds) to cache a failed usage API response before retrying&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;colors.context&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;color name&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;green&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;Base color for the context bar and context percentage&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;colors.usage&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;color name&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;brightBlue&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;Base color for usage bars and percentages below warning thresholds&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;colors.warning&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;color name&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;yellow&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;Warning color for context thresholds and usage warning text&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;colors.usageWarning&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;color name&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;brightMagenta&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;Warning color for usage bars and percentages near their threshold&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;colors.critical&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;color name&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;red&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;Critical color for limit-reached states and critical thresholds&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Supported color names: &lt;code&gt;red&lt;/code&gt;, &lt;code&gt;green&lt;/code&gt;, &lt;code&gt;yellow&lt;/code&gt;, &lt;code&gt;magenta&lt;/code&gt;, &lt;code&gt;cyan&lt;/code&gt;, &lt;code&gt;brightBlue&lt;/code&gt;, &lt;code&gt;brightMagenta&lt;/code&gt;.&lt;/p&gt;
&lt;h3 id=&#34;usage-limits-promaxteam&#34;&gt;Usage Limits (Pro/Max/Team)
&lt;/h3&gt;&lt;p&gt;Usage display is &lt;strong&gt;enabled by default&lt;/strong&gt; for Claude Pro, Max, and Team subscribers. It shows your rate limit consumption on line 2 alongside the context bar.&lt;/p&gt;
&lt;p&gt;The 7-day percentage appears when above the &lt;code&gt;display.sevenDayThreshold&lt;/code&gt; (default 80%):&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Context █████░░░░░ 45% │ Usage ██░░░░░░░░ 25% (1h 30m / 5h) | ██████████ 85% (2d / 7d)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;To disable, set &lt;code&gt;display.showUsage&lt;/code&gt; to &lt;code&gt;false&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Requirements:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Claude Pro, Max, or Team subscription (not available for API users)&lt;/li&gt;
&lt;li&gt;OAuth credentials from Claude Code (created automatically when you log in)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Troubleshooting:&lt;/strong&gt; If usage doesn&amp;rsquo;t appear:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Ensure you&amp;rsquo;re logged in with a Pro/Max/Team account (not API key)&lt;/li&gt;
&lt;li&gt;Check &lt;code&gt;display.showUsage&lt;/code&gt; is not set to &lt;code&gt;false&lt;/code&gt; in config&lt;/li&gt;
&lt;li&gt;API users see no usage display (they have pay-per-token, not rate limits)&lt;/li&gt;
&lt;li&gt;AWS Bedrock models display &lt;code&gt;Bedrock&lt;/code&gt; and hide usage limits (usage is managed in AWS)&lt;/li&gt;
&lt;li&gt;Non-default &lt;code&gt;ANTHROPIC_BASE_URL&lt;/code&gt; / &lt;code&gt;ANTHROPIC_API_BASE_URL&lt;/code&gt; settings skip usage display, because the Anthropic OAuth usage API may not apply&lt;/li&gt;
&lt;li&gt;If you are behind a proxy, set &lt;code&gt;HTTPS_PROXY&lt;/code&gt; (or &lt;code&gt;HTTP_PROXY&lt;/code&gt;/&lt;code&gt;ALL_PROXY&lt;/code&gt;) and optional &lt;code&gt;NO_PROXY&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;For high-latency environments, increase usage API timeout with &lt;code&gt;CLAUDE_HUD_USAGE_TIMEOUT_MS&lt;/code&gt; (milliseconds)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;example-configuration&#34;&gt;Example Configuration
&lt;/h3&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt; 1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 8
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 9
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;10
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;11
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;12
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;13
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;14
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;15
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;16
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;17
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;18
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;19
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;20
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;21
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;22
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;23
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;24
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;25
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;26
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;27
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;28
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;29
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-json&#34; data-lang=&#34;json&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;#34;lineLayout&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;expanded&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;#34;pathLevels&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;#34;elementOrder&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;project&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;tools&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;context&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;usage&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;environment&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;agents&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;todos&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;],&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;#34;gitStatus&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;#34;enabled&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;true&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;#34;showDirty&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;true&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;#34;showAheadBehind&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;true&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;#34;showFileStats&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;true&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;#34;display&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;#34;showTools&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;true&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;#34;showAgents&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;true&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;#34;showTodos&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;true&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;#34;showConfigCounts&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;true&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;#34;showDuration&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;true&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;#34;colors&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;#34;context&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;cyan&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;#34;usage&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;cyan&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;#34;warning&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;yellow&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;#34;usageWarning&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;magenta&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;#34;critical&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;red&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;#34;usage&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;#34;cacheTtlSeconds&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;120&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;#34;failureCacheTtlSeconds&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;30&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id=&#34;display-examples&#34;&gt;Display Examples
&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;1 level (default):&lt;/strong&gt; &lt;code&gt;[Opus] │ my-project git:(main)&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;2 levels:&lt;/strong&gt; &lt;code&gt;[Opus] │ apps/my-project git:(main)&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;3 levels:&lt;/strong&gt; &lt;code&gt;[Opus] │ dev/apps/my-project git:(main)&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;With dirty indicator:&lt;/strong&gt; &lt;code&gt;[Opus] │ my-project git:(main*)&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;With ahead/behind:&lt;/strong&gt; &lt;code&gt;[Opus] │ my-project git:(main ↑2 ↓1)&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;With file stats:&lt;/strong&gt; &lt;code&gt;[Opus] │ my-project git:(main* !3 +1 ?2)&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;!&lt;/code&gt; = modified files, &lt;code&gt;+&lt;/code&gt; = added/staged, &lt;code&gt;✘&lt;/code&gt; = deleted, &lt;code&gt;?&lt;/code&gt; = untracked&lt;/li&gt;
&lt;li&gt;Counts of 0 are omitted for cleaner display&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;troubleshooting&#34;&gt;Troubleshooting
&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;Config not applying?&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Check for JSON syntax errors: invalid JSON silently falls back to defaults&lt;/li&gt;
&lt;li&gt;Ensure valid values: &lt;code&gt;pathLevels&lt;/code&gt; must be 1, 2, or 3; &lt;code&gt;lineLayout&lt;/code&gt; must be &lt;code&gt;expanded&lt;/code&gt; or &lt;code&gt;compact&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Delete config and run &lt;code&gt;/claude-hud:configure&lt;/code&gt; to regenerate&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Git status missing?&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Verify you&amp;rsquo;re in a git repository&lt;/li&gt;
&lt;li&gt;Check &lt;code&gt;gitStatus.enabled&lt;/code&gt; is not &lt;code&gt;false&lt;/code&gt; in config&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Tool/agent/todo lines missing?&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;These are hidden by default — enable with &lt;code&gt;showTools&lt;/code&gt;, &lt;code&gt;showAgents&lt;/code&gt;, &lt;code&gt;showTodos&lt;/code&gt; in config&lt;/li&gt;
&lt;li&gt;They also only appear when there&amp;rsquo;s activity to show&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;HUD not appearing after setup?&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Restart Claude Code so it picks up the new statusLine config&lt;/li&gt;
&lt;li&gt;On macOS, fully quit Claude Code and run &lt;code&gt;claude&lt;/code&gt; again in your terminal&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id=&#34;requirements&#34;&gt;Requirements
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Claude Code v1.0.80+&lt;/li&gt;
&lt;li&gt;Node.js 18+ or Bun&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id=&#34;development&#34;&gt;Development
&lt;/h2&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git clone https://github.com/jarrodwatts/claude-hud
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; claude-hud
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;npm ci &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; npm run build
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;npm &lt;span class=&#34;nb&#34;&gt;test&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;See &lt;a class=&#34;link&#34; href=&#34;CONTRIBUTING.md&#34; &gt;CONTRIBUTING.md&lt;/a&gt; for guidelines.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;license&#34;&gt;License
&lt;/h2&gt;&lt;p&gt;MIT — see &lt;a class=&#34;link&#34; href=&#34;LICENSE&#34; &gt;LICENSE&lt;/a&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;star-history&#34;&gt;Star History
&lt;/h2&gt;&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://star-history.com/#jarrodwatts/claude-hud&amp;amp;Date&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;&lt;img src=&#34;https://api.star-history.com/svg?repos=jarrodwatts/claude-hud&amp;amp;type=Date&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;Star History Chart&#34;
	
	
&gt;&lt;/a&gt;&lt;/p&gt;
</description>
        </item>
        <item>
        <title>eslint</title>
        <link>https://producthunt.programnotes.cn/en/p/eslint/</link>
        <pubDate>Wed, 24 Sep 2025 15:28:00 +0800</pubDate>
        
        <guid>https://producthunt.programnotes.cn/en/p/eslint/</guid>
        <description>&lt;img src="https://images.unsplash.com/photo-1573470271783-0054dcd317fd?ixid=M3w0NjAwMjJ8MHwxfHJhbmRvbXx8fHx8fHx8fDE3NTg2OTg4NDR8&amp;ixlib=rb-4.1.0" alt="Featured image of post eslint" /&gt;&lt;h1 id=&#34;eslinteslint&#34;&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/eslint/eslint&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;eslint/eslint&lt;/a&gt;
&lt;/h1&gt;&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://www.npmjs.com/package/eslint&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;&lt;img src=&#34;https://img.shields.io/npm/v/eslint.svg&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;npm version&#34;
	
	
&gt;&lt;/a&gt;
&lt;a class=&#34;link&#34; href=&#34;https://www.npmjs.com/package/eslint&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;&lt;img src=&#34;https://img.shields.io/npm/dm/eslint.svg&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;Downloads&#34;
	
	
&gt;&lt;/a&gt;
&lt;a class=&#34;link&#34; href=&#34;https://github.com/eslint/eslint/actions&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;&lt;img src=&#34;https://github.com/eslint/eslint/workflows/CI/badge.svg&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;Build Status&#34;
	
	
&gt;&lt;/a&gt;
&lt;br&gt;
&lt;a class=&#34;link&#34; href=&#34;https://opencollective.com/eslint&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;&lt;img src=&#34;https://img.shields.io/opencollective/backers/eslint&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;Open Collective Backers&#34;
	
	
&gt;&lt;/a&gt;
&lt;a class=&#34;link&#34; href=&#34;https://opencollective.com/eslint&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;&lt;img src=&#34;https://img.shields.io/opencollective/sponsors/eslint&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;Open Collective Sponsors&#34;
	
	
&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h1 id=&#34;eslint&#34;&gt;ESLint
&lt;/h1&gt;&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://eslint.org&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Website&lt;/a&gt; |
&lt;a class=&#34;link&#34; href=&#34;https://eslint.org/docs/latest/use/configure&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Configure ESLint&lt;/a&gt; |
&lt;a class=&#34;link&#34; href=&#34;https://eslint.org/docs/rules/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Rules&lt;/a&gt; |
&lt;a class=&#34;link&#34; href=&#34;https://eslint.org/docs/latest/contribute&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Contribute to ESLint&lt;/a&gt; |
&lt;a class=&#34;link&#34; href=&#34;https://eslint.org/docs/latest/contribute/report-bugs&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Report Bugs&lt;/a&gt; |
&lt;a class=&#34;link&#34; href=&#34;https://eslint.org/conduct&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Code of Conduct&lt;/a&gt; |
&lt;a class=&#34;link&#34; href=&#34;https://twitter.com/geteslint&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Twitter&lt;/a&gt; |
&lt;a class=&#34;link&#34; href=&#34;https://eslint.org/chat&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Discord&lt;/a&gt; |
&lt;a class=&#34;link&#34; href=&#34;https://fosstodon.org/@eslint&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Mastodon&lt;/a&gt; |
&lt;a class=&#34;link&#34; href=&#34;https://bsky.app/profile/eslint.org&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Bluesky&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;ESLint is a tool for identifying and reporting on patterns found in ECMAScript/JavaScript code. In many ways, it is similar to JSLint and JSHint with a few exceptions:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;ESLint uses &lt;a class=&#34;link&#34; href=&#34;https://github.com/eslint/js/tree/main/packages/espree&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Espree&lt;/a&gt; for JavaScript parsing.&lt;/li&gt;
&lt;li&gt;ESLint uses an AST to evaluate patterns in code.&lt;/li&gt;
&lt;li&gt;ESLint is completely pluggable, every single rule is a plugin and you can add more at runtime.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;table-of-contents&#34;&gt;Table of Contents
&lt;/h2&gt;&lt;ol&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;#installation-and-usage&#34; &gt;Installation and Usage&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;#configuration&#34; &gt;Configuration&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;#version-support&#34; &gt;Version Support&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;#code-of-conduct&#34; &gt;Code of Conduct&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;#filing-issues&#34; &gt;Filing Issues&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;#frequently-asked-questions&#34; &gt;Frequently Asked Questions&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;#releases&#34; &gt;Releases&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;#security-policy&#34; &gt;Security Policy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;#semantic-versioning-policy&#34; &gt;Semantic Versioning Policy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;#license&#34; &gt;License&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;#team&#34; &gt;Team&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;#sponsors&#34; &gt;Sponsors&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;#technology-sponsors&#34; &gt;Technology Sponsors&lt;/a&gt; &lt;!-- markdownlint-disable-line MD051 --&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;installation-and-usage&#34;&gt;Installation and Usage
&lt;/h2&gt;&lt;p&gt;Prerequisites: &lt;a class=&#34;link&#34; href=&#34;https://nodejs.org/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Node.js&lt;/a&gt; (&lt;code&gt;^18.18.0&lt;/code&gt;, &lt;code&gt;^20.9.0&lt;/code&gt;, or &lt;code&gt;&amp;gt;=21.1.0&lt;/code&gt;) built with SSL support. (If you are using an official Node.js distribution, SSL is always built in.)&lt;/p&gt;
&lt;p&gt;You can install and configure ESLint using this command:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;npm init @eslint/config@latest
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;After that, you can run ESLint on any file or directory like this:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;npx eslint yourfile.js
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id=&#34;pnpm-installation&#34;&gt;pnpm Installation
&lt;/h3&gt;&lt;p&gt;To use ESLint with pnpm, we recommend setting up a &lt;code&gt;.npmrc&lt;/code&gt; file with at least the following settings:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;auto-install-peers=true
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;node-linker=hoisted
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;This ensures that pnpm installs dependencies in a way that is more compatible with npm and is less likely to produce errors.&lt;/p&gt;
&lt;h2 id=&#34;configuration&#34;&gt;Configuration
&lt;/h2&gt;&lt;p&gt;You can configure rules in your &lt;code&gt;eslint.config.js&lt;/code&gt; files as in this example:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt; 1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 8
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 9
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;10
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;11
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-js&#34; data-lang=&#34;js&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kr&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;defineConfig&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;eslint/config&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kr&#34;&gt;export&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;default&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;defineConfig&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;([&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;		&lt;span class=&#34;nx&#34;&gt;files&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;**/*.js&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;**/*.cjs&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;**/*.mjs&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;],&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;		&lt;span class=&#34;nx&#34;&gt;rules&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;			&lt;span class=&#34;s2&#34;&gt;&amp;#34;prefer-const&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;warn&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;			&lt;span class=&#34;s2&#34;&gt;&amp;#34;no-constant-binary-expression&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;error&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;		&lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;]);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;The names &lt;code&gt;&amp;quot;prefer-const&amp;quot;&lt;/code&gt; and &lt;code&gt;&amp;quot;no-constant-binary-expression&amp;quot;&lt;/code&gt; are the names of &lt;a class=&#34;link&#34; href=&#34;https://eslint.org/docs/rules&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;rules&lt;/a&gt; in ESLint. The first value is the error level of the rule and can be one of these values:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;&amp;quot;off&amp;quot;&lt;/code&gt; or &lt;code&gt;0&lt;/code&gt; - turn the rule off&lt;/li&gt;
&lt;li&gt;&lt;code&gt;&amp;quot;warn&amp;quot;&lt;/code&gt; or &lt;code&gt;1&lt;/code&gt; - turn the rule on as a warning (doesn&amp;rsquo;t affect exit code)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;&amp;quot;error&amp;quot;&lt;/code&gt; or &lt;code&gt;2&lt;/code&gt; - turn the rule on as an error (exit code will be 1)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The three error levels allow you fine-grained control over how ESLint applies rules (for more configuration options and details, see the &lt;a class=&#34;link&#34; href=&#34;https://eslint.org/docs/latest/use/configure&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;configuration docs&lt;/a&gt;).&lt;/p&gt;
&lt;h2 id=&#34;version-support&#34;&gt;Version Support
&lt;/h2&gt;&lt;p&gt;The ESLint team provides ongoing support for the current version and six months of limited support for the previous version. Limited support includes critical bug fixes, security issues, and compatibility issues only.&lt;/p&gt;
&lt;p&gt;ESLint offers commercial support for both current and previous versions through our partners, &lt;a class=&#34;link&#34; href=&#34;https://tidelift.com/funding/github/npm/eslint&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Tidelift&lt;/a&gt; and &lt;a class=&#34;link&#34; href=&#34;https://www.herodevs.com/support/eslint-nes?utm_source=ESLintWebsite&amp;amp;utm_medium=ESLintWebsite&amp;amp;utm_campaign=ESLintNES&amp;amp;utm_id=ESLintNES&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;HeroDevs&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;See &lt;a class=&#34;link&#34; href=&#34;https://eslint.org/version-support&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Version Support&lt;/a&gt; for more details.&lt;/p&gt;
&lt;h2 id=&#34;code-of-conduct&#34;&gt;Code of Conduct
&lt;/h2&gt;&lt;p&gt;ESLint adheres to the &lt;a class=&#34;link&#34; href=&#34;https://eslint.org/conduct&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;OpenJS Foundation Code of Conduct&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&#34;filing-issues&#34;&gt;Filing Issues
&lt;/h2&gt;&lt;p&gt;Before filing an issue, please be sure to read the guidelines for what you&amp;rsquo;re reporting:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://eslint.org/docs/latest/contribute/report-bugs&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Bug Report&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://eslint.org/docs/latest/contribute/propose-new-rule&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Propose a New Rule&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://eslint.org/docs/latest/contribute/propose-rule-change&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Proposing a Rule Change&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://eslint.org/docs/latest/contribute/request-change&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Request a Change&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;frequently-asked-questions&#34;&gt;Frequently Asked Questions
&lt;/h2&gt;&lt;h3 id=&#34;does-eslint-support-jsx&#34;&gt;Does ESLint support JSX?
&lt;/h3&gt;&lt;p&gt;Yes, ESLint natively supports parsing JSX syntax (this must be enabled in &lt;a class=&#34;link&#34; href=&#34;https://eslint.org/docs/latest/use/configure&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;configuration&lt;/a&gt;). Please note that supporting JSX syntax &lt;em&gt;is not&lt;/em&gt; the same as supporting React. React applies specific semantics to JSX syntax that ESLint doesn&amp;rsquo;t recognize. We recommend using &lt;a class=&#34;link&#34; href=&#34;https://www.npmjs.com/package/eslint-plugin-react&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;eslint-plugin-react&lt;/a&gt; if you are using React and want React semantics.&lt;/p&gt;
&lt;h3 id=&#34;does-prettier-replace-eslint&#34;&gt;Does Prettier replace ESLint?
&lt;/h3&gt;&lt;p&gt;No, ESLint and Prettier have different jobs: ESLint is a linter (looking for problematic patterns) and Prettier is a code formatter. Using both tools is common, refer to &lt;a class=&#34;link&#34; href=&#34;https://prettier.io/docs/en/install#eslint-and-other-linters&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Prettier&amp;rsquo;s documentation&lt;/a&gt; to learn how to configure them to work well with each other.&lt;/p&gt;
&lt;h3 id=&#34;what-ecmascript-versions-does-eslint-support&#34;&gt;What ECMAScript versions does ESLint support?
&lt;/h3&gt;&lt;p&gt;ESLint has full support for ECMAScript 3, 5, and every year from 2015 up until the most recent stage 4 specification (the default). You can set your desired ECMAScript syntax and other settings (like global variables) through &lt;a class=&#34;link&#34; href=&#34;https://eslint.org/docs/latest/use/configure&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;configuration&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id=&#34;what-about-experimental-features&#34;&gt;What about experimental features?
&lt;/h3&gt;&lt;p&gt;ESLint&amp;rsquo;s parser only officially supports the latest final ECMAScript standard. We will make changes to core rules in order to avoid crashes on stage 3 ECMAScript syntax proposals (as long as they are implemented using the correct experimental ESTree syntax). We may make changes to core rules to better work with language extensions (such as JSX, Flow, and TypeScript) on a case-by-case basis.&lt;/p&gt;
&lt;p&gt;In other cases (including if rules need to warn on more or fewer cases due to new syntax, rather than just not crashing), we recommend you use other parsers and/or rule plugins. If you are using Babel, you can use &lt;a class=&#34;link&#34; href=&#34;https://www.npmjs.com/package/@babel/eslint-parser&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;@babel/eslint-parser&lt;/a&gt; and &lt;a class=&#34;link&#34; href=&#34;https://www.npmjs.com/package/@babel/eslint-plugin&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;@babel/eslint-plugin&lt;/a&gt; to use any option available in Babel.&lt;/p&gt;
&lt;p&gt;Once a language feature has been adopted into the ECMAScript standard (stage 4 according to the &lt;a class=&#34;link&#34; href=&#34;https://tc39.github.io/process-document/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;TC39 process&lt;/a&gt;), we will accept issues and pull requests related to the new feature, subject to our &lt;a class=&#34;link&#34; href=&#34;https://eslint.org/docs/latest/contribute&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;contributing guidelines&lt;/a&gt;. Until then, please use the appropriate parser and plugin(s) for your experimental feature.&lt;/p&gt;
&lt;h3 id=&#34;which-nodejs-versions-does-eslint-support&#34;&gt;Which Node.js versions does ESLint support?
&lt;/h3&gt;&lt;p&gt;ESLint updates the supported Node.js versions with each major release of ESLint. At that time, ESLint&amp;rsquo;s supported Node.js versions are updated to be:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;The most recent maintenance release of Node.js&lt;/li&gt;
&lt;li&gt;The lowest minor version of the Node.js LTS release that includes the features the ESLint team wants to use.&lt;/li&gt;
&lt;li&gt;The Node.js Current release&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;ESLint is also expected to work with Node.js versions released after the Node.js Current release.&lt;/p&gt;
&lt;p&gt;Refer to the &lt;a class=&#34;link&#34; href=&#34;https://eslint.org/docs/latest/use/getting-started#prerequisites&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Quick Start Guide&lt;/a&gt; for the officially supported Node.js versions for a given ESLint release.&lt;/p&gt;
&lt;h3 id=&#34;where-to-ask-for-help&#34;&gt;Where to ask for help?
&lt;/h3&gt;&lt;p&gt;Open a &lt;a class=&#34;link&#34; href=&#34;https://github.com/eslint/eslint/discussions&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;discussion&lt;/a&gt; or stop by our &lt;a class=&#34;link&#34; href=&#34;https://eslint.org/chat&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Discord server&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id=&#34;why-doesnt-eslint-lock-dependency-versions&#34;&gt;Why doesn&amp;rsquo;t ESLint lock dependency versions?
&lt;/h3&gt;&lt;p&gt;Lock files like &lt;code&gt;package-lock.json&lt;/code&gt; are helpful for deployed applications. They ensure that dependencies are consistent between environments and across deployments.&lt;/p&gt;
&lt;p&gt;Packages like &lt;code&gt;eslint&lt;/code&gt; that get published to the npm registry do not include lock files. &lt;code&gt;npm install eslint&lt;/code&gt; as a user will respect version constraints in ESLint&amp;rsquo;s &lt;code&gt;package.json&lt;/code&gt;. ESLint and its dependencies will be included in the user&amp;rsquo;s lock file if one exists, but ESLint&amp;rsquo;s own lock file would not be used.&lt;/p&gt;
&lt;p&gt;We intentionally don&amp;rsquo;t lock dependency versions so that we have the latest compatible dependency versions in development and CI that our users get when installing ESLint in a project.&lt;/p&gt;
&lt;p&gt;The Twilio blog has a &lt;a class=&#34;link&#34; href=&#34;https://www.twilio.com/blog/lockfiles-nodejs&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;deeper dive&lt;/a&gt; to learn more.&lt;/p&gt;
&lt;h2 id=&#34;releases&#34;&gt;Releases
&lt;/h2&gt;&lt;p&gt;We have scheduled releases every two weeks on Friday or Saturday. You can follow a &lt;a class=&#34;link&#34; href=&#34;https://github.com/eslint/eslint/issues?q=is%3Aopen&amp;#43;is%3Aissue&amp;#43;label%3Arelease&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;release issue&lt;/a&gt; for updates about the scheduling of any particular release.&lt;/p&gt;
&lt;h2 id=&#34;security-policy&#34;&gt;Security Policy
&lt;/h2&gt;&lt;p&gt;ESLint takes security seriously. We work hard to ensure that ESLint is safe for everyone and that security issues are addressed quickly and responsibly. Read the full &lt;a class=&#34;link&#34; href=&#34;https://github.com/eslint/.github/blob/master/SECURITY.md&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;security policy&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&#34;semantic-versioning-policy&#34;&gt;Semantic Versioning Policy
&lt;/h2&gt;&lt;p&gt;ESLint follows &lt;a class=&#34;link&#34; href=&#34;https://semver.org&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;semantic versioning&lt;/a&gt;. However, due to the nature of ESLint as a code quality tool, it&amp;rsquo;s not always clear when a minor or major version bump occurs. To help clarify this for everyone, we&amp;rsquo;ve defined the following semantic versioning policy for ESLint:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Patch release (intended to not break your lint build)
&lt;ul&gt;
&lt;li&gt;A bug fix in a rule that results in ESLint reporting fewer linting errors.&lt;/li&gt;
&lt;li&gt;A bug fix to the CLI or core (including formatters).&lt;/li&gt;
&lt;li&gt;Improvements to documentation.&lt;/li&gt;
&lt;li&gt;Non-user-facing changes such as refactoring code, adding, deleting, or modifying tests, and increasing test coverage.&lt;/li&gt;
&lt;li&gt;Re-releasing after a failed release (i.e., publishing a release that doesn&amp;rsquo;t work for anyone).&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Minor release (might break your lint build)
&lt;ul&gt;
&lt;li&gt;A bug fix in a rule that results in ESLint reporting more linting errors.&lt;/li&gt;
&lt;li&gt;A new rule is created.&lt;/li&gt;
&lt;li&gt;A new option to an existing rule that does not result in ESLint reporting more linting errors by default.&lt;/li&gt;
&lt;li&gt;A new addition to an existing rule to support a newly-added language feature (within the last 12 months) that will result in ESLint reporting more linting errors by default.&lt;/li&gt;
&lt;li&gt;An existing rule is deprecated.&lt;/li&gt;
&lt;li&gt;A new CLI capability is created.&lt;/li&gt;
&lt;li&gt;New capabilities to the public API are added (new classes, new methods, new arguments to existing methods, etc.).&lt;/li&gt;
&lt;li&gt;A new formatter is created.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;eslint:recommended&lt;/code&gt; is updated and will result in strictly fewer linting errors (e.g., rule removals).&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Major release (likely to break your lint build)
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;eslint:recommended&lt;/code&gt; is updated and may result in new linting errors (e.g., rule additions, most rule option updates).&lt;/li&gt;
&lt;li&gt;A new option to an existing rule that results in ESLint reporting more linting errors by default.&lt;/li&gt;
&lt;li&gt;An existing formatter is removed.&lt;/li&gt;
&lt;li&gt;Part of the public API is removed or changed in an incompatible way. The public API includes:
&lt;ul&gt;
&lt;li&gt;Rule schemas&lt;/li&gt;
&lt;li&gt;Configuration schema&lt;/li&gt;
&lt;li&gt;Command-line options&lt;/li&gt;
&lt;li&gt;Node.js API&lt;/li&gt;
&lt;li&gt;Rule, formatter, parser, plugin APIs&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;According to our policy, any minor update may report more linting errors than the previous release (ex: from a bug fix). As such, we recommend using the tilde (&lt;code&gt;~&lt;/code&gt;) in &lt;code&gt;package.json&lt;/code&gt; e.g. &lt;code&gt;&amp;quot;eslint&amp;quot;: &amp;quot;~3.1.0&amp;quot;&lt;/code&gt; to guarantee the results of your builds.&lt;/p&gt;
&lt;h2 id=&#34;license&#34;&gt;License
&lt;/h2&gt;&lt;p&gt;MIT License&lt;/p&gt;
&lt;p&gt;Copyright OpenJS Foundation and other contributors, &amp;lt;www.openjsf.org&amp;gt;&lt;/p&gt;
&lt;p&gt;Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the &amp;ldquo;Software&amp;rdquo;), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:&lt;/p&gt;
&lt;p&gt;The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.&lt;/p&gt;
&lt;p&gt;THE SOFTWARE IS PROVIDED &amp;ldquo;AS IS&amp;rdquo;, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.&lt;/p&gt;
&lt;h2 id=&#34;team&#34;&gt;Team
&lt;/h2&gt;&lt;p&gt;These folks keep the project moving and are resources for help.&lt;/p&gt;
&lt;!-- NOTE: This section is autogenerated. Do not manually edit.--&gt;
&lt;!--teamstart--&gt;
&lt;h3 id=&#34;technical-steering-committee-tsc&#34;&gt;Technical Steering Committee (TSC)
&lt;/h3&gt;&lt;p&gt;The people who manage releases, review feature requests, and meet regularly to ensure ESLint is properly maintained.&lt;/p&gt;
&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td align=&#34;center&#34; valign=&#34;top&#34; width=&#34;11%&#34;&gt;
&lt;a href=&#34;https://github.com/nzakas&#34;&gt;
&lt;img src=&#34;https://github.com/nzakas.png?s=75&#34; width=&#34;75&#34; height=&#34;75&#34; alt=&#34;Nicholas C. Zakas&#39;s Avatar&#34;&gt;&lt;br /&gt;
Nicholas C. Zakas
&lt;/a&gt;
&lt;/td&gt;&lt;td align=&#34;center&#34; valign=&#34;top&#34; width=&#34;11%&#34;&gt;
&lt;a href=&#34;https://github.com/fasttime&#34;&gt;
&lt;img src=&#34;https://github.com/fasttime.png?s=75&#34; width=&#34;75&#34; height=&#34;75&#34; alt=&#34;Francesco Trotta&#39;s Avatar&#34;&gt;&lt;br /&gt;
Francesco Trotta
&lt;/a&gt;
&lt;/td&gt;&lt;td align=&#34;center&#34; valign=&#34;top&#34; width=&#34;11%&#34;&gt;
&lt;a href=&#34;https://github.com/mdjermanovic&#34;&gt;
&lt;img src=&#34;https://github.com/mdjermanovic.png?s=75&#34; width=&#34;75&#34; height=&#34;75&#34; alt=&#34;Milos Djermanovic&#39;s Avatar&#34;&gt;&lt;br /&gt;
Milos Djermanovic
&lt;/a&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;h3 id=&#34;reviewers&#34;&gt;Reviewers
&lt;/h3&gt;&lt;p&gt;The people who review and implement new features.&lt;/p&gt;
&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td align=&#34;center&#34; valign=&#34;top&#34; width=&#34;11%&#34;&gt;
&lt;a href=&#34;https://github.com/aladdin-add&#34;&gt;
&lt;img src=&#34;https://github.com/aladdin-add.png?s=75&#34; width=&#34;75&#34; height=&#34;75&#34; alt=&#34;唯然&#39;s Avatar&#34;&gt;&lt;br /&gt;
唯然
&lt;/a&gt;
&lt;/td&gt;&lt;td align=&#34;center&#34; valign=&#34;top&#34; width=&#34;11%&#34;&gt;
&lt;a href=&#34;https://github.com/snitin315&#34;&gt;
&lt;img src=&#34;https://github.com/snitin315.png?s=75&#34; width=&#34;75&#34; height=&#34;75&#34; alt=&#34;Nitin Kumar&#39;s Avatar&#34;&gt;&lt;br /&gt;
Nitin Kumar
&lt;/a&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;h3 id=&#34;committers&#34;&gt;Committers
&lt;/h3&gt;&lt;p&gt;The people who review and fix bugs and help triage issues.&lt;/p&gt;
&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td align=&#34;center&#34; valign=&#34;top&#34; width=&#34;11%&#34;&gt;
&lt;a href=&#34;https://github.com/DMartens&#34;&gt;
&lt;img src=&#34;https://github.com/DMartens.png?s=75&#34; width=&#34;75&#34; height=&#34;75&#34; alt=&#34;fnx&#39;s Avatar&#34;&gt;&lt;br /&gt;
fnx
&lt;/a&gt;
&lt;/td&gt;&lt;td align=&#34;center&#34; valign=&#34;top&#34; width=&#34;11%&#34;&gt;
&lt;a href=&#34;https://github.com/JoshuaKGoldberg&#34;&gt;
&lt;img src=&#34;https://github.com/JoshuaKGoldberg.png?s=75&#34; width=&#34;75&#34; height=&#34;75&#34; alt=&#34;Josh Goldberg ✨&#39;s Avatar&#34;&gt;&lt;br /&gt;
Josh Goldberg ✨
&lt;/a&gt;
&lt;/td&gt;&lt;td align=&#34;center&#34; valign=&#34;top&#34; width=&#34;11%&#34;&gt;
&lt;a href=&#34;https://github.com/Tanujkanti4441&#34;&gt;
&lt;img src=&#34;https://github.com/Tanujkanti4441.png?s=75&#34; width=&#34;75&#34; height=&#34;75&#34; alt=&#34;Tanuj Kanti&#39;s Avatar&#34;&gt;&lt;br /&gt;
Tanuj Kanti
&lt;/a&gt;
&lt;/td&gt;&lt;td align=&#34;center&#34; valign=&#34;top&#34; width=&#34;11%&#34;&gt;
&lt;a href=&#34;https://github.com/lumirlumir&#34;&gt;
&lt;img src=&#34;https://github.com/lumirlumir.png?s=75&#34; width=&#34;75&#34; height=&#34;75&#34; alt=&#34;루밀LuMir&#39;s Avatar&#34;&gt;&lt;br /&gt;
루밀LuMir
&lt;/a&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;h3 id=&#34;website-team&#34;&gt;Website Team
&lt;/h3&gt;&lt;p&gt;Team members who focus specifically on eslint.org&lt;/p&gt;
&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td align=&#34;center&#34; valign=&#34;top&#34; width=&#34;11%&#34;&gt;
&lt;a href=&#34;https://github.com/amareshsm&#34;&gt;
&lt;img src=&#34;https://github.com/amareshsm.png?s=75&#34; width=&#34;75&#34; height=&#34;75&#34; alt=&#34;Amaresh  S M&#39;s Avatar&#34;&gt;&lt;br /&gt;
Amaresh  S M
&lt;/a&gt;
&lt;/td&gt;&lt;td align=&#34;center&#34; valign=&#34;top&#34; width=&#34;11%&#34;&gt;
&lt;a href=&#34;https://github.com/harish-sethuraman&#34;&gt;
&lt;img src=&#34;https://github.com/harish-sethuraman.png?s=75&#34; width=&#34;75&#34; height=&#34;75&#34; alt=&#34;Harish&#39;s Avatar&#34;&gt;&lt;br /&gt;
Harish
&lt;/a&gt;
&lt;/td&gt;&lt;td align=&#34;center&#34; valign=&#34;top&#34; width=&#34;11%&#34;&gt;
&lt;a href=&#34;https://github.com/kecrily&#34;&gt;
&lt;img src=&#34;https://github.com/kecrily.png?s=75&#34; width=&#34;75&#34; height=&#34;75&#34; alt=&#34;Percy Ma&#39;s Avatar&#34;&gt;&lt;br /&gt;
Percy Ma
&lt;/a&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;!--teamend--&gt;
&lt;!-- NOTE: This section is autogenerated. Do not manually edit.--&gt;
&lt;!--sponsorsstart--&gt;
&lt;h2 id=&#34;sponsors&#34;&gt;Sponsors
&lt;/h2&gt;&lt;p&gt;The following companies, organizations, and individuals support ESLint&amp;rsquo;s ongoing maintenance and development. &lt;a class=&#34;link&#34; href=&#34;https://eslint.org/donate&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Become a Sponsor&lt;/a&gt;
to get your logo on our READMEs and &lt;a class=&#34;link&#34; href=&#34;https://eslint.org/sponsors&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;website&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;Platinum Sponsors&lt;/h3&gt;
&lt;p&gt;&lt;a href=&#34;https://automattic.com&#34;&gt;&lt;img src=&#34;https://images.opencollective.com/automattic/d0ef3e1/logo.png&#34; alt=&#34;Automattic&#34; height=&#34;128&#34;&gt;&lt;/a&gt; &lt;a href=&#34;https://www.airbnb.com/&#34;&gt;&lt;img src=&#34;https://images.opencollective.com/airbnb/d327d66/logo.png&#34; alt=&#34;Airbnb&#34; height=&#34;128&#34;&gt;&lt;/a&gt;&lt;/p&gt;&lt;h3&gt;Gold Sponsors&lt;/h3&gt;
&lt;p&gt;&lt;a href=&#34;https://qlty.sh/&#34;&gt;&lt;img src=&#34;https://images.opencollective.com/qltysh/33d157d/logo.png&#34; alt=&#34;Qlty Software&#34; height=&#34;96&#34;&gt;&lt;/a&gt; &lt;a href=&#34;https://trunk.io/&#34;&gt;&lt;img src=&#34;https://images.opencollective.com/trunkio/fb92d60/avatar.png&#34; alt=&#34;trunk.io&#34; height=&#34;96&#34;&gt;&lt;/a&gt; &lt;a href=&#34;https://shopify.engineering/&#34;&gt;&lt;img src=&#34;https://avatars.githubusercontent.com/u/8085&#34; alt=&#34;Shopify&#34; height=&#34;96&#34;&gt;&lt;/a&gt;&lt;/p&gt;&lt;h3&gt;Silver Sponsors&lt;/h3&gt;
&lt;p&gt;&lt;a href=&#34;https://vite.dev/&#34;&gt;&lt;img src=&#34;https://images.opencollective.com/vite/e6d15e1/logo.png&#34; alt=&#34;Vite&#34; height=&#34;64&#34;&gt;&lt;/a&gt; &lt;a href=&#34;https://liftoff.io/&#34;&gt;&lt;img src=&#34;https://images.opencollective.com/liftoff/5c4fa84/logo.png&#34; alt=&#34;Liftoff&#34; height=&#34;64&#34;&gt;&lt;/a&gt; &lt;a href=&#34;https://americanexpress.io&#34;&gt;&lt;img src=&#34;https://avatars.githubusercontent.com/u/3853301&#34; alt=&#34;American Express&#34; height=&#34;64&#34;&gt;&lt;/a&gt; &lt;a href=&#34;https://stackblitz.com&#34;&gt;&lt;img src=&#34;https://avatars.githubusercontent.com/u/28635252&#34; alt=&#34;StackBlitz&#34; height=&#34;64&#34;&gt;&lt;/a&gt;&lt;/p&gt;&lt;h3&gt;Bronze Sponsors&lt;/h3&gt;
&lt;p&gt;&lt;a href=&#34;https://syntax.fm&#34;&gt;&lt;img src=&#34;https://github.com/syntaxfm.png&#34; alt=&#34;Syntax&#34; height=&#34;32&#34;&gt;&lt;/a&gt; &lt;a href=&#34;https://cybozu.co.jp/&#34;&gt;&lt;img src=&#34;https://images.opencollective.com/cybozu/933e46d/logo.png&#34; alt=&#34;Cybozu&#34; height=&#34;32&#34;&gt;&lt;/a&gt; &lt;a href=&#34;https://sentry.io&#34;&gt;&lt;img src=&#34;https://github.com/getsentry.png&#34; alt=&#34;Sentry&#34; height=&#34;32&#34;&gt;&lt;/a&gt; &lt;a href=&#34;https://discord.com&#34;&gt;&lt;img src=&#34;https://images.opencollective.com/discordapp/f9645d9/logo.png&#34; alt=&#34;Discord&#34; height=&#34;32&#34;&gt;&lt;/a&gt; &lt;a href=&#34;https://www.gitbook.com&#34;&gt;&lt;img src=&#34;https://avatars.githubusercontent.com/u/7111340&#34; alt=&#34;GitBook&#34; height=&#34;32&#34;&gt;&lt;/a&gt; &lt;a href=&#34;https://nx.dev&#34;&gt;&lt;img src=&#34;https://avatars.githubusercontent.com/u/23692104&#34; alt=&#34;Nx&#34; height=&#34;32&#34;&gt;&lt;/a&gt; &lt;a href=&#34;https://opensource.mercedes-benz.com/&#34;&gt;&lt;img src=&#34;https://avatars.githubusercontent.com/u/34240465&#34; alt=&#34;Mercedes-Benz Group&#34; height=&#34;32&#34;&gt;&lt;/a&gt; &lt;a href=&#34;https://herocoders.com&#34;&gt;&lt;img src=&#34;https://avatars.githubusercontent.com/u/37549774&#34; alt=&#34;HeroCoders&#34; height=&#34;32&#34;&gt;&lt;/a&gt; &lt;a href=&#34;https://www.lambdatest.com&#34;&gt;&lt;img src=&#34;https://avatars.githubusercontent.com/u/171592363&#34; alt=&#34;LambdaTest&#34; height=&#34;32&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;Technology Sponsors&lt;/h3&gt;
Technology sponsors allow us to use their products and services for free as part of a contribution to the open source ecosystem and our work.
&lt;p&gt;&lt;a href=&#34;https://netlify.com&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/eslint/eslint.org/main/src/assets/images/techsponsors/netlify-icon.svg&#34; alt=&#34;Netlify&#34; height=&#34;32&#34;&gt;&lt;/a&gt; &lt;a href=&#34;https://algolia.com&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/eslint/eslint.org/main/src/assets/images/techsponsors/algolia-icon.svg&#34; alt=&#34;Algolia&#34; height=&#34;32&#34;&gt;&lt;/a&gt; &lt;a href=&#34;https://1password.com&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/eslint/eslint.org/main/src/assets/images/techsponsors/1password-icon.svg&#34; alt=&#34;1Password&#34; height=&#34;32&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;!--sponsorsend--&gt;
</description>
        </item>
        <item>
        <title>LazyVim</title>
        <link>https://producthunt.programnotes.cn/en/p/lazyvim/</link>
        <pubDate>Mon, 22 Sep 2025 15:30:38 +0800</pubDate>
        
        <guid>https://producthunt.programnotes.cn/en/p/lazyvim/</guid>
        <description>&lt;img src="https://images.unsplash.com/photo-1590024229925-4c7bc9d982ef?ixid=M3w0NjAwMjJ8MHwxfHJhbmRvbXx8fHx8fHx8fDE3NTg1MjYxOTV8&amp;ixlib=rb-4.1.0" alt="Featured image of post LazyVim" /&gt;&lt;h1 id=&#34;lazyvimlazyvim&#34;&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/LazyVim/LazyVim&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;LazyVim/LazyVim&lt;/a&gt;
&lt;/h1&gt;&lt;div align=&#34;center&#34;&gt;
  &lt;img src=&#34;https://user-images.githubusercontent.com/292349/213446185-2db63fd5-8c84-459c-9f04-e286382d6e80.png&#34;&gt;
&lt;/div&gt;
&lt;hr&gt;
&lt;h4 align=&#34;center&#34;&gt;
  &lt;a href=&#34;https://lazyvim.github.io/installation&#34;&gt;Install&lt;/a&gt;
  ·
  &lt;a href=&#34;https://lazyvim.github.io/configuration&#34;&gt;Configure&lt;/a&gt;
  ·
  &lt;a href=&#34;https://lazyvim.github.io&#34;&gt;Docs&lt;/a&gt;
&lt;/h4&gt;
&lt;div align=&#34;center&#34;&gt;&lt;p&gt;
    &lt;a href=&#34;https://github.com/LazyVim/LazyVim/releases/latest&#34;&gt;
      &lt;img alt=&#34;Latest release&#34; src=&#34;https://img.shields.io/github/v/release/LazyVim/LazyVim?style=for-the-badge&amp;logo=starship&amp;color=C9CBFF&amp;logoColor=D9E0EE&amp;labelColor=302D41&amp;include_prerelease&amp;sort=semver&#34; /&gt;
    &lt;/a&gt;
    &lt;a href=&#34;https://github.com/LazyVim/LazyVim/pulse&#34;&gt;
      &lt;img alt=&#34;Last commit&#34; src=&#34;https://img.shields.io/github/last-commit/LazyVim/LazyVim?style=for-the-badge&amp;logo=starship&amp;color=8bd5ca&amp;logoColor=D9E0EE&amp;labelColor=302D41&#34;/&gt;
    &lt;/a&gt;
    &lt;a href=&#34;https://github.com/LazyVim/LazyVim/blob/main/LICENSE&#34;&gt;
      &lt;img alt=&#34;License&#34; src=&#34;https://img.shields.io/github/license/LazyVim/LazyVim?style=for-the-badge&amp;logo=starship&amp;color=ee999f&amp;logoColor=D9E0EE&amp;labelColor=302D41&#34; /&gt;
    &lt;/a&gt;
    &lt;a href=&#34;https://github.com/LazyVim/LazyVim/stargazers&#34;&gt;
      &lt;img alt=&#34;Stars&#34; src=&#34;https://img.shields.io/github/stars/LazyVim/LazyVim?style=for-the-badge&amp;logo=starship&amp;color=c69ff5&amp;logoColor=D9E0EE&amp;labelColor=302D41&#34; /&gt;
    &lt;/a&gt;
    &lt;a href=&#34;https://github.com/LazyVim/LazyVim/issues&#34;&gt;
      &lt;img alt=&#34;Issues&#34; src=&#34;https://img.shields.io/github/issues/LazyVim/LazyVim?style=for-the-badge&amp;logo=bilibili&amp;color=F5E0DC&amp;logoColor=D9E0EE&amp;labelColor=302D41&#34; /&gt;
    &lt;/a&gt;
    &lt;a href=&#34;https://github.com/LazyVim/LazyVim&#34;&gt;
      &lt;img alt=&#34;Repo Size&#34; src=&#34;https://img.shields.io/github/repo-size/LazyVim/LazyVim?color=%23DDB6F2&amp;label=SIZE&amp;logo=codesandbox&amp;style=for-the-badge&amp;logoColor=D9E0EE&amp;labelColor=302D41&#34; /&gt;
    &lt;/a&gt;
    &lt;a href=&#34;https://twitter.com/intent/follow?screen_name=folke&#34;&gt;
      &lt;img alt=&#34;follow on Twitter&#34; src=&#34;https://img.shields.io/twitter/follow/folke?style=for-the-badge&amp;logo=twitter&amp;color=8aadf3&amp;logoColor=D9E0EE&amp;labelColor=302D41&#34; /&gt;
    &lt;/a&gt;
&lt;/div&gt;
&lt;p&gt;LazyVim is a Neovim setup powered by &lt;a class=&#34;link&#34; href=&#34;https://github.com/folke/lazy.nvim&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;💤 lazy.nvim&lt;/a&gt;
to make it easy to customize and extend your config.
Rather than having to choose between starting from scratch or using a
pre-made distro, LazyVim offers the best of both worlds - the flexibility
to tweak your config as needed, along with the convenience of a pre-configured setup.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://user-images.githubusercontent.com/292349/211285846-0b7bb3bf-0462-4029-b64c-4ee1d037fc1c.png&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;image&#34;
	
	
&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://user-images.githubusercontent.com/292349/213447056-92290767-ea16-430c-8727-ce994c93e9cc.png&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;image&#34;
	
	
&gt;&lt;/p&gt;
&lt;h2 id=&#34;-features&#34;&gt;✨ Features
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;🔥 Transform your Neovim into a full-fledged IDE&lt;/li&gt;
&lt;li&gt;💤 Easily customize and extend your config with &lt;a class=&#34;link&#34; href=&#34;https://github.com/folke/lazy.nvim&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;lazy.nvim&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;🚀 Blazingly fast&lt;/li&gt;
&lt;li&gt;🧹 Sane default settings for options, autocmds, and keymaps&lt;/li&gt;
&lt;li&gt;📦 Comes with a wealth of plugins pre-configured and ready to use&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;-requirements&#34;&gt;⚡️ Requirements
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Neovim &amp;gt;= &lt;strong&gt;0.11.2&lt;/strong&gt; (needs to be built with &lt;strong&gt;LuaJIT&lt;/strong&gt;)&lt;/li&gt;
&lt;li&gt;Git &amp;gt;= &lt;strong&gt;2.19.0&lt;/strong&gt; (for partial clones support)&lt;/li&gt;
&lt;li&gt;a &lt;a class=&#34;link&#34; href=&#34;https://www.nerdfonts.com/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Nerd Font&lt;/a&gt; &lt;strong&gt;&lt;em&gt;(optional)&lt;/em&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;a &lt;strong&gt;C&lt;/strong&gt; compiler for &lt;code&gt;nvim-treesitter&lt;/code&gt;. See &lt;a class=&#34;link&#34; href=&#34;https://github.com/nvim-treesitter/nvim-treesitter#requirements&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;here&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;-getting-started&#34;&gt;🚀 Getting Started
&lt;/h2&gt;&lt;p&gt;You can find a starter template for &lt;strong&gt;LazyVim&lt;/strong&gt; &lt;a class=&#34;link&#34; href=&#34;https://github.com/LazyVim/starter&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;here&lt;/a&gt;&lt;/p&gt;
&lt;details&gt;&lt;summary&gt;Try it with Docker&lt;/summary&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;6
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;docker run -w /root -it --rm alpine:edge sh -uelic &lt;span class=&#34;s1&#34;&gt;&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;  apk add git lazygit fzf curl neovim ripgrep alpine-sdk --update
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;  git clone https://github.com/LazyVim/starter ~/.config/nvim
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;  cd ~/.config/nvim
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;  nvim
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;/details&gt;
&lt;details&gt;&lt;summary&gt;Install the &lt;a href=&#34;https://github.com/LazyVim/starter&#34;&gt;LazyVim Starter&lt;/a&gt;&lt;/summary&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Make a backup of your current Neovim files:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mv ~/.config/nvim ~/.config/nvim.bak
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mv ~/.local/share/nvim ~/.local/share/nvim.bak
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Clone the starter&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git clone https://github.com/LazyVim/starter ~/.config/nvim
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Remove the &lt;code&gt;.git&lt;/code&gt; folder, so you can add it to your own repo later&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;rm -rf ~/.config/nvim/.git
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Start Neovim!&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;nvim
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Refer to the comments in the files on how to customize &lt;strong&gt;LazyVim&lt;/strong&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/details&gt;
&lt;hr&gt;
&lt;p&gt;There&amp;rsquo;s a great video created by &lt;a class=&#34;link&#34; href=&#34;https://github.com/elijahmanor&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;@elijahmanor&lt;/a&gt; with a walkthrough to get started.&lt;/p&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://www.youtube.com/watch?v=N93cTbtLCIM&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;&lt;img src=&#34;https://img.youtube.com/vi/N93cTbtLCIM/hqdefault.jpg&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;Watch the video&#34;
	
	
&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/dusty-phillips&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;@dusty-phillips&lt;/a&gt; wrote a comprehensive book called
&lt;a class=&#34;link&#34; href=&#34;https://lazyvim-ambitious-devs.phillips.codes&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;LazyVim for Ambitious Developers&lt;/a&gt;
available for free online.&lt;/p&gt;
&lt;h2 id=&#34;-file-structure&#34;&gt;📂 File Structure
&lt;/h2&gt;&lt;p&gt;The files under config will be automatically loaded at the appropriate time,
so you don&amp;rsquo;t need to require those files manually.
&lt;strong&gt;LazyVim&lt;/strong&gt; comes with a set of default config files that will be loaded
&lt;strong&gt;&lt;em&gt;before&lt;/em&gt;&lt;/strong&gt; your own. See &lt;a class=&#34;link&#34; href=&#34;https://github.com/LazyVim/LazyVim/tree/main/lua/lazyvim/config&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;here&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;You can add your custom plugin specs under &lt;code&gt;lua/plugins/&lt;/code&gt;. All files there
will be automatically loaded by &lt;a class=&#34;link&#34; href=&#34;https://github.com/folke/lazy.nvim&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;lazy.nvim&lt;/a&gt;&lt;/p&gt;
&lt;pre&gt;
~/.config/nvim
├── lua
│   ├── config
│   │   ├── autocmds.lua
│   │   ├── keymaps.lua
│   │   ├── lazy.lua
│   │   └── options.lua
│   └── plugins
│       ├── spec1.lua
│       ├── **
│       └── spec2.lua
└── init.lua
&lt;/pre&gt;
&lt;h2 id=&#34;-configuration&#34;&gt;⚙️ Configuration
&lt;/h2&gt;&lt;p&gt;Refer to the &lt;a class=&#34;link&#34; href=&#34;https://lazyvim.github.io&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;docs&lt;/a&gt;&lt;/p&gt;
</description>
        </item>
        <item>
        <title>better-auth</title>
        <link>https://producthunt.programnotes.cn/en/p/better-auth/</link>
        <pubDate>Wed, 23 Jul 2025 15:34:42 +0800</pubDate>
        
        <guid>https://producthunt.programnotes.cn/en/p/better-auth/</guid>
        <description>&lt;img src="https://images.unsplash.com/photo-1632168305415-6c6c6079ff24?ixid=M3w0NjAwMjJ8MHwxfHJhbmRvbXx8fHx8fHx8fDE3NTMyNTYwMTZ8&amp;ixlib=rb-4.1.0" alt="Featured image of post better-auth" /&gt;&lt;h1 id=&#34;better-authbetter-auth&#34;&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/better-auth/better-auth&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;better-auth/better-auth&lt;/a&gt;
&lt;/h1&gt;&lt;p align=&#34;center&#34;&gt;
  &lt;picture&gt;
    &lt;source srcset=&#34;./banner-dark.png&#34; media=&#34;(prefers-color-scheme: dark)&#34;&gt;
    &lt;source srcset=&#34;./banner.png&#34; media=&#34;(prefers-color-scheme: light)&#34;&gt;
    &lt;img src=&#34;./banner.png&#34; alt=&#34;Better Auth Logo&#34;&gt;
  &lt;/picture&gt;
  &lt;h2 align=&#34;center&#34;&gt;
    Better Auth
  &lt;/h2&gt;
  &lt;p align=&#34;center&#34;&gt;
    The most comprehensive authentication library for TypeScript
    &lt;br /&gt;
    &lt;a href=&#34;https://better-auth.com&#34;&gt;&lt;strong&gt;Learn more »&lt;/strong&gt;&lt;/a&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;a href=&#34;https://discord.gg/better-auth&#34;&gt;Discord&lt;/a&gt;
    ·
    &lt;a href=&#34;https://better-auth.com&#34;&gt;Website&lt;/a&gt;
    ·
    &lt;a href=&#34;https://github.com/better-auth/better-auth/issues&#34;&gt;Issues&lt;/a&gt;
  &lt;/p&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://npm.chart.dev/better-auth?primary=neutral&amp;amp;gray=neutral&amp;amp;theme=dark&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;&lt;img src=&#34;https://img.shields.io/npm/dm/better-auth&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;npm&#34;
	
	
&gt;&lt;/a&gt;
&lt;a class=&#34;link&#34; href=&#34;https://www.npmjs.com/package/better-auth&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;&lt;img src=&#34;https://img.shields.io/npm/v/better-auth.svg&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;npm version&#34;
	
	
&gt;&lt;/a&gt;
&lt;a class=&#34;link&#34; href=&#34;https://github.com/better-auth/better-auth/stargazers&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;&lt;img src=&#34;https://img.shields.io/github/stars/better-auth/better-auth&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;GitHub stars&#34;
	
	
&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/p&gt;
&lt;h2 id=&#34;about-the-project&#34;&gt;About the Project
&lt;/h2&gt;&lt;p&gt;Better Auth is framework-agnostic authentication (and authorization) library for TypeScript. It provides a comprehensive set of features out of the box and includes a plugin ecosystem that simplifies adding advanced functionalities with minimal code in short amount of time. Whether you need 2FA, multi-tenant support, or other complex features. It lets you focus on building your actual application instead of reinventing the wheel.&lt;/p&gt;
&lt;h3 id=&#34;why-better-auth&#34;&gt;Why Better Auth
&lt;/h3&gt;&lt;p&gt;Authentication in the TypeScript ecosystem is a half-solved problem. Other open-source libraries often requires a lot of additional code for anything beyond basic authentication. Rather than just pushing third-party services as the solution, I believe we can do better as a community—hence, Better Auth.&lt;/p&gt;
&lt;h2 id=&#34;contribution&#34;&gt;Contribution
&lt;/h2&gt;&lt;p&gt;Better Auth is free and open source project licensed under the &lt;a class=&#34;link&#34; href=&#34;./LICENSE.md&#34; &gt;MIT License&lt;/a&gt;. You are free to do whatever you want with it.&lt;/p&gt;
&lt;p&gt;You could help continuing its development by:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;./CONTRIBUTING.md&#34; &gt;Contribute to the source code&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/better-auth/better-auth/issues&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Suggest new features and report issues&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;security&#34;&gt;Security
&lt;/h2&gt;&lt;p&gt;If you discover a security vulnerability within Better Auth, please send an e-mail to &lt;a class=&#34;link&#34; href=&#34;mailto:security@better-auth.com&#34; &gt;security@better-auth.com&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;All reports will be promptly addressed, and you&amp;rsquo;ll be credited accordingly.&lt;/p&gt;
</description>
        </item>
        <item>
        <title>youtube-music</title>
        <link>https://producthunt.programnotes.cn/en/p/youtube-music/</link>
        <pubDate>Wed, 09 Jul 2025 15:30:58 +0800</pubDate>
        
        <guid>https://producthunt.programnotes.cn/en/p/youtube-music/</guid>
        <description>&lt;img src="https://images.unsplash.com/photo-1593073231604-85ef405c1b0b?ixid=M3w0NjAwMjJ8MHwxfHJhbmRvbXx8fHx8fHx8fDE3NTIwNDYyMzF8&amp;ixlib=rb-4.1.0" alt="Featured image of post youtube-music" /&gt;&lt;h1 id=&#34;th-chyoutube-music&#34;&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/th-ch/youtube-music&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;th-ch/youtube-music&lt;/a&gt;
&lt;/h1&gt;&lt;div align=&#34;center&#34;&gt;
&lt;h1 id=&#34;youtube-music&#34;&gt;YouTube Music
&lt;/h1&gt;&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/th-ch/youtube-music/releases/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;&lt;img src=&#34;https://img.shields.io/github/release/th-ch/youtube-music.svg?style=for-the-badge&amp;amp;logo=youtube-music&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;GitHub release&#34;
	
	
&gt;&lt;/a&gt;
&lt;a class=&#34;link&#34; href=&#34;https://github.com/th-ch/youtube-music/blob/master/license&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;&lt;img src=&#34;https://img.shields.io/github/license/th-ch/youtube-music.svg?style=for-the-badge&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;GitHub license&#34;
	
	
&gt;&lt;/a&gt;
&lt;a class=&#34;link&#34; href=&#34;https://github.com/th-ch/youtube-music/blob/master/eslint.config.mjs&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;&lt;img src=&#34;https://img.shields.io/badge/code_style-eslint-5ed9c7.svg?style=for-the-badge&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;eslint code style&#34;
	
	
&gt;&lt;/a&gt;
&lt;a class=&#34;link&#34; href=&#34;https://GitHub.com/th-ch/youtube-music/releases/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;&lt;img src=&#34;https://img.shields.io/github/actions/workflow/status/th-ch/youtube-music/build.yml?branch=master&amp;amp;style=for-the-badge&amp;amp;logo=youtube-music&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;Build status&#34;
	
	
&gt;&lt;/a&gt;
&lt;a class=&#34;link&#34; href=&#34;https://GitHub.com/th-ch/youtube-music/releases/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;&lt;img src=&#34;https://img.shields.io/github/downloads/th-ch/youtube-music/total?style=for-the-badge&amp;amp;logo=youtube-music&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;GitHub All Releases&#34;
	
	
&gt;&lt;/a&gt;
&lt;a class=&#34;link&#34; href=&#34;https://aur.archlinux.org/packages/youtube-music-bin&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;&lt;img src=&#34;https://img.shields.io/aur/version/youtube-music-bin?color=blueviolet&amp;amp;style=for-the-badge&amp;amp;logo=youtube-music&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;AUR&#34;
	
	
&gt;&lt;/a&gt;
&lt;a class=&#34;link&#34; href=&#34;https://snyk.io/test/github/th-ch/youtube-music&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;&lt;img src=&#34;https://snyk.io/test/github/th-ch/youtube-music/badge.svg&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;Known Vulnerabilities&#34;
	
	
&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;&lt;img src=&#34;https://producthunt.programnotes.cn/web/screenshot.png&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;Screenshot&#34;
	
	
&gt;&lt;/p&gt;
&lt;div align=&#34;center&#34;&gt;
	&lt;a href=&#34;https://github.com/th-ch/youtube-music/releases/latest&#34;&gt;
		&lt;img src=&#34;web/youtube-music.svg&#34; width=&#34;400&#34; height=&#34;100&#34; alt=&#34;YouTube Music SVG&#34;&gt;
	&lt;/a&gt;
&lt;/div&gt;
&lt;p&gt;Read this in other languages: &lt;a class=&#34;link&#34; href=&#34;./docs/readme/README-ko.md&#34; &gt;한국어&lt;/a&gt;, &lt;a class=&#34;link&#34; href=&#34;./docs/readme/README-fr.md&#34; &gt;Française&lt;/a&gt;, &lt;a class=&#34;link&#34; href=&#34;./docs/readme/README-is.md&#34; &gt;Íslenska&lt;/a&gt;, &lt;a class=&#34;link&#34; href=&#34;./docs/readme/README-es.md&#34; &gt;Español&lt;/a&gt;, &lt;a class=&#34;link&#34; href=&#34;./docs/readme/README-ru.md&#34; &gt;Pусский&lt;/a&gt;, &lt;a class=&#34;link&#34; href=&#34;./docs/readme/README-uk.md&#34; &gt;Українська&lt;/a&gt;, &lt;a class=&#34;link&#34; href=&#34;./docs/readme/README-hu.md&#34; &gt;Magyar&lt;/a&gt;, &lt;a class=&#34;link&#34; href=&#34;./docs/readme/README-pt.md&#34; &gt;Português&lt;/a&gt;, &lt;a class=&#34;link&#34; href=&#34;./docs/readme/README-ja.md&#34; &gt;日本語&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Electron wrapper around YouTube Music featuring:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Native look &amp;amp; feel, aims at keeping the original interface&lt;/li&gt;
&lt;li&gt;Framework for custom plugins: change YouTube Music to your needs (style, content, features), enable/disable plugins in
one click&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;demo-image&#34;&gt;Demo Image
&lt;/h2&gt;&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th style=&#34;text-align: center&#34;&gt;Player Screen (album color theme &amp;amp; ambient light)&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;&lt;img src=&#34;https://github.com/th-ch/youtube-music/assets/16558115/53efdf73-b8fa-4d7b-a235-b96b91ea77fc&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;Screenshot1&#34;
	
	
&gt;&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&#34;content&#34;&gt;Content
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;#features&#34; &gt;Features&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;#available-plugins&#34; &gt;Available plugins&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;#translation&#34; &gt;Translation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;#download&#34; &gt;Download&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;#arch-linux&#34; &gt;Arch Linux&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;#macos&#34; &gt;MacOS&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;#windows&#34; &gt;Windows&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;#how-to-install-without-a-network-connection-in-windows&#34; &gt;How to install without a network connection? (in Windows)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;#themes&#34; &gt;Themes&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;#dev&#34; &gt;Dev&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;#build-your-own-plugins&#34; &gt;Build your own plugins&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;#creating-a-plugin&#34; &gt;Creating a plugin&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;#common-use-cases&#34; &gt;Common use cases&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;#build&#34; &gt;Build&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;#production-preview&#34; &gt;Production Preview&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;#tests&#34; &gt;Tests&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;#license&#34; &gt;License&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;#faq&#34; &gt;FAQ&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;features&#34;&gt;Features:
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Auto confirm when paused&lt;/strong&gt; (Always Enabled): disable
the &lt;a class=&#34;link&#34; href=&#34;https://user-images.githubusercontent.com/61631665/129977894-01c60740-7ec6-4bf0-9a2c-25da24491b0e.png&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;&amp;ldquo;Continue Watching?&amp;rdquo;&lt;/a&gt;
popup that pause music after a certain time&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;And more &amp;hellip;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;available-plugins&#34;&gt;Available plugins:
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Ad Blocker&lt;/strong&gt;: Block all ads and tracking out of the box&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Album Actions&lt;/strong&gt;: Adds Undislike, Dislike, Like, and Unlike buttons to apply this to all songs in a playlist or album&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Album Color Theme&lt;/strong&gt;: Applies a dynamic theme and visual effects based on the album color palette&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Ambient Mode&lt;/strong&gt;: Applies a lighting effect by casting gentle colors from the video, into your screen’s background&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Audio Compressor&lt;/strong&gt;: Apply compression to audio (lowers the volume of the loudest parts of the signal and raises the
volume of the softest parts)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Blur Navigation Bar&lt;/strong&gt;: makes navigation bar transparent and blurry&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Bypass Age Restrictions&lt;/strong&gt;: bypass YouTube&amp;rsquo;s age verification&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Captions Selector&lt;/strong&gt;: Enable captions&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Compact Sidebar&lt;/strong&gt;: Always set the sidebar in compact mode&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Crossfade&lt;/strong&gt;: Crossfade between songs&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Disable Autoplay&lt;/strong&gt;: Makes every song start in &amp;ldquo;paused&amp;rdquo; mode&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;a class=&#34;link&#34; href=&#34;https://discord.com/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Discord&lt;/a&gt; Rich Presence&lt;/strong&gt;: Show your friends what you listen to
with &lt;a class=&#34;link&#34; href=&#34;https://user-images.githubusercontent.com/28219076/104362104-a7a0b980-5513-11eb-9744-bb89eabe0016.png&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Rich Presence&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Downloader&lt;/strong&gt;: downloads
MP3 &lt;a class=&#34;link&#34; href=&#34;https://user-images.githubusercontent.com/61631665/129977677-83a7d067-c192-45e1-98ae-b5a4927393be.png&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;directly from the interface&lt;/a&gt; &lt;a class=&#34;link&#34; href=&#34;https://github.com/ytdl-org/youtube-dl&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;(youtube-dl)&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Equalizer&lt;/strong&gt;: add filters to boost or cut specific range of frequencies (e.g. bass booster)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Exponential Volume&lt;/strong&gt;: Makes the volume
slider &lt;a class=&#34;link&#34; href=&#34;https://greasyfork.org/en/scripts/397686-youtube-music-fix-volume-ratio/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;exponential&lt;/a&gt; so it&amp;rsquo;s easier to
select lower volumes&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;In-App Menu&lt;/strong&gt;: &lt;a class=&#34;link&#34; href=&#34;https://user-images.githubusercontent.com/78568641/112215894-923dbf00-8c29-11eb-95c3-3ce15db27eca.png&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;gives bars a fancy, dark look&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;(see &lt;a class=&#34;link&#34; href=&#34;https://github.com/th-ch/youtube-music/issues/410#issuecomment-952060709&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;this post&lt;/a&gt; if you have problem
accessing the menu after enabling this plugin and hide-menu option)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Scrobbler&lt;/strong&gt;: Adds scrobbling support for &lt;a class=&#34;link&#34; href=&#34;https://www.last.fm/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Last.fm&lt;/a&gt; and &lt;a class=&#34;link&#34; href=&#34;https://listenbrainz.org/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;ListenBrainz&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Lumia Stream&lt;/strong&gt;: Adds &lt;a class=&#34;link&#34; href=&#34;https://lumiastream.com/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Lumia Stream&lt;/a&gt; support&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Lyrics Genius&lt;/strong&gt;: Adds lyrics support for most songs&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Music Together&lt;/strong&gt;: Share a playlist with others. When the host plays a song, everyone else will hear the same song&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Navigation&lt;/strong&gt;: Next/Back navigation arrows directly integrated in the interface, like in your favorite browser&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;No Google Login&lt;/strong&gt;: Remove Google login buttons and links from the interface&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Notifications&lt;/strong&gt;: Display a notification when a song starts
playing (&lt;a class=&#34;link&#34; href=&#34;https://user-images.githubusercontent.com/78568641/114102651-63ce0e00-98d0-11eb-9dfe-c5a02bb54f9c.png&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;interactive notifications&lt;/a&gt;
are available on windows)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Picture-in-picture&lt;/strong&gt;: allows to switch the app to picture-in-picture mode&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Playback Speed&lt;/strong&gt;: Listen fast, listen
slow! &lt;a class=&#34;link&#34; href=&#34;https://user-images.githubusercontent.com/61631665/129976003-e55db5ba-bf42-448c-a059-26a009775e68.png&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Adds a slider that controls song speed&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Precise Volume&lt;/strong&gt;: Control the volume precisely using mousewheel/hotkeys, with a custom hud and customizable volume
steps&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Shortcuts (&amp;amp; MPRIS)&lt;/strong&gt;: Allows setting global hotkeys for playback (play/pause/next/previous) +
disable &lt;a class=&#34;link&#34; href=&#34;https://user-images.githubusercontent.com/84923831/128601225-afa38c1f-dea8-4209-9f72-0f84c1dd8b54.png&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;media osd&lt;/a&gt;
by overriding media keys + enable Ctrl/CMD + F to search + enable linux mpris support for
mediakeys + &lt;a class=&#34;link&#34; href=&#34;https://github.com/Araxeus/youtube-music/blob/1e591d6a3df98449bcda6e63baab249b28026148/providers/song-controls.js#L13-L50&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;custom hotkeys&lt;/a&gt;
for &lt;a class=&#34;link&#34; href=&#34;https://github.com/th-ch/youtube-music/issues/106#issuecomment-952156902&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;advanced users&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Skip Disliked Song&lt;/strong&gt;: Skips disliked songs&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Skip Silences&lt;/strong&gt;: Automatically skip silenced sections&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/ajayyy/SponsorBlock&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;&lt;strong&gt;SponsorBlock&lt;/strong&gt;&lt;/a&gt;: Automatically Skips non-music parts like intro/outro or
parts of music videos where the song isn&amp;rsquo;t playing&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Synced Lyrics&lt;/strong&gt;: Provides synced lyrics to songs, using providers like &lt;a class=&#34;link&#34; href=&#34;https://lrclib.net&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;LRClib&lt;/a&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Taskbar Media Control&lt;/strong&gt;: Control playback from
your &lt;a class=&#34;link&#34; href=&#34;https://user-images.githubusercontent.com/78568641/111916130-24a35e80-8a82-11eb-80c8-5021c1aa27f4.png&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Windows taskbar&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;TouchBar&lt;/strong&gt;: Custom TouchBar layout for macOS&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Tuna OBS&lt;/strong&gt;: Integration with &lt;a class=&#34;link&#34; href=&#34;https://obsproject.com/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;OBS&lt;/a&gt;&amp;rsquo;s
plugin &lt;a class=&#34;link&#34; href=&#34;https://obsproject.com/forum/resources/tuna.843/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Tuna&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Unobtrusive Player&lt;/strong&gt;: Prevents the player from popping up when playing a song&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Video Quality Changer&lt;/strong&gt;: Allows changing the video quality with
a &lt;a class=&#34;link&#34; href=&#34;https://user-images.githubusercontent.com/78568641/138574366-70324a5e-2d64-4f6a-acdd-dc2a2b9cecc5.png&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;button&lt;/a&gt; on
the video overlay&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Video Toggle&lt;/strong&gt;: Adds
a &lt;a class=&#34;link&#34; href=&#34;https://user-images.githubusercontent.com/28893833/173663950-63e6610e-a532-49b7-9afa-54cb57ddfc15.png&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;button&lt;/a&gt; to
switch between Video/Song mode. can also optionally remove the whole video tab&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Visualizer&lt;/strong&gt;: Different music visualizers&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;translation&#34;&gt;Translation
&lt;/h2&gt;&lt;p&gt;You can help with translation on &lt;a class=&#34;link&#34; href=&#34;https://hosted.weblate.org/projects/youtube-music/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Hosted Weblate&lt;/a&gt;.&lt;/p&gt;
&lt;a href=&#34;https://hosted.weblate.org/engage/youtube-music/&#34;&gt;
  &lt;img src=&#34;https://hosted.weblate.org/widget/youtube-music/i18n/multi-auto.svg&#34; alt=&#34;translation status&#34; /&gt;
  &lt;img src=&#34;https://hosted.weblate.org/widget/youtube-music/i18n/287x66-black.png&#34; alt=&#34;translation status 2&#34; /&gt;
&lt;/a&gt;
&lt;h2 id=&#34;download&#34;&gt;Download
&lt;/h2&gt;&lt;p&gt;You can check out the &lt;a class=&#34;link&#34; href=&#34;https://github.com/th-ch/youtube-music/releases/latest&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;latest release&lt;/a&gt; to quickly find the
latest version.&lt;/p&gt;
&lt;h3 id=&#34;arch-linux&#34;&gt;Arch Linux
&lt;/h3&gt;&lt;p&gt;Install the &lt;a class=&#34;link&#34; href=&#34;https://aur.archlinux.org/packages/youtube-music-bin&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;&lt;code&gt;youtube-music-bin&lt;/code&gt;&lt;/a&gt; package from the AUR. For AUR installation instructions, take a look at
this &lt;a class=&#34;link&#34; href=&#34;https://wiki.archlinux.org/index.php/Arch_User_Repository#Installing_packages&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;wiki page&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id=&#34;macos&#34;&gt;macOS
&lt;/h3&gt;&lt;p&gt;You can install the app using Homebrew (see the &lt;a class=&#34;link&#34; href=&#34;https://github.com/th-ch/homebrew-youtube-music&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;cask definition&lt;/a&gt;):&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;brew install th-ch/youtube-music/youtube-music
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;If you install the app manually and get an error &amp;ldquo;is damaged and can’t be opened.&amp;rdquo; when launching the app, run the following in the Terminal:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/usr/bin/xattr -cr /Applications/YouTube&lt;span class=&#34;se&#34;&gt;\ &lt;/span&gt;Music.app
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id=&#34;windows&#34;&gt;Windows
&lt;/h3&gt;&lt;p&gt;You can use the &lt;a class=&#34;link&#34; href=&#34;https://scoop.sh&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Scoop package manager&lt;/a&gt; to install the &lt;code&gt;youtube-music&lt;/code&gt; package from
the &lt;a class=&#34;link&#34; href=&#34;https://github.com/ScoopInstaller/Extras&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;&lt;code&gt;extras&lt;/code&gt; bucket&lt;/a&gt;.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;scoop bucket add extras
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;scoop install extras/youtube-music
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Alternately you can use &lt;a class=&#34;link&#34; href=&#34;https://learn.microsoft.com/en-us/windows/package-manager/winget/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Winget&lt;/a&gt;, Windows 11s
official CLI package manager to install the &lt;code&gt;th-ch.YouTubeMusic&lt;/code&gt; package.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Note: Microsoft Defender SmartScreen might block the installation since it is from an &amp;ldquo;unknown publisher&amp;rdquo;. This is also
true for the manual installation when trying to run the executable(.exe) after a manual download here on github (same
file).&lt;/em&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;winget install th-ch.YouTubeMusic
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h4 id=&#34;how-to-install-without-a-network-connection-in-windows&#34;&gt;How to install without a network connection? (in Windows)
&lt;/h4&gt;&lt;ul&gt;
&lt;li&gt;Download the &lt;code&gt;*.nsis.7z&lt;/code&gt; file for &lt;em&gt;your device architecture&lt;/em&gt; in &lt;a class=&#34;link&#34; href=&#34;https://github.com/th-ch/youtube-music/releases/latest&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;release page&lt;/a&gt;.
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;x64&lt;/code&gt; for 64-bit Windows&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ia32&lt;/code&gt; for 32-bit Windows&lt;/li&gt;
&lt;li&gt;&lt;code&gt;arm64&lt;/code&gt; for ARM64 Windows&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Download installer in release page. (&lt;code&gt;*-Setup.exe&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Place them in the &lt;strong&gt;same directory&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Run the installer.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;themes&#34;&gt;Themes
&lt;/h2&gt;&lt;p&gt;You can load CSS files to change the look of the application (Options &amp;gt; Visual Tweaks &amp;gt; Themes).&lt;/p&gt;
&lt;p&gt;Some predefined themes are available in &lt;a class=&#34;link&#34; href=&#34;https://github.com/kerichdev/themes-for-ytmdesktop-player&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://github.com/kerichdev/themes-for-ytmdesktop-player&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&#34;dev&#34;&gt;Dev
&lt;/h2&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git clone https://github.com/th-ch/youtube-music
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; youtube-music
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pnpm install --frozen-lockfile
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pnpm dev
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id=&#34;build-your-own-plugins&#34;&gt;Build your own plugins
&lt;/h2&gt;&lt;p&gt;Using plugins, you can:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;manipulate the app - the &lt;code&gt;BrowserWindow&lt;/code&gt; from electron is passed to the plugin handler&lt;/li&gt;
&lt;li&gt;change the front by manipulating the HTML/CSS&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;creating-a-plugin&#34;&gt;Creating a plugin
&lt;/h3&gt;&lt;p&gt;Create a folder in &lt;code&gt;src/plugins/YOUR-PLUGIN-NAME&lt;/code&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;index.ts&lt;/code&gt;: the main file of the plugin&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt; 1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 8
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 9
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;10
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;11
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;12
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;13
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;14
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;15
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;16
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;17
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;18
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;19
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;20
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;21
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;22
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;23
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;24
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;25
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;26
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;27
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;28
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;29
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;30
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;31
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;32
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;33
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;34
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;35
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;36
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;37
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;38
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;39
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;40
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;41
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;42
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;43
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;44
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;45
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;46
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;47
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;48
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;49
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;50
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;51
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;52
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;53
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;54
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;55
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;56
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;57
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;58
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;59
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;60
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;61
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;62
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-typescript&#34; data-lang=&#34;typescript&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kr&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;style&lt;/span&gt; &lt;span class=&#34;kr&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;./style.css?inline&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;// import style as inline
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kr&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;createPlugin&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt; &lt;span class=&#34;kr&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;@/utils&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kr&#34;&gt;export&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;default&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;createPlugin&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;({&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nx&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;Plugin Label&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nx&#34;&gt;restartNeeded&lt;/span&gt;: &lt;span class=&#34;kt&#34;&gt;true&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;// if value is true, ytmusic show restart dialog
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nx&#34;&gt;config&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nx&#34;&gt;enabled&lt;/span&gt;: &lt;span class=&#34;kt&#34;&gt;false&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;// your custom config
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nx&#34;&gt;stylesheets&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;style&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;],&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;// your custom style,
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nx&#34;&gt;menu&lt;/span&gt;: &lt;span class=&#34;kt&#34;&gt;async&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;({&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;getConfig&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;setConfig&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;})&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;// All *Config methods are wrapped Promise&amp;lt;T&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;kr&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;config&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;await&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;getConfig&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nx&#34;&gt;label&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;menu&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nx&#34;&gt;submenu&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;].&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;map&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;((&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;value&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;({&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;          &lt;span class=&#34;nx&#34;&gt;label&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;sb&#34;&gt;`value &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;value&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;          &lt;span class=&#34;kr&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;radio&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;          &lt;span class=&#34;nx&#34;&gt;checked&lt;/span&gt;: &lt;span class=&#34;kt&#34;&gt;config.value&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;===&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;value&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;          &lt;span class=&#34;nx&#34;&gt;click() {&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nx&#34;&gt;setConfig&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;({&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;value&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;});&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;          &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;})),&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;];&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nx&#34;&gt;backend&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nx&#34;&gt;start&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;({&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;window&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;ipc&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;})&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;nb&#34;&gt;window&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;maximize&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;c1&#34;&gt;// you can communicate with renderer plugin
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;nx&#34;&gt;ipc&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;handle&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;some-event&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;hello&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;p&#34;&gt;});&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;// it fired when config changed
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nx&#34;&gt;onConfigChange&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;newConfig&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;cm&#34;&gt;/* ... */&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;// it fired when plugin disabled
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nx&#34;&gt;stop&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;context&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;cm&#34;&gt;/* ... */&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nx&#34;&gt;renderer&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;kr&#34;&gt;async&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;start&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;context&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;nx&#34;&gt;console&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;log&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;await&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;context&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;ipc&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;invoke&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;some-event&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;));&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;// Only renderer available hook
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nx&#34;&gt;onPlayerApiReady&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;api&lt;/span&gt;: &lt;span class=&#34;kt&#34;&gt;YoutubePlayer&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;context&lt;/span&gt;: &lt;span class=&#34;kt&#34;&gt;RendererContext&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;c1&#34;&gt;// set plugin config easily
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;nx&#34;&gt;context&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;setConfig&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;({&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;myConfig&lt;/span&gt;: &lt;span class=&#34;kt&#34;&gt;api.getVolume&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;});&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nx&#34;&gt;onConfigChange&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;newConfig&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;cm&#34;&gt;/* ... */&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nx&#34;&gt;stop&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;_context&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;cm&#34;&gt;/* ... */&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nx&#34;&gt;preload&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;kr&#34;&gt;async&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;start&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;({&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;getConfig&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;})&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;kr&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;config&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;await&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;getConfig&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nx&#34;&gt;onConfigChange&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;newConfig&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nx&#34;&gt;stop&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;_context&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;});&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id=&#34;common-use-cases&#34;&gt;Common use cases
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;injecting custom CSS: create a &lt;code&gt;style.css&lt;/code&gt; file in the same folder then:&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt; 1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 8
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 9
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;10
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;11
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;12
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;13
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;14
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-typescript&#34; data-lang=&#34;typescript&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// index.ts
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kr&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;style&lt;/span&gt; &lt;span class=&#34;kr&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;./style.css?inline&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;// import style as inline
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kr&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;createPlugin&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt; &lt;span class=&#34;kr&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;@/utils&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kr&#34;&gt;export&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;default&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;createPlugin&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;({&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nx&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;Plugin Label&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nx&#34;&gt;restartNeeded&lt;/span&gt;: &lt;span class=&#34;kt&#34;&gt;true&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;// if value is true, ytmusic will show a restart dialog
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nx&#34;&gt;config&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nx&#34;&gt;enabled&lt;/span&gt;: &lt;span class=&#34;kt&#34;&gt;false&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;// your custom config
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nx&#34;&gt;stylesheets&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;style&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;],&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;// your custom style
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nx&#34;&gt;renderer() {&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;// define renderer hook
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;});&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;If you want to change the HTML:&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt; 1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 8
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 9
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;10
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;11
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;12
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;13
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-typescript&#34; data-lang=&#34;typescript&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kr&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;createPlugin&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt; &lt;span class=&#34;kr&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;@/utils&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kr&#34;&gt;export&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;default&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;createPlugin&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;({&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nx&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;Plugin Label&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nx&#34;&gt;restartNeeded&lt;/span&gt;: &lt;span class=&#34;kt&#34;&gt;true&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;// if value is true, ytmusic will show the restart dialog
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nx&#34;&gt;config&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nx&#34;&gt;enabled&lt;/span&gt;: &lt;span class=&#34;kt&#34;&gt;false&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;// your custom config
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nx&#34;&gt;renderer() {&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;// Remove the login button
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nb&#34;&gt;document&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;querySelector&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;.sign-in-link.ytmusic-nav-bar&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;).&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;remove&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;// define renderer hook
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;});&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;communicating between the front and back: can be done using the ipcMain module from electron. See &lt;code&gt;index.ts&lt;/code&gt; file and
example in &lt;code&gt;sponsorblock&lt;/code&gt; plugin.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;build&#34;&gt;Build
&lt;/h2&gt;&lt;ol&gt;
&lt;li&gt;Clone the repo&lt;/li&gt;
&lt;li&gt;Follow &lt;a class=&#34;link&#34; href=&#34;https://pnpm.io/installation&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;this guide&lt;/a&gt; to install &lt;code&gt;pnpm&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Run &lt;code&gt;pnpm install --frozen-lockfile&lt;/code&gt; to install dependencies&lt;/li&gt;
&lt;li&gt;Run &lt;code&gt;pnpm build:OS&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;pnpm dist:win&lt;/code&gt; - Windows&lt;/li&gt;
&lt;li&gt;&lt;code&gt;pnpm dist:linux&lt;/code&gt; - Linux (amd64)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;pnpm dist:linux:deb-arm64&lt;/code&gt; - Linux (arm64 for Debian)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;pnpm dist:linux:rpm-arm64&lt;/code&gt; - Linux (arm64 for Fedora)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;pnpm dist:mac&lt;/code&gt; - macOS (amd64)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;pnpm dist:mac:arm64&lt;/code&gt; - macOS (arm64)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Builds the app for macOS, Linux, and Windows,
using &lt;a class=&#34;link&#34; href=&#34;https://github.com/electron-userland/electron-builder&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;electron-builder&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&#34;production-preview&#34;&gt;Production Preview
&lt;/h2&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pnpm start
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id=&#34;tests&#34;&gt;Tests
&lt;/h2&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pnpm &lt;span class=&#34;nb&#34;&gt;test&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Uses &lt;a class=&#34;link&#34; href=&#34;https://playwright.dev/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Playwright&lt;/a&gt; to test the app.&lt;/p&gt;
&lt;h2 id=&#34;license&#34;&gt;License
&lt;/h2&gt;&lt;p&gt;MIT © &lt;a class=&#34;link&#34; href=&#34;https://github.com/th-ch/youtube-music&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;th-ch&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;faq&#34;&gt;FAQ
&lt;/h2&gt;&lt;h3 id=&#34;why-apps-menu-isnt-showing-up&#34;&gt;Why apps menu isn&amp;rsquo;t showing up?
&lt;/h3&gt;&lt;p&gt;If &lt;code&gt;Hide Menu&lt;/code&gt; option is on - you can show the menu with the &lt;kbd&gt;alt&lt;/kbd&gt; key (or &lt;kbd&gt;`&lt;/kbd&gt; [backtick] if using
the in-app-menu plugin)&lt;/p&gt;
</description>
        </item>
        <item>
        <title>Ghost-Downloader-3</title>
        <link>https://producthunt.programnotes.cn/en/p/ghost-downloader-3/</link>
        <pubDate>Tue, 27 May 2025 15:30:04 +0800</pubDate>
        
        <guid>https://producthunt.programnotes.cn/en/p/ghost-downloader-3/</guid>
        <description>&lt;img src="https://images.unsplash.com/photo-1702274397667-14596faf1cd1?ixid=M3w0NjAwMjJ8MHwxfHJhbmRvbXx8fHx8fHx8fDE3NDgzMzA5MjJ8&amp;ixlib=rb-4.1.0" alt="Featured image of post Ghost-Downloader-3" /&gt;&lt;h1 id=&#34;xiaoyouchrghost-downloader-3&#34;&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/XiaoYouChR/Ghost-Downloader-3&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;XiaoYouChR/Ghost-Downloader-3&lt;/a&gt;
&lt;/h1&gt;&lt;h4 align=&#34;right&#34;&gt;
  &lt;a href=&#34;README_zh.md&#34;&gt;简体中文&lt;/a&gt; | English
&lt;/h4&gt;
&lt;blockquote&gt;
&lt;p&gt;[!IMPORTANT]
Due to the developer&amp;rsquo;s preparation for the college entrance exam (Gaokao), project updates are temporarily suspended 😭 Join QQ group &lt;a class=&#34;link&#34; href=&#34;https://qm.qq.com/q/PlUBdzqZCm&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;&lt;code&gt;531928387&lt;/code&gt;&lt;/a&gt; for latest updates&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;[!NOTE]
The project is still in its early stages, and there is still a lot of shortcomings.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;[!TIP]
If you want to use Ghost-Downloader-3 on Windows 7, please download the version &lt;code&gt;v3.5.8-Portable&lt;/code&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;!-- PROJECT LOGO --&gt;
&lt;div align=&#34;center&#34;&gt;
&lt;p&gt;&lt;img src=&#34;https://producthunt.programnotes.cn/resources/banner.webp&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;Banner&#34;
	
	
&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://trendshift.io/repositories/13847&#34; target=&#34;_blank&#34;&gt;&lt;img src=&#34;https://trendshift.io/api/badge/repositories/13847&#34; alt=&#34;XiaoYouChR%2FGhost-Downloader-3 | Trendshift&#34; style=&#34;width: 250px; height: 55px;&#34; width=&#34;250&#34; height=&#34;55&#34;/&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
    AI-powered next-generation cross-platform multithreaded downloader
&lt;/h3&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/XiaoYouChR/Ghost-Downloader-3/network/members&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;&lt;img src=&#34;https://img.shields.io/github/forks/XiaoYouChR/Ghost-Downloader-3.svg?style=for-the-badge&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;Forks&#34;
	
	
&gt;&lt;/a&gt;
&lt;a class=&#34;link&#34; href=&#34;https://github.com/XiaoYouChR/Ghost-Downloader-3/stargazers&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;&lt;img src=&#34;https://img.shields.io/github/stars/XiaoYouChR/Ghost-Downloader-3.svg?style=for-the-badge&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;Stargazers&#34;
	
	
&gt;&lt;/a&gt;
&lt;a class=&#34;link&#34; href=&#34;https://github.com/XiaoYouChR/Ghost-Downloader-3/issues&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;&lt;img src=&#34;https://img.shields.io/github/issues/XiaoYouChR/Ghost-Downloader-3.svg?style=for-the-badge&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;Issues&#34;
	
	
&gt;&lt;/a&gt;
&lt;a class=&#34;link&#34; href=&#34;https://github.com/XiaoYouChR/Ghost-Downloader-3/releases/latest&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;&lt;img src=&#34;https://img.shields.io/github/v/release/XiaoYouChR/Ghost-Downloader-3?style=for-the-badge&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;Release&#34;
	
	
&gt;&lt;/a&gt;
&lt;a class=&#34;link&#34; href=&#34;https://github.com/XiaoYouChR/Ghost-Downloader-3/releases/latest&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;&lt;img src=&#34;https://img.shields.io/github/downloads/XiaoYouChR/Ghost-Downloader-3/total?style=for-the-badge&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;Downloads&#34;
	
	
&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;
  &lt;a href=&#34;https://github.com/XiaoYouChR/Ghost-Downloader-3/issues/new?template=bug_report.yml&#34;&gt;Report Bug&lt;/a&gt;
·    
  &lt;a href=&#34;https://github.com/XiaoYouChR/Ghost-Downloader-3/issues/new?template=feature_request.yml&#34;&gt;Request Feature&lt;/a&gt;
&lt;/h4&gt;
&lt;/div&gt;
&lt;!-- ABOUT THE PROJECT --&gt;
&lt;h2 id=&#34;about-the-project&#34;&gt;About The Project
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;A downloader developed out of personal interest, and my first Python project 😣&lt;/li&gt;
&lt;li&gt;Originally intended to help a Bilibili Uploader with resource integration 😵‍💫&lt;/li&gt;
&lt;li&gt;Features include IDM-like intelligent chunking without file merging, and AI-powered smart boost 🚀&lt;/li&gt;
&lt;li&gt;Thanks to Python&amp;rsquo;s🐍 accessibility, the project will support plugins🧩 in the future to maximize Python&amp;rsquo;s🐍 advantages&lt;/li&gt;
&lt;/ul&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th style=&#34;text-align: center&#34;&gt;Platform&lt;/th&gt;
          &lt;th style=&#34;text-align: center&#34;&gt;Required Version&lt;/th&gt;
          &lt;th style=&#34;text-align: center&#34;&gt;Architectures&lt;/th&gt;
          &lt;th style=&#34;text-align: center&#34;&gt;Compatible&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;🐧 &lt;strong&gt;Linux&lt;/strong&gt;&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;&lt;code&gt;glibc 2.35+&lt;/code&gt;&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;&lt;code&gt;x86_64&lt;/code&gt;/&lt;code&gt;arm64&lt;/code&gt;&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;✅&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;🪟 &lt;strong&gt;Windows&lt;/strong&gt;&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;&lt;code&gt;7 SP1+&lt;/code&gt;&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;&lt;code&gt;x86_64&lt;/code&gt;/&lt;code&gt;arm64&lt;/code&gt;&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;✅&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;🍎 &lt;strong&gt;macOS&lt;/strong&gt;&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;&lt;code&gt;11.0+&lt;/code&gt;&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;&lt;code&gt;x86_64&lt;/code&gt;/&lt;code&gt;arm64&lt;/code&gt;&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;✅&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;blockquote&gt;
&lt;p&gt;[!TIP]
&lt;strong&gt;Arch Linux AUR support&lt;/strong&gt;: Community-maintained packages &lt;code&gt;ghost-downloader-bin&lt;/code&gt; and &lt;code&gt;ghost-downloader-git&lt;/code&gt; are now available (Maintainer: &lt;a class=&#34;link&#34; href=&#34;https://github.com/zxp19821005&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;@zxp19821005&lt;/a&gt;)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;!-- ROADMAP --&gt;
&lt;h2 id=&#34;roadmap&#34;&gt;Roadmap
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;✅ Global settings&lt;/li&gt;
&lt;li&gt;✅ More detailed download information&lt;/li&gt;
&lt;li&gt;✅ Scheduled tasks&lt;/li&gt;
&lt;li&gt;✅ Browser extension optimization&lt;/li&gt;
&lt;li&gt;✅ Global speed limit&lt;/li&gt;
&lt;li&gt;✅ Memory optimization
&lt;ul&gt;
&lt;li&gt;✅ Upgrade Qt version&lt;/li&gt;
&lt;li&gt;✅ Implement HttpClient reuse&lt;/li&gt;
&lt;li&gt;✅ Replace some multithreading with coroutines&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;❌ MVC → MVVM upgrade and a new architecture based on events (In progress&amp;hellip;see branch: feature/Plugins)&lt;/li&gt;
&lt;li&gt;❌ Enhanced task editing (powerful features like binding multiple Clients to one task)&lt;/li&gt;
&lt;li&gt;❌ Magnet/BT download (Considering libtorrent implementation)&lt;/li&gt;
&lt;li&gt;❌ Powerful plugin system&lt;/li&gt;
&lt;li&gt;❌ Powerful browser extension features&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Visit &lt;a class=&#34;link&#34; href=&#34;https://github.com/XiaoYouChR/Ghost-Downloader-3/issues&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Open issues&lt;/a&gt; to see all requested features (and known issues).&lt;/p&gt;
&lt;!-- SPONSOR --&gt;
&lt;h2 id=&#34;sponsor&#34;&gt;Sponsor
&lt;/h2&gt;&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;&lt;a class=&#34;link&#34; href=&#34;https://signpath.org/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;&lt;img src=&#34;https://signpath.org/assets/favicon-50x50.png&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;SignPath&#34;
	
	
&gt;&lt;/a&gt;&lt;/th&gt;
          &lt;th style=&#34;text-align: left&#34;&gt;Free code signing on Windows provided by &lt;a class=&#34;link&#34; href=&#34;https://signpath.io&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;SignPath.io&lt;/a&gt;, certficate by &lt;a class=&#34;link&#34; href=&#34;https://signpath.org&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;SignPath Foundation&lt;/a&gt;&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;!-- CONTRIBUTING --&gt;
&lt;h2 id=&#34;contributing&#34;&gt;Contributing
&lt;/h2&gt;&lt;p&gt;Contributions make the open source community an amazing place to learn, inspire, and create. Any contributions you make are &lt;strong&gt;greatly appreciated&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;If you have a suggestion, fork the repo and create a pull request. You can also simply open an issue with the &amp;ldquo;Enhancement&amp;rdquo; tag. Don&amp;rsquo;t forget to give the project a star⭐! Thanks again!&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Fork the Project&lt;/li&gt;
&lt;li&gt;Create your Feature Branch (git checkout -b feature/AmazingFeature)&lt;/li&gt;
&lt;li&gt;Commit your Changes (git commit -m &amp;lsquo;Add some AmazingFeature&amp;rsquo;)&lt;/li&gt;
&lt;li&gt;Push to the Branch (git push origin feature/AmazingFeature)&lt;/li&gt;
&lt;li&gt;Open a Pull Request&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Thanks to all contributors who have participated in this project!&lt;/p&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/XiaoYouChR/Ghost-Downloader-3/graphs/contributors&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;&lt;img src=&#34;http://contrib.nn.ci/api?repo=XiaoYouChR/Ghost-Downloader-3&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;Contributors&#34;
	
	
&gt;&lt;/a&gt;&lt;/p&gt;
&lt;!-- SCREEN SHOTS --&gt;
&lt;h2 id=&#34;screenshots&#34;&gt;Screenshots
&lt;/h2&gt;&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://space.bilibili.com/437313511&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;&lt;img src=&#34;https://producthunt.programnotes.cn/resources/screenshot.png&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;Demo Screenshot&#34;
	
	
&gt;&lt;/a&gt;&lt;/p&gt;
&lt;!-- LICENSE --&gt;
&lt;h2 id=&#34;license&#34;&gt;License
&lt;/h2&gt;&lt;p&gt;Distributed under the GPL v3.0 License. See &lt;code&gt;LICENSE&lt;/code&gt; for more information.&lt;/p&gt;
&lt;p&gt;Copyright © 2025 XiaoYouChR.&lt;/p&gt;
&lt;!-- CONTACT --&gt;
&lt;h2 id=&#34;contact&#34;&gt;Contact
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;mailto:XiaoYouChR@qq.com&#34; &gt;E-mail&lt;/a&gt; - &lt;a class=&#34;link&#34; href=&#34;mailto:XiaoYouChR@qq.com&#34; &gt;XiaoYouChR@qq.com&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://qm.qq.com/q/PlUBdzqZCm&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;QQ Group&lt;/a&gt; - 531928387&lt;/li&gt;
&lt;/ul&gt;
&lt;!-- ACKNOWLEDGMENTS --&gt;
&lt;h2 id=&#34;references&#34;&gt;References
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/zhiyiYo/PyQt-Fluent-Widgets&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;PyQt-Fluent-Widgets&lt;/a&gt; Powerful, extensible and beautiful Fluent Design widgets&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/projectdiscovery/httpx&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Httpx&lt;/a&gt; A fast and multi-purpose HTTP toolkit&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/Tinche/aiofiles&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Aiofiles&lt;/a&gt; File support for asyncio&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/Delgan/loguru&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Loguru&lt;/a&gt; A library which aims to bring enjoyable logging in Python&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/Nuitka/Nuitka&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Nuitka&lt;/a&gt; The Python compiler&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/PySide/pyside-setup&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;PySide6&lt;/a&gt; The official Python module&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/albertosottile/darkdetect&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Darkdetect&lt;/a&gt; Allow to detect if the user is using Dark Mode on&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/AresConnor/pyqt5-concurrent&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;pyqt5-concurrent&lt;/a&gt; A QThreadPool based task concurrency library&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;acknowledgments&#34;&gt;Acknowledgments
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/zhiyiYo/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;@zhiyiYo&lt;/a&gt; Provided great help for this project!&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://space.bilibili.com/554365148/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;@一只透明人-&lt;/a&gt; Tested almost every version since Ghost-Downloader-1！&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/SuGar0218/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;@Sky·SuGar&lt;/a&gt; Created the project banner！&lt;/li&gt;
&lt;/ul&gt;
&lt;picture&gt;
  &lt;source
    media=&#34;(prefers-color-scheme: dark)&#34;
    srcset=&#34;
      https://api.star-history.com/svg?repos=XiaoYouChR/Ghost-Downloader-3&amp;type=Date&amp;theme=dark
    &#34;
  /&gt;
  &lt;source
    media=&#34;(prefers-color-scheme: light)&#34;
    srcset=&#34;
      https://api.star-history.com/svg?repos=XiaoYouChR/Ghost-Downloader-3&amp;type=Date&amp;theme=dark
    &#34;
  /&gt;
  &lt;img
    alt=&#34;Star History Chart&#34;
    src=&#34;https://api.star-history.com/svg?repos=XiaoYouChR/Ghost-Downloader-3&amp;type=Date&amp;theme=dark&#34;
  /&gt;
&lt;/picture&gt;
&lt;!-- MARKDOWN LINKS &amp; IMAGES --&gt;
&lt;!-- https://www.markdownguide.org/basic-syntax/#reference-style-links --&gt;
</description>
        </item>
        <item>
        <title>kickstart.nvim</title>
        <link>https://producthunt.programnotes.cn/en/p/kickstart.nvim/</link>
        <pubDate>Wed, 14 May 2025 15:30:02 +0800</pubDate>
        
        <guid>https://producthunt.programnotes.cn/en/p/kickstart.nvim/</guid>
        <description>&lt;img src="https://images.unsplash.com/photo-1696251502207-dad49fd10bbf?ixid=M3w0NjAwMjJ8MHwxfHJhbmRvbXx8fHx8fHx8fDE3NDcyMDc3MDd8&amp;ixlib=rb-4.1.0" alt="Featured image of post kickstart.nvim" /&gt;&lt;h1 id=&#34;nvim-luakickstartnvim&#34;&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/nvim-lua/kickstart.nvim&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;nvim-lua/kickstart.nvim&lt;/a&gt;
&lt;/h1&gt;&lt;h1 id=&#34;kickstartnvim&#34;&gt;kickstart.nvim
&lt;/h1&gt;&lt;h2 id=&#34;introduction&#34;&gt;Introduction
&lt;/h2&gt;&lt;p&gt;A starting point for Neovim that is:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Small&lt;/li&gt;
&lt;li&gt;Single-file&lt;/li&gt;
&lt;li&gt;Completely Documented&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;NOT&lt;/strong&gt; a Neovim distribution, but instead a starting point for your configuration.&lt;/p&gt;
&lt;h2 id=&#34;installation&#34;&gt;Installation
&lt;/h2&gt;&lt;h3 id=&#34;install-neovim&#34;&gt;Install Neovim
&lt;/h3&gt;&lt;p&gt;Kickstart.nvim targets &lt;em&gt;only&lt;/em&gt; the latest
&lt;a class=&#34;link&#34; href=&#34;https://github.com/neovim/neovim/releases/tag/stable&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;&amp;lsquo;stable&amp;rsquo;&lt;/a&gt; and latest
&lt;a class=&#34;link&#34; href=&#34;https://github.com/neovim/neovim/releases/tag/nightly&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;&amp;rsquo;nightly&amp;rsquo;&lt;/a&gt; of Neovim.
If you are experiencing issues, please make sure you have the latest versions.&lt;/p&gt;
&lt;h3 id=&#34;install-external-dependencies&#34;&gt;Install External Dependencies
&lt;/h3&gt;&lt;p&gt;External Requirements:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Basic utils: &lt;code&gt;git&lt;/code&gt;, &lt;code&gt;make&lt;/code&gt;, &lt;code&gt;unzip&lt;/code&gt;, C Compiler (&lt;code&gt;gcc&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/BurntSushi/ripgrep#installation&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;ripgrep&lt;/a&gt;,
&lt;a class=&#34;link&#34; href=&#34;https://github.com/sharkdp/fd#installation&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;fd-find&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Clipboard tool (xclip/xsel/win32yank or other depending on the platform)&lt;/li&gt;
&lt;li&gt;A &lt;a class=&#34;link&#34; href=&#34;https://www.nerdfonts.com/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Nerd Font&lt;/a&gt;: optional, provides various icons
&lt;ul&gt;
&lt;li&gt;if you have it set &lt;code&gt;vim.g.have_nerd_font&lt;/code&gt; in &lt;code&gt;init.lua&lt;/code&gt; to true&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Emoji fonts (Ubuntu only, and only if you want emoji!) &lt;code&gt;sudo apt install fonts-noto-color-emoji&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Language Setup:
&lt;ul&gt;
&lt;li&gt;If you want to write Typescript, you need &lt;code&gt;npm&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;If you want to write Golang, you will need &lt;code&gt;go&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;etc.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;[!NOTE]
See &lt;a class=&#34;link&#34; href=&#34;#Install-Recipes&#34; &gt;Install Recipes&lt;/a&gt; for additional Windows and Linux specific notes
and quick install snippets&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&#34;install-kickstart&#34;&gt;Install Kickstart
&lt;/h3&gt;&lt;blockquote&gt;
&lt;p&gt;[!NOTE]
&lt;a class=&#34;link&#34; href=&#34;#FAQ&#34; &gt;Backup&lt;/a&gt; your previous configuration (if any exists)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Neovim&amp;rsquo;s configurations are located under the following paths, depending on your OS:&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th style=&#34;text-align: left&#34;&gt;OS&lt;/th&gt;
          &lt;th style=&#34;text-align: left&#34;&gt;PATH&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;Linux, MacOS&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;$XDG_CONFIG_HOME/nvim&lt;/code&gt;, &lt;code&gt;~/.config/nvim&lt;/code&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;Windows (cmd)&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;%localappdata%\nvim\&lt;/code&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;Windows (powershell)&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;$env:LOCALAPPDATA\nvim\&lt;/code&gt;&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;h4 id=&#34;recommended-step&#34;&gt;Recommended Step
&lt;/h4&gt;&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://docs.github.com/en/get-started/quickstart/fork-a-repo&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Fork&lt;/a&gt; this repo
so that you have your own copy that you can modify, then install by cloning the
fork to your machine using one of the commands below, depending on your OS.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;[!NOTE]
Your fork&amp;rsquo;s URL will be something like this:
&lt;code&gt;https://github.com/&amp;lt;your_github_username&amp;gt;/kickstart.nvim.git&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;You likely want to remove &lt;code&gt;lazy-lock.json&lt;/code&gt; from your fork&amp;rsquo;s &lt;code&gt;.gitignore&lt;/code&gt; file
too - it&amp;rsquo;s ignored in the kickstart repo to make maintenance easier, but it&amp;rsquo;s
&lt;a class=&#34;link&#34; href=&#34;https://lazy.folke.io/usage/lockfile&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;recommended to track it in version control&lt;/a&gt;.&lt;/p&gt;
&lt;h4 id=&#34;clone-kickstartnvim&#34;&gt;Clone kickstart.nvim
&lt;/h4&gt;&lt;blockquote&gt;
&lt;p&gt;[!NOTE]
If following the recommended step above (i.e., forking the repo), replace
&lt;code&gt;nvim-lua&lt;/code&gt; with &lt;code&gt;&amp;lt;your_github_username&amp;gt;&lt;/code&gt; in the commands below&lt;/p&gt;
&lt;/blockquote&gt;
&lt;details&gt;&lt;summary&gt; Linux and Mac &lt;/summary&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git clone https://github.com/nvim-lua/kickstart.nvim.git &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;XDG_CONFIG_HOME&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;:-&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$HOME&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;/.config&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;/nvim
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;/details&gt;
&lt;details&gt;&lt;summary&gt; Windows &lt;/summary&gt;
&lt;p&gt;If you&amp;rsquo;re using &lt;code&gt;cmd.exe&lt;/code&gt;:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git clone https://github.com/nvim-lua/kickstart.nvim.git &amp;#34;%localappdata%\nvim&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;If you&amp;rsquo;re using &lt;code&gt;powershell.exe&lt;/code&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git clone https://github.com/nvim-lua/kickstart.nvim.git &amp;#34;${env:LOCALAPPDATA}\nvim&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;/details&gt;
&lt;h3 id=&#34;post-installation&#34;&gt;Post Installation
&lt;/h3&gt;&lt;p&gt;Start Neovim&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;nvim
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;That&amp;rsquo;s it! Lazy will install all the plugins you have. Use &lt;code&gt;:Lazy&lt;/code&gt; to view
the current plugin status. Hit &lt;code&gt;q&lt;/code&gt; to close the window.&lt;/p&gt;
&lt;h4 id=&#34;read-the-friendly-documentation&#34;&gt;Read The Friendly Documentation
&lt;/h4&gt;&lt;p&gt;Read through the &lt;code&gt;init.lua&lt;/code&gt; file in your configuration folder for more
information about extending and exploring Neovim. That also includes
examples of adding popularly requested plugins.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;[!NOTE]
For more information about a particular plugin check its repository&amp;rsquo;s documentation.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&#34;getting-started&#34;&gt;Getting Started
&lt;/h3&gt;&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://youtu.be/m8C0Cq9Uv9o&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;The Only Video You Need to Get Started with Neovim&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&#34;faq&#34;&gt;FAQ
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;What should I do if I already have a pre-existing Neovim configuration?
&lt;ul&gt;
&lt;li&gt;You should back it up and then delete all associated files.&lt;/li&gt;
&lt;li&gt;This includes your existing init.lua and the Neovim files in &lt;code&gt;~/.local&lt;/code&gt;
which can be deleted with &lt;code&gt;rm -rf ~/.local/share/nvim/&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Can I keep my existing configuration in parallel to kickstart?
&lt;ul&gt;
&lt;li&gt;Yes! You can use &lt;a class=&#34;link&#34; href=&#34;https://neovim.io/doc/user/starting.html#%24NVIM_APPNAME&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;NVIM_APPNAME&lt;/a&gt;&lt;code&gt;=nvim-NAME&lt;/code&gt;
to maintain multiple configurations. For example, you can install the kickstart
configuration in &lt;code&gt;~/.config/nvim-kickstart&lt;/code&gt; and create an alias:
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;alias nvim-kickstart=&amp;#39;NVIM_APPNAME=&amp;#34;nvim-kickstart&amp;#34; nvim&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;When you run Neovim using &lt;code&gt;nvim-kickstart&lt;/code&gt; alias it will use the alternative
config directory and the matching local directory
&lt;code&gt;~/.local/share/nvim-kickstart&lt;/code&gt;. You can apply this approach to any Neovim
distribution that you would like to try out.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;What if I want to &amp;ldquo;uninstall&amp;rdquo; this configuration:
&lt;ul&gt;
&lt;li&gt;See &lt;a class=&#34;link&#34; href=&#34;https://lazy.folke.io/usage#-uninstalling&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;lazy.nvim uninstall&lt;/a&gt; information&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Why is the kickstart &lt;code&gt;init.lua&lt;/code&gt; a single file? Wouldn&amp;rsquo;t it make sense to split it into multiple files?
&lt;ul&gt;
&lt;li&gt;The main purpose of kickstart is to serve as a teaching tool and a reference
configuration that someone can easily use to &lt;code&gt;git clone&lt;/code&gt; as a basis for their own.
As you progress in learning Neovim and Lua, you might consider splitting &lt;code&gt;init.lua&lt;/code&gt;
into smaller parts. A fork of kickstart that does this while maintaining the
same functionality is available here:
&lt;ul&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/dam9000/kickstart-modular.nvim&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;kickstart-modular.nvim&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Discussions on this topic can be found here:
&lt;ul&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/nvim-lua/kickstart.nvim/issues/218&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Restructure the configuration&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/nvim-lua/kickstart.nvim/pull/473&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Reorganize init.lua into a multi-file setup&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;install-recipes&#34;&gt;Install Recipes
&lt;/h3&gt;&lt;p&gt;Below you can find OS specific install instructions for Neovim and dependencies.&lt;/p&gt;
&lt;p&gt;After installing all the dependencies continue with the &lt;a class=&#34;link&#34; href=&#34;#Install-Kickstart&#34; &gt;Install Kickstart&lt;/a&gt; step.&lt;/p&gt;
&lt;h4 id=&#34;windows-installation&#34;&gt;Windows Installation
&lt;/h4&gt;&lt;details&gt;&lt;summary&gt;Windows with Microsoft C++ Build Tools and CMake&lt;/summary&gt;
Installation may require installing build tools and updating the run command for `telescope-fzf-native`
&lt;p&gt;See &lt;code&gt;telescope-fzf-native&lt;/code&gt; documentation for &lt;a class=&#34;link&#34; href=&#34;https://github.com/nvim-telescope/telescope-fzf-native.nvim#installation&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;more details&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This requires:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Install CMake and the Microsoft C++ Build Tools on Windows&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-lua&#34; data-lang=&#34;lua&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;nvim-telescope/telescope-fzf-native.nvim&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;build&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;cmake -S. -Bbuild -DCMAKE_BUILD_TYPE=Release &amp;amp;&amp;amp; cmake --build build --config Release &amp;amp;&amp;amp; cmake --install build --prefix build&amp;#39;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;/details&gt;
&lt;details&gt;&lt;summary&gt;Windows with gcc/make using chocolatey&lt;/summary&gt;
Alternatively, one can install gcc and make which don&#39;t require changing the config,
the easiest way is to use choco:
&lt;ol&gt;
&lt;li&gt;install &lt;a class=&#34;link&#34; href=&#34;https://chocolatey.org/install&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;chocolatey&lt;/a&gt;
either follow the instructions on the page or use winget,
run in cmd as &lt;strong&gt;admin&lt;/strong&gt;:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;winget install --accept-source-agreements chocolatey.chocolatey
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;ol start=&#34;2&#34;&gt;
&lt;li&gt;install all requirements using choco, exit the previous cmd and
open a new one so that choco path is set, and run in cmd as &lt;strong&gt;admin&lt;/strong&gt;:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;choco install -y neovim git ripgrep wget fd unzip gzip mingw make
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;/details&gt;
&lt;details&gt;&lt;summary&gt;WSL (Windows Subsystem for Linux)&lt;/summary&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;wsl --install
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;wsl
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo add-apt-repository ppa:neovim-ppa/unstable -y
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo apt update
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo apt install make gcc ripgrep unzip git xclip neovim
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;/details&gt;
&lt;h4 id=&#34;linux-install&#34;&gt;Linux Install
&lt;/h4&gt;&lt;details&gt;&lt;summary&gt;Ubuntu Install Steps&lt;/summary&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo add-apt-repository ppa:neovim-ppa/unstable -y
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo apt update
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo apt install make gcc ripgrep unzip git xclip neovim
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;/details&gt;
&lt;details&gt;&lt;summary&gt;Debian Install Steps&lt;/summary&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt; 1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 8
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 9
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;10
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;11
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;12
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-gdscript3&#34; data-lang=&#34;gdscript3&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;sudo&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;apt&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;update&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;sudo&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;apt&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;install&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;make&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;gcc&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;ripgrep&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;unzip&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;git&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;xclip&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;curl&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Now we install nvim&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;curl&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;LO&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;https&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;//&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;github&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;com&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;neovim&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;neovim&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;releases&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;latest&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;download&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;nvim&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;linux&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;x86_64&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;tar&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;gz&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;sudo&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;rm&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;rf&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;opt&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;nvim&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;linux&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;x86_64&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;sudo&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;mkdir&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;p&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;opt&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;nvim&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;linux&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;x86_64&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;sudo&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;chmod&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;a&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;rX&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;opt&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;nvim&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;linux&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;x86_64&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;sudo&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;tar&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;C&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;opt&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;xzf&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;nvim&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;linux&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;x86_64&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;tar&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;gz&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# make it available in /usr/local/bin, distro installs to /usr/bin&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;sudo&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;ln&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sf&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;opt&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;nvim&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;linux&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;x86_64&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;bin&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;nvim&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;usr&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;local&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;bin&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;/details&gt;
&lt;details&gt;&lt;summary&gt;Fedora Install Steps&lt;/summary&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo dnf install -y gcc make git ripgrep fd-find unzip neovim
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;/details&gt;
&lt;details&gt;&lt;summary&gt;Arch Install Steps&lt;/summary&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo pacman -S --noconfirm --needed gcc make git ripgrep fd unzip neovim
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;/details&gt;
</description>
        </item>
        <item>
        <title>mason.nvim</title>
        <link>https://producthunt.programnotes.cn/en/p/mason.nvim/</link>
        <pubDate>Sat, 10 May 2025 15:26:31 +0800</pubDate>
        
        <guid>https://producthunt.programnotes.cn/en/p/mason.nvim/</guid>
        <description>&lt;img src="https://images.unsplash.com/photo-1676579300183-c53b23384218?ixid=M3w0NjAwMjJ8MHwxfHJhbmRvbXx8fHx8fHx8fDE3NDY4NjE4OTR8&amp;ixlib=rb-4.1.0" alt="Featured image of post mason.nvim" /&gt;&lt;h1 id=&#34;mason-orgmasonnvim&#34;&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/mason-org/mason.nvim&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;mason-org/mason.nvim&lt;/a&gt;
&lt;/h1&gt;&lt;p&gt;&lt;img src=&#34;https://img.shields.io/badge/Linux-%23.svg?logo=linux&amp;amp;color=FCC624&amp;amp;logoColor=black&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;Linux&#34;
	
	
&gt;
&lt;img src=&#34;https://img.shields.io/badge/macOS-%23.svg?logo=apple&amp;amp;color=000000&amp;amp;logoColor=white&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;macOS&#34;
	
	
&gt;
&lt;img src=&#34;https://img.shields.io/badge/Windows-%23.svg?logo=windows&amp;amp;color=0078D6&amp;amp;logoColor=white&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;Windows&#34;
	
	
&gt;
&lt;a class=&#34;link&#34; href=&#34;https://github.com/mason-org/mason.nvim/actions?query=workflow%3ATests&amp;#43;branch%3Amain&amp;#43;event%3Apush&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;&lt;img src=&#34;https://github.com/mason-org/mason.nvim/workflows/Tests/badge.svg&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;GitHub CI&#34;
	
	
&gt;&lt;/a&gt;
&lt;a class=&#34;link&#34; href=&#34;https://github.com/sponsors/williamboman&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;&lt;img src=&#34;https://img.shields.io/github/sponsors/williamboman&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;Sponsors&#34;
	
	
&gt;&lt;/a&gt;&lt;/p&gt;
&lt;img src=&#34;https://user-images.githubusercontent.com/6705160/177613416-0c0354d2-f431-40d8-87f0-21310f0bba0e.png&#34; alt=&#34;mason.nvim&#34; /&gt;
&lt;p align=&#34;center&#34;&gt;
    Portable package manager for Neovim that runs everywhere Neovim runs.&lt;br /&gt;
    Easily install and manage LSP servers, DAP servers, linters, and formatters.&lt;br /&gt;
&lt;/p&gt;
&lt;p align=&#34;center&#34;&gt;
    &lt;code&gt;:help mason.nvim&lt;/code&gt;
&lt;/p&gt;
&lt;p align=&#34;center&#34;&gt;
    &lt;sup&gt;Latest version: v2.0.0&lt;/sup&gt; &lt;!-- x-release-please-version --&gt;
&lt;/p&gt;
&lt;h1 id=&#34;table-of-contents&#34;&gt;Table of Contents
&lt;/h1&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;#introduction&#34; &gt;Introduction&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;#screenshots&#34; &gt;Screenshots&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;#requirements&#34; &gt;Requirements&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;#installation&#34; &gt;Installation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;#setup&#34; &gt;Setup&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;#extensions&#34; &gt;Extensions&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;#commands&#34; &gt;Commands&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;#registries&#34; &gt;Registries&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;#configuration&#34; &gt;Configuration&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id=&#34;introduction&#34;&gt;Introduction
&lt;/h1&gt;&lt;blockquote&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;./doc/mason.txt#L11&#34; &gt;&lt;code&gt;:h mason-introduction&lt;/code&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;code&gt;mason.nvim&lt;/code&gt; is a Neovim plugin that allows you to easily manage external editor tooling such as LSP servers, DAP servers,
linters, and formatters through a single interface. It runs everywhere Neovim runs (across Linux, macOS, Windows, etc.),
with only a small set of &lt;a class=&#34;link&#34; href=&#34;#requirements&#34; &gt;external requirements&lt;/a&gt; needed.&lt;/p&gt;
&lt;p&gt;Packages are installed in Neovim&amp;rsquo;s data directory (&lt;a class=&#34;link&#34; href=&#34;https://neovim.io/doc/user/starting.html#standard-path&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;&lt;code&gt;:h standard-path&lt;/code&gt;&lt;/a&gt;) by default. Executables are
linked to a single &lt;code&gt;bin/&lt;/code&gt; directory, which &lt;code&gt;mason.nvim&lt;/code&gt; will add to Neovim&amp;rsquo;s PATH during setup, allowing seamless access
from Neovim builtins (shell, terminal, etc.) as well as other 3rd party plugins.&lt;/p&gt;
&lt;p&gt;For a list of all available packages, see &lt;a class=&#34;link&#34; href=&#34;https://mason-registry.dev/registry/list&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://mason-registry.dev/registry/list&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&#34;screenshots&#34;&gt;Screenshots
&lt;/h2&gt;&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th style=&#34;text-align: center&#34;&gt;&lt;/th&gt;
          &lt;th style=&#34;text-align: center&#34;&gt;&lt;/th&gt;
          &lt;th style=&#34;text-align: center&#34;&gt;&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;&lt;img alt=&#34;Main window&#34; src=&#34;https://user-images.githubusercontent.com/6705160/177617680-d62caf26-f253-4ace-ab57-4b590595adca.png&#34;&gt;&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;&lt;img src=&#34;https://user-images.githubusercontent.com/6705160/177617684-6bb4c13f-1235-4ac9-829e-120b06f7437b.png&#34;&gt;&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;&lt;img alt=&#34;Language filter&#34; src=&#34;https://user-images.githubusercontent.com/6705160/177617688-8f9ba225-00c8-495c-9c4c-b74240d6f280.png&#34;&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;&lt;img alt=&#34;LSP server configuration schema&#34; src=&#34;https://user-images.githubusercontent.com/6705160/177617692-02c6ddde-a97e-42b4-bca4-4f4caf45d569.png&#34;&gt;&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;&lt;img alt=&#34;Checking for new versions&#34; src=&#34;https://user-images.githubusercontent.com/6705160/180648183-69077d10-8795-4da6-ba4d-57ecf0cb25c9.png&#34;&gt;&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;&lt;img alt=&#34;Help window&#34; src=&#34;https://user-images.githubusercontent.com/6705160/180648292-136a0888-0fb6-4226-aa29-53bd3ffed400.png&#34;&gt;&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;h1 id=&#34;requirements&#34;&gt;Requirements
&lt;/h1&gt;&lt;blockquote&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;./doc/mason.txt#L50&#34; &gt;&lt;code&gt;:h mason-requirements&lt;/code&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;code&gt;mason.nvim&lt;/code&gt; relaxes the minimum requirements by attempting multiple different utilities (for example, &lt;code&gt;wget&lt;/code&gt;,
&lt;code&gt;curl&lt;/code&gt;, and &lt;code&gt;Invoke-WebRequest&lt;/code&gt; are all perfect substitutes).
The &lt;em&gt;minimum&lt;/em&gt; recommended requirements are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;neovim &lt;code&gt;&amp;gt;= 0.10.0&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;For Unix systems:
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;git(1)&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;curl(1)&lt;/code&gt; or &lt;code&gt;GNU wget(1)&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;unzip(1)&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;GNU tar (&lt;code&gt;tar(1)&lt;/code&gt; or &lt;code&gt;gtar(1)&lt;/code&gt; depending on platform)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;gzip(1)&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;For Windows systems:
&lt;ul&gt;
&lt;li&gt;pwsh or powershell&lt;/li&gt;
&lt;li&gt;git&lt;/li&gt;
&lt;li&gt;GNU tar&lt;/li&gt;
&lt;li&gt;One of the following:
&lt;ul&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://www.7-zip.org/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;7zip&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://peazip.github.io/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;peazip&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/mholt/archiver&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;archiver&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://www.winzip.com/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;winzip&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://www.win-rar.com/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;WinRAR&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Note that &lt;code&gt;mason.nvim&lt;/code&gt; will regularly shell out to external package managers, such as &lt;code&gt;cargo&lt;/code&gt; and &lt;code&gt;npm&lt;/code&gt;. Depending on
your personal usage, some of these will also need to be installed. Refer to &lt;code&gt;:checkhealth mason&lt;/code&gt; for a full list.&lt;/p&gt;
&lt;h1 id=&#34;installation&#34;&gt;Installation
&lt;/h1&gt;&lt;h2 id=&#34;packer&#34;&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/wbthomason/packer.nvim&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Packer&lt;/a&gt;
&lt;/h2&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-lua&#34; data-lang=&#34;lua&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;use&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;s2&#34;&gt;&amp;#34;mason-org/mason.nvim&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id=&#34;lazynvim&#34;&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/folke/lazy.nvim&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;lazy.nvim&lt;/a&gt;
&lt;/h2&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-lua&#34; data-lang=&#34;lua&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;s2&#34;&gt;&amp;#34;mason-org/mason.nvim&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id=&#34;vim-plug&#34;&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/junegunn/vim-plug&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;vim-plug&lt;/a&gt;
&lt;/h2&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-vim&#34; data-lang=&#34;vim&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;Plug&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;mason-org/mason.nvim&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h1 id=&#34;setup&#34;&gt;Setup
&lt;/h1&gt;&lt;blockquote&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;./doc/mason.txt#L67&#34; &gt;&lt;code&gt;:h mason-quickstart&lt;/code&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-lua&#34; data-lang=&#34;lua&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;require&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;mason&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;).&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;setup&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;code&gt;mason.nvim&lt;/code&gt; is optimized to load as little as possible during setup. Lazy-loading the plugin, or somehow deferring the
setup, is not recommended.&lt;/p&gt;
&lt;p&gt;Refer to the &lt;a class=&#34;link&#34; href=&#34;#configuration&#34; &gt;Configuration&lt;/a&gt; section for information about which settings are available.&lt;/p&gt;
&lt;h2 id=&#34;extensions&#34;&gt;Extensions
&lt;/h2&gt;&lt;p&gt;Refer to the &lt;a class=&#34;link&#34; href=&#34;https://github.com/mason-org/mason.nvim/wiki/Extensions&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Wiki&lt;/a&gt; for a list of 3rd party extensions.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/mason-org/mason-lspconfig.nvim&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;&lt;code&gt;mason-lspconfig.nvim&lt;/code&gt;&lt;/a&gt; - recommended for usage with &lt;code&gt;lspconfig&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id=&#34;commands&#34;&gt;Commands
&lt;/h1&gt;&lt;blockquote&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;./doc/mason.txt#L178&#34; &gt;&lt;code&gt;:h mason-commands&lt;/code&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;:Mason&lt;/code&gt; - opens a graphical status window&lt;/li&gt;
&lt;li&gt;&lt;code&gt;:MasonUpdate&lt;/code&gt; - updates all managed registries&lt;/li&gt;
&lt;li&gt;&lt;code&gt;:MasonInstall &amp;lt;package&amp;gt; ...&lt;/code&gt; - installs/re-installs the provided packages&lt;/li&gt;
&lt;li&gt;&lt;code&gt;:MasonUninstall &amp;lt;package&amp;gt; ...&lt;/code&gt; - uninstalls the provided packages&lt;/li&gt;
&lt;li&gt;&lt;code&gt;:MasonUninstallAll&lt;/code&gt; - uninstalls all packages&lt;/li&gt;
&lt;li&gt;&lt;code&gt;:MasonLog&lt;/code&gt; - opens the &lt;code&gt;mason.nvim&lt;/code&gt; log file in a new tab window&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id=&#34;registries&#34;&gt;Registries
&lt;/h1&gt;&lt;p&gt;Mason&amp;rsquo;s core package registry is located at &lt;a class=&#34;link&#34; href=&#34;https://github.com/mason-org/mason-registry&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;mason-org/mason-registry&lt;/a&gt;.
Before any packages can be used, the registry needs to be downloaded. This is done automatically for you when using the
different Mason commands (e.g. &lt;code&gt;:MasonInstall&lt;/code&gt;), but can also be done manually by using the &lt;code&gt;:MasonUpdate&lt;/code&gt; command.&lt;/p&gt;
&lt;p&gt;If you&amp;rsquo;re utilizing Mason&amp;rsquo;s Lua APIs to access packages, it&amp;rsquo;s recommended to use the
&lt;a class=&#34;link&#34; href=&#34;./doc/mason.txt#L549&#34; &gt;&lt;code&gt;:h mason-registry.refresh()&lt;/code&gt;&lt;/a&gt; and/or &lt;a class=&#34;link&#34; href=&#34;./doc/mason.txt#L542&#34; &gt;&lt;code&gt;:h mason-registry.update()&lt;/code&gt;&lt;/a&gt;
functions to ensure you have the latest package information before retrieving packages.&lt;/p&gt;
&lt;h1 id=&#34;configuration&#34;&gt;Configuration
&lt;/h1&gt;&lt;blockquote&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;./doc/mason.txt#L238&#34; &gt;&lt;code&gt;:h mason-settings&lt;/code&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;You may optionally configure certain behavior of &lt;code&gt;mason.nvim&lt;/code&gt; when calling the &lt;code&gt;.setup()&lt;/code&gt; function. Refer to the
&lt;a class=&#34;link&#34; href=&#34;#default-configuration&#34; &gt;default configuration&lt;/a&gt; for a list of all available settings.&lt;/p&gt;
&lt;p&gt;Example:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;8
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;9
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-lua&#34; data-lang=&#34;lua&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;require&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;mason&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;).&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;setup&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;({&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;ui&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;icons&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;n&#34;&gt;package_installed&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;✓&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;n&#34;&gt;package_pending&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;➜&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;n&#34;&gt;package_uninstalled&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;✗&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;})&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id=&#34;default-configuration&#34;&gt;Default configuration
&lt;/h2&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;  1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;  2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;  3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;  4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;  5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;  6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;  7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;  8
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;  9
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 10
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 11
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 12
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 13
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 14
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 15
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 16
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 17
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 18
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 19
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 20
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 21
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 22
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 23
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 24
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 25
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 26
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 27
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 28
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 29
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 30
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 31
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 32
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 33
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 34
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 35
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 36
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 37
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 38
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 39
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 40
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 41
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 42
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 43
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 44
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 45
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 46
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 47
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 48
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 49
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 50
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 51
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 52
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 53
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 54
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 55
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 56
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 57
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 58
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 59
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 60
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 61
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 62
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 63
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 64
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 65
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 66
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 67
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 68
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 69
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 70
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 71
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 72
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 73
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 74
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 75
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 76
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 77
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 78
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 79
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 80
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 81
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 82
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 83
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 84
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 85
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 86
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 87
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 88
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 89
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 90
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 91
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 92
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 93
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 94
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 95
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 96
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 97
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 98
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 99
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;100
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;101
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;102
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;103
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;104
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;105
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;106
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;107
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;108
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;109
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;110
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;111
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;112
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;113
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;114
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;115
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;116
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;117
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;118
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;119
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;120
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;121
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;122
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;123
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;124
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;125
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;126
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;127
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;128
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;129
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;130
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;131
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;132
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;133
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;134
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;135
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;136
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;137
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;138
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;139
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;140
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;141
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-lua&#34; data-lang=&#34;lua&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;---@class MasonSettings&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kd&#34;&gt;local&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;DEFAULT_SETTINGS&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;---@since 1.0.0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;-- The directory in which to install packages.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;install_root_dir&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;path.concat&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;vim.fn&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;stdpath&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;data&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;mason&amp;#34;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;---@since 1.0.0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;-- Where Mason should put its bin location in your PATH. Can be one of:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;-- - &amp;#34;prepend&amp;#34; (default, Mason&amp;#39;s bin location is put first in PATH)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;-- - &amp;#34;append&amp;#34; (Mason&amp;#39;s bin location is put at the end of PATH)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;-- - &amp;#34;skip&amp;#34; (doesn&amp;#39;t modify PATH)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;---@type &amp;#39;&amp;#34;prepend&amp;#34;&amp;#39; | &amp;#39;&amp;#34;append&amp;#34;&amp;#39; | &amp;#39;&amp;#34;skip&amp;#34;&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;PATH&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;prepend&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;---@since 1.0.0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;-- Controls to which degree logs are written to the log file. It&amp;#39;s useful to set this to vim.log.levels.DEBUG when&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;-- debugging issues with package installations.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;log_level&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;vim.log&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;levels.INFO&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;---@since 1.0.0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;-- Limit for the maximum amount of packages to be installed at the same time. Once this limit is reached, any further&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;-- packages that are requested to be installed will be put in a queue.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;max_concurrent_installers&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;---@since 1.0.0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;-- [Advanced setting]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;-- The registries to source packages from. Accepts multiple entries. Should a package with the same name exist in&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;-- multiple registries, the registry listed first will be used.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;registries&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;s2&#34;&gt;&amp;#34;github:mason-org/mason-registry&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;---@since 1.0.0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;-- The provider implementations to use for resolving supplementary package metadata (e.g., all available versions).&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;-- Accepts multiple entries, where later entries will be used as fallback should prior providers fail.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;-- Builtin providers are:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;--   - mason.providers.registry-api  - uses the https://api.mason-registry.dev API&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;--   - mason.providers.client        - uses only client-side tooling to resolve metadata&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;providers&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;s2&#34;&gt;&amp;#34;mason.providers.registry-api&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;s2&#34;&gt;&amp;#34;mason.providers.client&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;github&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;c1&#34;&gt;---@since 1.0.0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;c1&#34;&gt;-- The template URL to use when downloading assets from GitHub.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;c1&#34;&gt;-- The placeholders are the following (in order):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;c1&#34;&gt;-- 1. The repository (e.g. &amp;#34;rust-lang/rust-analyzer&amp;#34;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;c1&#34;&gt;-- 2. The release version (e.g. &amp;#34;v0.3.0&amp;#34;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;c1&#34;&gt;-- 3. The asset name (e.g. &amp;#34;rust-analyzer-v0.3.0-x86_64-unknown-linux-gnu.tar.gz&amp;#34;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;download_url_template&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;https://github.com/%s/releases/download/%s/%s&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;pip&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;c1&#34;&gt;---@since 1.0.0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;c1&#34;&gt;-- Whether to upgrade pip to the latest version in the virtual environment before installing packages.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;upgrade_pip&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;false&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;c1&#34;&gt;---@since 1.0.0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;c1&#34;&gt;-- These args will be added to `pip install` calls. Note that setting extra args might impact intended behavior&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;c1&#34;&gt;-- and is not recommended.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;c1&#34;&gt;--&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;c1&#34;&gt;-- Example: { &amp;#34;--proxy&amp;#34;, &amp;#34;https://proxyserver&amp;#34; }&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;install_args&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;ui&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;c1&#34;&gt;---@since 1.0.0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;c1&#34;&gt;-- Whether to automatically check for new versions when opening the :Mason window.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;check_outdated_packages_on_open&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;true&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;c1&#34;&gt;---@since 1.0.0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;c1&#34;&gt;-- The border to use for the UI window. Accepts same border values as |nvim_open_win()|.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;c1&#34;&gt;-- Defaults to `:h &amp;#39;winborder&amp;#39;` if nil.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;border&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;nil&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;c1&#34;&gt;---@since 1.11.0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;c1&#34;&gt;-- The backdrop opacity. 0 is fully opaque, 100 is fully transparent.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;backdrop&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;60&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;c1&#34;&gt;---@since 1.0.0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;c1&#34;&gt;-- Width of the window. Accepts:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;c1&#34;&gt;-- - Integer greater than 1 for fixed width.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;c1&#34;&gt;-- - Float in the range of 0-1 for a percentage of screen width.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;width&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;0.8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;c1&#34;&gt;---@since 1.0.0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;c1&#34;&gt;-- Height of the window. Accepts:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;c1&#34;&gt;-- - Integer greater than 1 for fixed height.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;c1&#34;&gt;-- - Float in the range of 0-1 for a percentage of screen height.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;height&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;0.9&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;icons&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;c1&#34;&gt;---@since 1.0.0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;c1&#34;&gt;-- The list icon to use for installed packages.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;n&#34;&gt;package_installed&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;◍&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;c1&#34;&gt;---@since 1.0.0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;c1&#34;&gt;-- The list icon to use for packages that are installing, or queued for installation.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;n&#34;&gt;package_pending&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;◍&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;c1&#34;&gt;---@since 1.0.0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;c1&#34;&gt;-- The list icon to use for packages that are not installed.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;n&#34;&gt;package_uninstalled&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;◍&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;keymaps&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;c1&#34;&gt;---@since 1.0.0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;c1&#34;&gt;-- Keymap to expand a package&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;n&#34;&gt;toggle_package_expand&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;lt;CR&amp;gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;c1&#34;&gt;---@since 1.0.0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;c1&#34;&gt;-- Keymap to install the package under the current cursor position&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;n&#34;&gt;install_package&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;i&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;c1&#34;&gt;---@since 1.0.0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;c1&#34;&gt;-- Keymap to reinstall/update the package under the current cursor position&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;n&#34;&gt;update_package&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;u&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;c1&#34;&gt;---@since 1.0.0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;c1&#34;&gt;-- Keymap to check for new version for the package under the current cursor position&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;n&#34;&gt;check_package_version&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;c&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;c1&#34;&gt;---@since 1.0.0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;c1&#34;&gt;-- Keymap to update all installed packages&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;n&#34;&gt;update_all_packages&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;U&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;c1&#34;&gt;---@since 1.0.0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;c1&#34;&gt;-- Keymap to check which installed packages are outdated&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;n&#34;&gt;check_outdated_packages&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;C&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;c1&#34;&gt;---@since 1.0.0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;c1&#34;&gt;-- Keymap to uninstall a package&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;n&#34;&gt;uninstall_package&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;X&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;c1&#34;&gt;---@since 1.0.0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;c1&#34;&gt;-- Keymap to cancel a package installation&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;n&#34;&gt;cancel_installation&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;lt;C-c&amp;gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;c1&#34;&gt;---@since 1.0.0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;c1&#34;&gt;-- Keymap to apply language filter&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;n&#34;&gt;apply_language_filter&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;lt;C-f&amp;gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;c1&#34;&gt;---@since 1.1.0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;c1&#34;&gt;-- Keymap to toggle viewing package installation log&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;n&#34;&gt;toggle_package_install_log&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;lt;CR&amp;gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;c1&#34;&gt;---@since 1.8.0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;c1&#34;&gt;-- Keymap to toggle the help view&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;n&#34;&gt;toggle_help&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;g?&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;hr&gt;
&lt;sup&gt;
👋 didn&#39;t find what you were looking for? Try looking in the &lt;a href=&#34;./doc/mason.txt&#34;&gt;help docs&lt;/a&gt; &lt;code&gt;:help mason.nvim&lt;/code&gt;!
&lt;/sup&gt;
</description>
        </item>
        <item>
        <title>ImHex</title>
        <link>https://producthunt.programnotes.cn/en/p/imhex/</link>
        <pubDate>Wed, 23 Apr 2025 15:33:14 +0800</pubDate>
        
        <guid>https://producthunt.programnotes.cn/en/p/imhex/</guid>
        <description>&lt;img src="https://images.unsplash.com/photo-1619472032094-eadb7ec01655?ixid=M3w0NjAwMjJ8MHwxfHJhbmRvbXx8fHx8fHx8fDE3NDUzOTM1MTJ8&amp;ixlib=rb-4.0.3" alt="Featured image of post ImHex" /&gt;&lt;h1 id=&#34;werwolvimhex&#34;&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/WerWolv/ImHex&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;WerWolv/ImHex&lt;/a&gt;
&lt;/h1&gt;&lt;a href=&#34;https://imhex.werwolv.net&#34;&gt;
  &lt;h1 align=&#34;center&#34;&gt;
    &lt;picture&gt;
      &lt;img height=&#34;300px&#34; style=&#34;margin: 0; padding: 0&#34; src=&#34;./resources/dist/common/logo/ImHexLogoSVGBG.svg&#34;&gt;
    &lt;/picture&gt;
  &lt;/h1&gt;
&lt;/a&gt;
&lt;p align=&#34;center&#34;&gt;
    A Hex Editor for Reverse Engineers, Programmers and people who value their retinas when working at 3 AM.
    &lt;br&gt;
    &lt;a href=&#34;https://itinerarium.github.io/phoneme-synthesis/?w=/&#39;ˈɪmhɛks/&#34;&gt;&lt;strong&gt;/ˈɪmhɛks/&lt;/strong&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p align=&#34;center&#34;&gt;
  &lt;a title=&#34;&#39;Build&#39; workflow Status&#34; href=&#34;https://github.com/WerWolv/ImHex/actions?query=workflow%3ABuild&#34;&gt;&lt;img alt=&#34;&#39;Build&#39; workflow Status&#34; src=&#34;https://img.shields.io/github/actions/workflow/status/WerWolv/ImHex/build.yml?longCache=true&amp;style=for-the-badge&amp;label=Build&amp;logoColor=fff&amp;logo=GitHub%20Actions&amp;branch=master&#34;&gt;&lt;/a&gt;
  &lt;a title=&#34;Discord Server&#34; href=&#34;https://discord.gg/X63jZ36xBY&#34;&gt;&lt;img alt=&#34;Discord Server&#34; src=&#34;https://img.shields.io/discord/789833418631675954?label=Discord&amp;logo=Discord&amp;logoColor=fff&amp;style=for-the-badge&#34;&gt;&lt;/a&gt;
  &lt;a title=&#34;Total Downloads&#34; href=&#34;https://github.com/WerWolv/ImHex/releases/latest&#34;&gt;&lt;img alt=&#34;Total Downloads&#34; src=&#34;https://img.shields.io/github/downloads/WerWolv/ImHex/total?longCache=true&amp;style=for-the-badge&amp;label=Downloads&amp;logoColor=fff&amp;logo=GitHub&#34;&gt;&lt;/a&gt;
  &lt;a title=&#34;Code Quality&#34; href=&#34;https://www.codefactor.io/repository/github/werwolv/imhex&#34;&gt;&lt;img alt=&#34;Code Quality&#34; src=&#34;https://img.shields.io/codefactor/grade/github/WerWolv/ImHex?longCache=true&amp;style=for-the-badge&amp;label=Code%20Quality&amp;logoColor=fff&amp;logo=CodeFactor&amp;branch=master&#34;&gt;&lt;/a&gt;
  &lt;a title=&#34;Translation&#34; href=&#34;https://weblate.werwolv.net/projects/imhex/&#34;&gt;&lt;img alt=&#34;Translation&#34; src=&#34;https://img.shields.io/weblate/progress/imhex?logo=weblate&amp;logoColor=%23FFFFFF&amp;server=https%3A%2F%2Fweblate.werwolv.net&amp;style=for-the-badge&#34;&gt;&lt;/a&gt;
  &lt;a title=&#34;Plugins&#34; href=&#34;https://github.com/WerWolv/ImHex/blob/master/PLUGINS.md&#34;&gt;&lt;img alt=&#34;Plugins&#34; src=&#34;https://img.shields.io/badge/Plugins-Supported-brightgreen?logo=stackedit&amp;logoColor=%23FFFFFF&amp;style=for-the-badge&#34;&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p align=&#34;center&#34;&gt;
  &lt;a title=&#34;Download the latest version of ImHex&#34; href=&#34;https://imhex.download&#34;&gt;&lt;img alt=&#34;Download the latest version of ImHex!&#34; src=&#34;resources/dist/common/get_release_banner.png&#34;&gt;&lt;/a&gt;
  &lt;a title=&#34;Download the latest nightly pre-release version of ImHex&#34; href=&#34;https://imhex.download/#nightly&#34;&gt;&lt;img alt=&#34;Download the latest nightly pre-release version of ImHex&#34; src=&#34;resources/dist/common/get_nightly_banner.png&#34;&gt;&lt;/a&gt;
  &lt;a title=&#34;Use the Web version of ImHex right in your browser!&#34; href=&#34;https://web.imhex.werwolv.net&#34;&gt;&lt;img alt=&#34;Use the Web version of ImHex right in your browser!&#34; src=&#34;resources/dist/common/try_online_banner.png&#34;&gt;&lt;/a&gt;
  &lt;a title=&#34;Read the documentation of ImHex!&#34; href=&#34;https://docs.werwolv.net&#34;&gt;&lt;img alt=&#34;Read the documentation of ImHex!&#34; src=&#34;resources/dist/common/read_docs_banner.png&#34;&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;h2 id=&#34;supporting&#34;&gt;Supporting
&lt;/h2&gt;&lt;p&gt;If you like my work, please consider supporting me on GitHub Sponsors, Patreon or PayPal. Thanks a lot!&lt;/p&gt;
&lt;p align=&#34;center&#34;&gt;
&lt;a href=&#34;https://github.com/sponsors/WerWolv&#34;&gt;&lt;img src=&#34;https://werwolv.net/assets/github_banner.png&#34; alt=&#34;GitHub donate button&#34; /&gt;&lt;/a&gt;
&lt;a href=&#34;https://www.patreon.com/werwolv&#34;&gt;&lt;img src=&#34;https://c5.patreon.com/external/logo/become_a_patron_button.png&#34; alt=&#34;Patreon donate button&#34; /&gt;&lt;/a&gt;
&lt;a href=&#34;https://werwolv.net/donate&#34;&gt;&lt;img src=&#34;https://werwolv.net/assets/paypal_banner.png&#34; alt=&#34;PayPal donate button&#34; /&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;h2 id=&#34;screenshots&#34;&gt;Screenshots
&lt;/h2&gt;&lt;p&gt;&lt;img src=&#34;https://github.com/user-attachments/assets/902a7c4c-410d-490f-999e-14c856fec027&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;Hex editor, patterns and data information&#34;
	
	
&gt;
&lt;img src=&#34;https://github.com/user-attachments/assets/58eefa1f-31c9-4bb8-a1c1-8cdd8ddbd29f&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;Bookmarks, data information, find view and data processor&#34;
	
	
&gt;&lt;/p&gt;
&lt;details&gt;
&lt;summary&gt;&lt;strong&gt;More Screenshots&lt;/strong&gt;&lt;/summary&gt;
&lt;p&gt;&lt;img src=&#34;https://github.com/WerWolv/ImHex/assets/10835354/d0623081-3094-4840-a8a8-647b38724db8&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;Data Processor decrypting some data and displaying it as an image&#34;
	
	
&gt;
&lt;img src=&#34;https://github.com/WerWolv/ImHex/assets/10835354/62cbcd18-1c3f-4dd6-a877-2bf2bf4bb2a5&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;STL Parser written in the Pattern Language visualizing a 3D model&#34;
	
	
&gt;
&lt;img src=&#34;https://github.com/WerWolv/ImHex/assets/10835354/d4706c01-c258-45c9-80b8-fe7a10d5a1de&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;Data Information view displaying various stats about the file&#34;
	
	
&gt;&lt;/p&gt;
&lt;/details&gt;
&lt;h2 id=&#34;features&#34;&gt;Features
&lt;/h2&gt;&lt;details&gt;
  &lt;summary&gt;&lt;strong&gt;Featureful hex view&lt;/strong&gt;&lt;/summary&gt;
&lt;ul&gt;
&lt;li&gt;Byte patching&lt;/li&gt;
&lt;li&gt;Patch management&lt;/li&gt;
&lt;li&gt;Infinite Undo/Redo&lt;/li&gt;
&lt;li&gt;&amp;ldquo;Copy bytes as&amp;hellip;&amp;rdquo;
&lt;ul&gt;
&lt;li&gt;Bytes&lt;/li&gt;
&lt;li&gt;Hex string&lt;/li&gt;
&lt;li&gt;C, C++, C#, Rust, Python, Java &amp;amp; JavaScript array&lt;/li&gt;
&lt;li&gt;ASCII-Art hex view&lt;/li&gt;
&lt;li&gt;HTML self-contained div&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Simple string and hex search&lt;/li&gt;
&lt;li&gt;Goto from start, end and current cursor position&lt;/li&gt;
&lt;li&gt;Colorful highlighting
&lt;ul&gt;
&lt;li&gt;Configurable foreground highlighting rules&lt;/li&gt;
&lt;li&gt;Background highlighting using patterns, find results and bookmarks&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Displaying data as a list of many different types
&lt;ul&gt;
&lt;li&gt;Hexadecimal integers (8, 16, 32, 64 bit)&lt;/li&gt;
&lt;li&gt;Signed and unsigned decimal integers (8, 16, 32, 64 bit)&lt;/li&gt;
&lt;li&gt;Floats (16, 32, 64 bit)&lt;/li&gt;
&lt;li&gt;RGBA8 Colors&lt;/li&gt;
&lt;li&gt;HexII&lt;/li&gt;
&lt;li&gt;Binary&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Decoding data as ASCII and custom encodings
&lt;ul&gt;
&lt;li&gt;Built-in support for UTF-8, UTF-16, ShiftJIS, most Windows encodings and many more&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Paged data view&lt;/li&gt;
&lt;/ul&gt;
&lt;/details&gt;
&lt;details&gt;
  &lt;summary&gt;&lt;strong&gt;Custom C++-like pattern language for parsing highlighting a file&#39;s content&lt;/strong&gt;&lt;/summary&gt;
&lt;ul&gt;
&lt;li&gt;Automatic loading based on MIME types and magic values&lt;/li&gt;
&lt;li&gt;Arrays, pointers, structs, unions, enums, bitfields, namespaces, little and big endian support, conditionals and much more!&lt;/li&gt;
&lt;li&gt;Useful error messages, syntax highlighting and error marking&lt;/li&gt;
&lt;li&gt;Support for visualizing many different types of data
&lt;ul&gt;
&lt;li&gt;Images&lt;/li&gt;
&lt;li&gt;Audio&lt;/li&gt;
&lt;li&gt;3D Models&lt;/li&gt;
&lt;li&gt;Coordinates&lt;/li&gt;
&lt;li&gt;Time stamps&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/details&gt;
&lt;details&gt;
  &lt;summary&gt;&lt;strong&gt;Theming support&lt;/strong&gt;&lt;/summary&gt;
&lt;ul&gt;
&lt;li&gt;Doesn&amp;rsquo;t burn out your retinas when used in late-night sessions
&lt;ul&gt;
&lt;li&gt;Dark mode by default, but a light mode is available as well&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Customizable colors and styles for all UI elements through shareable theme files&lt;/li&gt;
&lt;li&gt;Support for custom fonts&lt;/li&gt;
&lt;/ul&gt;
&lt;/details&gt;
&lt;details&gt;
  &lt;summary&gt;&lt;strong&gt;Importing and Exporting data&lt;/strong&gt;&lt;/summary&gt;
&lt;ul&gt;
&lt;li&gt;Base64 files&lt;/li&gt;
&lt;li&gt;IPS and IPS32 patches&lt;/li&gt;
&lt;li&gt;Markdown reports&lt;/li&gt;
&lt;/ul&gt;
&lt;/details&gt;
&lt;details&gt;
  &lt;summary&gt;&lt;strong&gt;Data Inspector&lt;/strong&gt;&lt;/summary&gt;
&lt;ul&gt;
&lt;li&gt;Interpreting data as many different types with endianness, decimal, hexadecimal and octal support and bit inversion
&lt;ul&gt;
&lt;li&gt;Unsigned and signed integers (8, 16, 24, 32, 48, 64 bit)&lt;/li&gt;
&lt;li&gt;Floats (16, 32, 64 bit)&lt;/li&gt;
&lt;li&gt;Signed and Unsigned LEB128&lt;/li&gt;
&lt;li&gt;ASCII, Wide and UTF-8 characters and strings&lt;/li&gt;
&lt;li&gt;time32_t, time64_t, DOS date and time&lt;/li&gt;
&lt;li&gt;GUIDs&lt;/li&gt;
&lt;li&gt;RGBA8 and RGB65 Colors&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Copying and modifying bytes through the inspector&lt;/li&gt;
&lt;li&gt;Adding new data types through the pattern language&lt;/li&gt;
&lt;li&gt;Support for hiding rows that aren&amp;rsquo;t used&lt;/li&gt;
&lt;/ul&gt;
&lt;/details&gt;
&lt;details&gt;
  &lt;summary&gt;&lt;strong&gt;Node-based data pre-processor&lt;/strong&gt;&lt;/summary&gt;
&lt;ul&gt;
&lt;li&gt;Modify, decrypt and decode data before it&amp;rsquo;s being displayed in the hex editor&lt;/li&gt;
&lt;li&gt;Modify data without touching the underlying source&lt;/li&gt;
&lt;li&gt;Support for adding custom nodes&lt;/li&gt;
&lt;/ul&gt;
&lt;/details&gt;
&lt;details&gt;
  &lt;summary&gt;&lt;strong&gt;Loading data from many different data sources&lt;/strong&gt;&lt;/summary&gt;
&lt;ul&gt;
&lt;li&gt;Local Files
&lt;ul&gt;
&lt;li&gt;Support for huge files with fast and efficient loading&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Raw Disks
&lt;ul&gt;
&lt;li&gt;Loading data from raw disks and partitions&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;GDB Server
&lt;ul&gt;
&lt;li&gt;Access the RAM of a running process or embedded devices through GDB&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Intel Hex and Motorola SREC data&lt;/li&gt;
&lt;li&gt;Process Memory
&lt;ul&gt;
&lt;li&gt;Inspect the entire address space of a running process&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/details&gt;
&lt;details&gt;
  &lt;summary&gt;&lt;strong&gt;Data searching&lt;/strong&gt;&lt;/summary&gt;
&lt;ul&gt;
&lt;li&gt;Support for searching the entire file or only a selection&lt;/li&gt;
&lt;li&gt;String extraction
&lt;ul&gt;
&lt;li&gt;Option to specify minimum length and character set (lower case, upper case, digits, symbols)&lt;/li&gt;
&lt;li&gt;Option to specify encoding (ASCII, UTF-8, UTF-16 big and little endian)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Sequence search
&lt;ul&gt;
&lt;li&gt;Search for a sequence of bytes or characters&lt;/li&gt;
&lt;li&gt;Option to ignore character case&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Regex search
&lt;ul&gt;
&lt;li&gt;Search for strings using regular expressions&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Binary Pattern
&lt;ul&gt;
&lt;li&gt;Search for sequences of bytes with optional wildcards&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Numeric Value search
&lt;ul&gt;
&lt;li&gt;Search for signed/unsigned integers and floats&lt;/li&gt;
&lt;li&gt;Search for ranges of values&lt;/li&gt;
&lt;li&gt;Option to specify size and endianness&lt;/li&gt;
&lt;li&gt;Option to ignore unaligned values&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/details&gt;
&lt;details&gt;
  &lt;summary&gt;&lt;strong&gt;Data hashing support&lt;/strong&gt;&lt;/summary&gt;
&lt;ul&gt;
&lt;li&gt;Many different algorithms available
&lt;ul&gt;
&lt;li&gt;CRC8, CRC16 and CRC32 with custom initial values and polynomials
&lt;ul&gt;
&lt;li&gt;Many default polynomials available&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;MD5&lt;/li&gt;
&lt;li&gt;SHA-1, SHA-224, SHA-256, SHA-384, SHA-512&lt;/li&gt;
&lt;li&gt;Adler32&lt;/li&gt;
&lt;li&gt;AP&lt;/li&gt;
&lt;li&gt;BKDR&lt;/li&gt;
&lt;li&gt;Bernstein, Bernstein1&lt;/li&gt;
&lt;li&gt;DEK, DJB, ELF, FNV1, FNV1a, JS, PJW, RS, SDBM&lt;/li&gt;
&lt;li&gt;OneAtTime, Rotating, ShiftAndXor, SuperFast&lt;/li&gt;
&lt;li&gt;Murmur2_32, MurmurHash3_x86_32, MurmurHash3_x86_128, MurmurHash3_x64_128&lt;/li&gt;
&lt;li&gt;SipHash64, SipHash128&lt;/li&gt;
&lt;li&gt;XXHash32, XXHash64&lt;/li&gt;
&lt;li&gt;Tiger, Tiger2&lt;/li&gt;
&lt;li&gt;Blake2B, Blake2S&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Hashing of specific regions of the loaded data&lt;/li&gt;
&lt;li&gt;Hashing of arbitrary strings&lt;/li&gt;
&lt;/ul&gt;
&lt;/details&gt;
&lt;details&gt;
  &lt;summary&gt;&lt;strong&gt;Diffing support&lt;/strong&gt;&lt;/summary&gt;
&lt;ul&gt;
&lt;li&gt;Compare data of different data sources&lt;/li&gt;
&lt;li&gt;Difference highlighting&lt;/li&gt;
&lt;li&gt;Table view of differences&lt;/li&gt;
&lt;/ul&gt;
&lt;/details&gt;
&lt;details&gt;
  &lt;summary&gt;&lt;strong&gt;Integrated disassembler&lt;/strong&gt;&lt;/summary&gt;
&lt;ul&gt;
&lt;li&gt;Support for all architectures supported by Capstone
&lt;ul&gt;
&lt;li&gt;ARM32 (ARM, Thumb, Cortex-M, AArch32)&lt;/li&gt;
&lt;li&gt;ARM64&lt;/li&gt;
&lt;li&gt;MIPS (MIPS32, MIPS64, MIPS32R6, Micro)&lt;/li&gt;
&lt;li&gt;x86 (16-bit, 32-bit, 64-bit)&lt;/li&gt;
&lt;li&gt;PowerPC (32-bit, 64-bit)&lt;/li&gt;
&lt;li&gt;SPARC&lt;/li&gt;
&lt;li&gt;IBM SystemZ&lt;/li&gt;
&lt;li&gt;xCORE&lt;/li&gt;
&lt;li&gt;M68K&lt;/li&gt;
&lt;li&gt;TMS320C64X&lt;/li&gt;
&lt;li&gt;M680X&lt;/li&gt;
&lt;li&gt;Ethereum&lt;/li&gt;
&lt;li&gt;RISC-V&lt;/li&gt;
&lt;li&gt;WebAssembly&lt;/li&gt;
&lt;li&gt;MOS65XX&lt;/li&gt;
&lt;li&gt;Berkeley Packet Filter&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/details&gt;
&lt;details&gt;
  &lt;summary&gt;&lt;strong&gt;Bookmarks&lt;/strong&gt;&lt;/summary&gt;
&lt;ul&gt;
&lt;li&gt;Support for bookmarks with custom names and colors&lt;/li&gt;
&lt;li&gt;Highlighting of bookmarked region in the hex editor&lt;/li&gt;
&lt;li&gt;Jump to bookmarks&lt;/li&gt;
&lt;li&gt;Open content of bookmark in a new tab&lt;/li&gt;
&lt;li&gt;Add comments to bookmarks&lt;/li&gt;
&lt;/ul&gt;
&lt;/details&gt;
&lt;details&gt;
  &lt;summary&gt;&lt;strong&gt;Featureful data analyzer and visualizer&lt;/strong&gt;&lt;/summary&gt;
&lt;ul&gt;
&lt;li&gt;File magic-based file parser and MIME type database&lt;/li&gt;
&lt;li&gt;Byte type distribution graph&lt;/li&gt;
&lt;li&gt;Entropy graph&lt;/li&gt;
&lt;li&gt;Highest and average entropy&lt;/li&gt;
&lt;li&gt;Encrypted / Compressed file detection&lt;/li&gt;
&lt;li&gt;Digram and Layered distribution graphs&lt;/li&gt;
&lt;/ul&gt;
&lt;/details&gt;
&lt;details&gt;
  &lt;summary&gt;&lt;strong&gt;YARA Rule support&lt;/strong&gt;&lt;/summary&gt;
&lt;ul&gt;
&lt;li&gt;Scan a file for vulnerabilities with official yara rules&lt;/li&gt;
&lt;li&gt;Highlight matches in the hex editor&lt;/li&gt;
&lt;li&gt;Jump to matches&lt;/li&gt;
&lt;li&gt;Apply multiple rules at once&lt;/li&gt;
&lt;/ul&gt;
&lt;/details&gt;
&lt;details&gt;
  &lt;summary&gt;&lt;strong&gt;Helpful tools&lt;/strong&gt;&lt;/summary&gt;
&lt;ul&gt;
&lt;li&gt;Itanium, MSVC, Rust and D-Lang demangler based on LLVM&lt;/li&gt;
&lt;li&gt;ASCII table&lt;/li&gt;
&lt;li&gt;Regex replacer&lt;/li&gt;
&lt;li&gt;Mathematical expression evaluator (Calculator)&lt;/li&gt;
&lt;li&gt;Graphing calculator&lt;/li&gt;
&lt;li&gt;Hexadecimal Color picker with support for many different formats&lt;/li&gt;
&lt;li&gt;Base converter&lt;/li&gt;
&lt;li&gt;Byte swapper&lt;/li&gt;
&lt;li&gt;UNIX Permissions calculator&lt;/li&gt;
&lt;li&gt;Wikipedia term definition finder&lt;/li&gt;
&lt;li&gt;File utilities
&lt;ul&gt;
&lt;li&gt;File splitter&lt;/li&gt;
&lt;li&gt;File combiner&lt;/li&gt;
&lt;li&gt;File shredder&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;IEEE754 Float visualizer&lt;/li&gt;
&lt;li&gt;Division by invariant multiplication calculator&lt;/li&gt;
&lt;li&gt;TCP Client/Server&lt;/li&gt;
&lt;li&gt;Euclidean algorithm calculator&lt;/li&gt;
&lt;/ul&gt;
&lt;/details&gt;
&lt;details&gt;
  &lt;summary&gt;&lt;strong&gt;Built-in Content updater&lt;/strong&gt;&lt;/summary&gt;
&lt;ul&gt;
&lt;li&gt;Download all files found in the database directly from within ImHex
&lt;ul&gt;
&lt;li&gt;Pattern files for decoding various file formats&lt;/li&gt;
&lt;li&gt;Libraries for the pattern language&lt;/li&gt;
&lt;li&gt;Magic files for file type detection&lt;/li&gt;
&lt;li&gt;Custom data processor nodes&lt;/li&gt;
&lt;li&gt;Custom encodings&lt;/li&gt;
&lt;li&gt;Custom themes&lt;/li&gt;
&lt;li&gt;Yara rules&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/details&gt;
&lt;details&gt;
  &lt;summary&gt;&lt;strong&gt;Modern Interface&lt;/strong&gt;&lt;/summary&gt;
&lt;ul&gt;
&lt;li&gt;Support for multiple workspaces&lt;/li&gt;
&lt;li&gt;Support for custom layouts&lt;/li&gt;
&lt;li&gt;Detachable windows&lt;/li&gt;
&lt;/ul&gt;
&lt;/details&gt;
&lt;details&gt;
  &lt;summary&gt;&lt;strong&gt;Easy to get started&lt;/strong&gt;&lt;/summary&gt;
&lt;ul&gt;
&lt;li&gt;Support for many different languages&lt;/li&gt;
&lt;li&gt;Simplified mode for beginners&lt;/li&gt;
&lt;li&gt;Extensive documentation&lt;/li&gt;
&lt;li&gt;Many example files available on &lt;a class=&#34;link&#34; href=&#34;https://github.com/WerWolv/ImHex-Patterns&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;the Database&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Achievements guiding you through the features of ImHex&lt;/li&gt;
&lt;li&gt;Interactive tutorials&lt;/li&gt;
&lt;/ul&gt;
&lt;/details&gt;
&lt;h2 id=&#34;pattern-language&#34;&gt;Pattern Language
&lt;/h2&gt;&lt;p&gt;The Pattern Language is the completely custom programming language developed for ImHex.
It allows you to define structures and data types in a C-like syntax and then use them to parse and highlight a file&amp;rsquo;s content.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Source Code: &lt;a class=&#34;link&#34; href=&#34;https://github.com/WerWolv/PatternLanguage/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Link&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Documentation: &lt;a class=&#34;link&#34; href=&#34;https://docs.werwolv.net/pattern-language/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Link&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;database&#34;&gt;Database
&lt;/h2&gt;&lt;p&gt;For format patterns, libraries, magic and constant files, check out the &lt;a class=&#34;link&#34; href=&#34;https://github.com/WerWolv/ImHex-Patterns&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;ImHex-Patterns&lt;/a&gt; repository.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Feel free to PR your own files there as well!&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id=&#34;requirements&#34;&gt;Requirements
&lt;/h2&gt;&lt;p&gt;To use ImHex, the following minimal system requirements need to be met.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;[!IMPORTANT]
ImHex requires a GPU with OpenGL 3.0 support in general.
There are releases available (with the &lt;code&gt;-NoGPU&lt;/code&gt; suffix) that are software rendered and don&amp;rsquo;t require a GPU, however these can be a lot slower than the GPU accelerated versions.&lt;/p&gt;
&lt;p&gt;If possible at all, make ImHex use the dedicated GPU on your system instead of the integrated one.
ImHex will usually run fine with integrated GPUs as well but certain Intel HD GPU drivers on Windows are known to cause graphical artifacts.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;OS&lt;/strong&gt;:
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Windows&lt;/strong&gt;: Windows 7 or higher (Windows 10/11 recommended)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;macOS&lt;/strong&gt;: macOS 13 (Ventura) or higher,
&lt;ul&gt;
&lt;li&gt;Lower versions should still work too, but you&amp;rsquo;ll need to compile ImHex yourself. The release binaries will NOT work.&lt;/li&gt;
&lt;li&gt;The macOS build is not signed and will require you to manually allow them in the Security &amp;amp; Privacy settings.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Linux&lt;/strong&gt;: &amp;ldquo;Modern&amp;rdquo; Linux. The following distributions have official releases available. Other distros are supported through the AppImage and Flatpak releases.
&lt;ul&gt;
&lt;li&gt;Ubuntu and Debian&lt;/li&gt;
&lt;li&gt;Fedora&lt;/li&gt;
&lt;li&gt;RHEL/AlmaLinux&lt;/li&gt;
&lt;li&gt;Arch Linux&lt;/li&gt;
&lt;li&gt;Basically any other distro will work as well when compiling ImHex from sources.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;CPU&lt;/strong&gt;: Officially supported are x86_64 and ARM64, though any Little Endian 64 bit CPU should work.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;GPU&lt;/strong&gt;: OpenGL 3.0 or higher
&lt;ul&gt;
&lt;li&gt;Integrated Intel HD iGPUs are supported, however certain drivers are known to cause various graphical artifacts, especially on Windows. Use at your own risk.&lt;/li&gt;
&lt;li&gt;In case you don&amp;rsquo;t have a GPU available, there are software rendered releases available for Windows and macOS&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;RAM&lt;/strong&gt;: ~150MiB, more is required for more complex analysis&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Storage&lt;/strong&gt;: 150MiB&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;installing&#34;&gt;Installing
&lt;/h2&gt;&lt;p&gt;Information on how to install ImHex can be found in the &lt;a class=&#34;link&#34; href=&#34;https://producthunt.programnotes.cn/INSTALL.md&#34; &gt;Install&lt;/a&gt; guide&lt;/p&gt;
&lt;h2 id=&#34;compiling&#34;&gt;Compiling
&lt;/h2&gt;&lt;p&gt;To compile ImHex on any platform, GCC (or Clang) is required with a version that supports C++23 or higher.
Windows and Linux releases are being built using latest available GCC.
MacOS releases are being built using latest available LLVM Clang.&lt;/p&gt;
&lt;p&gt;Important to note is, the MSVC and AppleClang compilers are both &lt;strong&gt;NOT&lt;/strong&gt; supported since they&amp;rsquo;re both generally severely outdated and lack features GCC and LLVM Clang have.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;[!NOTE]
Many dependencies are bundled into the repository using submodules so make sure to clone it using the &lt;code&gt;--recurse-submodules&lt;/code&gt; option.
All dependencies that aren&amp;rsquo;t bundled, can be installed using the dependency installer scripts found in the &lt;code&gt;/dist&lt;/code&gt; folder.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;For more information, check out the &lt;a class=&#34;link&#34; href=&#34;https://producthunt.programnotes.cn/dist/compiling&#34; &gt;Compiling&lt;/a&gt; guide.&lt;/p&gt;
&lt;h2 id=&#34;contributing&#34;&gt;Contributing
&lt;/h2&gt;&lt;p&gt;See &lt;a class=&#34;link&#34; href=&#34;https://producthunt.programnotes.cn/CONTRIBUTING.md&#34; &gt;Contributing&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;plugin-development&#34;&gt;Plugin development
&lt;/h2&gt;&lt;p&gt;To develop plugins for ImHex, use the following template project to get started. You then have access to the entirety of libimhex as well as the ImHex API and the Content Registry to interact with ImHex or to add new content.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/WerWolv/ImHex-Plugin-Template&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;ImHex Plugin Template&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;credits&#34;&gt;Credits
&lt;/h2&gt;&lt;h3 id=&#34;contributors&#34;&gt;Contributors
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/iTrooz&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;iTrooz&lt;/a&gt; for getting ImHex onto the Web as well as hundreds of contributions in every part of the project&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/jumanji144&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;jumanji144&lt;/a&gt; for huge contributions to the Pattern Language and ImHex&amp;rsquo;s infrastructure&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/marysaka&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Mary&lt;/a&gt; for her immense help porting ImHex to MacOS and help during development&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/Roblabla&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Roblabla&lt;/a&gt; for adding MSI Installer support to ImHex&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/Mailaender&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Mailaender&lt;/a&gt; for getting ImHex onto Flathub&lt;/li&gt;
&lt;li&gt;Everybody else who has reported issues on Discord or GitHub that I had great conversations with :)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;dependencies&#34;&gt;Dependencies
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;Thanks a lot to ocornut for their amazing &lt;a class=&#34;link&#34; href=&#34;https://github.com/ocornut/imgui&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Dear ImGui&lt;/a&gt; which is used for building the entire interface
&lt;ul&gt;
&lt;li&gt;Thanks to epezent for &lt;a class=&#34;link&#34; href=&#34;https://github.com/epezent/implot&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;ImPlot&lt;/a&gt; used to plot data in various places&lt;/li&gt;
&lt;li&gt;Thanks to Nelarius for &lt;a class=&#34;link&#34; href=&#34;https://github.com/Nelarius/imnodes&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;ImNodes&lt;/a&gt; used as base for the data processor&lt;/li&gt;
&lt;li&gt;Thanks to BalazsJako for &lt;a class=&#34;link&#34; href=&#34;https://github.com/BalazsJako/ImGuiColorTextEdit&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;ImGuiColorTextEdit&lt;/a&gt; used for the pattern language syntax highlighting&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Thanks to nlohmann for their &lt;a class=&#34;link&#34; href=&#34;https://github.com/nlohmann/json&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;json&lt;/a&gt; library used for configuration files&lt;/li&gt;
&lt;li&gt;Thanks to vitaut for their &lt;a class=&#34;link&#34; href=&#34;https://github.com/fmtlib/fmt&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;libfmt&lt;/a&gt; library which makes formatting and logging so much better&lt;/li&gt;
&lt;li&gt;Thanks to btzy for &lt;a class=&#34;link&#34; href=&#34;https://github.com/btzy/nativefiledialog-extended&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;nativefiledialog-extended&lt;/a&gt; and their great support, used for handling file dialogs on all platforms&lt;/li&gt;
&lt;li&gt;Thanks to danyspin97 for &lt;a class=&#34;link&#34; href=&#34;https://sr.ht/~danyspin97/xdgpp&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;xdgpp&lt;/a&gt; used to handle folder paths on Linux&lt;/li&gt;
&lt;li&gt;Thanks to aquynh for &lt;a class=&#34;link&#34; href=&#34;https://github.com/aquynh/capstone&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;capstone&lt;/a&gt; which is the base of the disassembly window&lt;/li&gt;
&lt;li&gt;Thanks to rxi for &lt;a class=&#34;link&#34; href=&#34;https://github.com/rxi/microtar&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;microtar&lt;/a&gt; used for extracting downloaded store assets&lt;/li&gt;
&lt;li&gt;Thanks to VirusTotal for &lt;a class=&#34;link&#34; href=&#34;https://github.com/VirusTotal/yara&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Yara&lt;/a&gt; used by the Yara plugin&lt;/li&gt;
&lt;li&gt;Thanks to Martinsos for &lt;a class=&#34;link&#34; href=&#34;https://github.com/Martinsos/edlib&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;edlib&lt;/a&gt; used for sequence searching in the diffing view&lt;/li&gt;
&lt;li&gt;Thanks to ron4fun for &lt;a class=&#34;link&#34; href=&#34;https://github.com/ron4fun/HashLibPlus&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;HashLibPlus&lt;/a&gt; which implements every hashing algorithm under the sun&lt;/li&gt;
&lt;li&gt;Thanks to mackron for &lt;a class=&#34;link&#34; href=&#34;https://github.com/mackron/miniaudio&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;miniaudio&lt;/a&gt; used to play audio files&lt;/li&gt;
&lt;li&gt;Thanks to all other groups and organizations whose libraries are used in ImHex&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;license&#34;&gt;License
&lt;/h3&gt;&lt;p&gt;The biggest part of ImHex is under the GPLv2-only license.
Notable exceptions to this are the following parts which are under the LGPLv2.1 license:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;/lib/libimhex&lt;/strong&gt;: The library that allows Plugins to interact with ImHex.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;/plugins/ui&lt;/strong&gt;: The UI plugin library that contains some common UI elements that can be used by other plugins&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The reason for this is to allow for proprietary plugins to be developed for ImHex.&lt;/p&gt;
</description>
        </item>
        <item>
        <title>Awesome-Dify-Workflow</title>
        <link>https://producthunt.programnotes.cn/en/p/awesome-dify-workflow/</link>
        <pubDate>Fri, 18 Apr 2025 15:28:32 +0800</pubDate>
        
        <guid>https://producthunt.programnotes.cn/en/p/awesome-dify-workflow/</guid>
        <description>&lt;img src="https://images.unsplash.com/photo-1504069764974-3831da96850b?ixid=M3w0NjAwMjJ8MHwxfHJhbmRvbXx8fHx8fHx8fDE3NDQ5NjEyNjh8&amp;ixlib=rb-4.0.3" alt="Featured image of post Awesome-Dify-Workflow" /&gt;&lt;h1 id=&#34;svcvitawesome-dify-workflow&#34;&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/svcvit/Awesome-Dify-Workflow&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;svcvit/Awesome-Dify-Workflow&lt;/a&gt;
&lt;/h1&gt;&lt;div align=&#34;center&#34;&gt;
&lt;h1 id=&#34;awesome-dify-workflow-&#34;&gt;Awesome-Dify-Workflow 🚀
&lt;/h1&gt;&lt;p&gt;&lt;strong&gt;Share &amp;amp; Discover Useful Dify Workflows! For personal use &amp;amp; learning. &lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;README_EN.md&#34; &gt;English&lt;/a&gt; | &lt;a class=&#34;link&#34; href=&#34;README.md&#34; &gt;中文&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://trendshift.io/repositories/13476&#34; target=&#34;_blank&#34;&gt;&lt;img src=&#34;https://trendshift.io/api/badge/repositories/13476&#34; alt=&#34;svcvit%2FAwesome-Dify-Workflow | Trendshift&#34; style=&#34;width: 250px; height: 55px;&#34; width=&#34;250&#34; height=&#34;55&#34;/&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;分享一些好用的 Dify 工作流程，自用、学习两相宜，请使用 Dify 0.13.0 及以上版本导入。已支持多 &lt;strong&gt;任务并行&lt;/strong&gt;、&lt;strong&gt;会话变量&lt;/strong&gt;、&lt;strong&gt;表单&lt;/strong&gt;、&lt;strong&gt;echart渲染&lt;/strong&gt; 相关特性。Agent节点为1.0版本之后功能，请尽可能使用最新版DIFY导入。&lt;/p&gt;
&lt;p&gt;所有的 Workflow 基本都可以 &lt;strong&gt;免费&lt;/strong&gt; 使用，更多 Workflow 收集整理中……&lt;/p&gt;
&lt;h2 id=&#34;分享群&#34;&gt;分享群
&lt;/h2&gt;&lt;p&gt;开了一个分享群，有兴趣可以加入，如果你有关于 workflow 的问题也可以一起讨论。（2025/04/17 更新）&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;主群都超200了，加群主好友，备注 dify，拉你到人多一些的群。不过微信风控，有时候加不上，可以稍后再试。&lt;/li&gt;
&lt;li&gt;当然，也可以加新群，目前人少一点，基本1-2天左右一个群就能满200.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;视频教程&#34;&gt;视频教程
&lt;/h2&gt;&lt;p&gt;最近计划更新一个DIFY使用系列教程，基本上有手就会，里面包含很多我个人使用过程中的一些理解，相信不管你是新手小白，还是企业用户，都会有所收货。&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;名称&lt;/th&gt;
          &lt;th&gt;视频&lt;/th&gt;
          &lt;th&gt;文字摘要版&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;01课 - DIFY的本地化部署与启动&lt;/td&gt;
          &lt;td&gt;&lt;a class=&#34;link&#34; href=&#34;https://www.youtube.com/watch?v=6LnHVay289w&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://www.youtube.com/watch?v=6LnHVay289w&lt;/a&gt;&lt;/td&gt;
          &lt;td&gt;&lt;a class=&#34;link&#34; href=&#34;https://blog.vcvit.me/2025/04/09/01-dify-local-deployment-and-startup/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://blog.vcvit.me/2025/04/09/01-dify-local-deployment-and-startup/&lt;/a&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;02课 - DIFY模型配置&lt;/td&gt;
          &lt;td&gt;&lt;a class=&#34;link&#34; href=&#34;https://www.youtube.com/watch?v=4I2DgPR3qDA&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://www.youtube.com/watch?v=4I2DgPR3qDA&lt;/a&gt;&lt;/td&gt;
          &lt;td&gt;&lt;a class=&#34;link&#34; href=&#34;https://blog.vcvit.me/2025/04/10/02-dify-model-configuration/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://blog.vcvit.me/2025/04/10/02-dify-model-configuration/&lt;/a&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;03课 - chatflow和workfow的区别&lt;/td&gt;
          &lt;td&gt;&lt;a class=&#34;link&#34; href=&#34;https://www.youtube.com/watch?v=quEA_7LVWA8&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://www.youtube.com/watch?v=quEA_7LVWA8&lt;/a&gt;&lt;/td&gt;
          &lt;td&gt;&lt;a class=&#34;link&#34; href=&#34;https://blog.vcvit.me/2025/04/11/03-dify-workflow-vs-chatflow/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://blog.vcvit.me/2025/04/11/03-dify-workflow-vs-chatflow/&lt;/a&gt;&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&#34;常见问题&#34;&gt;常见问题
&lt;/h2&gt;&lt;p&gt;这里总结了一些群里常见的问题，不定期更新，内容不会很多，希望对你有帮助。&lt;/p&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://zerozzz.win/ai-%E6%B5%81%E7%A8%8B%E5%B9%B3%E5%8F%B0%E5%AF%B9%E6%AF%94dify%E3%80%81fastgpt%E3%80%81ragflow&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;AI 流程平台对比——Dify、Fastgpt、Ragflow&lt;/a&gt;&lt;/p&gt;
&lt;details&gt;
&lt;summary&gt;dify 有没有国内的镜像源配置呀?&lt;/summary&gt;
&lt;img src=&#34;./images/Xnip2024-11-19_10-14-02.jpg&#34; alt=&#34;示例图片&#34; width=&#34;400&#34;&gt;
&lt;p&gt;A：我一般把所有image，前面的链接加上 dockerpull.org&lt;/p&gt;
&lt;/details&gt;
&lt;details&gt;
&lt;summary&gt;sandbox 如何安装pandas这些第三方库？&lt;/summary&gt;
A：打开 /docker/volumes/sandbox/dependencies/python-requirements.txt 填入需要安装的依赖，重启sandbox即可。
&lt;/details&gt;
&lt;details&gt;
&lt;summary&gt;定时任务可以如何处理？我希望定时执行某个流程。&lt;/summary&gt;
A：可以参考项目 https://github.com/leochen-g/dify-schedule
&lt;/details&gt;
&lt;details&gt;
&lt;summary&gt;节点间传递string数据，提示超限制，如何处理&lt;/summary&gt;
A：修改 .env 中的一段：
CODE_MAX_STRING_LENGTH: 1000000
TEMPLATE_TRANSFORM_MAX_LENGTH: 1000000
重启容器
&lt;/details&gt;
&lt;details&gt;
&lt;summary&gt;拿到图片URL后能在聊天窗口显示吗，试了下markdown但什么都没显示出来。&lt;/summary&gt;
&lt;img src=&#34;./images/image001.png&#34; alt=&#34;示例图片&#34; width=&#34;400&#34;&gt;
&lt;p&gt;A：你的做法是对的，只是你的图片不支持跨域，所以没渲染出来&lt;/p&gt;
&lt;/details&gt;
&lt;details&gt;
&lt;summary&gt;请教一个问题，知识库上传大文件提出报错，修改配置文件后，还是无法上传大文件，如下是配置文件中修改上传文件地方；&lt;/summary&gt;
&lt;img src=&#34;./images/002.png&#34; alt=&#34;示例图片&#34; width=&#34;400&#34;&gt;
&lt;p&gt;A:nginx 也要改；在.env里面；搜 nginx，应该能找到&lt;/p&gt;
&lt;/details&gt;
&lt;details&gt;
&lt;summary&gt;知识库永久排队问题&lt;/summary&gt;
A：修改 .env 中的一段：LOG_FILE=/app/logs/server.log；重启容器
&lt;/details&gt;
&lt;details&gt;
&lt;summary&gt;在哪里可以自学Dify?&lt;/summary&gt;
A：可以参考 https://dify101.com
&lt;/details&gt;
&lt;details&gt;
&lt;summary&gt;Dify生成图表有什么好方案？&lt;/summary&gt;
A：Dify自带了一些绘图功能，包括柱状图、曲线图等。 也可以自己写一个Echarts插件，从数据库读取数据并画图。 
&lt;/details&gt;
&lt;details&gt;
&lt;summary&gt;Dify知识库上传PDF乱码怎么办？&lt;/summary&gt;
A： 可以使用工具将PDF转换成Markdown格式再上传。
&lt;/details&gt;
&lt;details&gt;
&lt;summary&gt;DuckDuckGo 翻译 现在是不可用了吗&lt;/summary&gt;
A：应该是服务器挂了代理，但是dify是启在docker里面的，没挂。
&lt;/details&gt;
&lt;details&gt;
&lt;summary&gt;探索 Dify 的官方示例应用全部是英文，怎么切换成中文？&lt;/summary&gt;
A：点击右上角，头像，设置，语言，先切换成其它语言，再切换成中文，即可。
&lt;/details&gt;
&lt;details&gt;
&lt;summary&gt;管理员密码忘记了怎么搞？&lt;/summary&gt;
A：执行下面的指令：docker exec -it docker-api-1 flask reset-password
&lt;/details&gt;
&lt;h2 id=&#34;sandbox&#34;&gt;SANDBOX
&lt;/h2&gt;&lt;p&gt;sandbox 运行pandas，numpy&amp;gt;2.0，matplotlib，scikit-learn 代码老报错，可以使用我开发的另外一个简单版&lt;a class=&#34;link&#34; href=&#34;https://github.com/svcvit/dify-sandbox-py&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;dify-sandbox-py&lt;/a&gt;，这些依赖已经测试可以使用。&lt;/p&gt;
&lt;h2 id=&#34;dify-10-插件&#34;&gt;DIFY 1.0 插件
&lt;/h2&gt;&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/svcvit/dify_plugin_collection&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;dify_plugin_collection&lt;/a&gt; 仓库存放着 DIFY 的&lt;a class=&#34;link&#34; href=&#34;https://marketplace.dify.ai/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;官方市场&lt;/a&gt; 插件安装包，方便离线用户自由选择，不定期更新。&lt;/p&gt;
&lt;p&gt;如果你希望开发插件，我有2个插件的源码 &lt;a class=&#34;link&#34; href=&#34;https://github.com/svcvit/dify-plugin-google_translate&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;google翻译&lt;/a&gt;、&lt;a class=&#34;link&#34; href=&#34;https://github.com/svcvit/dify-plugin-tod_agent&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;对话Agent&lt;/a&gt; 希望可以给你参考。&lt;/p&gt;
&lt;h2 id=&#34;模型&#34;&gt;模型
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;你可以使用最近火热的deepseek-R1，硅基流动提供免费2000万Tokens，如果使用邀请注册，你和我都会获赠免费2000万token的额度：&lt;a class=&#34;link&#34; href=&#34;https://cloud.siliconflow.cn/i/MwADckCi&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://cloud.siliconflow.cn/i/MwADckCi&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;如果你希望体验 OpenAI 或 Anthropic 的模型，可以使用我搭建的服务 &lt;a class=&#34;link&#34; href=&#34;https://one.coffbox.com/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;CoffBox&lt;/a&gt; 的服务
配置方式参考 &lt;a class=&#34;link&#34; href=&#34;https://blog.vcvit.me/2024/11/13/how-to-use-one-api-in-dify/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;如何在Dify中使用CoffBox的服务&lt;/a&gt;
这个方式仅供个人使用，如果你需要大规模使用，&lt;a class=&#34;link&#34; href=&#34;https://openrouter.ai/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;openrouter&lt;/a&gt;会是个更好的选择。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;参考截图&#34;&gt;参考截图
&lt;/h2&gt;&lt;p&gt;所有 DSL 都为工作流模式，可以方便的发布为工具后，嵌入 ChatBot 流程。工作流会包含基础的输入、条件判断、变量聚合器、输出等内容。&lt;/p&gt;
&lt;h1 id=&#34;dsl-目录&#34;&gt;DSL 目录
&lt;/h1&gt;&lt;p&gt;你可以参考下面每个 yml 的描述，找到你需要的 Workflow，然后在 DSL 文件夹中找到对应的文件，复制文件的 URL，导入自己的 Dify 账号即可。&lt;/p&gt;
&lt;h2 id=&#34;2025-04-17更新&#34;&gt;2025-04-17更新
&lt;/h2&gt;&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;文件&lt;/th&gt;
          &lt;th&gt;描述&lt;/th&gt;
          &lt;th&gt;来源&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;sanic-web&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;这是一个使用DIFY作为服务层的数据库问答项目，项目有独立的web交互界面，请访问 &lt;a class=&#34;link&#34; href=&#34;https://github.com/apconw/sanic-web&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://github.com/apconw/sanic-web&lt;/a&gt; 查看详情。项目完成度很高，按照文档一步步操作即可启动。使用ollama的qwen和deepseek模型，即可获得不错的效果。&lt;/td&gt;
          &lt;td&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/apconw/sanic-web&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;sanic-web&lt;/a&gt;&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&#34;2025-04-16更新&#34;&gt;2025-04-16更新
&lt;/h2&gt;&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;文件&lt;/th&gt;
          &lt;th&gt;描述&lt;/th&gt;
          &lt;th&gt;来源&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;MCP-amap.yml&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;使用&lt;a class=&#34;link&#34; href=&#34;https://marketplace.dify.ai/plugins/hjlarry/agent&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;MCP Agent 策略&lt;/a&gt;进行MCP工具的调用示例，MCP使用&lt;a class=&#34;link&#34; href=&#34;https://lbs.amap.com/api/mcp-server/gettingstarted&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;高德地图&lt;/a&gt; 提供的在线服务，你可以先注册一个开发者账号，申请一个免费的Key。替换下图中马赛克部分  这里还有一个官方示例&lt;a class=&#34;link&#34; href=&#34;https://mp.weixin.qq.com/s/CDhqmLO1JXSB__aUMqoGoQ&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Dify MCP 插件指南：一键连接 Zapier，轻松调用 7000+ App 工具&lt;/a&gt;&lt;/td&gt;
          &lt;td&gt;&lt;a class=&#34;link&#34; href=&#34;https://vcvit.me/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;@svcvit&lt;/a&gt;&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&#34;2025-04-07更新&#34;&gt;2025-04-07更新
&lt;/h2&gt;&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;文件&lt;/th&gt;
          &lt;th&gt;描述&lt;/th&gt;
          &lt;th&gt;来源&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;图文知识库&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;如果你希望检索知识库后，是图配文的效果，你需要在知识库里加上图片的远程连接即可。可参考本示例，包含一个markdown文件。&lt;/td&gt;
          &lt;td&gt;&lt;a class=&#34;link&#34; href=&#34;https://vcvit.me/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;@svcvit&lt;/a&gt;&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&#34;2025-03-21更新&#34;&gt;2025-03-21更新
&lt;/h2&gt;&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;文件&lt;/th&gt;
          &lt;th&gt;描述&lt;/th&gt;
          &lt;th&gt;来源&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;Demo-tod_agent.yml&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;使用dify 1.0 的Agent节点，针对对话场景优化的Agent策略，例如：多轮对话、上下文理解、信息收集等。https://marketplace.dify.ai/plugins/svcvit/agent&lt;/td&gt;
          &lt;td&gt;&lt;a class=&#34;link&#34; href=&#34;https://vcvit.me/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;@svcvit&lt;/a&gt;&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&#34;2025-02-24更新&#34;&gt;2025-02-24更新
&lt;/h2&gt;&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;文件&lt;/th&gt;
          &lt;th&gt;描述&lt;/th&gt;
          &lt;th&gt;来源&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;Deep Researcher On Dify .yml&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;Deep Researcher 工作流复现方案&lt;/td&gt;
          &lt;td&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/AdamPlatin123/Open-Deep-Research-workflow-on-Dify&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;@AdamPlatin123&lt;/a&gt;&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&#34;2025-02-17更新&#34;&gt;2025-02-17更新
&lt;/h2&gt;&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;文件&lt;/th&gt;
          &lt;th&gt;描述&lt;/th&gt;
          &lt;th&gt;来源&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;Agent工具调用.yml&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;使用dify 1.0 的Agent节点，使用FC调用不同的工具，进行回复。&lt;/td&gt;
          &lt;td&gt;&lt;a class=&#34;link&#34; href=&#34;https://vcvit.me/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;@svcvit&lt;/a&gt;&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&#34;2025-01-23更新&#34;&gt;2025-01-23更新
&lt;/h2&gt;&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;文件&lt;/th&gt;
          &lt;th&gt;描述&lt;/th&gt;
          &lt;th&gt;来源&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;旅行Demo.yml&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;使用dify 1.0 的Agent节点，演示旅行信息收集，Tool调用，对话历史上下文存储。将对话消息存入对话变量，纳入Agent的思考上下文。&lt;/td&gt;
          &lt;td&gt;&lt;a class=&#34;link&#34; href=&#34;https://vcvit.me/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;@svcvit&lt;/a&gt;&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&#34;2025-01-21更新&#34;&gt;2025-01-21更新
&lt;/h2&gt;&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;文件&lt;/th&gt;
          &lt;th&gt;描述&lt;/th&gt;
          &lt;th&gt;来源&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;春联生成器.yml&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;春联生成工具，注意字体需要电脑有，可以按需修改字体。&lt;/td&gt;
          &lt;td&gt;微信群@Junjie.M&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;春联生成器 (“福”到了版本).yml&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;微信群@Junjie.M&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;完蛋！我被LLM包围了！ .yml&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;【完蛋！我被LLM包围了！】借鉴了：https://github.com/modelscope/modelscope/tree/master/examples/apps/llm_riddles&lt;/td&gt;
          &lt;td&gt;微信群@Junjie.M&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&#34;2024-12-05更新&#34;&gt;2024-12-05更新
&lt;/h2&gt;&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;文件&lt;/th&gt;
          &lt;th&gt;描述&lt;/th&gt;
          &lt;th&gt;来源&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;File_read.yml&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;使用sandbox读取文件并解析，需要使用&lt;a class=&#34;link&#34; href=&#34;https://github.com/svcvit/dify-sandbox-py&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;dify-sandbox-py&lt;/a&gt;，挂在上传目录，这是一个pandas读取csv的示例，具体方法参考右侧来源链接&lt;/td&gt;
          &lt;td&gt;&lt;a class=&#34;link&#34; href=&#34;https://blog.vcvit.me/2024/12/05/use-dify-sandbox-to-parse-files/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;@svcvit&lt;/a&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;runLLMCode.yml&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;使用LLM生成的Code，再通过sandbox去执行。因为code节点无法直接引用LLM的代码，所以通过HTTP请求的方式执行，这里有一个分析csv的示例。&lt;/td&gt;
          &lt;td&gt;&lt;a class=&#34;link&#34; href=&#34;https://vcvit.me/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;@svcvit&lt;/a&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;数据分析.7z&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;数据分析的示例，可以根据需求查询数据库，生成对应的解读和图表。示例中包括流程文件和flask的服务。&lt;/td&gt;
          &lt;td&gt;微信群：简单&amp;amp;平凡@&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&#34;2024-11-29更新&#34;&gt;2024-11-29更新
&lt;/h2&gt;&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;文件&lt;/th&gt;
          &lt;th&gt;描述&lt;/th&gt;
          &lt;th&gt;来源&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;LanguageConsistencyChecker.yml&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;三语言检查器，主要处理翻译的内容优化，它还有一个web端配套&lt;/td&gt;
          &lt;td&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/stvlynn/langfixer&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;langfixer&lt;/a&gt;&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&#34;2024-11-22更新&#34;&gt;2024-11-22更新
&lt;/h2&gt;&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;文件&lt;/th&gt;
          &lt;th&gt;描述&lt;/th&gt;
          &lt;th&gt;来源&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;matplotlib.yml&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;使用matplotlib画图，将图片输出为base64，再通过回复渲染图片。注意，官方sandbox权限比较复杂，安装完matplotlib也无法使用，请使用&lt;a class=&#34;link&#34; href=&#34;https://github.com/svcvit/dify-sandbox-py&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;dify-sandbox-py&lt;/a&gt;&lt;/td&gt;
          &lt;td&gt;&lt;a class=&#34;link&#34; href=&#34;https://vcvit.me/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;@svcvit&lt;/a&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;jieba.yml&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;jieba 分词示例，请使用&lt;a class=&#34;link&#34; href=&#34;https://github.com/svcvit/dify-sandbox-py&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;dify-sandbox-py&lt;/a&gt;&lt;/td&gt;
          &lt;td&gt;&lt;a class=&#34;link&#34; href=&#34;https://vcvit.me/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;@svcvit&lt;/a&gt;&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&#34;2024-11-20更新&#34;&gt;2024-11-20更新
&lt;/h2&gt;&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;文件&lt;/th&gt;
          &lt;th&gt;描述&lt;/th&gt;
          &lt;th&gt;来源&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;json-repair.yml&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;大模型输出的JSON格式不标准，少个引号，多个括号，通过这个流程修复为可解析的的JSON&lt;/td&gt;
          &lt;td&gt;&lt;a class=&#34;link&#34; href=&#34;https://vcvit.me/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;@svcvit&lt;/a&gt;&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&#34;2024-11-15更新&#34;&gt;2024-11-15更新
&lt;/h2&gt;&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;文件&lt;/th&gt;
          &lt;th&gt;描述&lt;/th&gt;
          &lt;th&gt;来源&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;json_translate.yml&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;解析JSON中的需要翻译的内容，使用迭代器进行翻译，再组合成新的JSON，保持原有JSON的结构&lt;/td&gt;
          &lt;td&gt;&lt;a class=&#34;link&#34; href=&#34;https://vcvit.me/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;@svcvit&lt;/a&gt;&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&#34;2024-11-14更新&#34;&gt;2024-11-14更新
&lt;/h2&gt;&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;文件&lt;/th&gt;
          &lt;th&gt;描述&lt;/th&gt;
          &lt;th&gt;来源&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;腾讯云SubtitleInfo.yml&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;这是一个代码相关的示例，通过腾讯云的授权信息加密，获取需要的内容信息参考。如果你需要使用代码节点，可以参考用法。&lt;/td&gt;
          &lt;td&gt;微信分享群&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;chart_demo.yml&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;通过回复内容渲染charts的图表内容。当然你可以可以根据sql查询数据，拼接成需要的内容&lt;/td&gt;
          &lt;td&gt;&lt;a class=&#34;link&#34; href=&#34;https://vcvit.me/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;@svcvit&lt;/a&gt;&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&#34;2024-11-12更新&#34;&gt;2024-11-12更新
&lt;/h2&gt;&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;文件&lt;/th&gt;
          &lt;th&gt;描述&lt;/th&gt;
          &lt;th&gt;来源&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;Form表单聊天Demo.yml&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;在对话框登录之后有权限访问模型&lt;/td&gt;
          &lt;td&gt;&lt;a class=&#34;link&#34; href=&#34;https://vcvit.me/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;@svcvit&lt;/a&gt;&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&#34;翻译&#34;&gt;翻译
&lt;/h2&gt;&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;文件&lt;/th&gt;
          &lt;th&gt;描述&lt;/th&gt;
          &lt;th&gt;来源&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;中译英.yml&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;通过宝玉的 Prompt，直译-&amp;gt;反思-&amp;gt;意译，将中文翻译成高质量的英文。&lt;/td&gt;
          &lt;td&gt;暂无&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;DuckDuckGo 翻译+LLM 二次翻译.yml&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;与三步翻译类似，但是把第一步的直译变成传统翻译引擎翻译，节省 Token，提高翻译效率，同时提高翻译质量。&lt;/td&gt;
          &lt;td&gt;暂无&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;translation_workflow.yml&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;使用吴恩达提出 Agentic Workflow 制作的翻译工具，录入&lt;code&gt;输入语言&lt;/code&gt;、&lt;code&gt;目标语言&lt;/code&gt;、&lt;code&gt;国家&lt;/code&gt;、&lt;code&gt;原始文本&lt;/code&gt; 4 个参数，提供更细致的翻译结果&lt;/td&gt;
          &lt;td&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/andrewyng/translation-agent&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;translation-agent&lt;/a&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;宝玉的英译中优化版.yml&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;宝玉的科技文章翻译优化版本，主要优化了提示词和 xml 标签&lt;/td&gt;
          &lt;td&gt;&lt;a class=&#34;link&#34; href=&#34;https://baoyu.io/blog/prompt-engineering/translator-gpt-prompt-v2-1-improvement&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;翻译 GPT 的提示词更新和优化&lt;/a&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;全书翻译.yml&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;DIFY 官方示例，切分长文本，再迭代器内翻译&lt;/td&gt;
          &lt;td&gt;DIFY 官方探索内容&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&#34;工具&#34;&gt;工具
&lt;/h2&gt;&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;文件&lt;/th&gt;
          &lt;th&gt;描述&lt;/th&gt;
          &lt;th&gt;来源&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;SEO Slug Generator.yml&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;给自己的博文生成 url slug，参考来源于宝玉的 X&lt;/td&gt;
          &lt;td&gt;&lt;a class=&#34;link&#34; href=&#34;https://x.com/dotey/status/1801280536125608265&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;twitter&lt;/a&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;Document_chat_template.yml&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;一个通过知识库聊天的模版&lt;/td&gt;
          &lt;td&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/Winson-030/dify-DSL&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Winson-030&lt;/a&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;搜索大师.yml&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;通过 SearXNG 进行搜索，再通过 jina 获取搜索内容&lt;/td&gt;
          &lt;td&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/Winson-030/dify-DSL&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Winson-030&lt;/a&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;标题党创作.yml&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;一位爆款网文作家&lt;/td&gt;
          &lt;td&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/ghostviper/dify-workflow&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;ghostviper&lt;/a&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;文章仿写-单图_多图自动搭配.yml&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;文章仿写&lt;/td&gt;
          &lt;td&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/ghostviper/dify-workflow&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;ghostviper&lt;/a&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;Text to Card Iteration.yml&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;自动生成小红书这种卡片。&lt;/td&gt;
          &lt;td&gt;🔥Dify Workflow-Agent 设计交流 @Arthur&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;Dify 运营一条龙.yml&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;小红书、抖音、微博、B 站一条龙运营。（2024/11/21更新，主流程已经不能用了，因为图片生成那个服务问题很多，而且限制了分辨率，导致生成图完全不对了，全当看个思路。）&lt;/td&gt;
          &lt;td&gt;&lt;a class=&#34;link&#34; href=&#34;https://www.youtube.com/watch?v=kCrQp8YZTsQ&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Dify 一键生成多尺寸 Cover 与全平台文案&lt;/a&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;Jina Reader Jinja.yml&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;一个基于 TavilySearch 和 Jina 的问答流程&lt;/td&gt;
          &lt;td&gt;🔥Dify Workflow-Agent 设计交流群分享&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;llm2o1.cn.yml&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;任务拆解→提取步骤→迭代步骤执行→归纳总结→输出结果&lt;/td&gt;
          &lt;td&gt;&lt;a class=&#34;link&#34; href=&#34;https://x.com/okooo5km/status/1838801763778072862&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;@okooo5km&lt;/a&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;dify_course_demo.yml&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;自动化生成全套教程。&lt;/td&gt;
          &lt;td&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/pekingmuge/dify_course&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;dify_course&lt;/a&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;simple-kimi.yml&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;简易自制 Kimi&lt;/td&gt;
          &lt;td&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/aws-samples/dify-aws-tool/tree/main/workflow&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;aws-samples&lt;/a&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;Claude3 Code Translation.yml&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;不同代码种类之间的翻译工作流&lt;/td&gt;
          &lt;td&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/aws-samples/dify-aws-tool/tree/main/workflow&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;aws-samples&lt;/a&gt;&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&#34;聊天机器人&#34;&gt;聊天机器人
&lt;/h2&gt;&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;文件&lt;/th&gt;
          &lt;th&gt;描述&lt;/th&gt;
          &lt;th&gt;来源&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;根据用户的意图进行回复.yml&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;根据用户的聊天内容，进行意图判定，根据意图选择不同的工作流路径进行回复，再风格化聊天机器人话术&lt;/td&gt;
          &lt;td&gt;无&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;mem0ai&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;一个有记忆的聊天流程，完整代码见来源链接&lt;/td&gt;
          &lt;td&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/tonori/dify-plugin-mem0ai&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;dify-plugin-mem0ai&lt;/a&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;记忆测试.yml&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;添加短期记忆，CoT 思维链的示例，自动问答机器人也可以主动触达，根据上下文选择最佳回复&lt;/td&gt;
          &lt;td&gt;来自微信 svcvit&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&#34;代码&#34;&gt;代码
&lt;/h2&gt;&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;文件&lt;/th&gt;
          &lt;th&gt;描述&lt;/th&gt;
          &lt;th&gt;来源&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;Python Coding Prompt.yml&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;通过聊天对话方式生成 Python 代码&lt;/td&gt;
          &lt;td&gt;&lt;a class=&#34;link&#34; href=&#34;https://www.reddit.com/r/ClaudeAI/comments/1dwra38/sonnet_35_for_coding_system_prompt/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Sonnet 3.5 for Coding 😍 - System Prompt&lt;/a&gt;&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&#34;使用方法&#34;&gt;使用方法
&lt;/h2&gt;&lt;p&gt;注册 &lt;a class=&#34;link&#34; href=&#34;https://cloud.dify.ai/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Dify&lt;/a&gt; 账号，添加模型。&lt;/p&gt;
&lt;p&gt;下载本项目至本地，导入 DLS 文件即可，当然，你可以进行必要的调整，例如模版的调整，或提示词的调整。&lt;/p&gt;
</description>
        </item>
        <item>
        <title>nvim-lspconfig</title>
        <link>https://producthunt.programnotes.cn/en/p/nvim-lspconfig/</link>
        <pubDate>Thu, 17 Apr 2025 15:30:46 +0800</pubDate>
        
        <guid>https://producthunt.programnotes.cn/en/p/nvim-lspconfig/</guid>
        <description>&lt;img src="https://images.unsplash.com/photo-1719451643491-d41067a8bffd?ixid=M3w0NjAwMjJ8MHwxfHJhbmRvbXx8fHx8fHx8fDE3NDQ4NzQ5MzB8&amp;ixlib=rb-4.0.3" alt="Featured image of post nvim-lspconfig" /&gt;&lt;h1 id=&#34;neovimnvim-lspconfig&#34;&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/neovim/nvim-lspconfig&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;neovim/nvim-lspconfig&lt;/a&gt;
&lt;/h1&gt;&lt;h1 id=&#34;nvim-lspconfig&#34;&gt;nvim-lspconfig
&lt;/h1&gt;&lt;p&gt;nvim-lspconfig is a &amp;ldquo;data only&amp;rdquo; repo, providing basic, default &lt;a class=&#34;link&#34; href=&#34;https://neovim.io/doc/user/lsp.html&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Nvim LSP client&lt;/a&gt;
configurations for various LSP servers.&lt;/p&gt;
&lt;p&gt;View &lt;a class=&#34;link&#34; href=&#34;doc/configs.md&#34; &gt;all configs&lt;/a&gt; or &lt;code&gt;:help lspconfig-all&lt;/code&gt; from Nvim.&lt;/p&gt;
&lt;h2 id=&#34;important-&#34;&gt;Important ⚠️
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;These configs are &lt;strong&gt;best-effort and supported by the community (you).&lt;/strong&gt; See &lt;a class=&#34;link&#34; href=&#34;#contributions&#34; &gt;contributions&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;If you found a bug in Nvim LSP (&lt;code&gt;:help lsp&lt;/code&gt;), &lt;a class=&#34;link&#34; href=&#34;https://github.com/neovim/neovim/issues/new?assignees=&amp;amp;labels=bug%2Clsp&amp;amp;template=lsp_bug_report.yml&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;report it to Neovim core&lt;/a&gt;.
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Do not&lt;/strong&gt; report it here. Only configuration data lives here.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;This repo only provides &lt;em&gt;configurations&lt;/em&gt;. Its programmatic API is deprecated and must not be used externally.
&lt;ul&gt;
&lt;li&gt;The &amp;ldquo;framework&amp;rdquo; parts (&lt;em&gt;not&lt;/em&gt; the configs) of nvim-lspconfig &lt;a class=&#34;link&#34; href=&#34;https://github.com/neovim/neovim/issues/28479&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;will be upstreamed to Nvim core&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;install&#34;&gt;Install
&lt;/h2&gt;&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://luarocks.org/modules/neovim/nvim-lspconfig&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;&lt;img src=&#34;https://img.shields.io/luarocks/v/neovim/nvim-lspconfig?logo=lua&amp;amp;color=purple&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;LuaRocks&#34;
	
	
&gt;&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Requires Nvim 0.10 above. Update Nvim and nvim-lspconfig before reporting an issue.&lt;/li&gt;
&lt;li&gt;Install nvim-lspconfig using Vim&amp;rsquo;s &amp;ldquo;packages&amp;rdquo; feature:
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git clone https://github.com/neovim/nvim-lspconfig ~/.config/nvim/pack/nvim/start/nvim-lspconfig
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;Or use a 3rd-party plugin manager (consult the documentation for your plugin manager).&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;quickstart&#34;&gt;Quickstart
&lt;/h2&gt;&lt;ol&gt;
&lt;li&gt;Install a language server, e.g. &lt;a class=&#34;link&#34; href=&#34;doc/configs.md#pyright&#34; &gt;pyright&lt;/a&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;npm i -g pyright
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;Add the language server setup to your init.lua.
&lt;ul&gt;
&lt;li&gt;Nvim 0.11+ (see &lt;a class=&#34;link&#34; href=&#34;#vimlspconfig&#34; &gt;vim.lsp.config&lt;/a&gt;)
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-lua&#34; data-lang=&#34;lua&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;vim.lsp&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;enable&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;pyright&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;Nvim 0.10 (legacy, &lt;strong&gt;not supported&lt;/strong&gt;)
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-lua&#34; data-lang=&#34;lua&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;require&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;lspconfig&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pyright.setup&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Ensure your project/workspace contains a root marker as specified in &lt;code&gt;:help lspconfig-all&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Open a code file in Nvim. LSP will attach and provide diagnostics.
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;nvim main.py
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;Run &lt;code&gt;:checkhealth lsp&lt;/code&gt; to see the status or to troubleshoot.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Read &lt;code&gt;:help lspconfig&lt;/code&gt; for details. Read &lt;code&gt;:help lspconfig-all&lt;/code&gt; for the full list of server-specific details.
For servers not on your &lt;code&gt;$PATH&lt;/code&gt; (e.g., &lt;code&gt;jdtls&lt;/code&gt;, &lt;code&gt;elixirls&lt;/code&gt;), you must manually set the &lt;code&gt;cmd&lt;/code&gt; parameter, see &lt;a class=&#34;link&#34; href=&#34;#vim.lsp.config&#34; &gt;vim.lsp.config&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&#34;configuration&#34;&gt;Configuration
&lt;/h2&gt;&lt;p&gt;Nvim sets some default options and mappings when a buffer attaches to LSP (see &lt;a class=&#34;link&#34; href=&#34;https://neovim.io/doc/user/lsp.html#lsp-config&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;&lt;code&gt;:help lsp-config&lt;/code&gt;&lt;/a&gt;). In particular:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://neovim.io/doc/user/tagsrch.html#tag-function&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;&lt;code&gt;&#39;tagfunc&#39;&lt;/code&gt;&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;Enables &amp;ldquo;go to definition&amp;rdquo; capabilities using &lt;a class=&#34;link&#34; href=&#34;https://neovim.io/doc/user/tagsrch.html#CTRL-%5D&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;&lt;code&gt;&amp;lt;C-]&amp;gt;&lt;/code&gt;&lt;/a&gt; and other &lt;a class=&#34;link&#34; href=&#34;https://neovim.io/doc/user/tagsrch.html#tag-commands&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;tag commands&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://neovim.io/doc/user/options.html#%27omnifunc%27&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;&lt;code&gt;&#39;omnifunc&#39;&lt;/code&gt;&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;Enables (manual) omni mode completion with &lt;code&gt;&amp;lt;C-X&amp;gt;&amp;lt;C-O&amp;gt;&lt;/code&gt; in Insert mode. For &lt;em&gt;auto&lt;/em&gt;completion, an &lt;a class=&#34;link&#34; href=&#34;https://github.com/neovim/nvim-lspconfig/wiki/Autocompletion&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;autocompletion plugin&lt;/a&gt; is required.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://neovim.io/doc/user/options.html#%27formatexpr%27&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;&lt;code&gt;&#39;formatexpr&#39;&lt;/code&gt;&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;Enables LSP formatting with &lt;a class=&#34;link&#34; href=&#34;https://neovim.io/doc/user/change.html#gq&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;&lt;code&gt;gq&lt;/code&gt;&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;K&lt;/code&gt; maps to &lt;a class=&#34;link&#34; href=&#34;https://neovim.io/doc/user/lsp.html#vim.lsp.buf.hover%28%29&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;&lt;code&gt;vim.lsp.buf.hover()&lt;/code&gt;&lt;/a&gt; in Normal mode.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;[d&lt;/code&gt; and &lt;code&gt;]d&lt;/code&gt; map to &lt;code&gt;vim.diagnostic.goto_prev()&lt;/code&gt; and &lt;code&gt;vim.diagnostic.goto_next()&lt;/code&gt;, respectively.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;&amp;lt;C-W&amp;gt;d&lt;/code&gt; maps to &lt;code&gt;vim.diagnostic.open_float()&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Further customization can be achieved using the &lt;a class=&#34;link&#34; href=&#34;https://neovim.io/doc/user/lsp.html#LspAttach&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;&lt;code&gt;LspAttach&lt;/code&gt;&lt;/a&gt; autocommand event.
The &lt;a class=&#34;link&#34; href=&#34;https://neovim.io/doc/user/lsp.html#LspAttach&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;&lt;code&gt;LspDetach&lt;/code&gt;&lt;/a&gt; autocommand event can be used to &amp;ldquo;cleanup&amp;rdquo; mappings if a buffer becomes detached from an LSP server.
See &lt;a class=&#34;link&#34; href=&#34;https://neovim.io/doc/user/lsp.html#LspAttach&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;&lt;code&gt;:h LspAttach&lt;/code&gt;&lt;/a&gt; and &lt;a class=&#34;link&#34; href=&#34;https://neovim.io/doc/user/lsp.html#LspDetach&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;&lt;code&gt;:h LspDetach&lt;/code&gt;&lt;/a&gt; for details and examples.
See &lt;a class=&#34;link&#34; href=&#34;https://neovim.io/doc/user/lsp.html#lsp-buf&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;&lt;code&gt;:h lsp-buf&lt;/code&gt;&lt;/a&gt; for details on other LSP functions.&lt;/p&gt;
&lt;p&gt;Extra settings can be specified for each LSP server:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Nvim 0.11+ (see &lt;a class=&#34;link&#34; href=&#34;#vim.lsp.config&#34; &gt;vim.lsp.config&lt;/a&gt;)
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;6
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-lua&#34; data-lang=&#34;lua&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;vim.lsp&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;config&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;rust_analyzer&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;c1&#34;&gt;-- Server-specific settings. See `:help lsp-quickstart`&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;n&#34;&gt;settings&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;rust-analyzer&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;})&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;Nvim 0.10 (legacy, &lt;strong&gt;not supported&lt;/strong&gt;)
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;7
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-lua&#34; data-lang=&#34;lua&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kd&#34;&gt;local&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;lspconfig&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;require&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;lspconfig&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;lspconfig.rust_analyzer&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;setup&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;c1&#34;&gt;-- Server-specific settings. See `:help lspconfig-setup`&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;n&#34;&gt;settings&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;rust-analyzer&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;vimlspconfig&#34;&gt;vim.lsp.config
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;nvim-lspconfig&lt;/code&gt; includes configurations compatible with &lt;code&gt;vim.lsp&lt;/code&gt; under &lt;a class=&#34;link&#34; href=&#34;./lsp/&#34; &gt;&lt;code&gt;lsp/&lt;/code&gt;&lt;/a&gt;, so servers can be enabled (auto-activated when a filetype is opened) with:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-lua&#34; data-lang=&#34;lua&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;vim.lsp&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;enable&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;pyright&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;and configured with:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-lua&#34; data-lang=&#34;lua&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;vim.lsp&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;config&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;pyright&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;n&#34;&gt;cmd&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;…&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;})&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;which extends the configuration under &lt;a class=&#34;link&#34; href=&#34;./lsp/&#34; &gt;&lt;code&gt;lsp/&lt;/code&gt;&lt;/a&gt;. For further information see &lt;a class=&#34;link&#34; href=&#34;https://neovim.io/doc/user/lsp.html#lsp-config&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;&lt;code&gt;:help lsp-config&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;[!WARNING]&lt;br&gt;
Some servers are &lt;a class=&#34;link&#34; href=&#34;https://github.com/neovim/nvim-lspconfig/issues/3705&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;currently missing&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&#34;troubleshooting&#34;&gt;Troubleshooting
&lt;/h2&gt;&lt;p&gt;The most common reasons a language server does not start or attach are:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Language server is not installed. nvim-lspconfig does not install language servers for you. You should be able to run the &lt;code&gt;cmd&lt;/code&gt; defined in each server&amp;rsquo;s Lua module from the command line and see that the language server starts. If the &lt;code&gt;cmd&lt;/code&gt; is an executable name instead of an absolute path to the executable, ensure it is on your path.&lt;/li&gt;
&lt;li&gt;Missing filetype plugins. Certain languages are not detecting by Vim/Nvim because they have not yet been added to the filetype detection system. Ensure &lt;code&gt;:set ft?&lt;/code&gt; shows the filetype and not an empty value.&lt;/li&gt;
&lt;li&gt;Not triggering root detection. &lt;strong&gt;Some&lt;/strong&gt; language servers will only start if it is opened in a directory, or child directory, containing a file which signals the &lt;em&gt;root&lt;/em&gt; of the project. Most of the time, this is a &lt;code&gt;.git&lt;/code&gt; folder, but each server defines the root config in the lua file. See &lt;a class=&#34;link&#34; href=&#34;doc/configs.md&#34; &gt;doc/configs.md&lt;/a&gt; or the source for the list of root directories.&lt;/li&gt;
&lt;li&gt;You must pass &lt;code&gt;capabilities&lt;/code&gt; for &lt;strong&gt;each&lt;/strong&gt; &lt;code&gt;setup {}&lt;/code&gt; if you want these to take effect.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Do not call &lt;code&gt;setup {}&lt;/code&gt; twice for the same server&lt;/strong&gt;. The second call to &lt;code&gt;setup {}&lt;/code&gt; will overwrite the first.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;bug-reports&#34;&gt;Bug reports
&lt;/h2&gt;&lt;p&gt;If you found a bug with LSP functionality, &lt;a class=&#34;link&#34; href=&#34;https://github.com/neovim/neovim/issues/new?assignees=&amp;amp;labels=bug%2Clsp&amp;amp;template=lsp_bug_report.yml&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;report it to Neovim core&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Before reporting a bug, check your logs and the output of &lt;code&gt;:LspInfo&lt;/code&gt;. Add the following to your init.vim to enable logging:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-lua&#34; data-lang=&#34;lua&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;vim.lsp&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;set_log_level&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;debug&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Attempt to run the language server, and open the log with:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;:LspLog
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Most of the time, the reason for failure is present in the logs.&lt;/p&gt;
&lt;h2 id=&#34;commands&#34;&gt;Commands
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;:LspInfo&lt;/code&gt; (alias to &lt;code&gt;:checkhealth vim.lsp&lt;/code&gt;) shows the status of active and configured language servers.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;:LspStart &amp;lt;config_name&amp;gt;&lt;/code&gt; Start the requested server name. Will only successfully start if the command detects a root directory matching the current config. Pass &lt;code&gt;autostart = false&lt;/code&gt; to your &lt;code&gt;.setup{}&lt;/code&gt; call for a language server if you would like to launch clients solely with this command. Defaults to all servers matching current buffer filetype.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;:LspStop [&amp;lt;client_id_or_name&amp;gt; ...]&lt;/code&gt; Stops the given server(s). Defaults to
stopping all servers active on the current buffer. To force stop add &lt;code&gt;++force&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;:LspRestart [&amp;lt;client_id_or_name&amp;gt; ...]&lt;/code&gt; Restarts the given client(s), and attempts to reattach to all
previously attached buffers.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;contributions&#34;&gt;Contributions
&lt;/h2&gt;&lt;p&gt;If a language server is missing from &lt;a class=&#34;link&#34; href=&#34;doc/configs.md&#34; &gt;configs.md&lt;/a&gt;, contributing
a new configuration for it helps others, especially if the server requires special setup. Follow these steps:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Read &lt;a class=&#34;link&#34; href=&#34;CONTRIBUTING.md&#34; &gt;CONTRIBUTING.md&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Create a new file at &lt;code&gt;lsp/SERVER_NAME.lua&lt;/code&gt;.
&lt;ul&gt;
&lt;li&gt;Copy an &lt;a class=&#34;link&#34; href=&#34;https://github.com/neovim/nvim-lspconfig/tree/master/lsp&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;existing config&lt;/a&gt;
to get started. Most configs are simple. For an extensive example see
&lt;a class=&#34;link&#34; href=&#34;https://github.com/neovim/nvim-lspconfig/blob/master/lsp/texlab.lua&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;texlab.lua&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Ask questions on &lt;a class=&#34;link&#34; href=&#34;https://github.com/neovim/neovim/discussions&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;GitHub Discussions&lt;/a&gt; or in the &lt;a class=&#34;link&#34; href=&#34;https://app.element.io/#/room/#neovim:matrix.org&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Neovim Matrix room&lt;/a&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;release-process&#34;&gt;Release process
&lt;/h2&gt;&lt;p&gt;To publish a release:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Create and push a new &lt;a class=&#34;link&#34; href=&#34;https://github.com/neovim/nvim-lspconfig/tags&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;tag&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;After pushing the tag, a &lt;a class=&#34;link&#34; href=&#34;./.github/workflows/release.yml&#34; &gt;GitHub action&lt;/a&gt;
will automatically package the plugin and publish the release to LuaRocks.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;license&#34;&gt;License
&lt;/h2&gt;&lt;p&gt;Copyright Neovim contributors. All rights reserved.&lt;/p&gt;
&lt;p&gt;nvim-lspconfig is licensed under the terms of the Apache 2.0 license.&lt;/p&gt;
&lt;p&gt;See &lt;a class=&#34;link&#34; href=&#34;./LICENSE.md&#34; &gt;LICENSE.md&lt;/a&gt;&lt;/p&gt;
</description>
        </item>
        
    </channel>
</rss>
