<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:media="http://search.yahoo.com/mrss/">
  <channel>
    
    <title>GitHub C++ Monthly Trending Repositories</title>
    <description>Monthly Trending Repositories of C++ on GitHub</description>
    
    <pubDate>Wed, 12 Aug 2026 04:26:20 GMT</pubDate>
    <link>https://mshibanami.github.io/GitHubTrendingRSS</link>
    
    <item>
      <title>hyprwm/Hyprland</title>
      <link>https://github.com/hyprwm/Hyprland</link>
      <description>&lt;p&gt;Hyprland is an independent, highly customizable, dynamic tiling Wayland compositor that doesn&#39;t sacrifice on its looks.&lt;/p&gt;&lt;hr&gt;&lt;div align=&quot;center&quot;&gt; 
 &lt;img src=&quot;https://raw.githubusercontent.com/hyprwm/Hyprland/main/assets/header.svg?sanitize=true&quot; width=&quot;750&quot; height=&quot;300&quot; alt=&quot;banner&quot; /&gt; 
 &lt;br /&gt; 
 &lt;p&gt;&lt;a href=&quot;https://github.com/hyprwm/Hyprland/actions/workflows/ci.yaml&quot;&gt;&lt;img src=&quot;https://github.com/hyprwm/Hyprland/actions/workflows/ci.yaml/badge.svg?sanitize=true&quot; alt=&quot;Badge Workflow&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://raw.githubusercontent.com/hyprwm/Hyprland/main/LICENSE&quot;&gt;&lt;img src=&quot;https://img.shields.io/github/license/hyprwm/Hyprland&quot; alt=&quot;Badge License&quot; /&gt;&lt;/a&gt; &lt;img src=&quot;https://img.shields.io/github/languages/top/hyprwm/Hyprland&quot; alt=&quot;Badge Language&quot; /&gt; &lt;a href=&quot;https://github.com/hyprwm/Hyprland/pulls&quot;&gt;&lt;img src=&quot;https://img.shields.io/github/issues-pr/hyprwm/Hyprland&quot; alt=&quot;Badge Pull Requests&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://github.com/hyprwm/Hyprland/issues&quot;&gt;&lt;img src=&quot;https://img.shields.io/github/issues/hyprwm/Hyprland&quot; alt=&quot;Badge Issues&quot; /&gt;&lt;/a&gt; &lt;img src=&quot;https://img.shields.io/badge/Hi-mom!-ff69b4&quot; alt=&quot;Badge Hi Mom&quot; /&gt;&lt;br /&gt;&lt;/p&gt; 
 &lt;br /&gt; 
 &lt;p&gt;Hyprland is a 100% independent, dynamic tiling Wayland compositor that doesn&#39;t sacrifice on its looks.&lt;/p&gt; 
 &lt;p&gt;It provides the latest Wayland features, is highly customizable, has all the eyecandy, the most powerful plugins, easy IPC, much more QoL stuff than other compositors and more... &lt;br /&gt; &lt;br /&gt;&lt;/p&gt; 
 &lt;hr /&gt; 
 &lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://wiki.hypr.land/Getting-Started/Installation/&quot;&gt;&lt;kbd&gt; &lt;br /&gt; Install &lt;br /&gt; &lt;/kbd&gt;&lt;/a&gt;&lt;/strong&gt;  &lt;strong&gt;&lt;a href=&quot;https://wiki.hypr.land/Getting-Started/Master-Tutorial/&quot;&gt;&lt;kbd&gt; &lt;br /&gt; Quick Start &lt;br /&gt; &lt;/kbd&gt;&lt;/a&gt;&lt;/strong&gt;  &lt;strong&gt;&lt;a href=&quot;https://wiki.hypr.land/Configuring/&quot;&gt;&lt;kbd&gt; &lt;br /&gt; Configure &lt;br /&gt; &lt;/kbd&gt;&lt;/a&gt;&lt;/strong&gt;  &lt;strong&gt;&lt;a href=&quot;https://wiki.hypr.land/Contributing-and-Debugging/&quot;&gt;&lt;kbd&gt; &lt;br /&gt; Contribute &lt;br /&gt; &lt;/kbd&gt;&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt; 
 &lt;hr /&gt; 
 &lt;br /&gt; 
&lt;/div&gt; 
&lt;h1&gt;Features&lt;/h1&gt; 
&lt;ul&gt; 
 &lt;li&gt;All of the eyecandy: gradient borders, blur, animations, shadows and much more&lt;/li&gt; 
 &lt;li&gt;A lot of customization&lt;/li&gt; 
 &lt;li&gt;100% independent, no wlroots, no libweston, no kwin, no mutter.&lt;/li&gt; 
 &lt;li&gt;Custom bezier curves for the best animations&lt;/li&gt; 
 &lt;li&gt;Powerful plugin support&lt;/li&gt; 
 &lt;li&gt;Built-in plugin manager&lt;/li&gt; 
 &lt;li&gt;Tearing support for better gaming performance&lt;/li&gt; 
 &lt;li&gt;Easily expandable and readable codebase&lt;/li&gt; 
 &lt;li&gt;Fast and active development&lt;/li&gt; 
 &lt;li&gt;Not afraid to provide bleeding-edge features&lt;/li&gt; 
 &lt;li&gt;Config reloaded instantly upon saving&lt;/li&gt; 
 &lt;li&gt;Fully dynamic workspaces&lt;/li&gt; 
 &lt;li&gt;Two built-in layouts and more available as plugins&lt;/li&gt; 
 &lt;li&gt;Global keybinds passed to your apps of choice&lt;/li&gt; 
 &lt;li&gt;Tiling/pseudotiling/floating/fullscreen windows&lt;/li&gt; 
 &lt;li&gt;Special workspaces (scratchpads)&lt;/li&gt; 
 &lt;li&gt;Window groups (tabbed mode)&lt;/li&gt; 
 &lt;li&gt;Powerful window/monitor/layer rules&lt;/li&gt; 
 &lt;li&gt;Socket-based IPC&lt;/li&gt; 
 &lt;li&gt;Native IME and Input Panels Support&lt;/li&gt; 
 &lt;li&gt;and much more...&lt;/li&gt; 
&lt;/ul&gt; 
&lt;br /&gt; 
&lt;br /&gt; 
&lt;div align=&quot;center&quot;&gt; 
 &lt;h1&gt;Gallery&lt;/h1&gt; 
 &lt;br /&gt; 
 &lt;p&gt;&lt;img src=&quot;https://raw.githubusercontent.com/hyprwm/Hyprland/main/assets/prev1.png&quot; alt=&quot;Preview A&quot; /&gt;&lt;/p&gt; 
 &lt;br /&gt; 
 &lt;p&gt;&lt;img src=&quot;https://raw.githubusercontent.com/hyprwm/Hyprland/main/assets/prev2.png&quot; alt=&quot;Preview B&quot; /&gt;&lt;/p&gt; 
 &lt;br /&gt; 
 &lt;p&gt;&lt;img src=&quot;https://raw.githubusercontent.com/hyprwm/Hyprland/main/assets/prev3.png&quot; alt=&quot;Preview C&quot; /&gt;&lt;/p&gt; 
 &lt;br /&gt; 
 &lt;br /&gt; 
&lt;/div&gt; 
&lt;h1&gt;Special Thanks&lt;/h1&gt; 
&lt;br /&gt; 
&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://gitlab.freedesktop.org/wlroots/wlroots&quot;&gt;wlroots&lt;/a&gt;&lt;/strong&gt; - &lt;em&gt;For powering Hyprland in the past&lt;/em&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://gitlab.freedesktop.org/wlroots/wlroots/-/blob/master/tinywl/tinywl.c&quot;&gt;tinywl&lt;/a&gt;&lt;/strong&gt; - &lt;em&gt;For showing how 2 do stuff&lt;/em&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://github.com/swaywm/sway&quot;&gt;Sway&lt;/a&gt;&lt;/strong&gt; - &lt;em&gt;For showing how 2 do stuff the overkill way&lt;/em&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://github.com/inclement/vivarium&quot;&gt;Vivarium&lt;/a&gt;&lt;/strong&gt; - &lt;em&gt;For showing how 2 do stuff the simple way&lt;/em&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://codeberg.org/dwl/dwl&quot;&gt;dwl&lt;/a&gt;&lt;/strong&gt; - &lt;em&gt;For showing how 2 do stuff the hacky way&lt;/em&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://github.com/WayfireWM/wayfire&quot;&gt;Wayfire&lt;/a&gt;&lt;/strong&gt; - &lt;em&gt;For showing how 2 do some graphics stuff&lt;/em&gt;&lt;/p&gt; 
&lt;!----&gt; 
&lt;!--{ Thanks }---------------------------------&gt; 
&lt;!--{ Images }---------------------------------&gt; 
&lt;!--{ Badges }---------------------------------&gt;</description>
      
    </item>
    
    <item>
      <title>microsoft/terminal</title>
      <link>https://github.com/microsoft/terminal</link>
      <description>&lt;p&gt;The new Windows Terminal and the original Windows console host, all in the same place!&lt;/p&gt;&lt;hr&gt;&lt;p&gt;&lt;img src=&quot;https://github.com/microsoft/terminal/assets/91625426/333ddc76-8ab2-4eb4-a8c0-4d7b953b1179&quot; alt=&quot;Windows Terminal project logos and branding image&quot; /&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://dev.azure.com/shine-oss/terminal/_build/latest?definitionId=1&amp;amp;branchName=main&quot;&gt;&lt;img src=&quot;https://dev.azure.com/shine-oss/terminal/_apis/build/status%2FTerminal%20CI?branchName=main&quot; alt=&quot;Terminal Build Status&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;h1&gt;Welcome to the Windows Terminal, Console and Command-Line repo&lt;/h1&gt; 
&lt;details&gt; 
 &lt;summary&gt;&lt;strong&gt;Table of Contents&lt;/strong&gt;&lt;/summary&gt; 
 &lt;ul&gt; 
  &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/microsoft/terminal/main/#installing-and-running-windows-terminal&quot;&gt;Installing and running Windows Terminal&lt;/a&gt; 
   &lt;ul&gt; 
    &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/microsoft/terminal/main/#microsoft-store-recommended&quot;&gt;Microsoft Store [Recommended]&lt;/a&gt;&lt;/li&gt; 
    &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/microsoft/terminal/main/#other-install-methods&quot;&gt;Other install methods&lt;/a&gt; 
     &lt;ul&gt; 
      &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/microsoft/terminal/main/#via-github&quot;&gt;Via GitHub&lt;/a&gt;&lt;/li&gt; 
      &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/microsoft/terminal/main/#via-windows-package-manager-cli-aka-winget&quot;&gt;Via Windows Package Manager CLI (aka winget)&lt;/a&gt;&lt;/li&gt; 
      &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/microsoft/terminal/main/#via-chocolatey-unofficial&quot;&gt;Via Chocolatey (unofficial)&lt;/a&gt;&lt;/li&gt; 
      &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/microsoft/terminal/main/#via-scoop-unofficial&quot;&gt;Via Scoop (unofficial)&lt;/a&gt;&lt;/li&gt; 
     &lt;/ul&gt; &lt;/li&gt; 
   &lt;/ul&gt; &lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/microsoft/terminal/main/#installing-windows-terminal-canary&quot;&gt;Installing Windows Terminal Canary&lt;/a&gt;&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/microsoft/terminal/main/#terminal--console-overview&quot;&gt;Terminal &amp;amp; Console Overview&lt;/a&gt; 
   &lt;ul&gt; 
    &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/microsoft/terminal/main/#windows-terminal&quot;&gt;Windows Terminal&lt;/a&gt;&lt;/li&gt; 
    &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/microsoft/terminal/main/#the-windows-console-host&quot;&gt;The Windows Console Host&lt;/a&gt;&lt;/li&gt; 
    &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/microsoft/terminal/main/#shared-components&quot;&gt;Shared Components&lt;/a&gt;&lt;/li&gt; 
    &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/microsoft/terminal/main/#creating-the-new-windows-terminal&quot;&gt;Creating the new Windows Terminal&lt;/a&gt;&lt;/li&gt; 
   &lt;/ul&gt; &lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/microsoft/terminal/main/#resources&quot;&gt;Resources&lt;/a&gt;&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/microsoft/terminal/main/#faq&quot;&gt;FAQ&lt;/a&gt; 
   &lt;ul&gt; 
    &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/microsoft/terminal/main/#i-built-and-ran-the-new-terminal-but-it-looks-just-like-the-old-console&quot;&gt;I built and ran the new Terminal, but it looks just like the old console&lt;/a&gt;&lt;/li&gt; 
   &lt;/ul&gt; &lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/microsoft/terminal/main/#documentation&quot;&gt;Documentation&lt;/a&gt;&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/microsoft/terminal/main/#contributing&quot;&gt;Contributing&lt;/a&gt;&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/microsoft/terminal/main/#communicating-with-the-team&quot;&gt;Communicating with the Team&lt;/a&gt;&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/microsoft/terminal/main/#developer-guidance&quot;&gt;Developer Guidance&lt;/a&gt;&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/microsoft/terminal/main/#prerequisites&quot;&gt;Prerequisites&lt;/a&gt;&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/microsoft/terminal/main/#building-the-code&quot;&gt;Building the Code&lt;/a&gt; 
   &lt;ul&gt; 
    &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/microsoft/terminal/main/#building-in-powershell&quot;&gt;Building in PowerShell&lt;/a&gt;&lt;/li&gt; 
    &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/microsoft/terminal/main/#building-in-cmd&quot;&gt;Building in Cmd&lt;/a&gt;&lt;/li&gt; 
   &lt;/ul&gt; &lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/microsoft/terminal/main/#running--debugging&quot;&gt;Running &amp;amp; Debugging&lt;/a&gt; 
   &lt;ul&gt; 
    &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/microsoft/terminal/main/#coding-guidance&quot;&gt;Coding Guidance&lt;/a&gt;&lt;/li&gt; 
   &lt;/ul&gt; &lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/microsoft/terminal/main/#code-of-conduct&quot;&gt;Code of Conduct&lt;/a&gt;&lt;/li&gt; 
 &lt;/ul&gt; 
&lt;/details&gt; 
&lt;br /&gt; 
&lt;p&gt;This repository contains the source code for:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://aka.ms/terminal&quot;&gt;Windows Terminal&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://aka.ms/terminal-preview&quot;&gt;Windows Terminal Preview&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;The Windows console host (&lt;code&gt;conhost.exe&lt;/code&gt;)&lt;/li&gt; 
 &lt;li&gt;Components shared between the two projects&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/microsoft/terminal/main/src/tools/ColorTool&quot;&gt;ColorTool&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/microsoft/terminal/main/samples&quot;&gt;Sample projects&lt;/a&gt; that show how to consume the Windows Console APIs&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;Related repositories include:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://docs.microsoft.com/windows/terminal&quot;&gt;Windows Terminal Documentation&lt;/a&gt; (&lt;a href=&quot;https://github.com/MicrosoftDocs/terminal&quot;&gt;Repo: Contribute to the docs&lt;/a&gt;)&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/MicrosoftDocs/Console-Docs&quot;&gt;Console API Documentation&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/Microsoft/Cascadia-Code&quot;&gt;Cascadia Code Font&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Installing and running Windows Terminal&lt;/h2&gt; 
&lt;div class=&quot;markdown-alert markdown-alert-note&quot;&gt;
 &lt;p class=&quot;markdown-alert-title&quot;&gt;
  &lt;svg class=&quot;octicon octicon-info mr-2&quot; viewbox=&quot;0 0 16 16&quot; version=&quot;1.1&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot;&gt;
   &lt;path d=&quot;M0 8a8 8 0 1 1 16 0A8 8 0 0 1 0 8Zm8-6.5a6.5 6.5 0 1 0 0 13 6.5 6.5 0 0 0 0-13ZM6.5 7.75A.75.75 0 0 1 7.25 7h1a.75.75 0 0 1 .75.75v2.75h.25a.75.75 0 0 1 0 1.5h-2a.75.75 0 0 1 0-1.5h.25v-2h-.25a.75.75 0 0 1-.75-.75ZM8 6a1 1 0 1 1 0-2 1 1 0 0 1 0 2Z&quot;&gt;&lt;/path&gt;
  &lt;/svg&gt;Note&lt;/p&gt;
 &lt;p&gt;Windows Terminal requires Windows 10 2004 (build 19041) or later&lt;/p&gt; 
&lt;/div&gt; 
&lt;h3&gt;Microsoft Store [Recommended]&lt;/h3&gt; 
&lt;p&gt;Install the &lt;a href=&quot;https://aka.ms/terminal&quot;&gt;Windows Terminal from the Microsoft Store&lt;/a&gt;. This allows you to always be on the latest version when we release new builds with automatic upgrades.&lt;/p&gt; 
&lt;p&gt;This is our preferred method.&lt;/p&gt; 
&lt;h3&gt;Other install methods&lt;/h3&gt; 
&lt;h4&gt;Via GitHub&lt;/h4&gt; 
&lt;p&gt;For users who are unable to install Windows Terminal from the Microsoft Store, released builds can be manually downloaded from this repository&#39;s &lt;a href=&quot;https://github.com/microsoft/terminal/releases&quot;&gt;Releases page&lt;/a&gt;.&lt;/p&gt; 
&lt;p&gt;Download the &lt;code&gt;Microsoft.WindowsTerminal_&amp;lt;versionNumber&amp;gt;.msixbundle&lt;/code&gt; file from the &lt;strong&gt;Assets&lt;/strong&gt; section. To install the app, you can simply double-click on the &lt;code&gt;.msixbundle&lt;/code&gt; file, and the app installer should automatically run. If that fails for any reason, you can try the following command at a PowerShell prompt:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-powershell&quot;&gt;# NOTE: If you are using PowerShell 7+, please run
# Import-Module Appx -UseWindowsPowerShell
# before using Add-AppxPackage.

Add-AppxPackage Microsoft.WindowsTerminal_&amp;lt;versionNumber&amp;gt;.msixbundle
&lt;/code&gt;&lt;/pre&gt; 
&lt;div class=&quot;markdown-alert markdown-alert-note&quot;&gt;
 &lt;p class=&quot;markdown-alert-title&quot;&gt;
  &lt;svg class=&quot;octicon octicon-info mr-2&quot; viewbox=&quot;0 0 16 16&quot; version=&quot;1.1&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot;&gt;
   &lt;path d=&quot;M0 8a8 8 0 1 1 16 0A8 8 0 0 1 0 8Zm8-6.5a6.5 6.5 0 1 0 0 13 6.5 6.5 0 0 0 0-13ZM6.5 7.75A.75.75 0 0 1 7.25 7h1a.75.75 0 0 1 .75.75v2.75h.25a.75.75 0 0 1 0 1.5h-2a.75.75 0 0 1 0-1.5h.25v-2h-.25a.75.75 0 0 1-.75-.75ZM8 6a1 1 0 1 1 0-2 1 1 0 0 1 0 2Z&quot;&gt;&lt;/path&gt;
  &lt;/svg&gt;Note&lt;/p&gt;
 &lt;p&gt;If you install Terminal manually:&lt;/p&gt; 
 &lt;ul&gt; 
  &lt;li&gt;You may need to install the &lt;a href=&quot;https://docs.microsoft.com/troubleshoot/cpp/c-runtime-packages-desktop-bridge#how-to-install-and-update-desktop-framework-packages&quot;&gt;VC++ v14 Desktop Framework Package&lt;/a&gt;. This should only be necessary on older builds of Windows 10 and only if you get an error about missing framework packages.&lt;/li&gt; 
  &lt;li&gt;Terminal will not auto-update when new builds are released so you will need to regularly install the latest Terminal release to receive all the latest fixes and improvements!&lt;/li&gt; 
 &lt;/ul&gt; 
&lt;/div&gt; 
&lt;h4&gt;Via Windows Package Manager CLI (aka winget)&lt;/h4&gt; 
&lt;p&gt;&lt;a href=&quot;https://github.com/microsoft/winget-cli&quot;&gt;winget&lt;/a&gt; users can download and install the latest Terminal release by installing the &lt;code&gt;Microsoft.WindowsTerminal&lt;/code&gt; package:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-powershell&quot;&gt;winget install --id Microsoft.WindowsTerminal -e
&lt;/code&gt;&lt;/pre&gt; 
&lt;div class=&quot;markdown-alert markdown-alert-note&quot;&gt;
 &lt;p class=&quot;markdown-alert-title&quot;&gt;
  &lt;svg class=&quot;octicon octicon-info mr-2&quot; viewbox=&quot;0 0 16 16&quot; version=&quot;1.1&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot;&gt;
   &lt;path d=&quot;M0 8a8 8 0 1 1 16 0A8 8 0 0 1 0 8Zm8-6.5a6.5 6.5 0 1 0 0 13 6.5 6.5 0 0 0 0-13ZM6.5 7.75A.75.75 0 0 1 7.25 7h1a.75.75 0 0 1 .75.75v2.75h.25a.75.75 0 0 1 0 1.5h-2a.75.75 0 0 1 0-1.5h.25v-2h-.25a.75.75 0 0 1-.75-.75ZM8 6a1 1 0 1 1 0-2 1 1 0 0 1 0 2Z&quot;&gt;&lt;/path&gt;
  &lt;/svg&gt;Note&lt;/p&gt;
 &lt;p&gt;Dependency support is available in WinGet version &lt;a href=&quot;https://github.com/microsoft/winget-cli/releases&quot;&gt;1.6.2631 or later&lt;/a&gt;. To install the Terminal stable release 1.18 or later, please make sure you have the updated version of the WinGet client.&lt;/p&gt; 
&lt;/div&gt; 
&lt;h4&gt;Via Chocolatey (unofficial)&lt;/h4&gt; 
&lt;p&gt;&lt;a href=&quot;https://chocolatey.org&quot;&gt;Chocolatey&lt;/a&gt; users can download and install the latest Terminal release by installing the &lt;code&gt;microsoft-windows-terminal&lt;/code&gt; package:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-powershell&quot;&gt;choco install microsoft-windows-terminal
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;To upgrade Windows Terminal using Chocolatey, run the following:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-powershell&quot;&gt;choco upgrade microsoft-windows-terminal
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;If you have any issues when installing/upgrading the package please go to the &lt;a href=&quot;https://chocolatey.org/packages/microsoft-windows-terminal&quot;&gt;Windows Terminal package page&lt;/a&gt; and follow the &lt;a href=&quot;https://chocolatey.org/docs/package-triage-process&quot;&gt;Chocolatey triage process&lt;/a&gt;&lt;/p&gt; 
&lt;h4&gt;Via Scoop (unofficial)&lt;/h4&gt; 
&lt;p&gt;&lt;a href=&quot;https://scoop.sh&quot;&gt;Scoop&lt;/a&gt; users can download and install the latest Terminal release by installing the &lt;code&gt;windows-terminal&lt;/code&gt; package:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-powershell&quot;&gt;scoop bucket add extras
scoop install windows-terminal
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;To update Windows Terminal using Scoop, run the following:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-powershell&quot;&gt;scoop update windows-terminal
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;If you have any issues when installing/updating the package, please search for or report the same on the &lt;a href=&quot;https://github.com/lukesampson/scoop-extras/issues&quot;&gt;issues page&lt;/a&gt; of Scoop Extras bucket repository.&lt;/p&gt; 
&lt;hr /&gt; 
&lt;h2&gt;Installing Windows Terminal Canary&lt;/h2&gt; 
&lt;p&gt;Windows Terminal Canary is a nightly build of Windows Terminal. This build has the latest code from our &lt;code&gt;main&lt;/code&gt; branch, giving you an opportunity to try features before they make it to Windows Terminal Preview.&lt;/p&gt; 
&lt;p&gt;Windows Terminal Canary is our least stable offering, so you may discover bugs before we have had a chance to find them.&lt;/p&gt; 
&lt;p&gt;Windows Terminal Canary is available as an App Installer distribution and a Portable ZIP distribution.&lt;/p&gt; 
&lt;p&gt;The App Installer distribution supports automatic updates. Due to platform limitations, this installer only works on Windows 11.&lt;/p&gt; 
&lt;p&gt;The Portable ZIP distribution is a portable application. It will not automatically update and will not automatically check for updates. This portable ZIP distribution works on Windows 10 (19041+) and Windows 11.&lt;/p&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Distribution&lt;/th&gt; 
   &lt;th style=&quot;text-align:center&quot;&gt;Architecture&lt;/th&gt; 
   &lt;th&gt;Link&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;App Installer&lt;/td&gt; 
   &lt;td style=&quot;text-align:center&quot;&gt;x64, arm64, x86&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://aka.ms/terminal-canary-installer&quot;&gt;Download&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Portable ZIP&lt;/td&gt; 
   &lt;td style=&quot;text-align:center&quot;&gt;x64&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://aka.ms/terminal-canary-zip-x64&quot;&gt;Download&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Portable ZIP&lt;/td&gt; 
   &lt;td style=&quot;text-align:center&quot;&gt;ARM64&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://aka.ms/terminal-canary-zip-arm64&quot;&gt;Download&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Portable ZIP&lt;/td&gt; 
   &lt;td style=&quot;text-align:center&quot;&gt;x86&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://aka.ms/terminal-canary-zip-x86&quot;&gt;Download&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;p&gt;&lt;em&gt;Learn more about the &lt;a href=&quot;https://learn.microsoft.com/windows/terminal/distributions&quot;&gt;types of Windows Terminal distributions&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt; 
&lt;hr /&gt; 
&lt;h2&gt;Terminal &amp;amp; Console Overview&lt;/h2&gt; 
&lt;p&gt;Please take a few minutes to review the overview below before diving into the code:&lt;/p&gt; 
&lt;h3&gt;Windows Terminal&lt;/h3&gt; 
&lt;p&gt;Windows Terminal is a new, modern, feature-rich, productive terminal application for command-line users. It includes many of the features most frequently requested by the Windows command-line community including support for tabs, rich text, globalization, configurability, theming &amp;amp; styling, and more.&lt;/p&gt; 
&lt;p&gt;The Terminal will also need to meet our goals and measures to ensure it remains fast and efficient, and doesn&#39;t consume vast amounts of memory or power.&lt;/p&gt; 
&lt;h3&gt;The Windows Console Host&lt;/h3&gt; 
&lt;p&gt;The Windows Console host, &lt;code&gt;conhost.exe&lt;/code&gt;, is Windows&#39; original command-line user experience. It also hosts Windows&#39; command-line infrastructure and the Windows Console API server, input engine, rendering engine, user preferences, etc. The console host code in this repository is the actual source from which the &lt;code&gt;conhost.exe&lt;/code&gt; in Windows itself is built.&lt;/p&gt; 
&lt;p&gt;Since taking ownership of the Windows command-line in 2014, the team added several new features to the Console, including background transparency, line-based selection, support for &lt;a href=&quot;https://en.wikipedia.org/wiki/ANSI_escape_code&quot;&gt;ANSI / Virtual Terminal sequences&lt;/a&gt;, &lt;a href=&quot;https://devblogs.microsoft.com/commandline/24-bit-color-in-the-windows-console/&quot;&gt;24-bit color&lt;/a&gt;, a &lt;a href=&quot;https://devblogs.microsoft.com/commandline/windows-command-line-introducing-the-windows-pseudo-console-conpty/&quot;&gt;Pseudoconsole (&quot;ConPTY&quot;)&lt;/a&gt;, and more.&lt;/p&gt; 
&lt;p&gt;However, because Windows Console&#39;s primary goal is to maintain backward compatibility, we have been unable to add many of the features the community (and the team) have been wanting for the last several years including tabs, unicode text, and emoji.&lt;/p&gt; 
&lt;p&gt;These limitations led us to create the new Windows Terminal.&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;You can read more about the evolution of the command-line in general, and the Windows command-line specifically in &lt;a href=&quot;https://devblogs.microsoft.com/commandline/windows-command-line-backgrounder/&quot;&gt;this accompanying series of blog posts&lt;/a&gt; on the Command-Line team&#39;s blog.&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;h3&gt;Shared Components&lt;/h3&gt; 
&lt;p&gt;While overhauling Windows Console, we modernized its codebase considerably, cleanly separating logical entities into modules and classes, introduced some key extensibility points, replaced several old, home-grown collections and containers with safer, more efficient &lt;a href=&quot;https://docs.microsoft.com/en-us/cpp/standard-library/stl-containers?view=vs-2022&quot;&gt;STL containers&lt;/a&gt;, and made the code simpler and safer by using Microsoft&#39;s &lt;a href=&quot;https://github.com/Microsoft/wil&quot;&gt;Windows Implementation Libraries - WIL&lt;/a&gt;.&lt;/p&gt; 
&lt;p&gt;This overhaul resulted in several of Console&#39;s key components being available for re-use in any terminal implementation on Windows. These components include a new DirectWrite-based text layout and rendering engine, a text buffer capable of storing both UTF-16 and UTF-8, a VT parser/emitter, and more.&lt;/p&gt; 
&lt;h3&gt;Creating the new Windows Terminal&lt;/h3&gt; 
&lt;p&gt;When we started planning the new Windows Terminal application, we explored and evaluated several approaches and technology stacks. We ultimately decided that our goals would be best met by continuing our investment in our C++ codebase, which would allow us to reuse several of the aforementioned modernized components in both the existing Console and the new Terminal. Further, we realized that this would allow us to build much of the Terminal&#39;s core itself as a reusable UI control that others can incorporate into their own applications.&lt;/p&gt; 
&lt;p&gt;The result of this work is contained within this repo and delivered as the Windows Terminal application you can download from the Microsoft Store, or &lt;a href=&quot;https://github.com/microsoft/terminal/releases&quot;&gt;directly from this repo&#39;s releases&lt;/a&gt;.&lt;/p&gt; 
&lt;hr /&gt; 
&lt;h2&gt;Resources&lt;/h2&gt; 
&lt;p&gt;For more information about Windows Terminal, you may find some of these resources useful and interesting:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://devblogs.microsoft.com/commandline&quot;&gt;Command-Line Blog&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://devblogs.microsoft.com/commandline/windows-command-line-backgrounder/&quot;&gt;Command-Line Backgrounder Blog Series&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;Windows Terminal Launch: &lt;a href=&quot;https://www.youtube.com/watch?v=8gw0rXPMMPE&amp;amp;list=PLEHMQNlPj-Jzh9DkNpqipDGCZZuOwrQwR&amp;amp;index=2&amp;amp;t=0s&quot;&gt;Terminal &quot;Sizzle Video&quot;&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;Windows Terminal Launch: &lt;a href=&quot;https://www.youtube.com/watch?v=KMudkRcwjCw&quot;&gt;Build 2019 Session&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;Run As Radio: &lt;a href=&quot;https://www.runasradio.com/Shows/Show/645&quot;&gt;Show 645 - Windows Terminal with Richard Turner&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;Azure DevOps Podcast: &lt;a href=&quot;http://azuredevopspodcast.clear-measure.com/kayla-cinnamon-and-rich-turner-on-devops-on-the-windows-terminal-team-episode-54&quot;&gt;Episode 54 - Kayla Cinnamon and Rich Turner on DevOps on the Windows Terminal&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;Microsoft Ignite 2019 Session: &lt;a href=&quot;https://myignite.techcommunity.microsoft.com/sessions/81329?source=sessions&quot;&gt;The Modern Windows Command Line: Windows Terminal - BRK3321&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;hr /&gt; 
&lt;h2&gt;FAQ&lt;/h2&gt; 
&lt;h3&gt;I built and ran the new Terminal, but it looks just like the old console&lt;/h3&gt; 
&lt;p&gt;Cause: You&#39;re launching the incorrect solution in Visual Studio.&lt;/p&gt; 
&lt;p&gt;Solution: Make sure you&#39;re building &amp;amp; deploying the &lt;code&gt;CascadiaPackage&lt;/code&gt; project in Visual Studio.&lt;/p&gt; 
&lt;div class=&quot;markdown-alert markdown-alert-note&quot;&gt;
 &lt;p class=&quot;markdown-alert-title&quot;&gt;
  &lt;svg class=&quot;octicon octicon-info mr-2&quot; viewbox=&quot;0 0 16 16&quot; version=&quot;1.1&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot;&gt;
   &lt;path d=&quot;M0 8a8 8 0 1 1 16 0A8 8 0 0 1 0 8Zm8-6.5a6.5 6.5 0 1 0 0 13 6.5 6.5 0 0 0 0-13ZM6.5 7.75A.75.75 0 0 1 7.25 7h1a.75.75 0 0 1 .75.75v2.75h.25a.75.75 0 0 1 0 1.5h-2a.75.75 0 0 1 0-1.5h.25v-2h-.25a.75.75 0 0 1-.75-.75ZM8 6a1 1 0 1 1 0-2 1 1 0 0 1 0 2Z&quot;&gt;&lt;/path&gt;
  &lt;/svg&gt;Note&lt;/p&gt;
 &lt;p&gt;&lt;code&gt;OpenConsole.exe&lt;/code&gt; is just a locally-built &lt;code&gt;conhost.exe&lt;/code&gt;, the classic Windows Console that hosts Windows&#39; command-line infrastructure. OpenConsole is used by Windows Terminal to connect to and communicate with command-line applications (via &lt;a href=&quot;https://devblogs.microsoft.com/commandline/windows-command-line-introducing-the-windows-pseudo-console-conpty/&quot;&gt;ConPty&lt;/a&gt;).&lt;/p&gt; 
&lt;/div&gt; 
&lt;hr /&gt; 
&lt;h2&gt;Documentation&lt;/h2&gt; 
&lt;p&gt;All project documentation is located at &lt;a href=&quot;https://aka.ms/terminal-docs&quot;&gt;aka.ms/terminal-docs&lt;/a&gt;. If you would like to contribute to the documentation, please submit a pull request on the &lt;a href=&quot;https://github.com/MicrosoftDocs/terminal&quot;&gt;Windows Terminal Documentation repo&lt;/a&gt;.&lt;/p&gt; 
&lt;hr /&gt; 
&lt;h2&gt;Contributing&lt;/h2&gt; 
&lt;p&gt;We are excited to work alongside you, our amazing community, to build and enhance Windows Terminal!&lt;/p&gt; 
&lt;p&gt;&lt;em&gt;&lt;strong&gt;BEFORE you start work on a feature/fix&lt;/strong&gt;&lt;/em&gt;, please read &amp;amp; follow our &lt;a href=&quot;https://raw.githubusercontent.com/microsoft/terminal/main/CONTRIBUTING.md&quot;&gt;Contributor&#39;s Guide&lt;/a&gt; to help avoid any wasted or duplicate effort.&lt;/p&gt; 
&lt;h2&gt;Communicating with the Team&lt;/h2&gt; 
&lt;p&gt;The easiest way to communicate with the team is via GitHub issues.&lt;/p&gt; 
&lt;p&gt;Please file new issues, feature requests and suggestions, but &lt;strong&gt;DO search for similar open/closed preexisting issues before creating a new issue.&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;If you would like to ask a question that you feel doesn&#39;t warrant an issue (yet), please reach out to us via Twitter:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Christopher Nguyen, Product Manager: &lt;a href=&quot;https://twitter.com/nguyen_dows&quot;&gt;@nguyen_dows&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;Dustin Howett, Engineering Lead: &lt;a href=&quot;https://twitter.com/DHowett&quot;&gt;@dhowett&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;Mike Griese, Senior Developer: &lt;a href=&quot;https://mastodon.social/@zadjii&quot;&gt;@zadjii@mastodon.social&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;Carlos Zamora, Developer: &lt;a href=&quot;https://twitter.com/cazamor_msft&quot;&gt;@cazamor_msft&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;Pankaj Bhojwani, Developer&lt;/li&gt; 
 &lt;li&gt;Leonard Hecker, Developer: &lt;a href=&quot;https://twitter.com/LeonardHecker&quot;&gt;@LeonardHecker&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Developer Guidance&lt;/h2&gt; 
&lt;h2&gt;Prerequisites&lt;/h2&gt; 
&lt;p&gt;You can configure your environment to build Terminal in one of two ways:&lt;/p&gt; 
&lt;h3&gt;Using WinGet configuration file&lt;/h3&gt; 
&lt;p&gt;After cloning the repository, you can use a &lt;a href=&quot;https://learn.microsoft.com/en-us/windows/package-manager/configuration/#use-a-winget-configuration-file-to-configure-your-machine&quot;&gt;WinGet configuration file&lt;/a&gt; to set up your environment. The &lt;a href=&quot;https://raw.githubusercontent.com/microsoft/terminal/main/.config/configuration.winget&quot;&gt;default configuration file&lt;/a&gt; installs Visual Studio 2026 Community &amp;amp; rest of the required tools. There are two other variants of the configuration file available in the &lt;a href=&quot;https://raw.githubusercontent.com/microsoft/terminal/main/.config&quot;&gt;.config&lt;/a&gt; directory for Enterprise &amp;amp; Professional editions of Visual Studio 2026. To run the default configuration file, you can either double-click the file from explorer or run the following command:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-powershell&quot;&gt;winget configure .config\configuration.winget
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;Manual configuration&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;You must be running Windows 10 2004 (build &amp;gt;= 10.0.19041.0) or later to run Windows Terminal&lt;/li&gt; 
 &lt;li&gt;You must &lt;a href=&quot;https://docs.microsoft.com/en-us/windows/uwp/get-started/enable-your-device-for-development&quot;&gt;enable Developer Mode in the Windows Settings app&lt;/a&gt; to locally install and run Windows Terminal&lt;/li&gt; 
 &lt;li&gt;You must have &lt;a href=&quot;https://github.com/PowerShell/PowerShell/releases/latest&quot;&gt;PowerShell 7 or later&lt;/a&gt; installed&lt;/li&gt; 
 &lt;li&gt;You must have the &lt;a href=&quot;https://developer.microsoft.com/en-us/windows/downloads/windows-sdk/&quot;&gt;Windows 11 (10.0.26100) SDK&lt;/a&gt; installed at version 10.0.26100.8249 or greater.&lt;/li&gt; 
 &lt;li&gt;You must have at least &lt;a href=&quot;https://visualstudio.microsoft.com/downloads/&quot;&gt;VS 2026&lt;/a&gt; version 18.6 installed&lt;/li&gt; 
 &lt;li&gt;You must install the following Workloads via the VS Installer. Note: Opening the solution will &lt;a href=&quot;https://devblogs.microsoft.com/setup/configure-visual-studio-across-your-organization-with-vsconfig/&quot;&gt;prompt you to install missing components automatically&lt;/a&gt;: 
  &lt;ul&gt; 
   &lt;li&gt;Desktop Development with C++&lt;/li&gt; 
   &lt;li&gt;WinUI application development&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;You must install the &lt;a href=&quot;https://docs.microsoft.com/dotnet/framework/install/guide-for-developers#to-install-the-net-framework-developer-pack-or-targeting-pack&quot;&gt;.NET Framework 4.7.2 Targeting Pack&lt;/a&gt; to build test projects&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Building the Code&lt;/h2&gt; 
&lt;p&gt;OpenConsole.slnx may be built from within Visual Studio or from the command-line using a set of convenience scripts &amp;amp; tools in the &lt;strong&gt;/tools&lt;/strong&gt; directory:&lt;/p&gt; 
&lt;h3&gt;Building in PowerShell&lt;/h3&gt; 
&lt;pre&gt;&lt;code class=&quot;language-powershell&quot;&gt;Import-Module .\tools\OpenConsole.psm1
Set-MsBuildDevEnvironment
Invoke-OpenConsoleBuild
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;Building in Cmd&lt;/h3&gt; 
&lt;pre&gt;&lt;code class=&quot;language-shell&quot;&gt;.\tools\razzle.cmd
bcz
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2&gt;Running &amp;amp; Debugging&lt;/h2&gt; 
&lt;p&gt;To debug the Windows Terminal in VS, right click on &lt;code&gt;CascadiaPackage&lt;/code&gt; (in the Solution Explorer) and go to properties. In the Debug menu, change &quot;Application process&quot; and &quot;Background task process&quot; to &quot;Native Only&quot;.&lt;/p&gt; 
&lt;p&gt;You should then be able to build &amp;amp; debug the Terminal project by hitting &lt;kbd&gt;F5&lt;/kbd&gt;. Make sure to select either the &quot;x64&quot; or the &quot;x86&quot; platform - the Terminal doesn&#39;t build for &quot;Any Cpu&quot; (because the Terminal is a C++ application, not a C# one).&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;👉 You will &lt;em&gt;not&lt;/em&gt; be able to launch the Terminal directly by running the WindowsTerminal.exe. For more details on why, see &lt;a href=&quot;https://github.com/microsoft/terminal/issues/926&quot;&gt;#926&lt;/a&gt;, &lt;a href=&quot;https://github.com/microsoft/terminal/issues/4043&quot;&gt;#4043&lt;/a&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;h3&gt;Coding Guidance&lt;/h3&gt; 
&lt;p&gt;Please review these brief docs below about our coding practices.&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;👉 If you find something missing from these docs, feel free to contribute to any of our documentation files anywhere in the repository (or write some new ones!)&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;This is a work in progress as we learn what we&#39;ll need to provide people in order to be effective contributors to our project.&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/microsoft/terminal/main/doc/STYLE.md&quot;&gt;Coding Style&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/microsoft/terminal/main/doc/ORGANIZATION.md&quot;&gt;Code Organization&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/microsoft/terminal/main/doc/EXCEPTIONS.md&quot;&gt;Exceptions in our legacy codebase&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/microsoft/terminal/main/doc/WIL.md&quot;&gt;Helpful smart pointers and macros for interfacing with Windows in WIL&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;hr /&gt; 
&lt;h2&gt;Code of Conduct&lt;/h2&gt; 
&lt;p&gt;This project has adopted the &lt;a href=&quot;https://opensource.microsoft.com/codeofconduct/&quot;&gt;Microsoft Open Source Code of Conduct&lt;/a&gt;. For more information see the &lt;a href=&quot;https://opensource.microsoft.com/codeofconduct/faq/&quot;&gt;Code of Conduct FAQ&lt;/a&gt; or contact &lt;a href=&quot;mailto:opencode@microsoft.com&quot;&gt;opencode@microsoft.com&lt;/a&gt; with any additional questions or comments.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>moonshine-ai/moonshine</title>
      <link>https://github.com/moonshine-ai/moonshine</link>
      <description>&lt;p&gt;Very low latency speech to text, intent recognition, and text to speech, for building voice agents and interfaces&lt;/p&gt;&lt;hr&gt;&lt;p&gt;&lt;img src=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/docs/images/logo.png&quot; alt=&quot;Moonshine Voice Logo&quot; /&gt;&lt;/p&gt; 
&lt;h1&gt;Moonshine Voice&lt;/h1&gt; 
&lt;p&gt;&lt;strong&gt;Voice Interfaces for Everyone&lt;/strong&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/#quickstart&quot;&gt;Quickstart&lt;/a&gt; 
  &lt;ul&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/#javascript&quot;&gt;Javascript&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/#python&quot;&gt;Python&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/#ios&quot;&gt;iOS&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/#android&quot;&gt;Android&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/#linux&quot;&gt;Linux&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/#macos&quot;&gt;MacOS&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/#windows&quot;&gt;Windows&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/#raspberry-pi&quot;&gt;Raspberry Pi&lt;/a&gt;&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/#when-should-you-choose-moonshine-over-whisper&quot;&gt;When should you choose Moonshine over Whisper?&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/#using-the-library&quot;&gt;Using the Library&lt;/a&gt; 
  &lt;ul&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/#getting-started-with-transcription&quot;&gt;Speech to Text&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/#getting-started-with-text-to-speech&quot;&gt;Text to Speech&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/#getting-started-with-a-conversational-agent&quot;&gt;Conversational Agents&lt;/a&gt;&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/#models&quot;&gt;Models&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/#api-reference&quot;&gt;API Reference&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/#support&quot;&gt;Support&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/#roadmap&quot;&gt;Roadmap&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/#acknowledgements&quot;&gt;Acknowledgements&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/#license&quot;&gt;License&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;a href=&quot;https://moonshine.ai&quot;&gt;Moonshine&lt;/a&gt; Voice is an open source AI toolkit for developers building real-time voice agents and applications.&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Everything runs on-device, so it&#39;s fast, private, and you don&#39;t need an account, credit card, or API keys.&lt;/li&gt; 
 &lt;li&gt;The framework and models are optimized for live streaming applications, offering low latency responses by doing a lot of the work while the user is still talking.&lt;/li&gt; 
 &lt;li&gt;All speech to text models are based on our &lt;a href=&quot;https://arxiv.org/abs/2602.12241&quot;&gt;cutting edge research&lt;/a&gt; and trained from scratch, so we can offer &lt;a href=&quot;https://huggingface.co/spaces/hf-audio/open_asr_leaderboard&quot;&gt;higher accuracy than Whisper Large V3 at the top end&lt;/a&gt;, down to &lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/micro/README.md&quot;&gt;tiny 1MB models for constrained deployments&lt;/a&gt;.&lt;/li&gt; 
 &lt;li&gt;It&#39;s easy to integrate across platforms, with the same library running on &lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/#python&quot;&gt;Python&lt;/a&gt;, &lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/#ios&quot;&gt;iOS&lt;/a&gt;, &lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/#android&quot;&gt;Android&lt;/a&gt;, &lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/#macos&quot;&gt;MacOS&lt;/a&gt;, &lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/#linux&quot;&gt;Linux&lt;/a&gt;, &lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/#windows&quot;&gt;Windows&lt;/a&gt;, &lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/#raspberry-pi&quot;&gt;Raspberry Pis&lt;/a&gt;, &lt;a href=&quot;https://www.linkedin.com/posts/petewarden_most-of-the-recent-news-about-ai-seems-to-activity-7384664255242932224-v6Mr/&quot;&gt;IoT devices&lt;/a&gt;, &lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/micro/README.md&quot;&gt;microcontrollers&lt;/a&gt;, &lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/micro/README.md&quot;&gt;DSPs&lt;/a&gt;, and wearables.&lt;/li&gt; 
 &lt;li&gt;Batteries are included. Its high-level APIs offer complete solutions for common tasks like transcription, text to speech, voice cloning, speaker identification (diarization), command recognition, and &lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/#getting-started-with-a-conversational-agent&quot;&gt;conversational agents&lt;/a&gt;, so you can build your voice application with a single library.&lt;/li&gt; 
 &lt;li&gt;It supports multiple languages, including English, Spanish, Mandarin, Japanese, Korean, Vietnamese, Ukrainian, and Arabic for STT, and English, Spanish, Arabic, German, French, Hindi, Italian, Japanese, Korean, Dutch, Portuguese, Russian, Turkish, Ukrainian, Vietnamese, and Mandarin for TTS.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Quickstart&lt;/h2&gt; 
&lt;p&gt;&lt;a href=&quot;https://discord.gg/27qp9zSRXF&quot;&gt;Join our community on Discord to get live support&lt;/a&gt;.&lt;/p&gt; 
&lt;h3&gt;Javascript&lt;/h3&gt; 
&lt;p&gt;In node run &lt;code&gt;npm install @moonshine-ai/moonshine-wasm&lt;/code&gt;, or for the web import directly from the CDN.&lt;/p&gt; 
&lt;!-- doc-test: parse-only --&gt; 
&lt;pre&gt;&lt;code class=&quot;language-js&quot;&gt;import { MicTranscriber, ModelArch } from &#39;https://cdn.jsdelivr.net/npm/@moonshine-ai/moonshine-wasm/dist/index.js&#39;;
 
const mic = new MicTranscriber()
  .modelArch(ModelArch.MediumStreaming)
  .onText((text) =&amp;gt; showInProgress(text))
  .onLine((line) =&amp;gt; appendLine(line.text, line.lastTranscriptionLatencyMs));
 
await mic.load();
await mic.start();
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;You can see live examples running at &lt;a href=&quot;https://moonshine.ai&quot;&gt;moonshine.ai&lt;/a&gt;, or download the &lt;a href=&quot;https://github.com/moonshine-ai/moonshine/releases/latest/download/web-stt.tar.gz&quot;&gt;speech to text&lt;/a&gt;, &lt;a href=&quot;https://github.com/moonshine-ai/moonshine/releases/latest/download/web-tts.tar.gz&quot;&gt;text to speech&lt;/a&gt;, &lt;a href=&quot;https://github.com/moonshine-ai/moonshine/releases/latest/download/web-agent-flow.tar.gz&quot;&gt;voice agent&lt;/a&gt;, &lt;a href=&quot;https://github.com/moonshine-ai/moonshine/releases/latest/download/web-dictation.tar.gz&quot;&gt;dictation&lt;/a&gt;, or &lt;a href=&quot;https://github.com/moonshine-ai/moonshine/releases/latest/download/web-stt.tar.gz&quot;&gt;meeting note taker&lt;/a&gt; projects. To serve them run &lt;code&gt;node serve.mjs&lt;/code&gt; and navigate to &lt;a href=&quot;http://localhost:8080/&quot;&gt;http://localhost:8080/&lt;/a&gt;.&lt;/p&gt; 
&lt;h3&gt;Python&lt;/h3&gt; 
&lt;!-- doc-test: parse-only --&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;pip install moonshine-voice
moonshine-voice mic --language en
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Listens to the microphone and prints updates to the transcript as they come in.&lt;/p&gt; 
&lt;!-- doc-test: parse-only --&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;moonshine-voice agent
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Runs a spoken wifi-setup conversation: it listens for a trigger phrase, asks questions, and confirms the answers. Matching is semantic, so natural language variations are recognized. For more, check out &lt;a href=&quot;https://bit.ly/moonshine-colab&quot;&gt;our &quot;Getting Started&quot; Colab notebook&lt;/a&gt; and &lt;a href=&quot;https://www.youtube.com/watch?v=WH-AGvHmtoM&quot;&gt;video&lt;/a&gt;.&lt;/p&gt; 
&lt;!-- doc-test: parse-only --&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;moonshine-voice tts --language en_us --text &quot;Hello world&quot;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Synthesizes and speaks the text.&lt;/p&gt; 
&lt;h3&gt;iOS&lt;/h3&gt; 
&lt;p&gt;First &lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/#ios-or-macos&quot;&gt;add &lt;code&gt;https://github.com/moonshine-ai/moonshine-swift/ &lt;/code&gt;as a package dependency to your project in Xcode&lt;/a&gt;.&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-swift&quot;&gt;import MoonshineVoice
 
let mic = MicTranscriber()
    .onText { [weak self] text in
        Task { @MainActor in self?.liveText = text }
    }
    .onLine { [weak self] line in
        Task { @MainActor in self?.lines.append(line.text) }
    }
 
try await mic.load()
try mic.start()
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Download &lt;a href=&quot;https://github.com/moonshine-ai/moonshine/releases/latest/download/ios-Transcriber.tar.gz&quot;&gt;github.com/moonshine-ai/moonshine/releases/latest/download/ios-Transcriber.tar.gz&lt;/a&gt;, extract it, and then open the &lt;code&gt;Transcriber/Transcriber.xcodeproj&lt;/code&gt; project in Xcode.&lt;/p&gt; 
&lt;h3&gt;Android&lt;/h3&gt; 
&lt;p&gt;Add &lt;code&gt;ai.moonshine:moonshine-voice:0.1.1&lt;/code&gt; to your project&#39;s &lt;code&gt;build.gradle.kts&lt;/code&gt; (or equivalent).&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-java&quot;&gt;import ai.moonshine.voice.MicTranscriber;
 
mic = new MicTranscriber(this)
        .onText(text -&amp;gt; transcriptText.setText(finishedLines + text))
        .onLine(line -&amp;gt; {
            finishedLines.append(line.text).append(&#39;\n&#39;);
            transcriptText.setText(finishedLines.toString());
        });
 
worker.execute(() -&amp;gt; {
    mic.load();
    mic.start();
});
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Download &lt;a href=&quot;https://github.com/moonshine-ai/moonshine/releases/latest/download/android-Transcriber.tar.gz&quot;&gt;github.com/moonshine-ai/moonshine/releases/latest/download/android-Transcriber.tar.gz&lt;/a&gt;, extract it, and then open the &lt;code&gt;Transcriber&lt;/code&gt; folder in Android Studio.&lt;/p&gt; 
&lt;h3&gt;Linux&lt;/h3&gt; 
&lt;p&gt;Moonshine Voice ships prebuilt shared libraries for both x86_64 and arm64 Linux. The quickest way to try it is with the &lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/examples/c++/README.md&quot;&gt;portable C++ example&lt;/a&gt;, which downloads the library, an English speech to text model, and a sample recording, then builds and runs a transcriber:&lt;/p&gt; 
&lt;!-- doc-test: skip --&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;curl -O -L https://github.com/moonshine-ai/moonshine/releases/download/v0.1.1/cpp-examples.tar.gz
tar xzf cpp-examples.tar.gz
cd c++
./download-library.sh
g++ transcriber.cpp -Imoonshine-voice/include -Lmoonshine-voice/lib -lmoonshine -Wl,-rpath,&#39;$ORIGIN/moonshine-voice/lib&#39; -o transcriber
./transcriber
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;MacOS&lt;/h3&gt; 
&lt;p&gt;First &lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/#ios-or-macos&quot;&gt;add &lt;code&gt;https://github.com/moonshine-ai/moonshine-swift/ &lt;/code&gt;as a package dependency to your project in Xcode&lt;/a&gt;.&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-swift&quot;&gt;import MoonshineVoice
 
let mic = MicTranscriber()
    .onText { [weak self] text in
        Task { @MainActor in self?.liveText = text }
    }
    .onLine { [weak self] line in
        Task { @MainActor in self?.lines.append(line.text) }
    }
 
try await mic.load()
try mic.start()
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;This code is identical to the iOS version.&lt;/p&gt; 
&lt;p&gt;Download &lt;a href=&quot;https://github.com/moonshine-ai/moonshine/releases/latest/download/macos-MicTranscription.tar.gz&quot;&gt;github.com/moonshine-ai/moonshine/releases/latest/download/macos-MicTranscription.tar.gz&lt;/a&gt;, extract it, and then open the &lt;code&gt;MicTranscription/MicTranscription.xcodeproj&lt;/code&gt; project in Xcode.&lt;/p&gt; 
&lt;h3&gt;Windows&lt;/h3&gt; 
&lt;p&gt;Download &lt;a href=&quot;https://github.com/moonshine-ai/moonshine/releases/latest/download/windows-cli-transcriber.tar.gz&quot;&gt;github.com/moonshine-ai/moonshine/releases/latest/download/windows-cli-transcriber.tar.gz&lt;/a&gt;, extract it, and then open the &lt;code&gt;cli-transcriber\cli-transcriber.vcxproj&lt;/code&gt; project in Visual Studio.&lt;/p&gt; 
&lt;p&gt;It&#39;s a self-contained archive that includes the library and model, so Ctrl+Shift+B or F7 will build the executable.&lt;/p&gt; 
&lt;h3&gt;Raspberry Pi&lt;/h3&gt; 
&lt;p&gt;You&#39;ll need a USB microphone plugged in to get audio input, but the Python pip package has been optimized for the Pi, so you can run:&lt;/p&gt; 
&lt;!-- doc-test: skip --&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt; sudo pip install --break-system-packages moonshine-voice
 moonshine-voice mic --language en
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;I&#39;ve recorded &lt;a href=&quot;https://www.youtube.com/watch?v=NNcqx1wFxl0&quot;&gt;a screencast on YouTube&lt;/a&gt; to help you get started, and you can also download &lt;a href=&quot;https://github.com/moonshine-ai/moonshine/releases/latest/download/raspberry-pi-my-dalek.tar.gz&quot;&gt;github.com/moonshine-ai/moonshine/releases/latest/download/raspberry-pi-my-dalek.tar.gz&lt;/a&gt; for some fun, Pi-specific examples. &lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/examples/raspberry-pi/my-dalek/README.md&quot;&gt;The README&lt;/a&gt; has information about using a virtual environment for the Python install if you don&#39;t want to use &lt;code&gt;--break-system-packages&lt;/code&gt;.&lt;/p&gt; 
&lt;p&gt;You can look at &lt;a href=&quot;https://github.com/moonshine-ai/pi-help-bot&quot;&gt;github.com/moonshine-ai/pi-help-bot&lt;/a&gt; for a more advanced example.&lt;/p&gt; 
&lt;h2&gt;More examples&lt;/h2&gt; 
&lt;p&gt;Example apps for the web, iOS, Android, macOS, Windows, and Raspberry Pi are published on &lt;a href=&quot;https://github.com/moonshine-ai/moonshine/releases/latest&quot;&gt;GitHub Releases&lt;/a&gt; as separate archives (mostly &lt;strong&gt;&lt;code&gt;{platform}-{Project}.tar.gz&lt;/code&gt;&lt;/strong&gt;, matching folder names under &lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/examples/&quot;&gt;&lt;code&gt;examples/&lt;/code&gt;&lt;/a&gt;; Windows also ships &lt;a href=&quot;https://github.com/moonshine-ai/moonshine/releases/latest/download/moonshine-voice-windows-x86_64.tar.gz&quot;&gt;&lt;code&gt;moonshine-voice-windows-x86_64.tar.gz&lt;/code&gt;&lt;/a&gt; for the C++ sample). See the &lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/#examples&quot;&gt;Examples&lt;/a&gt; section for the full list of release downloads.&lt;/p&gt; 
&lt;h2&gt;When should you choose Moonshine over Whisper?&lt;/h2&gt; 
&lt;p&gt;TL;DR - When you&#39;re working with live speech.&lt;/p&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Model&lt;/th&gt; 
   &lt;th&gt;WER&lt;/th&gt; 
   &lt;th&gt;# Parameters&lt;/th&gt; 
   &lt;th&gt;MacBook Pro&lt;/th&gt; 
   &lt;th&gt;Linux x86&lt;/th&gt; 
   &lt;th&gt;R. Pi 5&lt;/th&gt; 
   &lt;th&gt;Pixel 10a&lt;/th&gt; 
   &lt;th&gt;iPad (A16)&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Moonshine Medium Streaming&lt;/td&gt; 
   &lt;td&gt;6.65%&lt;/td&gt; 
   &lt;td&gt;245 million&lt;/td&gt; 
   &lt;td&gt;74ms&lt;/td&gt; 
   &lt;td&gt;269ms&lt;/td&gt; 
   &lt;td&gt;802ms&lt;/td&gt; 
   &lt;td&gt;916ms&lt;/td&gt; 
   &lt;td&gt;181ms&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Whisper Large v3&lt;/td&gt; 
   &lt;td&gt;7.44%&lt;/td&gt; 
   &lt;td&gt;1.5 billion&lt;/td&gt; 
   &lt;td&gt;11,286ms&lt;/td&gt; 
   &lt;td&gt;16,919ms&lt;/td&gt; 
   &lt;td&gt;N/A&lt;/td&gt; 
   &lt;td&gt;—&lt;/td&gt; 
   &lt;td&gt;—&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Moonshine Small Streaming&lt;/td&gt; 
   &lt;td&gt;7.84%&lt;/td&gt; 
   &lt;td&gt;123 million&lt;/td&gt; 
   &lt;td&gt;49ms&lt;/td&gt; 
   &lt;td&gt;165ms&lt;/td&gt; 
   &lt;td&gt;527ms&lt;/td&gt; 
   &lt;td&gt;394ms&lt;/td&gt; 
   &lt;td&gt;99ms&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Whisper Small&lt;/td&gt; 
   &lt;td&gt;8.59%&lt;/td&gt; 
   &lt;td&gt;244 million&lt;/td&gt; 
   &lt;td&gt;1940ms&lt;/td&gt; 
   &lt;td&gt;3,425ms&lt;/td&gt; 
   &lt;td&gt;10,397ms&lt;/td&gt; 
   &lt;td&gt;—&lt;/td&gt; 
   &lt;td&gt;—&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Moonshine Tiny Streaming&lt;/td&gt; 
   &lt;td&gt;12.00%&lt;/td&gt; 
   &lt;td&gt;34 million&lt;/td&gt; 
   &lt;td&gt;32ms&lt;/td&gt; 
   &lt;td&gt;69ms&lt;/td&gt; 
   &lt;td&gt;237ms&lt;/td&gt; 
   &lt;td&gt;114ms&lt;/td&gt; 
   &lt;td&gt;39ms&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Whisper Tiny&lt;/td&gt; 
   &lt;td&gt;12.81%&lt;/td&gt; 
   &lt;td&gt;39 million&lt;/td&gt; 
   &lt;td&gt;277ms&lt;/td&gt; 
   &lt;td&gt;1,141ms&lt;/td&gt; 
   &lt;td&gt;5,863ms&lt;/td&gt; 
   &lt;td&gt;—&lt;/td&gt; 
   &lt;td&gt;—&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;p&gt;&lt;em&gt;See &lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/#benchmarks&quot;&gt;benchmarks&lt;/a&gt; for how these numbers were measured.&lt;/em&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;&quot;&gt;OpenAI&#39;s release of their Whisper family of models&lt;/a&gt; was a massive step forward for open-source speech to text. They offered a range of sizes, allowing developers to trade off compute and storage space against accuracy to fit their applications. Their biggest models, like Large v3, also gave accuracy scores that were higher than anything available outside of large tech companies like Google or Apple. At Moonshine we were early and enthusiastic adopters of Whisper, and we still remain big fans of the models and the great frameworks like &lt;a href=&quot;https://github.com/SYSTRAN/faster-whisper&quot;&gt;FasterWhisper&lt;/a&gt; and others that have been built around them.&lt;/p&gt; 
&lt;p&gt;However, as we built applications that needed a live voice interface we found we needed features that weren&#39;t available through Whisper:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;Whisper always operates on a 30-second input window&lt;/strong&gt;. This isn&#39;t an issue when you&#39;re processing audio in large batches, you can usually just look ahead in the file and find a 30-second-ish chunk of speech to apply it to. Voice interfaces can&#39;t look ahead to create larger chunks from their input stream, and phrases are seldom longer than five to ten seconds. This means there&#39;s a lot of wasted computation encoding zero padding in the encoder and decoder, which means longer latency in returning results. Since one of the most important requirements for any interface is responsiveness, usually defined as latency below 200ms, this hurts the user experience even on platforms that have compute to spare, and makes it unusable on more constrained devices.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Whisper doesn&#39;t cache anything&lt;/strong&gt;. Another common requirement for voice interfaces is that they display feedback as the user is talking, so that they know the app is listening and understanding them. This means calling the speech to text model repeatedly over time as a sentence is spoken. Most of the audio input is the same, with only a short addition to the end. Even though a lot of the input is constant, Whisper starts from scratch every time, doing a lot of redundant work on audio that it has seen before. Like the fixed input window, this unnecessary latency impairs the user experience.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Whisper supports a lot of languages poorly&lt;/strong&gt;. Whisper&#39;s multilingual support is an incredible feat of engineering, and demonstrated a single model could handle many languages, and even offer translations. This chart from OpenAI (&lt;a href=&quot;https://cdn.openai.com/papers/whisper.pdf&quot;&gt;raw data in Appendix D-2.4&lt;/a&gt;) shows the drop-off in Word Error Rate (WER) with the very largest 1.5 billion parameter model.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;img src=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/docs/images/lang-chart.png&quot; alt=&quot;Language Chart&quot; /&gt;&lt;/p&gt; 
&lt;p&gt;82 languages are listed, but only 33 have sub-20% WER (what we consider usable). For the Base model size commonly used on edge devices, only 5 languages are under 20% WER. Asian languages like Korean and Japanese stand out as the native tongue of large markets with a lot of tech innovation, but Whisper doesn&#39;t offer good enough accuracy to use in most applications The proprietary in-house versions of Whisper that are available through OpenAI&#39;s cloud API seem to offer better accuracy, but aren&#39;t available as open models.&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;Fragmented edge support&lt;/strong&gt;. A fantastic ecosystem has grown up around Whisper, there are a lot of mature frameworks you can use to deploy the models. However these often tend to be focused on desktop-class machines and operating systems. There are projects you can use across edge platforms like iOS, Android, or Raspberry Pi OS, but they tend to have different interfaces, capabilities, and levels of optimization. This made building applications that need to run on a variety of devices unnecessarily difficult.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;All these limitations drove us to create our own family of models that better meet the needs of live voice interfaces. It took us some time since the combined size of the open speech datasets available is tiny compared to the amount of web-derived text data, but after extensive data-gathering work, we were able to release &lt;a href=&quot;https://arxiv.org/abs/2410.15608&quot;&gt;the first generation of Moonshine models&lt;/a&gt;. These removed the fixed-input window limitation along with some other architectural improvements, and gave significantly lower latency than Whisper in live speech applications, often running 5x faster or more.&lt;/p&gt; 
&lt;p&gt;However we kept encountering applications that needed even lower latencies on even more constrained platforms. We also wanted to offer higher accuracy than the Base-equivalent that was the top end of the initial models. That led us to this second generation of Moonshine models, which offer:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;Flexible input windows&lt;/strong&gt;. You can supply any length of audio (though we recommend staying below around 30 seconds) and the model will only spend compute on that input, no zero-padding required. This gives us a significant latency boost.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Caching for streaming&lt;/strong&gt;. Our models now support incremental addition of audio over time, and they cache the input encoding and part of the decoder&#39;s state so that we&#39;re able to skip even more of the compute, driving latency down dramatically.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Language-specific models&lt;/strong&gt;. We have gathered data and trained models for multiple languages, including Arabic, Japanese, Korean, Spanish, Ukrainian, Vietnamese, and Chinese. As we discuss in our &lt;a href=&quot;https://arxiv.org/abs/2509.02523&quot;&gt;Flavors of Moonshine paper&lt;/a&gt;, we&#39;ve found that we can get much higher accuracy for the same size and compute if we restrict a model to focus on just one language, compared to training one model across many.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Cross-platform library support&lt;/strong&gt;. We&#39;re building applications ourselves, and needed to be able to deploy these models across Linux, MacOS, Windows, iOS, and Android, as well as use them from languages like Python, Swift, Java, and C++. To support this we architected a portable C++ core library that handles all of the processing, uses OnnxRuntime for good performance across systems, and then built native interfaces for all the required high-level languages. This allows developers to learn one API, and then deploy it almost anywhere they want to run.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Better accuracy than Whisper V3 Large&lt;/strong&gt;. On &lt;a href=&quot;https://huggingface.co/spaces/hf-audio/open_asr_leaderboard&quot;&gt;HuggingFace&#39;s OpenASR leaderboard&lt;/a&gt;, our newest streaming model for English, Medium Streaming, achieves a lower word-error rate than the most-accurate Whisper model from OpenAI. This is despite Moonshine&#39;s version using 250 million parameters, versus Large v3&#39;s 1.5 billion, making it much easier to deploy on the edge.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;Hopefully this gives you a good idea of how Moonshine compares to Whisper. If you&#39;re working with GPUs in the cloud on data in bulk where throughput is most important then Whisper (or Nvidia alternatives like Parakeet) offer advantages like batch processing, but we believe we can&#39;t be beat for live speech. We&#39;ve built the framework and models we wished we&#39;d had when we first started building applications with voice interfaces, so if you&#39;re working with live voice inputs, &lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/#quickstart&quot;&gt;give Moonshine a try&lt;/a&gt;.&lt;/p&gt; 
&lt;h2&gt;Using the Library&lt;/h2&gt; 
&lt;p&gt;The Moonshine API is designed to take care of the details around capturing and transcribing live speech, giving application developers a high-level API focused on actionable events. I&#39;ll use Python to illustrate how it works, but the API is consistent across all the supported languages.&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/#architecture&quot;&gt;Architecture&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/#concepts&quot;&gt;Concepts&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/#getting-started-with-transcription&quot;&gt;Getting Started with Transcription&lt;/a&gt; 
  &lt;ul&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/#transcription-event-flow&quot;&gt;Transcription Event Flow&lt;/a&gt;&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/#getting-started-with-a-conversational-agent&quot;&gt;Getting Started with a Conversational Agent&lt;/a&gt; 
  &lt;ul&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/#agent-setup&quot;&gt;Agent Setup&lt;/a&gt;&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/#getting-started-with-text-to-speech&quot;&gt;Getting Started with Text to Speech&lt;/a&gt; 
  &lt;ul&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/#voice-samples&quot;&gt;Voice Samples&lt;/a&gt; 
    &lt;ul&gt; 
     &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/#zipvoice&quot;&gt;ZipVoice&lt;/a&gt;&lt;/li&gt; 
     &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/#kokoro&quot;&gt;Kokoro&lt;/a&gt;&lt;/li&gt; 
     &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/#piper-tts&quot;&gt;Piper TTS&lt;/a&gt;&lt;/li&gt; 
    &lt;/ul&gt; &lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/#converting-graphemes-to-phonemes&quot;&gt;Converting Graphemes to Phonemes&lt;/a&gt;&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/#examples&quot;&gt;Examples&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/#adding-the-library-to-your-own-app&quot;&gt;Adding the Library to your own App&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/#python-1&quot;&gt;Python&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/#ios-or-macos&quot;&gt;iOS or MacOS&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/#android-1&quot;&gt;Android&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/#windowsc&quot;&gt;Windows&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/#debugging&quot;&gt;Debugging&lt;/a&gt; 
  &lt;ul&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/#console-logs&quot;&gt;Console Logs&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/#input-saving&quot;&gt;Input Saving&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/#api-call-logging&quot;&gt;API Call Logging&lt;/a&gt;&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/#building-from-source&quot;&gt;Building from Source&lt;/a&gt; 
  &lt;ul&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/#cmake&quot;&gt;Cmake&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/#language-bindings&quot;&gt;Language Bindings&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/#porting&quot;&gt;Porting&lt;/a&gt;&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/#downloading-models&quot;&gt;Downloading Models&lt;/a&gt; 
  &lt;ul&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/#speech-to-text-models&quot;&gt;Speech to Text Models&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/#embedding-models&quot;&gt;Embedding Models&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/#text-to-speech-models&quot;&gt;Text to Speech Models&lt;/a&gt;&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/#benchmarking&quot;&gt;Benchmarking&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Architecture&lt;/h3&gt; 
&lt;p&gt;Our goal is to build a framework that any developer can pick up and use, even with no previous experience of speech technologies. We&#39;ve abstracted away a lot of the unnecessary details and provide a simple interface that lets you focus on building your application, and that&#39;s reflected in our system architecture.&lt;/p&gt; 
&lt;p&gt;The basic flow is:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Create a &lt;code&gt;Transcriber&lt;/code&gt; object if you want the text that&#39;s spoken, or an &lt;code&gt;AgentFlow&lt;/code&gt; if you only need to know that a user has requested an action.&lt;/li&gt; 
 &lt;li&gt;Attach an &lt;code&gt;EventListener&lt;/code&gt; that gets called when important things occur, like the end of a phrase or an action being triggered, so your application can respond.&lt;/li&gt; 
 &lt;li&gt;Use a &lt;code&gt;TextToSpeech&lt;/code&gt; object to make it a two-way conversation.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;Traditionally, adding a voice interface to an application or product required integrating a lot of different libraries to handle all the processing that&#39;s needed to capture audio and turn it into something actionable. The main steps involved are microphone capture, voice activity detection (to break a continuous stream of audio into sections of speech), speech to text, speaker identification, and phrase matching. Each of these steps typically involved a different framework, which greatly increased the complexity of integrating, optimizing, and maintaining these dependencies.&lt;/p&gt; 
&lt;p&gt;Moonshine Voice includes all of these stages in a single library, and abstracts away everything but the essential information your application needs to respond to user speech, whether you want to transcribe it or trigger actions.&lt;/p&gt; 
&lt;p&gt;&lt;img src=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/docs/images/moonshine-voice-architecture.png&quot; alt=&quot;Moonshine Voice Architecture&quot; /&gt;&lt;/p&gt; 
&lt;p&gt;Most developers should be able to treat the library as a black box that tells them when something interesting has happened, using our event-based classes to implement application logic. Of course the framework is fully open source, so speech experts can dive as deep under the hood as they&#39;d like, but it&#39;s not necessary to use it.&lt;/p&gt; 
&lt;h3&gt;Concepts&lt;/h3&gt; 
&lt;p&gt;A &lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/language-bindings/python/src/moonshine_voice/transcriber.py#L66&quot;&gt;&lt;strong&gt;Transcriber&lt;/strong&gt;&lt;/a&gt; takes in audio input and turns any speech into text. This is the first object you&#39;ll need to create to use Moonshine, and you&#39;ll give it a path to &lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/#downloading-models&quot;&gt;the models you&#39;ve downloaded&lt;/a&gt;.&lt;/p&gt; 
&lt;p&gt;A &lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/language-bindings/python/src/moonshine_voice/mic_transcriber.py#L39&quot;&gt;&lt;strong&gt;MicTranscriber&lt;/strong&gt;&lt;/a&gt; is a helper class based on the general transcriber that takes care of connecting to a microphone using your platform&#39;s built-in support (for example sounddevice in Python) and then feeding the audio in as it&#39;s captured.&lt;/p&gt; 
&lt;p&gt;A &lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/language-bindings/python/src/moonshine_voice/transcriber.py#L297&quot;&gt;&lt;strong&gt;Stream&lt;/strong&gt;&lt;/a&gt; is a handler for audio input. The reason streams exist is because you may want to process multiple audio inputs at once, and a transcriber can support those through multiple streams, without duplicating the model resources. If you only have one input, the transcriber class includes the same methods (start/stop/add_audio) as a stream, and you can use that interface instead and forget about streams.&lt;/p&gt; 
&lt;p&gt;A &lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/language-bindings/python/src/moonshine_voice/moonshine_api.py#L51&quot;&gt;&lt;strong&gt;TranscriptLine&lt;/strong&gt;&lt;/a&gt; is a data structure holding information about one line in the transcript. When someone is speaking, the library waits for short pauses (where punctuation might go in written language) and starts a new line. These aren&#39;t exactly sentences, since a speech pause isn&#39;t a sure sign of the end of a sentence, but this does break the spoken audio into segments that can be considered phrases. A line includes state such as whether the line has just started, is still being spoken, or is complete, along with its start time and duration.&lt;/p&gt; 
&lt;p&gt;A &lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/language-bindings/python/src/moonshine_voice/moonshine_api.py#67&quot;&gt;&lt;strong&gt;Transcript&lt;/strong&gt;&lt;/a&gt; is a list of lines in time order holding information about what text has already been recognized, along with other state like when it was captured.&lt;/p&gt; 
&lt;p&gt;A &lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/language-bindings/python/src/moonshine_voice/transcriber.py#L22&quot;&gt;&lt;strong&gt;TranscriptEvent&lt;/strong&gt;&lt;/a&gt; contains information about changes to the transcript. Events include a new line being started, the text in a line being updated, and a line being completed. The event object includes the transcript line it&#39;s referring to as a member, holding the latest state of that line.&lt;/p&gt; 
&lt;p&gt;A &lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/language-bindings/python/src/moonshine_voice/transcriber.py#L266&quot;&gt;&lt;strong&gt;TranscriptEventListener&lt;/strong&gt;&lt;/a&gt; is a protocol that allows app-defined functions to be called when transcript events happen. This is the main way that most applications interact with the results of the transcription. When live speech is happening, applications usually need to respond or display results as new speech is recognized, and this approach allows you to handle those changes in a similar way to events from traditional user interfaces like touch screen gestures or mouse clicks on buttons.&lt;/p&gt; 
&lt;p&gt;A &lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/language-bindings/python/src/moonshine_voice/tts.py#L20&quot;&gt;&lt;strong&gt;TextToSpeech&lt;/strong&gt;&lt;/a&gt; object synthesizes audio for playback to the user.&lt;/p&gt; 
&lt;p&gt;An &lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/language-bindings/python/src/moonshine_voice/agent_flow.py#L547&quot;&gt;&lt;strong&gt;AgentFlow&lt;/strong&gt;&lt;/a&gt; object manages conversations between the user and an agent. It opens the transcriber, microphone, and speech synthesizer it needs itself, and invokes a callback whenever someone says something close in meaning to a phrase you registered — the basis of voice command recognition.&lt;/p&gt; 
&lt;p&gt;A &lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/language-bindings/python/src/moonshine_voice/agent_flow.py#L408&quot;&gt;&lt;strong&gt;Dialog&lt;/strong&gt;&lt;/a&gt; object is created for each conversational exchange, and allows the agent to hold a multi-step discussion with the user.&lt;/p&gt; 
&lt;h3&gt;Getting Started with Transcription&lt;/h3&gt; 
&lt;p&gt;We have &lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/#examples&quot;&gt;examples&lt;/a&gt; for most platforms so as a first step I recommend checking out what we have for the systems you&#39;re targeting.&lt;/p&gt; 
&lt;p&gt;Next, you&#39;ll need to &lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/#adding-the-library-to-your-own-app&quot;&gt;add the library to your project&lt;/a&gt;. We aim to provide pre-built binaries for all major platforms using their native package managers. On Python this means a pip install, for Android it&#39;s a Maven package, and for MacOS and iOS we provide a Swift package through SPM.&lt;/p&gt; 
&lt;p&gt;The transcriber needs access to the files for the model you&#39;re using, so after &lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/#downloading-models&quot;&gt;downloading them&lt;/a&gt; you&#39;ll need to place them somewhere the application can find them, and make a note of the path. This usually means adding them as resources in your IDE if you&#39;re planning to distribute the app, or you can use hard-wired paths if you&#39;re just experimenting. The download script gives you the location of the models and their architecture type on your drive after it completes.&lt;/p&gt; 
&lt;p&gt;Now you can try creating a transcriber. Here&#39;s what that looks like in Python:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-python&quot;&gt;transcriber = Transcriber(model_path=model_path, model_arch=model_arch)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;If the model isn&#39;t found, or if there&#39;s any other error, this will throw an exception with information about the problem. You can also check the console for logs from the core library, these are printed to &lt;code&gt;stderr&lt;/code&gt; or your system&#39;s equivalent.&lt;/p&gt; 
&lt;p&gt;Now we&#39;ll create a listener that contains the app logic that you want triggered when the transcript updates, and attach it to your transcriber:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-python&quot;&gt;class TestListener(TranscriptEventListener):
    def on_line_started(self, event):
        print(f&quot;Line started: {event.line.text}&quot;)

    def on_line_text_changed(self, event):
        print(f&quot;Line text changed: {event.line.text}&quot;)

    def on_line_completed(self, event):
        print(f&quot;Line completed: {event.line.text}&quot;)

listener = TestListener()
transcriber.add_listener(listener)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;The transcriber needs some audio data to work with. If you want to try it with the microphone you can update your transcriber creation line to use a MicTranscriber instead, but if you want to start with a .wav file for testing purposes here&#39;s how you feed that in:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-python&quot;&gt;    audio_data, sample_rate = load_wav_file(wav_path)

    transcriber.start()

    # Loop through the audio data in chunks to simulate live streaming
    # from a microphone or other source.
    chunk_duration = 0.1
    chunk_size = int(chunk_duration * sample_rate)
    for i in range(0, len(audio_data), chunk_size):
        chunk = audio_data[i: i + chunk_size]
        transcriber.add_audio(chunk, sample_rate)

    transcriber.stop()
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;The important things to notice here are:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;We create an array of mono audio data from a wav file, using the convenience &lt;code&gt;load_wav_file()&lt;/code&gt; function that&#39;s part of the Moonshine library.&lt;/li&gt; 
 &lt;li&gt;We start the transcriber to activate its processing code.&lt;/li&gt; 
 &lt;li&gt;The loop adds audio in chunks. These chunks can be any length and any sample rate, the library takes care of all the housekeeping.&lt;/li&gt; 
 &lt;li&gt;As audio is added, the event listener you added will be called, giving information about the latest speech.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;In a real application you&#39;d be calling &lt;code&gt;add_audio()&lt;/code&gt; from an audio handler that&#39;s receiving it from your source. Since the library can handle arbitrary durations and sample rates, just make sure it&#39;s mono and otherwise feed it in as-is.&lt;/p&gt; 
&lt;p&gt;The transcriber analyses the speech at a default interval of every 500ms of input. You can change this with the &lt;code&gt;update_interval&lt;/code&gt; argument to the transcriber constructor. For streaming models most of the work is done as the audio is being added, and it&#39;s automatically done at the end of a phrase, so changing this won&#39;t usually affect the workload or latency massively.&lt;/p&gt; 
&lt;p&gt;The interval is a floor rather than a fixed cadence. A pass has to cover at least as much audio as the last one took to make, up to ten intervals&#39; worth, so a machine that cannot keep up transcribes in larger batches instead of falling further behind with every pass. Where there is processing time to spare this makes no difference and the interval governs as before.&lt;/p&gt; 
&lt;p&gt;The key takeaway is that you usually don&#39;t need to worry about the transcript data structure itself, the event system tells you when something important happens. You can manually trigger a transcript update by calling &lt;code&gt;update_transcription()&lt;/code&gt; which returns a transcript object with all of the information about the current session if you do need to examine the state.&lt;/p&gt; 
&lt;p&gt;By calling &lt;code&gt;start()&lt;/code&gt; and &lt;code&gt;stop()&lt;/code&gt; on a transcriber (or stream) we&#39;re beginning and ending a session. Each session has one transcript document associated with it, and it is started fresh on every &lt;code&gt;start()&lt;/code&gt; call, so you should make copies of any data you need from the transcript object before that.&lt;/p&gt; 
&lt;p&gt;The transcriber class also offers a simpler &lt;code&gt;transcribe_without_streaming()&lt;/code&gt; method, for when you have an array of data from the past that you just want to analyse, such as a file or recording.&lt;/p&gt; 
&lt;p&gt;We also offer a specialization of the base &lt;code&gt;Transcriber&lt;/code&gt; class called &lt;code&gt;MicTranscriber&lt;/code&gt;. How this is implemented will depend on the language and platform, but it should provide a transcriber that&#39;s automatically attached to the main microphone on the system. This makes it straightforward to start transcribing speech from that common source, since it supports all of the same listener callbacks as the base class.&lt;/p&gt; 
&lt;h4&gt;Transcription Event Flow&lt;/h4&gt; 
&lt;p&gt;The main communication channel between the library and your application is through events that are passed to any listener functions you have registered. There are five major event types:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;code&gt;LineStarted&lt;/code&gt;. This is sent to listeners when the beginning of a new speech segment is detected. It may or may not contain any text, but since it&#39;s dispatched near the start of an utterance, that text is likely to change over time.&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;LineUpdated&lt;/code&gt;. Called whenever any of the information about a line changes, including the duration, audio data, and text.&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;LineTextChanged&lt;/code&gt;. Called only when the text associated with a line is updated. This is a subset of &lt;code&gt;LineUpdated&lt;/code&gt; that focuses on the common need to refresh the text shown to users as often as possible to keep the experience interactive.&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;LineSpeakersChanged&lt;/code&gt;. Only fired when the opt-in &lt;code&gt;identify_speakers&lt;/code&gt; option is enabled. Called when the speaker spans attached to a line change. Unlike the other line events, this can fire for lines that are already complete, because the diarization algorithm keeps refining its speaker assignments as more audio arrives.&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;LineCompleted&lt;/code&gt;. Sent when we detect that someone has paused speaking, and we&#39;ve ended the current segment. The line data structure has the final values for the text and duration.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;We offer some guarantees about these events:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;code&gt;LineStarted&lt;/code&gt; is always called exactly once for any segment.&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;LineCompleted&lt;/code&gt; is always called exactly once after &lt;code&gt;LineStarted&lt;/code&gt; for any segment.&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;LineUpdated&lt;/code&gt; and &lt;code&gt;LineTextChanged&lt;/code&gt; will only ever be called after the &lt;code&gt;LineStarted&lt;/code&gt; and before the &lt;code&gt;LineCompleted&lt;/code&gt; events for a segment.&lt;/li&gt; 
 &lt;li&gt;Those update events are not guaranteed to be called (and in practice can be disabled by setting &lt;code&gt;update_interval&lt;/code&gt; to a very large value).&lt;/li&gt; 
 &lt;li&gt;There will only be one line active at any one time for any given stream.&lt;/li&gt; 
 &lt;li&gt;Once &lt;code&gt;LineCompleted&lt;/code&gt; has been called, the library will never alter that line&#39;s text, timing, or audio data again. The one exception is the line&#39;s speaker spans: when &lt;code&gt;identify_speakers&lt;/code&gt; is enabled, those can be revised for recent audio (signaled by &lt;code&gt;LineSpeakersChanged&lt;/code&gt;), since diarization re-clusters a sliding window of recent speech. Assignments for audio older than &lt;code&gt;diarization_cluster_window_sec&lt;/code&gt; are frozen.&lt;/li&gt; 
 &lt;li&gt;If &lt;code&gt;stop()&lt;/code&gt; is called on a transcriber or stream, any active lines will have &lt;code&gt;LineCompleted&lt;/code&gt; called.&lt;/li&gt; 
 &lt;li&gt;Each line has a 64-bit &lt;code&gt;lineId&lt;/code&gt; that is designed to be unique enough to avoid collisions.&lt;/li&gt; 
 &lt;li&gt;This &lt;code&gt;lineId&lt;/code&gt; remains the same for the line over time, from the first &lt;code&gt;LineStarted&lt;/code&gt; event onwards.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Getting Started with a Conversational Agent&lt;/h3&gt; 
&lt;p&gt;Many applications need a voice agent that can understand what users are saying and respond appropriately. To make this as straightforward as possible, we let you define different conversational flows. A flow can be as simple as responding to a query, or be a multi-step, branching conversation that takes actions.&lt;/p&gt; 
&lt;p&gt;To define these flows, you use an &lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/#agentflow&quot;&gt;&lt;code&gt;AgentFlow&lt;/code&gt;&lt;/a&gt; object, with callbacks that take &lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/#dialog&quot;&gt;&lt;code&gt;Dialog&lt;/code&gt;&lt;/a&gt; arguments. Here&#39;s an example of a simple flow, taken from the &lt;a href=&quot;https://github.com/moonshine-ai/pi-help-bot&quot;&gt;github.com/moonshine-ai/pi-help-bot&lt;/a&gt; sample code:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-python&quot;&gt;    def report_ip_address(d: Dialog):
        ip = _find_local_ip()
        if ip is None:
            yield d.say(&quot;Sorry, I couldn&#39;t find a local IP address.&quot;)
            return
        speech_ip = re.sub(r&quot;(\d)&quot;, r&quot;\1 &quot;, ip.replace(&quot;.&quot;, &quot; dot &quot;))
        yield d.say([
            f&quot;Okay. Your local IP address is {speech_ip}. &quot;,
            f&quot;To repeat, that&#39;s {speech_ip}.&quot;
        ])

    agent_flow.listen_for(&quot;What is my IP address?&quot;, report_ip_address)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;This registers the &lt;code&gt;report_ip_address()&lt;/code&gt; function to be called whenever the user says anything similar to &quot;What is my IP address?&quot;. The matching is done semantically, so alternative phrasings like &quot;Tell me your IP address&quot; or &quot;Can you tell me the local IP address?&quot; should trigger it too. You can register as many top-level conversation starters as you&#39;d like, the system will listen out and route to the closest in meaning.&lt;/p&gt; 
&lt;p&gt;The function itself receives a &lt;code&gt;Dialog&lt;/code&gt; argument that represents the current conversational exchange. In this simple case we don&#39;t need any additional input from the user so we just use it to &lt;code&gt;say()&lt;/code&gt; the information that was requested. We break the IP address into separate words for each digit for clarity, and replace the connecting periods with explicit &quot;dot&quot;s, so that 192.178.4.72 becomes &quot;1 9 2 dot 1 7 8 dot 4 dot 72&quot;, since that&#39;s the conventional way to articulate them in speech.&lt;/p&gt; 
&lt;p&gt;For more complex conversations, like setting up a new wifi network, you can define multiple steps and branch points directly in Python:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-python&quot;&gt;    def connect_to_wifi(d: Dialog):
        input_ssid = yield d.ask(&quot;What&#39;s the name of your Wi-Fi network? Say list if you want to pick from a list or spell if you want to spell out the start of the name&quot;)
        input_ssid = input_ssid.strip()

        networks = _scan_wifi_networks()

        if input_ssid.lower().strip(string.punctuation) == &quot;list&quot;:
            yield d.say(&quot;Say yes to the network you want to connect to.&quot;)
            for network in networks:
                if (yield d.confirm(f&quot;{network}?&quot;)):
                    input_ssid = network
                    break
        elif input_ssid.lower().strip(string.punctuation) == &quot;spell&quot;:
            input_ssid = yield d.ask(&quot;Spell out the start of the network name.&quot;, mode=SPELLED)

        found_ssid = fuzzy_match_network(input_ssid, networks)
        if found_ssid is None:
            yield d.say(f&quot;Sorry, I couldn&#39;t find a matching network for {input_ssid}.&quot;)
            return

        password = yield d.ask(
            f&quot;Please spell the Wi-Fi password for {found_ssid} one character at a time, and say done when finished.&quot;,
            mode=SPELLED,
        )

        yield d.say(f&quot;Connecting to {found_ssid}.&quot;)

        try:
            result = subprocess.run(
                [&quot;sudo&quot;, &quot;nmcli&quot;, &quot;device&quot;, &quot;wifi&quot;,
                    &quot;connect&quot;, found_ssid, &quot;password&quot;, password],
                capture_output=True, text=True, timeout=30,
            )
        except FileNotFoundError:
            yield d.say(&quot;Sorry, network manager was not found on this system.&quot;)
            return
        except subprocess.TimeoutExpired:
            yield d.say(&quot;Sorry, the connection attempt timed out.&quot;)
            return

        if result.returncode == 0:
            yield d.say(f&quot;Connected to {found_ssid}.&quot;)
        else:
            print(f&quot;[ERROR] nmcli stderr: {result.stderr}&quot;, file=sys.stderr)
            yield d.say(
                f&quot;Sorry, I wasn&#39;t able to connect to {found_ssid}. &quot;
                &quot;Please check the network name and password and try again.&quot;
            )

    agent_flow.listen_for(&quot;Connect to Wi-Fi&quot;, connect_to_wifi)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;The first thing the function does is ask the user to give them the name of the network they want to join, through the call:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-python&quot;&gt;input_ssid = yield d.ask(&quot;What&#39;s the name of your Wi-Fi network?...&quot;)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;The Dialog class lets you ask users questions and will return the string containing the what they said in response. The only unusual feature here, compared to regular Python code, is the &lt;code&gt;yield&lt;/code&gt; keyword. Because it may take some time for the user to respond, we call yield to hand back control to the main script until their response has been received. This is a general pattern for &lt;code&gt;AgentFlow&lt;/code&gt; and you&#39;ll see it wherever we&#39;re waiting for the user to say something, to avoid blocking.&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-python&quot;&gt;        if input_ssid.lower().strip(string.punctuation) == &quot;list&quot;:
            yield d.say(&quot;Say yes to the network you want to connect to.&quot;)
            for network in networks:
                if (yield d.confirm(f&quot;{network}?&quot;)):
                    input_ssid = network
                    break
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Our example application supports a few different input methods - running through a list of networks, spelling out the first few letters, or saying the name. Here we implement the list approach by looping through all the available networks and asking the user whether each is the one they want. Here you can see that regular loops and conditional statements work as you&#39;d expect in Python.&lt;/p&gt; 
&lt;p&gt;For each network, we call &lt;code&gt;confirm()&lt;/code&gt;, which asks a question and then waits for a positive or negative result. Like all matching in the system this is done semantically, so &quot;okay&quot;, &quot;affirmative&quot;, and &quot;go ahead&quot; will work as well as a straightforward &quot;yes&quot;.&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-python&quot;&gt;        password = yield d.ask(
            f&quot;Please spell the Wi-Fi password for {found_ssid} one character at a time, and say done when finished.&quot;,
            mode=SPELLED,
        )
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Password input is tricky, because they consist of arbitrary letters, digits, and symbols, and so they have to be spelled out by the user. Moonshine supports this through the &lt;code&gt;mode=SPELLED&lt;/code&gt; argument. This asks the user to spell out each character, and uses a fine-tuned model to recognise what the user is saying for each. As well as supporting regular utterances like &quot;aitch&quot; or &quot;capital zee&quot;, it also supports the NATO alphabet (&quot;alpha&quot;, &quot;bravo&quot;, etc) and even short descriptive phrases like &quot;E as in elephant&quot;. It repeats back what it heard, and lets you delete mistakes.&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-python&quot;&gt;        try:
            result = subprocess.run(
                [&quot;sudo&quot;, &quot;nmcli&quot;, &quot;device&quot;, &quot;wifi&quot;,
                    &quot;connect&quot;, found_ssid, &quot;password&quot;, password],
                capture_output=True, text=True, timeout=30,
            )
        except FileNotFoundError:
            yield d.say(&quot;Sorry, network manager was not found on this system.&quot;)
            return
        except subprocess.TimeoutExpired:
            yield d.say(&quot;Sorry, the connection attempt timed out.&quot;)
            return
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;The flow also works with other control structures like exception handlers, so you can specify your conversations using idiomatic code, even for error recovery.&lt;/p&gt; 
&lt;h4&gt;Agent Setup&lt;/h4&gt; 
&lt;p&gt;Once your flows are written, the only setup left is to register them and go live. &lt;code&gt;AgentFlow&lt;/code&gt; opens everything it needs itself — the speech recognition model, the microphone, and the speech synthesizer — so there&#39;s nothing to wire together:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-python&quot;&gt;    agent_flow = (
        AgentFlow()
        .language(&quot;en&quot;)
        .listen_for(&quot;What is my IP address?&quot;, report_ip_address)
        .listen_for(&quot;Connect to Wi-Fi&quot;, connect_to_wifi)
    )

    agent_flow.start_listening()
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Every configuration method returns the runner, so a whole voice interface can be built in a single expression, and each one has a working default. &lt;code&gt;listen_for()&lt;/code&gt; registers the conversation starters. &quot;Cancel&quot; and &quot;start over&quot; need no registration: they work at any point inside a flow, and outside one they&#39;re treated as ordinary speech so a dictation interface doesn&#39;t lose them. Use &lt;code&gt;always()&lt;/code&gt; to register a phrase of your own that stays live at every moment, whether or not a flow is running.&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;start_listening()&lt;/code&gt; opens and downloads whatever is missing on first use (the embedding model used for matching, the speech to text model for your language, and a synthesizer), then returns as soon as the microphone is live. Speech arrives on the audio thread and drives your flows from there, so your own code is free to sleep, run a UI, or do anything else. If you want the loading to happen at a moment of your choosing rather than on the first &lt;code&gt;start_listening()&lt;/code&gt; call, call &lt;code&gt;load()&lt;/code&gt; yourself beforehand and pass &lt;code&gt;on_progress()&lt;/code&gt; a callback to report download progress. Call &lt;code&gt;close()&lt;/code&gt; when you&#39;re finished to release everything the runner opened.&lt;/p&gt; 
&lt;p&gt;To give this a try for yourself, run this built-in example:&lt;/p&gt; 
&lt;!-- doc-test: parse-only --&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;python -m moonshine_voice.agent_flow
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;Getting Started with Text to Speech&lt;/h3&gt; 
&lt;p&gt;Voice interfaces often need to talk back, and Moonshine&#39;s &lt;code&gt;TextToSpeech&lt;/code&gt; is designed to make that easy, across multiple languages. It&#39;s also self-contained, so you can use it independently from the transcription and agent modules.&lt;/p&gt; 
&lt;p&gt;You configure a synthesizer with chainable setters, call &lt;code&gt;load()&lt;/code&gt; to fetch and open the voice, and then pass text into &lt;code&gt;say()&lt;/code&gt; to speak it on the default audio device:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-python&quot;&gt;from moonshine_voice import TextToSpeech

tts = TextToSpeech().language(&quot;fr&quot;)
tts.load()
tts.say(&quot;Bonjour, mon ami&quot;)
tts.wait()  # block until playback finishes
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;code&gt;load()&lt;/code&gt; blocks, since the first call may have to download a voice. Pass &lt;code&gt;on_progress()&lt;/code&gt; a handler to drive a progress bar:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-python&quot;&gt;tts = TextToSpeech().language(&quot;fr&quot;).on_progress(lambda fraction, file: print(f&quot;{fraction:.0%}&quot;))
tts.load()
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;code&gt;say()&lt;/code&gt; returns immediately and queues the text for background synthesis and playback. Calling &lt;code&gt;say()&lt;/code&gt; multiple times queues each utterance in order, and the next utterance is pre-synthesized while the current one plays. You can also pass a list of strings, cancel everything with &lt;code&gt;stop()&lt;/code&gt;, or poll with &lt;code&gt;is_talking()&lt;/code&gt;:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-python&quot;&gt;tts.say([&quot;One.&quot;, &quot;Two.&quot;, &quot;Three.&quot;])
tts.stop()  # cancel remaining utterances and halt playback
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;If you&#39;re on a machine without an audio output, or want to do further processing, you can retrieve the audio samples using the &lt;code&gt;synthesize()&lt;/code&gt; method:&lt;/p&gt; 
&lt;!-- doc-test: run --&gt; 
&lt;pre&gt;&lt;code class=&quot;language-python&quot;&gt;from moonshine_voice import TextToSpeech

tts = TextToSpeech().language(&quot;en-us&quot;)
tts.load()
audio_data, sample_rate = tts.synthesize(&quot;Howdy, partner&quot;)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;As you can see, text to speech supports multiple languages. To see which are available, run the &lt;code&gt;list_tts_languages()&lt;/code&gt; function:&lt;/p&gt; 
&lt;!-- doc-test: run --&gt; 
&lt;pre&gt;&lt;code class=&quot;language-python&quot;&gt;from moonshine_voice import list_tts_languages
list_tts_languages()

[&#39;ar-msa&#39;, &#39;de-de&#39;, &#39;en-gb&#39;, &#39;en-us&#39;, &#39;es-ar&#39;, &#39;es-es&#39;, &#39;es-mx&#39;, &#39;fr-fr&#39;, &#39;hi-in&#39;, &#39;it-it&#39;, &#39;ja-jp&#39;, &#39;ko-kr&#39;, &#39;nl-nl&#39;, &#39;pt-br&#39;, &#39;pt-pt&#39;, &#39;ru-ru&#39;, &#39;tr-tr&#39;, &#39;uk-ua&#39;, &#39;vi-vn&#39;, &#39;zh-hans&#39;]
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;For each language, you can list which voices are available:&lt;/p&gt; 
&lt;!-- doc-test: run --&gt; 
&lt;pre&gt;&lt;code class=&quot;language-python&quot;&gt;from moonshine_voice import list_tts_voices

list_tts_voices(&quot;ru&quot;)

{&#39;present&#39;: [], &#39;downloadable&#39;: [&#39;piper_ru_RU-denis-medium&#39;, &#39;piper_ru_RU-dmitri-medium&#39;, &#39;piper_ru_RU-irina-medium&#39;, &#39;piper_ru_RU-ruslan-medium&#39;]}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;If a voice is marked as &lt;code&gt;downloadable&lt;/code&gt; that means if you pass it to &lt;code&gt;voice()&lt;/code&gt; then Moonshine will download it to a cache automatically, and it will be available on your machine with no internet access required for subsequent calls.&lt;/p&gt; 
&lt;h4&gt;Voice Cloning&lt;/h4&gt; 
&lt;p&gt;The integrated &lt;a href=&quot;https://github.com/k2-fsa/ZipVoice&quot;&gt;ZipVoice model&lt;/a&gt; can imitate someone&#39;s voice, given a short audio clip. Pass the clip to &lt;code&gt;clone_from()&lt;/code&gt;, either as a path to a &lt;code&gt;.wav&lt;/code&gt; file or as a &lt;code&gt;(pcm, sample_rate)&lt;/code&gt; pair of mono float samples. You can also pass &lt;code&gt;transcript&lt;/code&gt;, the text spoken in the clip; when omitted, Moonshine auto-transcribes the clip with its ASR model before cloning (this takes a few extra seconds on first use):&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-python&quot;&gt;from moonshine_voice import TextToSpeech
import importlib.resources;

clone_path = importlib.resources.files(&quot;moonshine_voice.assets&quot;).joinpath(&quot;clone-test.wav&quot;)
clone_transcript = &quot;Ever tried. Ever failed. No matter. Try Again. Fail again. Fail better.&quot;

tts = TextToSpeech().language(&quot;en-us&quot;).cloning()
tts.load()
tts.clone_from(clone_path, transcript=clone_transcript)
tts.say(&quot;Ask not what your country can do for you, but what you can do for your country&quot;)
tts.wait()
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;code&gt;cloning()&lt;/code&gt; tells &lt;code&gt;load()&lt;/code&gt; to fetch ZipVoice and its clone-ASR assets up front, so &lt;code&gt;clone_from()&lt;/code&gt; only swaps the reference clip. Call &lt;code&gt;cloning()&lt;/code&gt; before &lt;code&gt;load()&lt;/code&gt; — without it, &lt;code&gt;clone_from()&lt;/code&gt; / &lt;code&gt;start_cloning()&lt;/code&gt; raise a clear error. Catalog voices and cloning are mutually exclusive: &lt;code&gt;voice()&lt;/code&gt; clears cloning, and &lt;code&gt;cloning()&lt;/code&gt; clears the catalog voice.&lt;/p&gt; 
&lt;p&gt;To clone from someone speaking into the microphone rather than from a file, &lt;code&gt;start_cloning()&lt;/code&gt; hands back a &lt;code&gt;VoiceClone&lt;/code&gt; that listens until it has heard enough usable speech:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-python&quot;&gt;clone = tts.start_cloning()
clone.on_ready(lambda: print(&quot;Got it, you can stop talking.&quot;))
clone.from_microphone()
tts.clone_from(clone)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Picking the clip out of the recording runs Moonshine&#39;s built-in voice-activity detector, which is compiled into the library, so nothing is downloaded for this step. &lt;code&gt;from_microphone()&lt;/code&gt; blocks until the clip is ready or 20 seconds have passed; &lt;code&gt;on_progress()&lt;/code&gt; reports how long it has been recording and how much speech it has found so far.&lt;/p&gt; 
&lt;p&gt;You can also try cloning from the command line. Since you won&#39;t always have easy access to a clean transcript of the speech you want to clone from, you can leave it out and have Moonshine automatically generate one, in both the API and command line.&lt;/p&gt; 
&lt;!-- doc-test: parse-only --&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;curl -O -L &#39;https://github.com/moonshine-ai/moonshine/raw/refs/heads/main/language-bindings/python/src/moonshine_voice/assets/clone-test.wav&#39;

python3 -m moonshine_voice.tts \
  --clone clone-test.wav \
  --text &quot;I am so excited about Moonshine Voice&#39;s text to speech&quot;
&lt;/code&gt;&lt;/pre&gt; 
&lt;h4&gt;Voice Samples&lt;/h4&gt; 
&lt;p&gt;To help you choose a voice, here are sample clips of each one saying &quot;Welcome to Moonshine Voice text to speech&quot;. Each entry is the voice name you can pass to &lt;code&gt;voice()&lt;/code&gt;; click the ▶ next to it to hear it.&lt;/p&gt; 
&lt;h5&gt;ZipVoice&lt;/h5&gt; 
&lt;p&gt;These voices were created using the zero-shot voice cloning capabilities of &lt;a href=&quot;https://github.com/k2-fsa/ZipVoice&quot;&gt;ZipVoice&lt;/a&gt;, a high-quality flow-matching TTS model from the k2-fsa team. It takes significantly longer to generate than Kokoro or PiperTTS, but offers &lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/#voice-cloning&quot;&gt;voice cloning&lt;/a&gt; and more realistic speech.&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;&lt;code&gt;zipvoice_american_female&lt;/code&gt; &lt;a href=&quot;https://cdn.jsdelivr.net/gh/moonshine-ai/moonshine@main/docs/audio/zipvoice_american_female.wav&quot;&gt;▶&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;zipvoice_american_male&lt;/code&gt; &lt;a href=&quot;https://cdn.jsdelivr.net/gh/moonshine-ai/moonshine@main/docs/audio/zipvoice_american_male.wav&quot;&gt;▶&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;zipvoice_australian_male&lt;/code&gt; &lt;a href=&quot;https://cdn.jsdelivr.net/gh/moonshine-ai/moonshine@main/docs/audio/zipvoice_australian_male.wav&quot;&gt;▶&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;zipvoice_canadian_female&lt;/code&gt; &lt;a href=&quot;https://cdn.jsdelivr.net/gh/moonshine-ai/moonshine@main/docs/audio/zipvoice_canadian_female.wav&quot;&gt;▶&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;zipvoice_canadian_male&lt;/code&gt; &lt;a href=&quot;https://cdn.jsdelivr.net/gh/moonshine-ai/moonshine@main/docs/audio/zipvoice_canadian_male.wav&quot;&gt;▶&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;zipvoice_english_female&lt;/code&gt; &lt;a href=&quot;https://cdn.jsdelivr.net/gh/moonshine-ai/moonshine@main/docs/audio/zipvoice_english_female.wav&quot;&gt;▶&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;zipvoice_english_male&lt;/code&gt; &lt;a href=&quot;https://cdn.jsdelivr.net/gh/moonshine-ai/moonshine@main/docs/audio/zipvoice_english_male.wav&quot;&gt;▶&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;zipvoice_indian_female&lt;/code&gt; &lt;a href=&quot;https://cdn.jsdelivr.net/gh/moonshine-ai/moonshine@main/docs/audio/zipvoice_indian_female.wav&quot;&gt;▶&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;zipvoice_indian_male&lt;/code&gt; &lt;a href=&quot;https://cdn.jsdelivr.net/gh/moonshine-ai/moonshine@main/docs/audio/zipvoice_indian_male.wav&quot;&gt;▶&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;zipvoice_irish_female&lt;/code&gt; &lt;a href=&quot;https://cdn.jsdelivr.net/gh/moonshine-ai/moonshine@main/docs/audio/zipvoice_irish_female.wav&quot;&gt;▶&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;zipvoice_irish_male&lt;/code&gt; &lt;a href=&quot;https://cdn.jsdelivr.net/gh/moonshine-ai/moonshine@main/docs/audio/zipvoice_irish_male.wav&quot;&gt;▶&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;zipvoice_new_zealand_female&lt;/code&gt; &lt;a href=&quot;https://cdn.jsdelivr.net/gh/moonshine-ai/moonshine@main/docs/audio/zipvoice_new_zealand_female.wav&quot;&gt;▶&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;zipvoice_northern_irish_female&lt;/code&gt; &lt;a href=&quot;https://cdn.jsdelivr.net/gh/moonshine-ai/moonshine@main/docs/audio/zipvoice_northern_irish_female.wav&quot;&gt;▶&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;zipvoice_south_african_female&lt;/code&gt; &lt;a href=&quot;https://cdn.jsdelivr.net/gh/moonshine-ai/moonshine@main/docs/audio/zipvoice_south_african_female.wav&quot;&gt;▶&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;zipvoice_south_african_male&lt;/code&gt; &lt;a href=&quot;https://cdn.jsdelivr.net/gh/moonshine-ai/moonshine@main/docs/audio/zipvoice_south_african_male.wav&quot;&gt;▶&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;h5&gt;Kokoro&lt;/h5&gt; 
&lt;p&gt;These voices come from the excellent &lt;a href=&quot;https://github.com/hexgrad/kokoro&quot;&gt;Kokoro&lt;/a&gt; project, an 82-million-parameter open-weight TTS model that delivers quality comparable to much larger models.&lt;/p&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;American Female&lt;/th&gt; 
   &lt;th&gt;American Male&lt;/th&gt; 
   &lt;th&gt;British Female&lt;/th&gt; 
   &lt;th&gt;British Male&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;kokoro_af_alloy&lt;/code&gt; &lt;a href=&quot;https://cdn.jsdelivr.net/gh/moonshine-ai/moonshine@main/docs/audio/kokoro_af_alloy.wav&quot;&gt;▶&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;kokoro_am_adam&lt;/code&gt; &lt;a href=&quot;https://cdn.jsdelivr.net/gh/moonshine-ai/moonshine@main/docs/audio/kokoro_am_adam.wav&quot;&gt;▶&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;kokoro_bf_alice&lt;/code&gt; &lt;a href=&quot;https://cdn.jsdelivr.net/gh/moonshine-ai/moonshine@main/docs/audio/kokoro_bf_alice.wav&quot;&gt;▶&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;kokoro_bm_daniel&lt;/code&gt; &lt;a href=&quot;https://cdn.jsdelivr.net/gh/moonshine-ai/moonshine@main/docs/audio/kokoro_bm_daniel.wav&quot;&gt;▶&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;kokoro_af_aoede&lt;/code&gt; &lt;a href=&quot;https://cdn.jsdelivr.net/gh/moonshine-ai/moonshine@main/docs/audio/kokoro_af_aoede.wav&quot;&gt;▶&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;kokoro_am_echo&lt;/code&gt; &lt;a href=&quot;https://cdn.jsdelivr.net/gh/moonshine-ai/moonshine@main/docs/audio/kokoro_am_echo.wav&quot;&gt;▶&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;kokoro_bf_emma&lt;/code&gt; &lt;a href=&quot;https://cdn.jsdelivr.net/gh/moonshine-ai/moonshine@main/docs/audio/kokoro_bf_emma.wav&quot;&gt;▶&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;kokoro_bm_fable&lt;/code&gt; &lt;a href=&quot;https://cdn.jsdelivr.net/gh/moonshine-ai/moonshine@main/docs/audio/kokoro_bm_fable.wav&quot;&gt;▶&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;kokoro_af_bella&lt;/code&gt; &lt;a href=&quot;https://cdn.jsdelivr.net/gh/moonshine-ai/moonshine@main/docs/audio/kokoro_af_bella.wav&quot;&gt;▶&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;kokoro_am_eric&lt;/code&gt; &lt;a href=&quot;https://cdn.jsdelivr.net/gh/moonshine-ai/moonshine@main/docs/audio/kokoro_am_eric.wav&quot;&gt;▶&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;kokoro_bf_isabella&lt;/code&gt; &lt;a href=&quot;https://cdn.jsdelivr.net/gh/moonshine-ai/moonshine@main/docs/audio/kokoro_bf_isabella.wav&quot;&gt;▶&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;kokoro_bm_george&lt;/code&gt; &lt;a href=&quot;https://cdn.jsdelivr.net/gh/moonshine-ai/moonshine@main/docs/audio/kokoro_bm_george.wav&quot;&gt;▶&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;kokoro_af_heart&lt;/code&gt; &lt;a href=&quot;https://cdn.jsdelivr.net/gh/moonshine-ai/moonshine@main/docs/audio/kokoro_af_heart.wav&quot;&gt;▶&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;kokoro_am_fenrir&lt;/code&gt; &lt;a href=&quot;https://cdn.jsdelivr.net/gh/moonshine-ai/moonshine@main/docs/audio/kokoro_am_fenrir.wav&quot;&gt;▶&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;kokoro_bf_lily&lt;/code&gt; &lt;a href=&quot;https://cdn.jsdelivr.net/gh/moonshine-ai/moonshine@main/docs/audio/kokoro_bf_lily.wav&quot;&gt;▶&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;kokoro_bm_lewis&lt;/code&gt; &lt;a href=&quot;https://cdn.jsdelivr.net/gh/moonshine-ai/moonshine@main/docs/audio/kokoro_bm_lewis.wav&quot;&gt;▶&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;kokoro_af_jessica&lt;/code&gt; &lt;a href=&quot;https://cdn.jsdelivr.net/gh/moonshine-ai/moonshine@main/docs/audio/kokoro_af_jessica.wav&quot;&gt;▶&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;kokoro_am_liam&lt;/code&gt; &lt;a href=&quot;https://cdn.jsdelivr.net/gh/moonshine-ai/moonshine@main/docs/audio/kokoro_am_liam.wav&quot;&gt;▶&lt;/a&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;kokoro_af_kore&lt;/code&gt; &lt;a href=&quot;https://cdn.jsdelivr.net/gh/moonshine-ai/moonshine@main/docs/audio/kokoro_af_kore.wav&quot;&gt;▶&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;kokoro_am_michael&lt;/code&gt; &lt;a href=&quot;https://cdn.jsdelivr.net/gh/moonshine-ai/moonshine@main/docs/audio/kokoro_am_michael.wav&quot;&gt;▶&lt;/a&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;kokoro_af_nicole&lt;/code&gt; &lt;a href=&quot;https://cdn.jsdelivr.net/gh/moonshine-ai/moonshine@main/docs/audio/kokoro_af_nicole.wav&quot;&gt;▶&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;kokoro_am_onyx&lt;/code&gt; &lt;a href=&quot;https://cdn.jsdelivr.net/gh/moonshine-ai/moonshine@main/docs/audio/kokoro_am_onyx.wav&quot;&gt;▶&lt;/a&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;kokoro_af_nova&lt;/code&gt; &lt;a href=&quot;https://cdn.jsdelivr.net/gh/moonshine-ai/moonshine@main/docs/audio/kokoro_af_nova.wav&quot;&gt;▶&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;kokoro_am_puck&lt;/code&gt; &lt;a href=&quot;https://cdn.jsdelivr.net/gh/moonshine-ai/moonshine@main/docs/audio/kokoro_am_puck.wav&quot;&gt;▶&lt;/a&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;kokoro_af_river&lt;/code&gt; &lt;a href=&quot;https://cdn.jsdelivr.net/gh/moonshine-ai/moonshine@main/docs/audio/kokoro_af_river.wav&quot;&gt;▶&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;kokoro_am_santa&lt;/code&gt; &lt;a href=&quot;https://cdn.jsdelivr.net/gh/moonshine-ai/moonshine@main/docs/audio/kokoro_am_santa.wav&quot;&gt;▶&lt;/a&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;kokoro_af_sarah&lt;/code&gt; &lt;a href=&quot;https://cdn.jsdelivr.net/gh/moonshine-ai/moonshine@main/docs/audio/kokoro_af_sarah.wav&quot;&gt;▶&lt;/a&gt;&lt;/td&gt; 
   &lt;td&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;kokoro_af_sky&lt;/code&gt; &lt;a href=&quot;https://cdn.jsdelivr.net/gh/moonshine-ai/moonshine@main/docs/audio/kokoro_af_sky.wav&quot;&gt;▶&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;h5&gt;Piper TTS&lt;/h5&gt; 
&lt;p&gt;The &lt;a href=&quot;https://github.com/OHF-Voice/piper1-gpl&quot;&gt;Piper&lt;/a&gt; project provides over a hundred lightweight voices across all of the languages Moonshine supports, from many contributors — too many to sample here. You can listen to every Piper voice on the &lt;a href=&quot;https://rhasspy.github.io/piper-samples/&quot;&gt;Piper voice samples page&lt;/a&gt;, and use any of them with Moonshine through the &lt;code&gt;piper_&lt;/code&gt; voice names returned by &lt;code&gt;list_tts_voices()&lt;/code&gt;.&lt;/p&gt; 
&lt;h4&gt;Converting Graphemes to Phonemes&lt;/h4&gt; 
&lt;p&gt;As you may notice from the voice names, Moonshine Voice uses models from the fantastic &lt;a href=&quot;https://github.com/hexgrad/kokoro&quot;&gt;Kokoro&lt;/a&gt; and &lt;a href=&quot;https://huggingface.co/rhasspy/piper-voices&quot;&gt;PiperTTS&lt;/a&gt; projects. You can find full details on all the model and data sources we use for text to speech at &lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/core/moonshine-tts/data/README.md&quot;&gt;core/moonshine-tts/data/README.md&lt;/a&gt;.&lt;/p&gt; 
&lt;p&gt;Given that there are other great TTS projects out there, why does the world need yet another implementation? Moonshine tries to run on as many platforms as possible and supports commercial applications, and both Kokoro and Piper use &lt;a href=&quot;https://github.com/espeak-ng/espeak-ng/&quot;&gt;espeak-ng&lt;/a&gt; to convert text strings into phonemes, representations of the noises associated with the sentence, in the International Pronunciation Alphabet. Espeak-ng is licensed under the GPL, and while I am a fan of free software, the terms do make it hard to incorporate into applications that don&#39;t also release their source code under a similar license.&lt;/p&gt; 
&lt;p&gt;In the cloud this isn&#39;t as much of an issue, as many uses of espeak-ng can be implemented by calling out to an external executable, so the dependency isn&#39;t as problematic. This isn&#39;t an option on many edge operating systems unfortunately, as the only way to include code on iOS or Android is to link it into the application, which requires open sourcing the calling code.&lt;/p&gt; 
&lt;p&gt;To allow wider usage, we developed our own &quot;grapheme to phoneme&quot; module that performs a similar role, but has been written from scratch. You&#39;ll find the implementation in &lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/core/moonshine-tts&quot;&gt;core/moonshine-tts&lt;/a&gt; and it&#39;s released under the same MIT License as the rest of this code base.&lt;/p&gt; 
&lt;p&gt;Every language requires a different process to convert its written form into speech, and often it varies by dialect too. This is why espeak-ng is so widely used, it has had years of work put into it to encode linguistic knowledge into a complex set of rules, many of which are heuristics that require a lot of testing to get right. The Moonshine Voice G2P engine is still new, and will need similar tuning to handle all of the variations across languages, but I&#39;m hoping the initial implementation is a good start and will benefit from community feedback and contributions over time. Here are the current results for intelligibility across languages, using &lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/scripts/tts_g2p_intelligibility.py&quot;&gt;scripts/tts_g2p_intelligibility.py&lt;/a&gt;:&lt;/p&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Language&lt;/th&gt; 
   &lt;th&gt;Moonshine CER&lt;/th&gt; 
   &lt;th&gt;Reference CER&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;ar_msa&lt;/td&gt; 
   &lt;td&gt;20.8%&lt;/td&gt; 
   &lt;td&gt;15.3%&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;de_de&lt;/td&gt; 
   &lt;td&gt;18.3%&lt;/td&gt; 
   &lt;td&gt;9.2%&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;en_us&lt;/td&gt; 
   &lt;td&gt;12.6%&lt;/td&gt; 
   &lt;td&gt;9.8%&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;es_ar&lt;/td&gt; 
   &lt;td&gt;7.9%&lt;/td&gt; 
   &lt;td&gt;10.6%&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;es_es&lt;/td&gt; 
   &lt;td&gt;4.2%&lt;/td&gt; 
   &lt;td&gt;4.5%&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;es_mx&lt;/td&gt; 
   &lt;td&gt;3.2%&lt;/td&gt; 
   &lt;td&gt;2.6%&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;fr_fr&lt;/td&gt; 
   &lt;td&gt;14.8%&lt;/td&gt; 
   &lt;td&gt;9.4%&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;hi_in&lt;/td&gt; 
   &lt;td&gt;26.5%&lt;/td&gt; 
   &lt;td&gt;15.9%&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;it_it&lt;/td&gt; 
   &lt;td&gt;24.2%&lt;/td&gt; 
   &lt;td&gt;11.4%&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;ja_jp&lt;/td&gt; 
   &lt;td&gt;38.1%&lt;/td&gt; 
   &lt;td&gt;16.8%&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;ko_kr&lt;/td&gt; 
   &lt;td&gt;25.0%&lt;/td&gt; 
   &lt;td&gt;18.6%&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;nl_nl&lt;/td&gt; 
   &lt;td&gt;15.9%&lt;/td&gt; 
   &lt;td&gt;3.3%&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;pt_br&lt;/td&gt; 
   &lt;td&gt;19.7%&lt;/td&gt; 
   &lt;td&gt;4.9%&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;pt_pt&lt;/td&gt; 
   &lt;td&gt;43.8%&lt;/td&gt; 
   &lt;td&gt;24.6%&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;ru_ru&lt;/td&gt; 
   &lt;td&gt;16.9%&lt;/td&gt; 
   &lt;td&gt;5.0%&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;tr_tr&lt;/td&gt; 
   &lt;td&gt;8.9%&lt;/td&gt; 
   &lt;td&gt;7.9%&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;uk_ua&lt;/td&gt; 
   &lt;td&gt;27.7%&lt;/td&gt; 
   &lt;td&gt;15.6%&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;vi_vn&lt;/td&gt; 
   &lt;td&gt;79.0%&lt;/td&gt; 
   &lt;td&gt;36.5%&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;zh_hans&lt;/td&gt; 
   &lt;td&gt;37.8%&lt;/td&gt; 
   &lt;td&gt;32.6%&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;p&gt;If you want access to just the grapheme to phoneme capability, without the speech synthesis, you can all it directly:&lt;/p&gt; 
&lt;!-- doc-test: run --&gt; 
&lt;pre&gt;&lt;code class=&quot;language-python&quot;&gt;from moonshine_voice import GraphemeToPhonemizer

g2p = GraphemeToPhonemizer(&quot;en-us&quot;)
g2p.to_ipa(&quot;Hello world&quot;)

&#39;həlˈoʊ wˈɝld&#39;
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;Examples&lt;/h3&gt; 
&lt;p&gt;The &lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/examples/&quot;&gt;&lt;code&gt;examples&lt;/code&gt;&lt;/a&gt; folder has code samples organized by platform. We use the usual tooling per stack (Android Studio and Gradle, Xcode and Swift on Apple platforms, Visual Studio on Windows). &lt;a href=&quot;https://github.com/moonshine-ai/moonshine/releases/latest&quot;&gt;GitHub Releases&lt;/a&gt; currently ship the downloadable assets below (example trees are mostly named &lt;strong&gt;&lt;code&gt;{platform}-{Project}.tar.gz&lt;/code&gt;&lt;/strong&gt;; Windows and C++ also include prebuilt native library bundles).&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/examples/android/&quot;&gt;Android&lt;/a&gt;&lt;/strong&gt; 
  &lt;ul&gt; 
   &lt;li&gt;&lt;a href=&quot;https://github.com/moonshine-ai/moonshine/releases/latest/download/android-AgentFlow.tar.gz&quot;&gt;AgentFlow&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://github.com/moonshine-ai/moonshine/releases/latest/download/android-TextToSpeech.tar.gz&quot;&gt;TextToSpeech&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://github.com/moonshine-ai/moonshine/releases/latest/download/android-Transcriber.tar.gz&quot;&gt;Transcriber&lt;/a&gt;&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/examples/c++/README.md&quot;&gt;Portable C++&lt;/a&gt;&lt;/strong&gt; 
  &lt;ul&gt; 
   &lt;li&gt;&lt;a href=&quot;https://github.com/moonshine-ai/moonshine/releases/latest/download/cpp-examples.tar.gz&quot;&gt;cpp-examples.tar.gz&lt;/a&gt; (sources plus the &lt;code&gt;download-library.sh&lt;/code&gt; helper)&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/examples/c++/transcriber.cpp&quot;&gt;transcriber.cpp&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/examples/c++/text-to-speech.cpp&quot;&gt;text-to-speech.cpp&lt;/a&gt;&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/examples/ios/&quot;&gt;iOS&lt;/a&gt;&lt;/strong&gt; 
  &lt;ul&gt; 
   &lt;li&gt;&lt;a href=&quot;https://github.com/moonshine-ai/moonshine/releases/latest/download/ios-AgentFlow.tar.gz&quot;&gt;AgentFlow&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://github.com/moonshine-ai/moonshine/releases/latest/download/ios-TextToSpeech.tar.gz&quot;&gt;TextToSpeech&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://github.com/moonshine-ai/moonshine/releases/latest/download/ios-Transcriber.tar.gz&quot;&gt;Transcriber&lt;/a&gt;&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/examples/macos/&quot;&gt;MacOS&lt;/a&gt;&lt;/strong&gt; 
  &lt;ul&gt; 
   &lt;li&gt;&lt;a href=&quot;https://github.com/moonshine-ai/moonshine/releases/latest/download/macos-BasicTranscription.tar.gz&quot;&gt;BasicTranscription&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://github.com/moonshine-ai/moonshine/releases/latest/download/macos-AgentFlow.tar.gz&quot;&gt;AgentFlow&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://github.com/moonshine-ai/moonshine/releases/latest/download/macos-MicTranscription.tar.gz&quot;&gt;MicTranscription&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://github.com/moonshine-ai/moonshine/releases/latest/download/macos-TextToSpeech.tar.gz&quot;&gt;TextToSpeech&lt;/a&gt;&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/examples/windows/&quot;&gt;Windows&lt;/a&gt;&lt;/strong&gt; 
  &lt;ul&gt; 
   &lt;li&gt;&lt;a href=&quot;https://github.com/moonshine-ai/moonshine/releases/latest/download/windows-cli-transcriber.tar.gz&quot;&gt;cli-transcriber&lt;/a&gt;&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/examples/python/&quot;&gt;Python&lt;/a&gt;&lt;/strong&gt; 
  &lt;ul&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/examples/python/basic_transcription.py&quot;&gt;basic_transcription.py&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/examples/python/mic_transcription.py&quot;&gt;mic_transcription.py&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/examples/python/text_to_speech.py&quot;&gt;text_to_speech.py&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/examples/python/agent_flow.py&quot;&gt;agent_flow.py&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/examples/python/ollama-voice/ollama_voice.py&quot;&gt;ollama-voice/ollama_voice.py&lt;/a&gt;&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/examples/raspberry-pi/&quot;&gt;Raspberry Pi&lt;/a&gt;&lt;/strong&gt; 
  &lt;ul&gt; 
   &lt;li&gt;&lt;a href=&quot;https://github.com/moonshine-ai/moonshine/releases/latest/download/raspberry-pi-my-dalek.tar.gz&quot;&gt;my-dalek&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://github.com/moonshine-ai/pi-help-bot/archive/refs/heads/main.zip&quot;&gt;Pi Help Bot&lt;/a&gt;&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/examples/web/&quot;&gt;Web&lt;/a&gt;&lt;/strong&gt; (self-contained archives: &lt;code&gt;node serve.mjs&lt;/code&gt;, then open the demo path) 
  &lt;ul&gt; 
   &lt;li&gt;&lt;a href=&quot;https://github.com/moonshine-ai/moonshine/releases/latest/download/web-stt.tar.gz&quot;&gt;stt&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://github.com/moonshine-ai/moonshine/releases/latest/download/web-tts.tar.gz&quot;&gt;tts&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://github.com/moonshine-ai/moonshine/releases/latest/download/web-agent-flow.tar.gz&quot;&gt;agent-flow&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://github.com/moonshine-ai/moonshine/releases/latest/download/web-dictation.tar.gz&quot;&gt;dictation&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://github.com/moonshine-ai/moonshine/releases/latest/download/web-meeting-notes.tar.gz&quot;&gt;meeting-notes&lt;/a&gt;&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;The examples usually include one minimal project that just creates a transcriber and then feeds it data from a WAV file, and another that&#39;s pulling audio from a microphone using the platform&#39;s default framework for accessing audio devices. Each one is a self-contained project you can copy out of the tree: the Android samples depend on &lt;strong&gt;&lt;code&gt;ai.moonshine:moonshine-voice:0.1.1&lt;/code&gt;&lt;/strong&gt; from Maven Central, and the Apple ones pull &lt;strong&gt;&lt;code&gt;MoonshineVoice&lt;/code&gt;&lt;/strong&gt; from the Swift package.&lt;/p&gt; 
&lt;p&gt;None of them bundle model weights. Every engine downloads what it needs on first use — the speech model for &lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/examples/android/Transcriber/&quot;&gt;&lt;code&gt;Transcriber&lt;/code&gt;&lt;/a&gt;, the voice and G2P assets for &lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/examples/android/TextToSpeech/&quot;&gt;&lt;code&gt;TextToSpeech&lt;/code&gt;&lt;/a&gt;, all three plus the embedding model for &lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/examples/android/AgentFlow/&quot;&gt;&lt;code&gt;AgentFlow&lt;/code&gt;&lt;/a&gt; — from &lt;code&gt;https://download.moonshine.ai/&lt;/code&gt;, reporting progress through the &lt;code&gt;onProgress&lt;/code&gt; callback the examples wire up to a label. Downloads are cached (under &lt;code&gt;filesDir&lt;/code&gt; on Android, &lt;code&gt;Caches/MoonshineModels&lt;/code&gt; on Apple platforms), so later launches run offline. Switching to a different voice triggers the same on-demand download for whatever that voice needs.&lt;/p&gt; 
&lt;p&gt;If you want a fully offline build with no first-run download, fetch the assets ahead of time and point the engine at them with &lt;code&gt;modelsFrom(path)&lt;/code&gt;; see &lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/docs/design/api-comparison.md&quot;&gt;&lt;code&gt;docs/design/api-comparison.md&lt;/code&gt;&lt;/a&gt; for the tradeoff.&lt;/p&gt; 
&lt;h3&gt;Adding the Library to your own App&lt;/h3&gt; 
&lt;p&gt;We distribute the library through the most widely-used package managers for each platform. Here&#39;s how you can use these to add the framework to an existing project on different systems.&lt;/p&gt; 
&lt;h4&gt;Python&lt;/h4&gt; 
&lt;p&gt;The Python package is &lt;a href=&quot;https://pypi.org/project/moonshine-voice/&quot;&gt;hosted on PyPi&lt;/a&gt;, so all you should need to do to install it is &lt;code&gt;pip install moonshine-voice&lt;/code&gt;, and then &lt;code&gt;import moonshine_voice&lt;/code&gt; in your project.&lt;/p&gt; 
&lt;h5&gt;Command-line tools&lt;/h5&gt; 
&lt;p&gt;Installing the pip package adds a &lt;code&gt;moonshine-voice&lt;/code&gt; command (with a shorter &lt;code&gt;moonshine&lt;/code&gt; alias) that groups the built-in tools as subcommands. These are designed for one-off use cases, if you need multiple Moonshine calls for the same task then loading the models once from Python will be more efficient.&lt;/p&gt; 
&lt;!-- doc-test: parse-only --&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;moonshine-voice --help
&lt;/code&gt;&lt;/pre&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Command&lt;/th&gt; 
   &lt;th&gt;Description&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;moonshine-voice mic&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Transcribe live microphone input to the terminal.&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;moonshine-voice transcribe&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Transcribe a WAV file (optionally with speaker IDs / word timestamps).&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;moonshine-voice tts&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Synthesize speech from text to a WAV file or audio device.&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;moonshine-voice agent&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Run a spoken agent flow (wifi setup) from the microphone.&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;moonshine-voice download&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Download STT, TTS, G2P, or embedding model assets.&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;moonshine-voice g2p&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Convert text to phonemes (IPA).&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;p&gt;Run &lt;code&gt;moonshine-voice &amp;lt;command&amp;gt; --help&lt;/code&gt; for the options each one accepts. Every subcommand is equivalent to running the underlying module directly, so &lt;code&gt;moonshine-voice mic --language en&lt;/code&gt; and &lt;code&gt;python -m moonshine_voice.mic_transcriber --language en&lt;/code&gt; do exactly the same thing.&lt;/p&gt; 
&lt;h4&gt;iOS or MacOS&lt;/h4&gt; 
&lt;p&gt;For iOS we use the Swift Package Manager, with &lt;a href=&quot;https://github.com/moonshine-ai/moonshine-swift/&quot;&gt;an auto-updated GitHub repository&lt;/a&gt; holding each version. To use this right-click on the file view sidebar in Xcode and choose &quot;Add Package Dependencies...&quot; from the menu. A dialog should open up, paste &lt;code&gt;https://github.com/moonshine-ai/moonshine-swift/&lt;/code&gt; into the top search box and you should see &lt;code&gt;moonshine-swift&lt;/code&gt;. Select it and choose &quot;Add Package&quot;, and it should be added to your project. You should now be able to &lt;code&gt;import MoonshineVoice&lt;/code&gt; and use the library. You will need to add any model files you use to your app bundle and ensure they&#39;re copied during the deployment phase, so they can be accessed on-device.&lt;/p&gt; 
&lt;p&gt;For reference purposes you can find Xcode projects with these changes applied in &lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/examples/ios/Transcriber&quot;&gt;&lt;code&gt;examples/ios/Transcriber&lt;/code&gt;&lt;/a&gt; and &lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/examples/macos/BasicTranscription/&quot;&gt;&lt;code&gt;examples/macos/BasicTranscription&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt; 
&lt;h4&gt;Android&lt;/h4&gt; 
&lt;p&gt;On Android we publish &lt;a href=&quot;https://mvnrepository.com/artifact/ai.moonshine/moonshine-voice&quot;&gt;the package to Maven&lt;/a&gt;. To include it in your project using Android Studio and Gradle, first add the version number you want to the &lt;code&gt;gradle/libs.versions.toml&lt;/code&gt; file by inserting a line in the &lt;code&gt;[versions]&lt;/code&gt; section, for example &lt;code&gt;moonshineVoice = &quot;0.1.1&quot;&lt;/code&gt;. Then in the &lt;code&gt;[libraries]&lt;/code&gt; part, add a reference to the package: &lt;code&gt;moonshine-voice = { group = &quot;ai.moonshine&quot;, name = &quot;moonshine-voice&quot;, version.ref = &quot;moonshineVoice&quot; }&lt;/code&gt;.&lt;/p&gt; 
&lt;p&gt;Finally, in your &lt;code&gt;app/build.gradle.kts&lt;/code&gt; add the library to the &lt;code&gt;dependencies&lt;/code&gt; list: &lt;code&gt;implementation(libs.moonshine.voice)&lt;/code&gt;. The &lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/examples/android/Transcriber/&quot;&gt;&lt;code&gt;examples/android/Transcriber&lt;/code&gt;&lt;/a&gt; and &lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/examples/android/TextToSpeech/&quot;&gt;&lt;code&gt;examples/android/TextToSpeech&lt;/code&gt;&lt;/a&gt; samples use the same coordinates (&lt;code&gt;moonshineVoice = &quot;0.1.1&quot;&lt;/code&gt; in their catalogs).&lt;/p&gt; 
&lt;h4&gt;Windows/C++&lt;/h4&gt; 
&lt;p&gt;We couldn&#39;t find a single package manager that is used by most Windows developers, so instead we&#39;ve made the raw library and headers available as a download. The script in &lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/examples/windows/cli-transcriber/download-lib.bat&quot;&gt;&lt;code&gt;examples/windows/cli-transcriber/download-lib.bat&lt;/code&gt;&lt;/a&gt; will fetch these for you. You&#39;ll see an &lt;code&gt;include&lt;/code&gt; folder that you should add to the include search paths in your project settings, and a &lt;code&gt;lib&lt;/code&gt; directory that you should add to the include search paths. Then add all of the library files in the &lt;code&gt;lib&lt;/code&gt; folder to your project&#39;s linker dependencies.&lt;/p&gt; 
&lt;p&gt;The recommended interface to use on Windows is the C++ language binding. This is a header-only library that offers a higher-level API than the underlying C version. You can &lt;code&gt;#include &quot;moonshine-cpp.h&quot;&lt;/code&gt; to access Moonshine from your C++ code. If you want to see an example of all these changes together, take a look at &lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/examples/windows/cli-transcriber&quot;&gt;&lt;code&gt;examples/windows/cli-transcriber&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt; 
&lt;h3&gt;Debugging&lt;/h3&gt; 
&lt;h4&gt;Console Logs&lt;/h4&gt; 
&lt;p&gt;The library is designed to help you understand what&#39;s going wrong when you hit an issue. If something isn&#39;t working as expected, the first place to look is the console for log messages. Whenever there&#39;s a failure point or an exception within the core library, you should see a message that adds more information about what went wrong. Your language bindings should also recognize when the core library has returned an error and raise an appropriate exception, but sometimes the logs can be helpful because they contain more details.&lt;/p&gt; 
&lt;h4&gt;Input Saving&lt;/h4&gt; 
&lt;p&gt;If no errors are being reported but the quality of the transcription isn&#39;t what you expect, it&#39;s worth ruling out an issue with the audio data that the transcriber is receiving. To make this easier, you can pass in the &lt;code&gt;save_input_wav_path&lt;/code&gt; option when you create a transcriber. That will save any audio received into .wav files in the folder you specify. Here&#39;s a Python example:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;moonshine-voice transcribe --options=&#39;save_input_wav_path=.&#39;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;This will run test audio through a transcriber, and write out the audio it has received into an &lt;code&gt;input_1.wav&lt;/code&gt; file in the current directory. If you&#39;re running multiple streams, you&#39;ll see &lt;code&gt;input_2.wav&lt;/code&gt;, etc for each additional one. These wavs only contain the audio data from the latest session, and are overwritten after each one is started. Listening to these files should help you confirm that the input you&#39;re providing is as you expect it, and not distorted or corrupted.&lt;/p&gt; 
&lt;h4&gt;API Call Logging&lt;/h4&gt; 
&lt;p&gt;If you&#39;re running into errors it can be hard to keep track of the timeline of your interactions with the library. The &lt;code&gt;log_api_calls&lt;/code&gt; option will print out the underlying API calls that have been triggered to the console, so you can investigate any ordering or timing issues.&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;moonshine-voice transcribe --options=&#39;log_api_calls=true&#39;
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;Building from Source&lt;/h3&gt; 
&lt;p&gt;If you want to debug into the library internals, or add instrumentation to help understand its operation, or add improvements or customizations, all of the source is available for you to build it for yourself.&lt;/p&gt; 
&lt;div class=&quot;markdown-alert markdown-alert-tip&quot;&gt;
 &lt;p class=&quot;markdown-alert-title&quot;&gt;
  &lt;svg class=&quot;octicon octicon-light-bulb mr-2&quot; viewbox=&quot;0 0 16 16&quot; version=&quot;1.1&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot;&gt;
   &lt;path d=&quot;M8 1.5c-2.363 0-4 1.69-4 3.75 0 .984.424 1.625.984 2.304l.214.253c.223.264.47.556.673.848.284.411.537.896.621 1.49a.75.75 0 0 1-1.484.211c-.04-.282-.163-.547-.37-.847a8.456 8.456 0 0 0-.542-.68c-.084-.1-.173-.205-.268-.32C3.201 7.75 2.5 6.766 2.5 5.25 2.5 2.31 4.863 0 8 0s5.5 2.31 5.5 5.25c0 1.516-.701 2.5-1.328 3.259-.095.115-.184.22-.268.319-.207.245-.383.453-.541.681-.208.3-.33.565-.37.847a.751.751 0 0 1-1.485-.212c.084-.593.337-1.078.621-1.489.203-.292.45-.584.673-.848.075-.088.147-.173.213-.253.561-.679.985-1.32.985-2.304 0-2.06-1.637-3.75-4-3.75ZM5.75 12h4.5a.75.75 0 0 1 0 1.5h-4.5a.75.75 0 0 1 0-1.5ZM6 15.25a.75.75 0 0 1 .75-.75h2.5a.75.75 0 0 1 0 1.5h-2.5a.75.75 0 0 1-.75-.75Z&quot;&gt;&lt;/path&gt;
  &lt;/svg&gt;Tip&lt;/p&gt;
 &lt;p&gt;Large model and TTS binaries are &lt;strong&gt;not&lt;/strong&gt; stored in git. Before running &lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/scripts/test-core.sh&quot;&gt;&lt;code&gt;scripts/test-core.sh&lt;/code&gt;&lt;/a&gt; or offline TTS work, fetch them from the CDN (or the &lt;a href=&quot;https://huggingface.co/moonshine-ai/moonshine-voice-assets&quot;&gt;Hugging Face mirror&lt;/a&gt;):&lt;/p&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;scripts/fetch-voice-assets.sh all
&lt;/code&gt;&lt;/pre&gt; 
 &lt;p&gt;A few compile-time embeds and ONNX Runtime prebuilts still use Git LFS. If you clone without LFS set up, you may see errors like &lt;code&gt;&#39;version&#39; does not name a type&lt;/code&gt; when compiling embedded sources such as &lt;code&gt;community1_cpp_annote_embedded.cpp&lt;/code&gt; (LFS pointers left as text). Install git-lfs and run &lt;code&gt;git lfs install&lt;/code&gt; before cloning, or &lt;code&gt;git lfs pull&lt;/code&gt; in an existing clone.&lt;/p&gt; 
&lt;/div&gt; 
&lt;h4&gt;Cmake&lt;/h4&gt; 
&lt;p&gt;The core engine of the library is contained in the &lt;code&gt;core&lt;/code&gt; folder of this repo. It&#39;s written in C++ with a C interface for easy integration with other languages. We use cmake to build on all our platforms, and so the easiest way to get started is something like this:&lt;/p&gt; 
&lt;!-- doc-test: skip --&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;cd core
mkdir -p build
cd build
cmake ..
cmake --build .
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;After that completes you should have a set of binary executables you can run on your own system. These executables are all unit tests, and expect to be run from the &lt;code&gt;test-assets&lt;/code&gt; folder. You can run the build and test process in one step using the &lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/scripts/test-core.sh&quot;&gt;&lt;code&gt;scripts/test-core.sh&lt;/code&gt;&lt;/a&gt;, or &lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/scripts/test-core.bat&quot;&gt;&lt;code&gt;scripts/test-core.bat&lt;/code&gt;&lt;/a&gt; for Windows. All tests should compile and run without any errors.&lt;/p&gt; 
&lt;h4&gt;Language Bindings&lt;/h4&gt; 
&lt;p&gt;There are various scripts for building for different platforms and languages, but to see examples of how to build for all of the supported systems you should look at &lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/scripts/build-all-platforms.sh&quot;&gt;&lt;code&gt;scripts/build-all-platforms.sh&lt;/code&gt;&lt;/a&gt;. This is the script we call for every release, and it builds all of the artifacts we upload to the various package manager systems. &lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/docs/release-process.md&quot;&gt;&lt;code&gt;docs/release-process.md&lt;/code&gt;&lt;/a&gt; describes how releases are branched and versioned: &lt;code&gt;main&lt;/code&gt; always matches the most recently published binaries, and development happens on a &lt;code&gt;dev-v&amp;lt;version&amp;gt;&lt;/code&gt; candidate branch.&lt;/p&gt; 
&lt;p&gt;The different platforms and languages have a layer on top of the C interfaces to enable idiomatic use of the library within the different environments. The major systems each have their own folder under &lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/language-bindings/&quot;&gt;&lt;code&gt;language-bindings/&lt;/code&gt;&lt;/a&gt;, for example: &lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/language-bindings/python/&quot;&gt;&lt;code&gt;language-bindings/python&lt;/code&gt;&lt;/a&gt;, &lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/language-bindings/android/&quot;&gt;&lt;code&gt;language-bindings/android&lt;/code&gt;&lt;/a&gt;, and &lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/language-bindings/swift/&quot;&gt;&lt;code&gt;language-bindings/swift&lt;/code&gt;&lt;/a&gt; for iOS and MacOS. This is where you&#39;ll find the code that calls the underlying core library routines, and handles the event system for each platform.&lt;/p&gt; 
&lt;h4&gt;Porting&lt;/h4&gt; 
&lt;p&gt;If you have a device that isn&#39;t supported, you can try &lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/#cmake&quot;&gt;building using cmake&lt;/a&gt; on your system. The only major dependency that the C++ core library has is &lt;a href=&quot;https://github.com/microsoft/onnxruntime&quot;&gt;the Onnx Runtime&lt;/a&gt;. We include &lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/core/third-party/onnxruntime/lib/&quot;&gt;pre-built binary library files&lt;/a&gt; for all our supported systems, but you&#39;ll need to find or build your own version if the libraries we offer don&#39;t cover your use case.&lt;/p&gt; 
&lt;p&gt;If you want to call this library from a language we don&#39;t support, then you should take a look at &lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/core/moonshine-c-api.h&quot;&gt;the C interface bindings&lt;/a&gt;. Most languages have some way to call into C functions, so you can use these and the binding examples for other languages to guide your implementation.&lt;/p&gt; 
&lt;h3&gt;Downloading Models&lt;/h3&gt; 
&lt;h4&gt;Speech to Text Models&lt;/h4&gt; 
&lt;p&gt;The easiest way to get the model files required for transcription is by using the Python download module. After &lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/#python&quot;&gt;installing it&lt;/a&gt; run the downloader like this:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;moonshine-voice download --stt --language en
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;You can use either the two-letter code or the English name for the &lt;code&gt;language&lt;/code&gt; argument. If you want to see which languages are supported by your current version they&#39;re &lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/#available-models&quot;&gt;listed below&lt;/a&gt;, or you can supply a bogus language as the argument to this command:&lt;/p&gt; 
&lt;!-- doc-test: expect-error --&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;moonshine-voice download --stt --language foo
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;You can also optionally request a specific model architecture using the &lt;code&gt;model-arch&lt;/code&gt; flag, chosen from the numbers in &lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/core/moonshine-c-api.h&quot;&gt;moonshine-c-api.h&lt;/a&gt;. If no architecture is set, the script will load the highest-quality model available.&lt;/p&gt; 
&lt;p&gt;The download script will log the location of the downloaded model files and the model architecture, for example:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;adapter.ort: 100%|██████████████████████████████████████████████████████████████| 3.48M/3.48M [00:00&amp;lt;00:00, 18.6MB/s]
cross_kv.ort: 100%|█████████████████████████████████████████████████████████████| 11.0M/11.0M [00:00&amp;lt;00:00, 39.4MB/s]
decoder_kv.ort: 100%|███████████████████████████████████████████████████████████████| 139M/139M [00:01&amp;lt;00:00, 100MB/s]
encoder.ort: 100%|██████████████████████████████████████████████████████████████| 89.8M/89.8M [00:01&amp;lt;00:00, 83.1MB/s]
frontend.ort: 100%|█████████████████████████████████████████████████████████████| 45.3M/45.3M [00:00&amp;lt;00:00, 65.7MB/s]
streaming_config.json: 100%|██████████████████████████████████████████████████████| 513/513 [00:00&amp;lt;00:00, 1.88MB/s]
tokenizer.bin: 100%|█████████████████████████████████████████████████████████████| 244k/244k [00:00&amp;lt;00:00, 3.06MB/s]
spelling_cnn.ort: 100%|█████████████████████████████████████████████████████████| 1.59M/1.59M [00:00&amp;lt;00:00, 10.2MB/s]
spelling_cnn_meta.json: 100%|█████████████████████████████████████████████████████| 622/622 [00:00&amp;lt;00:00, 1.72MB/s]
Model download url: https://download.moonshine.ai/model/medium-streaming-en/quantized_26_07_30
Model components: [&#39;adapter.ort&#39;, &#39;cross_kv.ort&#39;, &#39;decoder_kv.ort&#39;, &#39;encoder.ort&#39;, &#39;frontend.ort&#39;, &#39;streaming_config.json&#39;, &#39;tokenizer.bin&#39;]
Model arch: 5
Downloaded model path: /Users/petewarden/Library/Caches/moonshine_voice/download.moonshine.ai/model/medium-streaming-en/quantized_26_07_30
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Since no architecture was requested here, this downloaded Medium Streaming (architecture 5), the highest-quality English model. The two &lt;code&gt;spelling_cnn&lt;/code&gt; files at the end are the alphanumeric spelling model, which the downloader fetches alongside the main model when one is published for the language.&lt;/p&gt; 
&lt;p&gt;The last two lines tell you which model architecture is being used, and where the model files are on disk. By default it uses your user cache directory, which is &lt;code&gt;~/Library/Caches/moonshine_voice&lt;/code&gt; on MacOS, but you can use a different location by setting the &lt;code&gt;MOONSHINE_VOICE_CACHE&lt;/code&gt; environment variable before running the script.&lt;/p&gt; 
&lt;h4&gt;Embedding Models&lt;/h4&gt; 
&lt;p&gt;The download module also helps you obtain the assets needed to match spoken phrases, primarily a sentence embedding model. &lt;code&gt;AgentFlow&lt;/code&gt; fetches this for you on first use, so you only need this command to warm the cache ahead of time — before shipping a device that will be offline, for example.&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;moonshine-voice download --embedding
&lt;/code&gt;&lt;/pre&gt; 
&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;model_q4.ort: 100%|████████████████████████████████████████████████| 189M/189M [00:02&amp;lt;00:00, 90.1MB/s]
tokenizer.bin: 100%|███████████████████████████████████████████████| 2.46M/2.46M [00:00&amp;lt;00:00, 13.9MB/s]
Embedding model path: /Users/petewarden/Library/Caches/moonshine_voice/download.moonshine.ai/model/embeddinggemma-300m
/Users/petewarden/Library/Caches/moonshine_voice/download.moonshine.ai/model/embeddinggemma-300m
&lt;/code&gt;&lt;/pre&gt; 
&lt;h4&gt;Text to Speech Models&lt;/h4&gt; 
&lt;p&gt;A large variety of models, dictionaries and other files are needed for TTS, and these vary widely by language. You can use the download module to pull down exactly what you need for a particular language, and optionally a voice:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;moonshine-voice download --tts --root /tmp/tts-files/
&lt;/code&gt;&lt;/pre&gt; 
&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;dict_filtered_heteronyms.tsv: 100%|██████████████████████████████| 2.77M/2.77M [00:00&amp;lt;00:00, 15.5MB/s]
g2p-config.json: 100%|██████████████████████████████████████████████| 60.0/60.0 [00:00&amp;lt;00:00, 160kB/s]
model.ort: 100%|█████████████████████████████████████████████████| 21.1M/21.1M [00:00&amp;lt;00:00, 37.7MB/s]
onnx-config.json: 100%|██████████████████████████████████████████| 4.53k/4.53k [00:00&amp;lt;00:00, 11.7MB/s]
model.ort: 100%|█████████████████████████████████████████████████| 88.3M/88.3M [00:01&amp;lt;00:00, 85.6MB/s]
config.json: 100%|███████████████████████████████████████████████| 2.30k/2.30k [00:00&amp;lt;00:00, 6.88MB/s]
af_heart.kokorovoice: 100%|████████████████████████████████████████| 510k/510k [00:00&amp;lt;00:00, 3.82MB/s]
TTS assets root (use as g2p_root): /private/tmp/tts-files
/private/tmp/tts-files
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;The downloaded models are placed in child folders underneath the root folder, and by default the text to speech module expects the files to have the same relative paths so it can find them automatically given only the parent&#39;s path. If you do need to move them to different locations, you can supply new paths for each file using the &lt;code&gt;options&lt;/code&gt; argument to &lt;code&gt;TextToSpeech&lt;/code&gt;&#39;s constructor, with the usual relative path as the key, and the actual path to the file as the key.&lt;/p&gt; 
&lt;p&gt;If you have an application that may be stored in an arbitrary location after installation, you can also pass in a &lt;code&gt;tts_root&lt;/code&gt; value as an option to set the path to the actual root folder of the TTS data at runtime.&lt;/p&gt; 
&lt;h4&gt;On-Device Auto-Download (iOS / macOS / Android)&lt;/h4&gt; 
&lt;p&gt;The Python &lt;code&gt;download&lt;/code&gt; module is the right tool for build-time and desktop workflows, but mobile apps often want to fetch models on first run instead of shipping every model inside the app bundle. Both the Swift (iOS/macOS) and Android bindings include an &lt;strong&gt;opt-in&lt;/strong&gt; downloader for this.&lt;/p&gt; 
&lt;p&gt;This is strictly opt-in: apps that bundle their models and load them with the usual &lt;code&gt;from files&lt;/code&gt; / &lt;code&gt;from assets&lt;/code&gt; / &lt;code&gt;from memory&lt;/code&gt; paths behave exactly as before and never touch the network. The downloader only resolves the file list from the native dependency catalog (the same catalog the Python module uses), so you never hardcode filenames, and it writes each file atomically (through a &lt;code&gt;.part&lt;/code&gt; file), resumes interrupted transfers with HTTP &lt;code&gt;Range&lt;/code&gt;, checks free space before large writes, and reports per-file progress.&lt;/p&gt; 
&lt;h5&gt;Swift (iOS 15+ / macOS 12+)&lt;/h5&gt; 
&lt;p&gt;&lt;code&gt;AssetDownloader.ensureModelPresent&lt;/code&gt; downloads whatever is missing under a directory you choose and returns that directory, ready to hand to &lt;code&gt;Transcriber&lt;/code&gt;, &lt;code&gt;MicTranscriber&lt;/code&gt;, or &lt;code&gt;TextToSpeech&lt;/code&gt;. Call it off the main actor (it is &lt;code&gt;async&lt;/code&gt;).&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-swift&quot;&gt;import MoonshineVoice

let modelDir = URL.cachesDirectory.appending(path: &quot;moonshine/tiny-en&quot;)

// Speech-to-text: download the default English model (add includeSpelling: true for the
// alphanumeric spelling model, or pass modelArch: to pick a specific architecture).
let downloader = AssetDownloader(allowsCellularAccess: false)  // Wi-Fi only
try await downloader.ensureModelPresent(root: modelDir, spec: .stt(language: &quot;en&quot;)) { progress in
    print(&quot;\(progress.relativePath): \(progress.bytesDownloaded)/\(progress.bytesTotal)&quot;)
}
let transcriber = try Transcriber(modelPath: modelDir.path, modelArch: .tiny)

// Text embeddings (the embeddinggemma-300m model is large — a few hundred MB even at q4):
try await downloader.ensureModelPresent(root: embeddingDir, spec: .embedding(variant: &quot;q4&quot;))

// Text to speech (files land under the directory you pass as g2p_root):
try await downloader.ensureModelPresent(root: ttsRoot, spec: .tts(language: &quot;en_us&quot;, voice: &quot;kokoro_af_heart&quot;))
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;code&gt;isModelPresent(root:spec:)&lt;/code&gt; is a cheap synchronous check you can use to skip the download UI entirely when everything is already on disk. Download failures throw &lt;code&gt;AssetDownloadError&lt;/code&gt; (HTTP status, insufficient space, cancellation, …) so you can distinguish &quot;couldn&#39;t fetch&quot; from a later load failure. No extra &lt;code&gt;Info.plist&lt;/code&gt; entries or permissions are required for HTTPS downloads.&lt;/p&gt; 
&lt;h5&gt;Android&lt;/h5&gt; 
&lt;p&gt;The Android &lt;code&gt;AssetDownloader&lt;/code&gt; mirrors the Swift API and performs blocking network I/O, so run it off the main thread. For reliable background downloads that survive process death, honor a network constraint, and retry with backoff, use &lt;code&gt;MoonshineDownloadWorker&lt;/code&gt; (WorkManager).&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-java&quot;&gt;File modelDir = new File(context.getFilesDir(), &quot;moonshine/tiny-en&quot;);

// Direct (call from a background thread / coroutine):
File root = new AssetDownloader().ensureModelPresent(
        modelDir, ModelSpec.stt(&quot;en&quot;),
        (path, index, total, done, size) -&amp;gt; Log.i(&quot;dl&quot;, path + &quot; &quot; + done + &quot;/&quot; + size));
Transcriber transcriber = new Transcriber();
transcriber.loadFromFiles(root.getAbsolutePath(), JNI.MOONSHINE_MODEL_ARCH_TINY);

// Or via WorkManager, downloading only over unmetered (e.g. Wi-Fi) connections:
OneTimeWorkRequest request =
        MoonshineDownloadWorker.buildRequest(modelDir, ModelSpec.stt(&quot;en&quot;), /*requireUnmetered=*/ true);
WorkManager.getInstance(context).enqueue(request);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;code&gt;ModelSpec&lt;/code&gt; also has &lt;code&gt;tts(language, voice)&lt;/code&gt;, &lt;code&gt;embedding(modelName, variant)&lt;/code&gt;, and &lt;code&gt;g2p(language)&lt;/code&gt; factories, matching the Swift specs. The library manifest declares the &lt;code&gt;INTERNET&lt;/code&gt; and &lt;code&gt;ACCESS_NETWORK_STATE&lt;/code&gt; permissions, which merge into your app automatically; observe &lt;code&gt;MoonshineDownloadWorker&lt;/code&gt; progress via &lt;code&gt;WorkInfo.getProgress()&lt;/code&gt; using the worker&#39;s &lt;code&gt;PROGRESS_*&lt;/code&gt; data keys. Using the downloader pulls in OkHttp and WorkManager transitively; apps that bundle their models still ship these but never invoke the network path.&lt;/p&gt; 
&lt;h5&gt;Where files go&lt;/h5&gt; 
&lt;p&gt;You pick the destination directory, so choose one appropriate for your platform&#39;s cache/storage policy (for example &lt;code&gt;URL.cachesDirectory&lt;/code&gt; on Apple platforms, or &lt;code&gt;context.getFilesDir()&lt;/code&gt; / &lt;code&gt;context.getCacheDir()&lt;/code&gt; on Android). Files are laid out under that directory exactly as the loaders expect: STT and embedding files use their bare filenames, while TTS/G2P assets keep their canonical relative paths (e.g. &lt;code&gt;en_us/dict.tsv&lt;/code&gt;) so the engine can find them from the root alone.&lt;/p&gt; 
&lt;h5&gt;Testing the download path&lt;/h5&gt; 
&lt;p&gt;Both frameworks ship download tests that hit the real CDN, download a model into an empty directory, and then load and run the matching engine. They pull tens to hundreds of MB, so they are &lt;strong&gt;opt-in&lt;/strong&gt; and skip on a normal test run:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Swift (&lt;code&gt;AssetDownloaderNetworkTests&lt;/code&gt;): &lt;code&gt;MOONSHINE_DOWNLOAD_TESTS=1 swift test --filter AssetDownloaderNetworkTests&lt;/code&gt;.&lt;/li&gt; 
 &lt;li&gt;Android (&lt;code&gt;AssetDownloaderTest&lt;/code&gt;): &lt;code&gt;./gradlew connectedAndroidTest -Pandroid.testInstrumentationRunnerArguments.class=ai.moonshine.voice.AssetDownloaderTest -Pandroid.testInstrumentationRunnerArguments.moonshineDownloadTests=1&lt;/code&gt; (needs a connected device/emulator).&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;code&gt;scripts/test-model-downloads.sh&lt;/code&gt; runs the native catalog samples and then drives both of these automatically (skipping a platform when its toolchain or a device is unavailable). The mocked, offline &lt;code&gt;AssetDownloaderTests&lt;/code&gt; still run as part of the default &lt;code&gt;swift test&lt;/code&gt; and cover manifest parsing, resume, and error handling without a network.&lt;/p&gt; 
&lt;h3&gt;Benchmarks&lt;/h3&gt; 
&lt;p&gt;The core library includes a benchmarking tool that simulates processing live audio by loading a .wav audio file and feeding it in chunks to the model. To run it:&lt;/p&gt; 
&lt;!-- doc-test: skip --&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;cd core
mkdir -p build
cd build
cmake ..
cmake --build . --config Release
./benchmark
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;This will report the absolute time taken to process the audio, what percentage of the audio file&#39;s duration that is, and the average latency for a response.&lt;/p&gt; 
&lt;p&gt;The percentage is helpful because it approximates how much of a compute load the model will be on your hardware. For example, if it shows 20% then that means the speech processing will take a fifth of the compute time when running in your application, leaving 80% for the rest of your code.&lt;/p&gt; 
&lt;p&gt;The latency metric needs a bit of explanation. What most applications care about is how soon they are notified about a phrase after the user has finished talking, since this determines how fast the product can respond. As with any user interface, the time between speech ending and the app doing something determines how responsive the voice interface feels, with a goal of keeping it below 200ms. The latency figure logged here is the average time between when the library determines the user has stopped talking and the delivery of the final transcript of that phrase to the client. This is where streaming models have the most impact, since they do a lot of their work upfront, while speech is still happening, so they can usually finish very quickly.&lt;/p&gt; 
&lt;p&gt;By default the benchmark binary uses the Tiny English model and the &lt;code&gt;two_cities.wav&lt;/code&gt; recording from this repository&#39;s &lt;code&gt;test-assets&lt;/code&gt; folder, which is why it&#39;s run from the build directory, but you can pass in the &lt;code&gt;--model-path&lt;/code&gt;, &lt;code&gt;--model-arch&lt;/code&gt;, and &lt;code&gt;--wav-path&lt;/code&gt; parameters to choose &lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/#downloading-models&quot;&gt;a model you&#39;ve downloaded&lt;/a&gt; or a different recording.&lt;/p&gt; 
&lt;p&gt;You can also choose how often the transcript should be updated using the &lt;code&gt;--transcription-interval&lt;/code&gt; argument. This defaults to 0.5 seconds, but the right value will depend on how fast your application needs updates. Longer intervals reduce the compute required a bit, at the cost of slower updates.&lt;/p&gt; 
&lt;p&gt;The MacBook Pro, Pixel 10a, and iPad (A16) Tiny / Small / Medium Streaming cells in the comparison table use the same latency metric, measured by &lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/scripts/test-mobile-latency.sh&quot;&gt;&lt;code&gt;scripts/test-mobile-latency.sh&lt;/code&gt;&lt;/a&gt; (also run from &lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/scripts/build-all-platforms.sh&quot;&gt;&lt;code&gt;scripts/build-all-platforms.sh&lt;/code&gt;&lt;/a&gt;). That script downloads the models from the CDN, feeds &lt;code&gt;two_cities.wav&lt;/code&gt; in small chunks as fast as the device can process, and averages &lt;code&gt;lastTranscriptionLatencyMs&lt;/code&gt; over completed lines. Re-measure and refresh the README with the command below; a cell is rewritten only when the new average differs from the published value by more than 5%:&lt;/p&gt; 
&lt;!-- doc-test: skip --&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;./scripts/test-mobile-latency.sh --update-readme
&lt;/code&gt;&lt;/pre&gt; 
&lt;h4&gt;Whisper Comparisons&lt;/h4&gt; 
&lt;p&gt;For platforms that support Python, you can run the &lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/scripts/run-benchmarks.py&quot;&gt;&lt;code&gt;scripts/run-benchmarks.py&lt;/code&gt;&lt;/a&gt; script which will evaluate similar metrics, with the advantage that it can also download the models so you don&#39;t need to worry about path handling.&lt;/p&gt; 
&lt;p&gt;It also evaluates equivalent Whisper models. This is a pretty opinionated benchmark that looks at the latency and total compute cost of the two families of models in a situation that is representative of many common real-time voice applications&#39; requirements:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Speech needs to be responded to as quickly as possible once a user completes a phrase.&lt;/li&gt; 
 &lt;li&gt;The phrases are of durations between a range of one to ten seconds.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;These are very different requirements from bulk offline processing scenarios, where the overall throughput of the system is more important, and so the latency on a single segment of speech is less important than the overall throughput of the system. This allows optimizations like batch processing.&lt;/p&gt; 
&lt;p&gt;We are not claiming that Whisper is not a great model for offline processing, but we do want to highlight the advantages we that Moonshine offers for live speech applications with real-time latency requirements.&lt;/p&gt; 
&lt;p&gt;The experimental setup is as follows:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;We use the two_cities.wav audio file as a test case, since it has a mix of short and long phrases. You can vary this by passing in your own audio file with the --wav_path argument.&lt;/li&gt; 
 &lt;li&gt;We use the Moonshine Tiny, Base, Tiny Streaming, Small Streaming, and Medium Streaming models.&lt;/li&gt; 
 &lt;li&gt;We compare these to the Whisper Tiny, Base, Small, and Large v3 models. Since the Moonshine Medium Streaming model achieves lower WER than Whisper Large v3 we compare those two, otherwise we compare each with their namesake.&lt;/li&gt; 
 &lt;li&gt;We use the Moonshine VAD segmenter to split the audio into phrases, and feed each phrase to Whisper for transcription.&lt;/li&gt; 
 &lt;li&gt;Response latency for both models is measured as the time between a phrase being identified as complete by the VAD segmenter and the transcribed text being returned. For Whisper this means the full transcription time, but since the Moonshine models are streaming we can do a lot of the work while speech is still happening, so the latency is much lower.&lt;/li&gt; 
 &lt;li&gt;We measure the total compute cost of the models by totalling the duration of the audio processing times for each model, and then expressing that as a percentage of the total audio duration. This is the inverse of the commonly used real-time factor (RTF) metric, but it reflects the compute load required for a real-time application.&lt;/li&gt; 
 &lt;li&gt;We&#39;re using faster-whisper for Whisper, since that seems to provide the best cross-platform performance. We&#39;re also sticking with the CPU, since most applications can&#39;t rely on GPU or NPU acceleration being present on all the platforms they target. We know there are a lot of great GPU/NPU-accelerated Whisper implementations out there, but these aren&#39;t portable enough to be useful for the applications we care about.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Models&lt;/h2&gt; 
&lt;p&gt;Moonshine Voice is based on a family of speech to text models created by the team at Moonshine AI. If you want to download models to use with the framework, you can use &lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/#downloading-models&quot;&gt;the Python package to access them&lt;/a&gt;. This section contains more information about the history and characteristics of the models we offer.&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/#papers&quot;&gt;Papers&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/#available-models&quot;&gt;Available Models&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/#accuracy-word-error-rate&quot;&gt;Accuracy (Word Error Rate)&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/#domain-customization&quot;&gt;Domain Customization&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/#quantization&quot;&gt;Quantization&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/#huggingface&quot;&gt;HuggingFace&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Papers&lt;/h3&gt; 
&lt;p&gt;These research papers are a good resource for understanding the architectures and performance strategies behind the models:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://arxiv.org/abs/2410.15608&quot;&gt;&lt;strong&gt;Moonshine: Speech Recognition for Live Transcription and Voice Commands&lt;/strong&gt;&lt;/a&gt;: Describes the first-generation model architecture, which enabled flexible-duration input windows, improving on Whisper&#39;s fixed 30 second requirement.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://arxiv.org/abs/2509.02523&quot;&gt;&lt;strong&gt;Flavors of Moonshine: Tiny Specialized ASR Models for Edge Devices&lt;/strong&gt;&lt;/a&gt;: How we improved accuracy for non-English languages by training mono-lingual models.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://arxiv.org/abs/2602.12241&quot;&gt;&lt;strong&gt;Moonshine v2: Ergodic Streaming Encoder ASR for Latency-Critical Speech Applications&lt;/strong&gt;&lt;/a&gt;: Introduces our approach to streaming, and the advantages it offers for live voice applications.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Available Models&lt;/h3&gt; 
&lt;p&gt;Here are the models currently available. See &lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/#downloading-models&quot;&gt;Downloading Models&lt;/a&gt; for how to obtain them. This library uses the Onnx model format, converted to the memory-mappable OnnxRuntime (&lt;code&gt;.ort&lt;/code&gt;) flatbuffer encoding. For &lt;code&gt;safetensor&lt;/code&gt; versions, see the &lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/#huggingface&quot;&gt;HuggingFace&lt;/a&gt; section.&lt;/p&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Language&lt;/th&gt; 
   &lt;th&gt;Architecture&lt;/th&gt; 
   &lt;th&gt;# Parameters&lt;/th&gt; 
   &lt;th&gt;WER/CER&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;English&lt;/td&gt; 
   &lt;td&gt;Tiny&lt;/td&gt; 
   &lt;td&gt;26 million&lt;/td&gt; 
   &lt;td&gt;12.66%&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;English&lt;/td&gt; 
   &lt;td&gt;Tiny Streaming&lt;/td&gt; 
   &lt;td&gt;34 million&lt;/td&gt; 
   &lt;td&gt;12.00%&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;English&lt;/td&gt; 
   &lt;td&gt;Base&lt;/td&gt; 
   &lt;td&gt;58 million&lt;/td&gt; 
   &lt;td&gt;10.07%&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;English&lt;/td&gt; 
   &lt;td&gt;Small Streaming&lt;/td&gt; 
   &lt;td&gt;123 million&lt;/td&gt; 
   &lt;td&gt;7.84%&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;English&lt;/td&gt; 
   &lt;td&gt;Medium Streaming&lt;/td&gt; 
   &lt;td&gt;245 million&lt;/td&gt; 
   &lt;td&gt;6.65%&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Arabic&lt;/td&gt; 
   &lt;td&gt;Base&lt;/td&gt; 
   &lt;td&gt;58 million&lt;/td&gt; 
   &lt;td&gt;5.63%&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Japanese&lt;/td&gt; 
   &lt;td&gt;Base&lt;/td&gt; 
   &lt;td&gt;58 million&lt;/td&gt; 
   &lt;td&gt;13.62%&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Korean&lt;/td&gt; 
   &lt;td&gt;Tiny&lt;/td&gt; 
   &lt;td&gt;26 million&lt;/td&gt; 
   &lt;td&gt;6.46%&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Mandarin&lt;/td&gt; 
   &lt;td&gt;Base&lt;/td&gt; 
   &lt;td&gt;58 million&lt;/td&gt; 
   &lt;td&gt;25.76%&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Spanish&lt;/td&gt; 
   &lt;td&gt;Base&lt;/td&gt; 
   &lt;td&gt;58 million&lt;/td&gt; 
   &lt;td&gt;4.33%&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Ukrainian&lt;/td&gt; 
   &lt;td&gt;Base&lt;/td&gt; 
   &lt;td&gt;58 million&lt;/td&gt; 
   &lt;td&gt;14.55%&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Vietnamese&lt;/td&gt; 
   &lt;td&gt;Base&lt;/td&gt; 
   &lt;td&gt;58 million&lt;/td&gt; 
   &lt;td&gt;8.82%&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;p&gt;The English evaluations were done using the &lt;a href=&quot;https://huggingface.co/spaces/hf-audio/open_asr_leaderboard&quot;&gt;HuggingFace OpenASR Leaderboard&lt;/a&gt; datasets and methodology. The other languages were evaluated using the FLEURS dataset and the &lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/scripts/eval-model-accuracy.py&quot;&gt;&lt;code&gt;scripts/eval-model-accuracy&lt;/code&gt;&lt;/a&gt; script, with the character or word error rate chosen per language.&lt;/p&gt; 
&lt;p&gt;Note that the English WER figures above are the Open ASR Leaderboard &lt;em&gt;average&lt;/em&gt; across eight datasets, measured on the floating-point reference models. The quantized models this library actually ships score a little higher, especially at the Tiny size. See &lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/#accuracy-word-error-rate&quot;&gt;Accuracy (Word Error Rate)&lt;/a&gt; below for a float-vs-quantized comparison and instructions on reproducing the numbers.&lt;/p&gt; 
&lt;p&gt;One common issue to watch out for if you&#39;re using models that don&#39;t use the Latin alphabet (so any languages except English and Spanish) is that you&#39;ll need to set the &lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/#transcriber-options&quot;&gt;&lt;code&gt;max_tokens_per_second&lt;/code&gt; option&lt;/a&gt; to 13.0 when you create the transcriber. This is because the most common pattern for hallucinations is endlessly repeating the last few words, and our heuristic to detect this is to check if there&#39;s an unusually high number of tokens for the duration of a segment. Unfortunately the base number of tokens per second for non-Latin languages is much higher than for English, thanks to how we&#39;re tokenizing, so you have to manually set the threshold higher to avoid cutting off valid outputs.&lt;/p&gt; 
&lt;h3&gt;Accuracy (Word Error Rate)&lt;/h3&gt; 
&lt;p&gt;Beyond knowing which models are available, you&#39;ll often want to understand how accurate they are and how to reproduce the numbers yourself. The &lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/scripts/eval-librispeech.py&quot;&gt;&lt;code&gt;scripts/eval-librispeech.py&lt;/code&gt;&lt;/a&gt; script measures Word Error Rate (WER) on the LibriSpeech &lt;code&gt;test-clean&lt;/code&gt; set using the same dataset and &lt;a href=&quot;https://huggingface.co/spaces/hf-audio/open_asr_leaderboard&quot;&gt;Open ASR Leaderboard&lt;/a&gt; methodology (corpus-level WER with the Whisper English text normalizer) reported in our &lt;a href=&quot;https://arxiv.org/abs/2602.12241&quot;&gt;Moonshine v2 paper&lt;/a&gt;.&lt;/p&gt; 
&lt;p&gt;There&#39;s an important subtlety here that can be confusing: &lt;strong&gt;the WER numbers in the paper were measured with the floating-point models running in the Hugging Face Transformers library, not the quantized models this framework ships.&lt;/strong&gt; As the paper notes in section 4.1.2, we use the Transformers implementation to measure accuracy and our own C++/ONNX library to measure latency. The models you download here are 8-bit quantized &lt;code&gt;.ort&lt;/code&gt; files chosen for on-device speed and size.&lt;/p&gt; 
&lt;p&gt;The table below shows LibriSpeech &lt;code&gt;test-clean&lt;/code&gt; WER for all three streaming models, comparing the paper&#39;s floating-point reference against the quantized models this library ships. All numbers use whole-utterance (non-streaming) transcription with the VAD disabled, so they&#39;re a like-for-like comparison of raw model accuracy.&lt;/p&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Model&lt;/th&gt; 
   &lt;th&gt;Paper (float)&lt;/th&gt; 
   &lt;th&gt;Reproduced float (HF Transformers)&lt;/th&gt; 
   &lt;th&gt;Shipped quantized model (this library)&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Tiny Streaming&lt;/td&gt; 
   &lt;td&gt;4.49%&lt;/td&gt; 
   &lt;td&gt;4.52%&lt;/td&gt; 
   &lt;td&gt;4.83%&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Small Streaming&lt;/td&gt; 
   &lt;td&gt;2.49%&lt;/td&gt; 
   &lt;td&gt;2.55%&lt;/td&gt; 
   &lt;td&gt;2.61%&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Medium Streaming&lt;/td&gt; 
   &lt;td&gt;2.08%&lt;/td&gt; 
   &lt;td&gt;2.16%&lt;/td&gt; 
   &lt;td&gt;2.17%&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;p&gt;Every shipped model is now within 0.31% WER of its floating-point reference. That was not always true: models published before 2026-07-30 quantized each weight tensor with a single scale factor, which cost Tiny Streaming 7.57% instead of 4.83%. Switching to per-channel weight scales fixed it, for 0.5% more model size. See &lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/#quantization&quot;&gt;Quantization&lt;/a&gt; for the details.&lt;/p&gt; 
&lt;h4&gt;Reproducing these numbers&lt;/h4&gt; 
&lt;p&gt;The evaluation script downloads the dataset and models for you. Install the dependencies and run it:&lt;/p&gt; 
&lt;!-- doc-test: skip --&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# Core dependencies for evaluating the shipped (quantized) models.
pip install moonshine-voice datasets soundfile scipy jiwer openai-whisper

# Evaluate a shipped quantized model on LibriSpeech test-clean (VAD disabled).
python scripts/eval-librispeech.py --backend moonshine_c --model-arch tiny_streaming
python scripts/eval-librispeech.py --backend moonshine_c --model-arch small_streaming
python scripts/eval-librispeech.py --backend moonshine_c --model-arch medium_streaming
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;To reproduce the paper&#39;s floating-point reference numbers you also need a recent version of Transformers (the streaming models were added in Transformers 5.x) and PyTorch, then pass &lt;code&gt;--backend hf&lt;/code&gt;:&lt;/p&gt; 
&lt;!-- doc-test: skip --&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;pip install &quot;transformers&amp;gt;=5.13&quot; torch
python scripts/eval-librispeech.py --backend hf --model-arch tiny_streaming
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;The script disables the VAD by default (&lt;code&gt;vad_threshold=0&lt;/code&gt; plus a very large &lt;code&gt;vad_max_segment_duration&lt;/code&gt;) because the LibriSpeech clips are already single utterances, so any VAD segmentation only adds errors. Pass &lt;code&gt;--enable-vad&lt;/code&gt; to see the effect of the segmenter, or &lt;code&gt;--backend moonshine_c_streaming&lt;/code&gt; to measure the chunked, real-time streaming path instead of whole-utterance transcription. Use &lt;code&gt;--limit N&lt;/code&gt; for a quick smoke test on the first &lt;code&gt;N&lt;/code&gt; clips.&lt;/p&gt; 
&lt;h4&gt;Takeaways&lt;/h4&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;8-bit quantization now costs very little accuracy at any size.&lt;/strong&gt; The penalty against the floating-point reference is +0.31% WER on Tiny, +0.06% on Small and +0.01% on Medium. There is no longer much reason to run the floating-point checkpoint in Transformers just for accuracy, even on Tiny.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Disable the VAD when evaluating pre-segmented data.&lt;/strong&gt; On already-segmented clips like LibriSpeech, leaving the default VAD enabled adds roughly +1.5–2% WER on Tiny (mostly extra insertions at segment boundaries). The VAD is there to chop up continuous live audio, not clean single utterances.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Watch which number you&#39;re comparing against.&lt;/strong&gt; The per-model WER in the &lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/#available-models&quot;&gt;Available Models&lt;/a&gt; table is the Open ASR Leaderboard &lt;em&gt;average&lt;/em&gt; across eight datasets (12.00% for Tiny Streaming, 7.84% for Small Streaming, and 6.65% for Medium Streaming), which is much higher than the LibriSpeech-clean-only numbers above. Make sure you&#39;re comparing the same benchmark.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Domain Customization&lt;/h3&gt; 
&lt;p&gt;It&#39;s often useful to be able to calibrate a speech to text model towards certain words that you&#39;re expecting to hear in your application, whether it&#39;s technical terms, slang, or a particular dialect or accent. &lt;a href=&quot;mailto:contact@moonshine.ai&quot;&gt;Moonshine AI offers full retraining using our internal dataset for customization as a commercial service&lt;/a&gt; and we do hope to support free lighter-weight approaches in the future. You can find a community project working on this at &lt;a href=&quot;https://github.com/pierre-cheneau/finetune-moonshine-asr&quot;&gt;github.com/pierre-cheneau/finetune-moonshine-asr&lt;/a&gt;.&lt;/p&gt; 
&lt;h3&gt;Quantization&lt;/h3&gt; 
&lt;p&gt;We typically quantize our models to eight-bit weights across the board, and eight-bit calculations for heavy operations like MatMul. This is all post-training quantization, using a combination of OnnxRuntime&#39;s tools and &lt;a href=&quot;https://pypi.org/project/onnx-shrink-ray/&quot;&gt;my Onnx Shrink Ray utility&lt;/a&gt;. The only anomaly in the process is the treatment of the frontend, which uses convolution layers to generate features, which produces results similar to the more traditional MEL spectrogram preprocessing, but in a learned way with standard ML operations. The inputs to this initial stage correspond to 16-bit signed integers from the raw audio data (though they&#39;re encoded as floats) so we&#39;ve found it necessary to leave the convolution operations in at least B16 float precision.&lt;/p&gt; 
&lt;p&gt;We give &lt;strong&gt;each output channel of a weight its own scale factor&lt;/strong&gt; rather than sharing one across the whole tensor. This matters far more than it sounds like it should. Our frontend convolutions are trained with weight normalization, which by construction learns a separate magnitude per output channel — on Tiny Streaming the largest channel is 17x the smallest. A single scale for the whole tensor has to cover the largest channel, so the smallest ones get only a handful of the 256 available levels. Measured on LibriSpeech &lt;code&gt;test-clean&lt;/code&gt;, moving to per-channel scales took Tiny Streaming from 7.57% to 4.83% WER, Small from 3.03% to 2.61%, and Medium from 2.37% to 2.17%, while adding 0.5% to the download. Roughly 90% of that gain came from the frontend alone.&lt;/p&gt; 
&lt;p&gt;If you quantize your own Moonshine-style model, this is the first thing to check. It is also why we do not fold the weight-normalization out of the exported graph even though doing so would save a little work at runtime: folding makes the per-channel magnitudes &lt;em&gt;more&lt;/em&gt; extreme, not less, so it must be paired with per-channel scales rather than done on its own.&lt;/p&gt; 
&lt;p&gt;You can see the options we use for the conversions in &lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/scripts/quantize-streaming-model.sh&quot;&gt;scripts/quantize-streaming-model.sh&lt;/a&gt;.&lt;/p&gt; 
&lt;p&gt;Re-quantized models are published to a new dated directory on our CDN (currently &lt;code&gt;quantized_26_07_30&lt;/code&gt;) instead of overwriting the previous files. That way a given version of this library always resolves the exact weights it was tested against, and your local model cache never mixes old and new files.&lt;/p&gt; 
&lt;h3&gt;HuggingFace&lt;/h3&gt; 
&lt;p&gt;We have &lt;code&gt;safetensors&lt;/code&gt; versions of the models linked from our organization on HF, &lt;a href=&quot;https://huggingface.co/UsefulSensors/models&quot;&gt;huggingface.co/UsefulSensors/models&lt;/a&gt;. The organization name is from an earlier incarnation of the company, when we were focused on supplying complete voice interface solutions integrated onto a low-cost chip with a built-in microphone. These are all floating-point checkpoints exported from our training pipeline&lt;/p&gt; 
&lt;p&gt;Separately, every asset this library can download is mirrored in a single repository at &lt;a href=&quot;https://huggingface.co/moonshine-ai/moonshine-voice-assets&quot;&gt;huggingface.co/moonshine-ai/moonshine-voice-assets&lt;/a&gt;, under our current organization name. It holds exactly the files the download manifests reference (currently 438 files, 7.3GB) — the &lt;code&gt;.ort&lt;/code&gt; speech to text and embedding models, the TTS voices, and the grapheme to phoneme data — laid out in the same folder hierarchy as the CDN, so a path in that repo is the path under &lt;code&gt;download.moonshine.ai&lt;/code&gt;. The list is enumerated from the compiled model catalog rather than by listing the bucket, because the bucket also holds unconverted &lt;code&gt;.onnx&lt;/code&gt; sources, older copies of models that manifests no longer point at, and platform artifacts like the Raspberry Pi disk image. If you need to know which files a given release actually uses, that repo is the authoritative answer, and its &lt;code&gt;FILES.tsv&lt;/code&gt; records the size and checksum of each one. Note that the library still downloads from the CDN at runtime; the mirror is there for archival and verification, not for serving. For local tests and offline TTS work, populate the gitignored trees with &lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/scripts/fetch-voice-assets.sh&quot;&gt;&lt;code&gt;scripts/fetch-voice-assets.sh&lt;/code&gt;&lt;/a&gt;. Reclaiming GitHub LFS storage after removing historical binaries is documented in &lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/docs/lfs-purge.md&quot;&gt;&lt;code&gt;docs/lfs-purge.md&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt; 
&lt;h2&gt;API Reference&lt;/h2&gt; 
&lt;p&gt;This documentation covers the Python API, but the same functions and classes are present in all the other supported languages, just with native adaptations (for example CamelCase). You should be able to use this as a reference for all platforms the library runs on.&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/#data-structures&quot;&gt;Data Structures&lt;/a&gt; 
  &lt;ul&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/#transcriptline&quot;&gt;TranscriptLine&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/#transcript&quot;&gt;Transcript&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/#transcriptevent&quot;&gt;TranscriptEvent&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/#ttsvoiceentry&quot;&gt;TtsVoiceEntry&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/#ttsvoicesbyavailability&quot;&gt;TtsVoicesByAvailability&lt;/a&gt;&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/#classes&quot;&gt;Classes&lt;/a&gt; 
  &lt;ul&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/#transcriber&quot;&gt;Transcriber&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/#mictranscriber&quot;&gt;MicTranscriber&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/#stream&quot;&gt;Stream&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/#transcripteventlistener&quot;&gt;TranscriptEventListener&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/#agentflow&quot;&gt;AgentFlow&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/#dialog&quot;&gt;Dialog&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/#texttospeech&quot;&gt;TextToSpeech&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/#graphemetophonemizer&quot;&gt;GraphemeToPhonemizer&lt;/a&gt;&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Data Structures&lt;/h3&gt; 
&lt;h4&gt;TranscriptLine&lt;/h4&gt; 
&lt;p&gt;Represents a single &quot;line&quot; or speech segment in a transcript. It includes information about the timing, speaker, and text content of the utterance, as well as state such as whether the speech is ongoing or done. If you&#39;re building an application that involves transcription, this data structure has all of the information available about each line of speech. Be aware that each line can be updated multiple times with new text and other information as the user keeps speaking.&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt; &lt;p&gt;&lt;code&gt;text&lt;/code&gt;: A string containing the UTF-8 encoded text that has been extracted from the audio of this segment.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;code&gt;start_time&lt;/code&gt;: A float value representing the time in seconds since the start of the current session that the current utterance was first detected.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;code&gt;duration&lt;/code&gt;: A float that represents the duration in seconds of the current utterance.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;code&gt;line_id&lt;/code&gt;: An unsigned 64-bit integer that represents a line in a collision-resistant way, for use in storage and ensuring the application can keep track of lines as they change over time. See &lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/#transcription-event-flow&quot;&gt;Transcription Event Flow&lt;/a&gt; for more details.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;code&gt;is_complete&lt;/code&gt;: A boolean that is false until the segment has been completed, and true for the remainder of the line&#39;s lifetime.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;code&gt;is_updated&lt;/code&gt;: A boolean that&#39;s true if any information about the line has changed since the last time the transcript was updated. Since the transcript will be periodically updated internally by the library as you add audio chunks, you can&#39;t rely on polling this to detect changes. You should rely on the event/listener flow to catch modifications instead. This applies to all of the booleans below too.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;code&gt;is_new&lt;/code&gt;: A boolean indicating whether the line has been added to the transcript by the last update call.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;code&gt;has_text_changed&lt;/code&gt;: A boolean that&#39;s set if the contents of the line&#39;s text was modified by the last transcript update. If this is set, &lt;code&gt;is_updated&lt;/code&gt; will always be set too, but if other properties of the line (for example the duration or the audio data) have changed but the text remains the same, then &lt;code&gt;is_updated&lt;/code&gt; can be true while &lt;code&gt;has_text_changed&lt;/code&gt; is false.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;code&gt;have_speakers_changed&lt;/code&gt;: A boolean that&#39;s set if the line&#39;s speaker spans were revised by the last transcript update. Unlike the other change flags, this can be set for lines that are already complete, since the diarization algorithm keeps refining speaker assignments for recent audio. Only relevant when the &lt;code&gt;identify_speakers&lt;/code&gt; option is enabled.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;code&gt;speaker_spans&lt;/code&gt;: An array of speaker spans describing who was talking during which parts of the line, ordered by start time and clipped to the line&#39;s time range. Empty unless the opt-in &lt;code&gt;identify_speakers&lt;/code&gt; option is enabled (which also turns on word timestamps automatically, since they are needed to map spans onto the line text). Each span has:&lt;/p&gt; 
  &lt;ul&gt; 
   &lt;li&gt;&lt;code&gt;start_time&lt;/code&gt;: A float giving the time offset in seconds from the start of the stream.&lt;/li&gt; 
   &lt;li&gt;&lt;code&gt;duration&lt;/code&gt;: A float giving the length of the span in seconds.&lt;/li&gt; 
   &lt;li&gt;&lt;code&gt;speaker_id&lt;/code&gt;: A unique-ish unsigned 64-bit integer that is stable for a given speaker within a stream, designed for storage or keeping track of speakers over time.&lt;/li&gt; 
   &lt;li&gt;&lt;code&gt;speaker_index&lt;/code&gt;: An integer that represents the order in which the speaker first appeared in the transcript, to make it easy to give speakers default names like &quot;Speaker 1:&quot;, etc.&lt;/li&gt; 
   &lt;li&gt;&lt;code&gt;start_char&lt;/code&gt;: A UTF-8 byte offset into the line&#39;s &lt;code&gt;text&lt;/code&gt; where this span begins (inclusive). Zero when unknown.&lt;/li&gt; 
   &lt;li&gt;&lt;code&gt;end_char&lt;/code&gt;: A UTF-8 byte offset into the line&#39;s &lt;code&gt;text&lt;/code&gt; where this span ends (exclusive). Slice with &lt;code&gt;text[start_char:end_char]&lt;/code&gt; in Python. Both zero when the span could not be aligned to words yet.&lt;/li&gt; 
  &lt;/ul&gt; &lt;p&gt;Be aware that speaker spans are &lt;em&gt;mutable&lt;/em&gt;: the diarization algorithm re-clusters the entire audio history on a cadence, so the spans of any line - including completed ones - can move, merge, split, or change speaker on any transcription call. Watch the &lt;code&gt;have_speakers_changed&lt;/code&gt; flag (or the &lt;code&gt;LineSpeakersChanged&lt;/code&gt; event) to catch revisions.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;code&gt;words&lt;/code&gt;: An array of per-word timings, empty unless the &lt;code&gt;word_timestamps&lt;/code&gt; option is enabled (which &lt;code&gt;identify_speakers&lt;/code&gt; turns on for you). Each entry has the &lt;code&gt;word&lt;/code&gt; itself, its &lt;code&gt;start&lt;/code&gt; and &lt;code&gt;end&lt;/code&gt; times in seconds, and a &lt;code&gt;confidence&lt;/code&gt; value.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;code&gt;audio_data&lt;/code&gt;: An array of 32-bit floats representing the raw audio data that the line is based on, as 16KHz mono PCM data between 0.0 and 1.0. This can be useful for further processing (for example to drive a visual indicator or to feed into a specialized speech to text model after the line is complete).&lt;/p&gt; &lt;/li&gt; 
&lt;/ul&gt; 
&lt;h4&gt;Transcript&lt;/h4&gt; 
&lt;p&gt;A Transcript contains a list of TranscriptLines, arranged in descending time order. The transcript is reset at every &lt;code&gt;Transcriber.start()&lt;/code&gt; call, so if you need to retain information from it, you should make explicit copies. Most applications won&#39;t work with this structure, since all of the same information is available through event callbacks.&lt;/p&gt; 
&lt;h4&gt;TranscriptEvent&lt;/h4&gt; 
&lt;p&gt;Contains information about a change to the transcript. It has five subclasses — &lt;code&gt;LineStarted&lt;/code&gt;, &lt;code&gt;LineUpdated&lt;/code&gt;, &lt;code&gt;LineTextChanged&lt;/code&gt;, &lt;code&gt;LineSpeakersChanged&lt;/code&gt;, and &lt;code&gt;LineCompleted&lt;/code&gt; — which are explained in more detail in &lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/#transcription-event-flow&quot;&gt;the transcription event flow section&lt;/a&gt;. Most of the information is contained in the &lt;code&gt;line&lt;/code&gt; member, but there&#39;s also a &lt;code&gt;stream_handle&lt;/code&gt; that your application can use to tell the source of a line if you&#39;re running multiple streams.&lt;/p&gt; 
&lt;h4&gt;TtsVoiceEntry&lt;/h4&gt; 
&lt;p&gt;A single voice row from the native TTS catalog (as returned inside the map from &lt;code&gt;get_tts_voice_catalog()&lt;/code&gt;).&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;code&gt;id&lt;/code&gt;: The voice identifier string (often with a &lt;code&gt;kokoro_&lt;/code&gt; or &lt;code&gt;piper_&lt;/code&gt; prefix to pin the vocoder).&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;state&lt;/code&gt;: Either &lt;code&gt;&quot;found&quot;&lt;/code&gt; (assets present under the resolved asset root) or &lt;code&gt;&quot;missing&quot;&lt;/code&gt; (listed in the catalog but not on disk yet).&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h4&gt;TtsVoicesByAvailability&lt;/h4&gt; 
&lt;p&gt;The dictionary shape returned by &lt;code&gt;list_tts_voices()&lt;/code&gt;.&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;code&gt;present&lt;/code&gt;: Sorted list of voice ids that are already available under the asset root used for the query.&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;downloadable&lt;/code&gt;: Sorted list of catalog voice ids that are not on disk yet but can be fetched (for example when constructing &lt;code&gt;TextToSpeech&lt;/code&gt; with &lt;code&gt;download=True&lt;/code&gt;).&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Classes&lt;/h3&gt; 
&lt;h4&gt;Transcriber&lt;/h4&gt; 
&lt;p&gt;Handles the speech to text pipeline.&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt; &lt;p&gt;&lt;a id=&quot;transcriber-init&quot;&gt;&lt;/a&gt;&lt;code&gt;__init__()&lt;/code&gt;: Loads and initializes the transcriber.&lt;/p&gt; 
  &lt;ul&gt; 
   &lt;li&gt;&lt;code&gt;model_path&lt;/code&gt;: The path to the directory holding the component model files needed for the complete flow. Note that this is a path to the &lt;strong&gt;folder&lt;/strong&gt;, not an individual &lt;strong&gt;file&lt;/strong&gt;. You can download and get a path to a cached version of the standard models using the &lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/#downloading-models&quot;&gt;download_model()&lt;/a&gt; function.&lt;/li&gt; 
   &lt;li&gt;&lt;code&gt;model_arch&lt;/code&gt;: The architecture of the model to load, from the selection defined in &lt;code&gt;ModelArch&lt;/code&gt;.&lt;/li&gt; 
   &lt;li&gt;&lt;code&gt;update_interval&lt;/code&gt;: By default the transcriber will periodically run text transcription as new audio data is fed, so that update events can be triggered. This value is how often the speech to text model should be run. You can set this to a large duration to suppress updates between a line starting and ending, but because the streaming models do a lot of their work before the final speech to text stage, this may not reduce overall latency by much.&lt;/li&gt; 
   &lt;li&gt;&lt;a id=&quot;transcriber-options&quot;&gt;&lt;/a&gt;&lt;code&gt;options&lt;/code&gt;: These are flags that affect how the transcription process works inside the library, often enabling performance optimizations or debug logging. They are passed as a dictionary mapping strings to strings, even if the values are to be interpreted as numbers - for example &lt;code&gt;{&quot;max_tokens_per_second&quot;, &quot;15&quot;}&lt;/code&gt;. 
    &lt;ul&gt; 
     &lt;li&gt;&lt;code&gt;skip_transcription&lt;/code&gt;: If you only want the voice-activity detection and segmentation, but want to do further processing in your app, you can set this to &quot;true&quot; and then use the &lt;code&gt;audioData&lt;/code&gt; array in each line.&lt;/li&gt; 
     &lt;li&gt;&lt;code&gt;max_tokens_per_second&lt;/code&gt;: The models occassionally get caught in an infinite decoder loop, where the same words are repeated over and over again. As a heuristic to catch this we compare the number of tokens in the current run to the duration of the audio, and if there seem to be too many tokens we truncate the decoding. By default this is set to 6.5, but for non-English languages where the models produce a lot more raw tokens per second, you may want to bump this to 13.0.&lt;/li&gt; 
     &lt;li&gt;&lt;code&gt;use_speculative_decoding&lt;/code&gt;: A boolean (default true) that speeds up streaming re-decodes by verifying the previous hypothesis and continuing from the first mismatch instead of greedily redecoding from BOS. Set to false to disable.&lt;/li&gt; 
     &lt;li&gt;&lt;code&gt;transcription_interval&lt;/code&gt;: How often to run transcription, in seconds.&lt;/li&gt; 
     &lt;li&gt;&lt;code&gt;vad_threshold&lt;/code&gt;: Controls the sensitivity of the initial voice-activity detection stage that decides how to break raw audio into segments. This defaults to 0.5, with lower values creating longer segments, potentially with more background noise sections, and higher values breaking up speech into smaller chunks, at the risk of losing some actual speech by clipping. If you set it to zero, it disables the VAD entirely, though speech will still be broken up into &lt;code&gt;vad_max_segment_duration&lt;/code&gt; sized chunks.&lt;/li&gt; 
     &lt;li&gt;&lt;code&gt;save_input_wav_path&lt;/code&gt;: One of the most common causes of poor transcription quality is incorrect conversion or corruption of the audio that&#39;s fed into the pipeline. If you set this option to a folder path, the transcriber will save out exactly what it has received as 16KHz mono WAV files, so you can ensure that your input audio is as you expect.&lt;/li&gt; 
     &lt;li&gt;&lt;code&gt;log_api_calls&lt;/code&gt;: Another debugging option, turning this on causes all calls to the C API entry points in the library to write out information on their arguments to stderr or the console each time they&#39;re run.&lt;/li&gt; 
     &lt;li&gt;&lt;code&gt;log_ort_run&lt;/code&gt;: Prints information about the ONNXRuntime inference runs and how long they take.&lt;/li&gt; 
     &lt;li&gt;&lt;code&gt;ort_providers&lt;/code&gt;: A comma-separated, ordered list of the ONNX Runtime execution providers the models should try to use, for example &lt;code&gt;&quot;CoreML,CPU&quot;&lt;/code&gt; on macOS. The names are case-insensitive and accept either the short form (&lt;code&gt;CPU&lt;/code&gt;, &lt;code&gt;CoreML&lt;/code&gt;, &lt;code&gt;NNAPI&lt;/code&gt;) or the full ONNX Runtime name (&lt;code&gt;CPUExecutionProvider&lt;/code&gt;, &lt;code&gt;CoreMLExecutionProvider&lt;/code&gt;, &lt;code&gt;NNAPIExecutionProvider&lt;/code&gt;). Providers are appended in the order given, and ONNX Runtime falls back to later entries for any operations an earlier provider can&#39;t handle, so it&#39;s good practice to always list &lt;code&gt;CPU&lt;/code&gt; last as a catch-all. If you leave this unset the library runs CPU-only, which is what we recommend and what every mobile build supports: the iOS and Android libraries ship without CoreML and NNAPI because neither could run our models in large enough pieces to be worth its size, and asking for one there is an error that says so. &lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/docs/execution-providers.md&quot;&gt;docs/execution-providers.md&lt;/a&gt; has the measurements. Requesting a provider that isn&#39;t available on the current platform (such as &lt;code&gt;CoreML&lt;/code&gt; off Apple hardware, or &lt;code&gt;NNAPI&lt;/code&gt; off Android) is likewise an error. The alias &lt;code&gt;ort_provider&lt;/code&gt; is also accepted.&lt;/li&gt; 
     &lt;li&gt;&lt;code&gt;coreml_cache_dir&lt;/code&gt;: A directory path where the CoreML execution provider caches its compiled models on macOS. Compiling a model for CoreML is expensive, so pointing this at a persistent, writable folder lets subsequent runs reuse the cached artifacts and start up much faster. This only has an effect when &lt;code&gt;CoreML&lt;/code&gt; is included in &lt;code&gt;ort_providers&lt;/code&gt;, so it does nothing on iOS, whose library has no CoreML in it.&lt;/li&gt; 
     &lt;li&gt;&lt;code&gt;vad_window_duration&lt;/code&gt;: The VAD runs every 30ms, but to get higher-confidence values we average the results over time. This value is the time in seconds to average over. The default is 0.5s, shorter durations will spot speech faster at the cost of lower accuracy, higher values may increase accuracy, but at the cost of missing shorter utterances.&lt;/li&gt; 
     &lt;li&gt;&lt;code&gt;vad_look_behind_sample_count&lt;/code&gt;: Because we&#39;re averaging over time, the mean VAD signal will lag behind the initial speech detection. To compensate for that, when speech is detected we pull in some of the audio immediately before the average passed the threshold. This value is the number of samples to prepend, and defaults to 8192 (all at 16KHz).&lt;/li&gt; 
     &lt;li&gt;&lt;code&gt;vad_max_segment_duration&lt;/code&gt;: It can be hard to find gaps in rapid-fire speech, but a lot of applications want their text in chunks that aren&#39;t endless. This option sets the longest duration a line can be before it&#39;s marked as complete and a new segment is started. The default is 15 seconds, and to increase the chance that a natural break is found, the &lt;code&gt;vad_threshold&lt;/code&gt; is linearly decreased over time from two thirds of the maximum duration until the maximum is reached.&lt;/li&gt; 
     &lt;li&gt;&lt;code&gt;word_timestamps&lt;/code&gt;: A boolean (default false) that fills in each line&#39;s &lt;code&gt;words&lt;/code&gt; array with per-word timings. This needs the optional attention decoder that sits alongside the main model files (&lt;code&gt;decoder_kv_with_attention.ort&lt;/code&gt; for streaming architectures, &lt;code&gt;decoder_with_attention.ort&lt;/code&gt; otherwise), so ask the downloader for it when you fetch the model. Turning on &lt;code&gt;identify_speakers&lt;/code&gt; enables this automatically, since speaker spans are mapped onto the line text using word timings.&lt;/li&gt; 
     &lt;li&gt;&lt;code&gt;identify_speakers&lt;/code&gt;: A boolean (default false) that controls whether to run the speaker diarization stage of the pipeline. When enabled, each line carries a &lt;code&gt;speaker_spans&lt;/code&gt; array describing who spoke when, including UTF-8 character ranges into the line text. Word timestamps are enabled automatically in this mode. This runs a C++ port of the &lt;a href=&quot;https://github.com/moonshine-ai/cpp-annote&quot;&gt;pyannote community-1 pipeline&lt;/a&gt; inline inside transcription calls, which adds significant compute. Streaming sessions bound VBx re-clustering to a sliding window (see &lt;code&gt;diarization_cluster_window_sec&lt;/code&gt;); batch/one-shot transcription still uses full-history clustering. This needs the two diarization models, which are an 8.2 MB download rather than part of the library; the high-level loaders fetch them for you when this option is set, and everything else takes &lt;code&gt;diarization_model_dir&lt;/code&gt;. See &lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/docs/diarization-models.md&quot;&gt;The diarization models are a download&lt;/a&gt;. For tests, &lt;code&gt;test-assets/endgame_nagg_nell.wav&lt;/code&gt; is a ~28 second synthetic two-speaker clip (ZipVoice TTS, Beckett&#39;s &lt;em&gt;Endgame&lt;/em&gt; dialogue); regenerate it with &lt;code&gt;python3 scripts/generate-diarization-test-audio.py&lt;/code&gt;.&lt;/li&gt; 
     &lt;li&gt;&lt;code&gt;diarization_model_dir&lt;/code&gt;: The directory holding &lt;code&gt;segmentation.ort&lt;/code&gt; and &lt;code&gt;embedding.ort&lt;/code&gt;, required whenever &lt;code&gt;identify_speakers&lt;/code&gt; is set and you are constructing a transcriber directly rather than through one of the loaders that downloads for you. Get the directory from &lt;code&gt;moonshine_voice.get_diarization_model()&lt;/code&gt; in Python, &lt;code&gt;ModelSpec.diarization&lt;/code&gt; in Swift, or &lt;code&gt;ModelSpec.diarization()&lt;/code&gt; on Android; in the browser, pass the two files to the in-memory loader instead.&lt;/li&gt; 
     &lt;li&gt;&lt;code&gt;diarization_cluster_cadence&lt;/code&gt;: A float (default 2.0) giving the minimum number of seconds of new audio between diarization re-clustering passes. Raising this reduces compute on long sessions, at the cost of slower refinement of speaker assignments.&lt;/li&gt; 
     &lt;li&gt;&lt;code&gt;diarization_analyze_cadence&lt;/code&gt;: A float (default 0, meaning the model default of 1.0) giving the number of seconds between diarization segmentation/embedding model runs.&lt;/li&gt; 
     &lt;li&gt;&lt;code&gt;diarization_cluster_window_sec&lt;/code&gt;: A float (default 120.0) giving the maximum seconds of recent audio history fed to VBx on each streaming refresh. Older chunks are evicted from the cache and their speaker turns are frozen (no longer revised). Set to &lt;code&gt;0&lt;/code&gt; for unlimited full-history re-clustering (higher quality on long sessions, but compute and memory grow with session length). Batch/one-shot diarization always uses full history regardless of this setting.&lt;/li&gt; 
     &lt;li&gt;&lt;code&gt;return_audio_data&lt;/code&gt;: By default the transcriber returns the segment of audio data corresponding to a line of text along with the transcription. You can disable this if you want to reduce memory overhead.&lt;/li&gt; 
     &lt;li&gt;&lt;code&gt;log_output_text&lt;/code&gt;: If this is enabled then the results of the speech to text model will be logged to the console.&lt;/li&gt; 
    &lt;/ul&gt; &lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;a id=&quot;transcriber-transcribe-without-streaming&quot;&gt;&lt;/a&gt;&lt;code&gt;transcribe_without_streaming()&lt;/code&gt;: A convenience function to extract text from a non-live audio source, such as a file. We optimize for streaming use cases, so you&#39;re probably better off using libraries that specialize in bulk, batched transcription if you use this a lot and have performance constraints. This will still call any registered event listeners as it processes the lines, so this can be useful to test your application using pre-recorded files, or to easily integrate offline audio sources.&lt;/p&gt; 
  &lt;ul&gt; 
   &lt;li&gt;&lt;code&gt;audio_data&lt;/code&gt;: An array of 32-bit float values, representing mono PCM audio between -1.0 and 1.0, to be analyzed for speech.&lt;/li&gt; 
   &lt;li&gt;&lt;code&gt;sample_rate&lt;/code&gt;: The number of samples per second. The library uses this to convert to its working rate (16KHz) internally.&lt;/li&gt; 
   &lt;li&gt;&lt;code&gt;flags&lt;/code&gt;: Integer, currently unused.&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;a id=&quot;transcriber-start&quot;&gt;&lt;/a&gt;&lt;code&gt;start()&lt;/code&gt;: Begins a new transcription session. You need to call this after you&#39;ve created the &lt;code&gt;Transcriber&lt;/code&gt; and before you add any audio.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;a id=&quot;transcriber-stop&quot;&gt;&lt;/a&gt;&lt;code&gt;stop()&lt;/code&gt;: Ends a transcription session. If a speech segment was still active, it&#39;s marked as complete and the appropriate event handlers are called.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;a id=&quot;transcriber-add-audio&quot;&gt;&lt;/a&gt;&lt;code&gt;add_audio()&lt;/code&gt;: Call this every time you have a new chunk of audio from your input, to begin processing. The size and sample rate of the audio should be whatever&#39;s natural for your source, since the library will handle all conversions.&lt;/p&gt; 
  &lt;ul&gt; 
   &lt;li&gt;&lt;code&gt;audio_data&lt;/code&gt;: Array of 32-bit floats representing a mono PCM chunk of audio.&lt;/li&gt; 
   &lt;li&gt;&lt;code&gt;sample_rate&lt;/code&gt;: How many samples per second are present in the input audio. The library uses this to convert the data to its preferred rate.&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;a id=&quot;transcriber-update-transcription&quot;&gt;&lt;/a&gt;&lt;code&gt;update_transcription&lt;/code&gt;: The transcript is usually updated periodically as audio data is added, but if you need to trigger one yourself, for example when a user presses refresh, or want access to the complete transcript, you can call this manually.&lt;/p&gt; 
  &lt;ul&gt; 
   &lt;li&gt;&lt;code&gt;flags&lt;/code&gt;: Integer holding flags that are combined using bitwise or (&lt;code&gt;|&lt;/code&gt;). 
    &lt;ul&gt; 
     &lt;li&gt;&lt;code&gt;MOONSHINE_FLAG_FORCE_UPDATE&lt;/code&gt;: By default the transcriber returns a cached version of the transcript if less than 200ms of new audio has come in since the last transcription, but by setting this you can ensure that a transcription happens regardless.&lt;/li&gt; 
    &lt;/ul&gt; &lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;a id=&quot;transcriber-create-stream&quot;&gt;&lt;/a&gt;&lt;code&gt;create_stream()&lt;/code&gt;: If your application is taking audio input from multiple sources, for example a microphone and system audio, then you&#39;ll want to create multiple streams on a single transcriber to avoid loading multiple copies of the models. Each stream has its own transcript, and line events are tagged with the stream handle they came from. You don&#39;t need to worry about this if you only need to deal with a single input though, just use the &lt;code&gt;Transcriber&lt;/code&gt; class&#39;s &lt;code&gt;start()&lt;/code&gt;, &lt;code&gt;stop()&lt;/code&gt;, etc. This function returns &lt;code&gt;Stream&lt;/code&gt; class object.&lt;/p&gt; 
  &lt;ul&gt; 
   &lt;li&gt;&lt;code&gt;flags&lt;/code&gt;: Integer, reserved for future expansion.&lt;/li&gt; 
   &lt;li&gt;&lt;code&gt;update_interval&lt;/code&gt;: Period in seconds between transcription updates.&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;a id=&quot;transcriber-add-listener&quot;&gt;&lt;/a&gt;&lt;code&gt;add_listener()&lt;/code&gt;: Registers a callable object with the transcriber. This object will be called back as audio is fed in and text is extracted.&lt;/p&gt; 
  &lt;ul&gt; 
   &lt;li&gt;&lt;code&gt;listener&lt;/code&gt;: This is often a subclass of &lt;code&gt;TranscriptEventListener&lt;/code&gt;, but can be a plain function. It defines what code is called when a speech event happens.&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;a id=&quot;transcriber-remove-listener&quot;&gt;&lt;/a&gt;&lt;code&gt;remove_listener()&lt;/code&gt;: Deletes a listener so that it no longer receives events.&lt;/p&gt; 
  &lt;ul&gt; 
   &lt;li&gt;&lt;code&gt;listener&lt;/code&gt;: An object you previously passed into &lt;code&gt;add_listener()&lt;/code&gt;.&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;a id=&quot;transcriber-remove-all-listeners&quot;&gt;&lt;/a&gt;&lt;code&gt;remove_all_listeners()&lt;/code&gt;: Deletes all registered listeners so than none of them receive events anymore.&lt;/p&gt; &lt;/li&gt; 
&lt;/ul&gt; 
&lt;h4&gt;MicTranscriber&lt;/h4&gt; 
&lt;p&gt;Transcribes speech straight from the system&#39;s microphone, so you never call &lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/#transcriber-add-audio&quot;&gt;&lt;code&gt;add_audio()&lt;/code&gt;&lt;/a&gt; yourself. In Python this uses the &lt;a href=&quot;https://python-sounddevice.readthedocs.io/&quot;&gt;&lt;code&gt;sounddevice&lt;/code&gt; library&lt;/a&gt;, but in other languages the class uses the native audio API under the hood.&lt;/p&gt; 
&lt;p&gt;Construct one, configure it with chainable setters, call &lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/#mictranscriber-load&quot;&gt;&lt;code&gt;load()&lt;/code&gt;&lt;/a&gt; to fetch and open the model, then &lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/#mictranscriber-start&quot;&gt;&lt;code&gt;start()&lt;/code&gt;&lt;/a&gt; to begin listening.&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-python&quot;&gt;mic = (
    MicTranscriber()
    .on_text(lambda text: show_in_progress(text))
    .on_line(lambda line: append_line(line.text))
)
mic.load()
mic.start()
&lt;/code&gt;&lt;/pre&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a id=&quot;mictranscriber-init&quot;&gt;&lt;/a&gt;&lt;code&gt;__init__()&lt;/code&gt;: Constructs an unconfigured transcriber. Takes no arguments and cannot fail, so nothing is downloaded or opened until &lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/#mictranscriber-load&quot;&gt;&lt;code&gt;load()&lt;/code&gt;&lt;/a&gt;.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;Every setter returns the transcriber, so one can be built in a single expression, and every one has a working default. Call them before &lt;code&gt;load()&lt;/code&gt;.&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a id=&quot;mictranscriber-language&quot;&gt;&lt;/a&gt;&lt;code&gt;language()&lt;/code&gt;: Sets the speech-to-text language. Defaults to &lt;code&gt;&quot;en&quot;&lt;/code&gt;.&lt;/li&gt; 
 &lt;li&gt;&lt;a id=&quot;mictranscriber-model-arch&quot;&gt;&lt;/a&gt;&lt;code&gt;model_arch()&lt;/code&gt;: Picks a specific model size. By default the catalog&#39;s recommended model for the language is used, which is medium streaming for English. Most languages publish only one model.&lt;/li&gt; 
 &lt;li&gt;&lt;a id=&quot;mictranscriber-models-from&quot;&gt;&lt;/a&gt;&lt;code&gt;models_from()&lt;/code&gt;: Loads the model from a directory you supply rather than downloading it.&lt;/li&gt; 
 &lt;li&gt;&lt;a id=&quot;mictranscriber-use-transcriber&quot;&gt;&lt;/a&gt;&lt;code&gt;use_transcriber()&lt;/code&gt;: Reuses a &lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/#transcriber&quot;&gt;&lt;code&gt;Transcriber&lt;/code&gt;&lt;/a&gt; you already have instead of opening another. It stays yours to close.&lt;/li&gt; 
 &lt;li&gt;&lt;a id=&quot;mictranscriber-update-interval&quot;&gt;&lt;/a&gt;&lt;code&gt;update_interval()&lt;/code&gt;: Seconds between automatic streaming updates. Defaults to &lt;code&gt;0.5&lt;/code&gt;.&lt;/li&gt; 
 &lt;li&gt;&lt;a id=&quot;mictranscriber-options&quot;&gt;&lt;/a&gt;&lt;code&gt;options()&lt;/code&gt;: Passes a dictionary of advanced transcriber options straight through, for anything the setters don&#39;t cover.&lt;/li&gt; 
 &lt;li&gt;&lt;a id=&quot;mictranscriber-spelling-model&quot;&gt;&lt;/a&gt;&lt;code&gt;spelling_model()&lt;/code&gt;: Uses a specific alphanumeric spelling model. &lt;code&gt;load()&lt;/code&gt; finds the published one for the language by itself, so this is only for when you keep your own copy. Pass &lt;code&gt;None&lt;/code&gt; to go without one.&lt;/li&gt; 
 &lt;li&gt;&lt;a id=&quot;mictranscriber-transcribe-flags&quot;&gt;&lt;/a&gt;&lt;code&gt;transcribe_flags()&lt;/code&gt;: Sets the flags applied to every streaming update. Pass &lt;code&gt;MOONSHINE_FLAG_SPELLING_MODE&lt;/code&gt; to turn on the spelling-CNN fusion that makes dictated codes and passwords accurate. Takes effect immediately when already loaded.&lt;/li&gt; 
 &lt;li&gt;&lt;a id=&quot;mictranscriber-device&quot;&gt;&lt;/a&gt;&lt;code&gt;device()&lt;/code&gt;: Captures from a specific input device, by index or name. Defaults to the system default.&lt;/li&gt; 
 &lt;li&gt;&lt;a id=&quot;mictranscriber-samplerate&quot;&gt;&lt;/a&gt;&lt;code&gt;samplerate()&lt;/code&gt;: Asks the capture device for a sample rate. Defaults to &lt;code&gt;16000&lt;/code&gt;, and &lt;code&gt;start()&lt;/code&gt; falls back to the device&#39;s own rate if it refuses, so this rarely needs setting.&lt;/li&gt; 
 &lt;li&gt;&lt;a id=&quot;mictranscriber-channels&quot;&gt;&lt;/a&gt;&lt;code&gt;channels()&lt;/code&gt;: Number of channels to capture. Defaults to &lt;code&gt;1&lt;/code&gt;.&lt;/li&gt; 
 &lt;li&gt;&lt;a id=&quot;mictranscriber-blocksize&quot;&gt;&lt;/a&gt;&lt;code&gt;blocksize()&lt;/code&gt;: Frames per capture callback. Defaults to &lt;code&gt;1024&lt;/code&gt;.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;The callbacks below cover almost everything. For line ids, speaker spans, word timings, or the moment a line starts, attach a &lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/#transcripteventlistener&quot;&gt;&lt;code&gt;TranscriptEventListener&lt;/code&gt;&lt;/a&gt; with &lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/#transcriber-add-listener&quot;&gt;&lt;code&gt;add_listener()&lt;/code&gt;&lt;/a&gt; instead; listeners registered before &lt;code&gt;load()&lt;/code&gt; are held and applied once the stream exists.&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt; &lt;p&gt;&lt;a id=&quot;mictranscriber-on-text&quot;&gt;&lt;/a&gt;&lt;code&gt;on_text()&lt;/code&gt;: Called with the in-progress text of the line currently being spoken, each time it changes.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;a id=&quot;mictranscriber-on-line&quot;&gt;&lt;/a&gt;&lt;code&gt;on_line()&lt;/code&gt;: Called once per finished line, with the &lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/#transcriptline&quot;&gt;&lt;code&gt;TranscriptLine&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;a id=&quot;mictranscriber-on-error&quot;&gt;&lt;/a&gt;&lt;code&gt;on_error()&lt;/code&gt;: Called when the audio or transcription pipeline raises.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;a id=&quot;mictranscriber-on-progress&quot;&gt;&lt;/a&gt;&lt;code&gt;on_progress()&lt;/code&gt;: Reports model download progress as a &lt;code&gt;0..1&lt;/code&gt; fraction and the file being fetched. Attaching a handler also silences the default terminal progress bars.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;a id=&quot;mictranscriber-load&quot;&gt;&lt;/a&gt;&lt;code&gt;load()&lt;/code&gt;: Downloads the model if needed, opens it, and returns the transcriber. Blocking, since the first call may have to fetch several hundred megabytes; report progress with &lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/#mictranscriber-on-progress&quot;&gt;&lt;code&gt;on_progress()&lt;/code&gt;&lt;/a&gt;. Safe to call twice.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;a id=&quot;mictranscriber-start&quot;&gt;&lt;/a&gt;&lt;code&gt;start()&lt;/code&gt;: Opens the microphone and begins transcribing. Raises if you haven&#39;t called &lt;code&gt;load()&lt;/code&gt;.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;a id=&quot;mictranscriber-mute&quot;&gt;&lt;/a&gt;&lt;code&gt;mute()&lt;/code&gt;: Drops incoming audio without closing the microphone, so an assistant doesn&#39;t transcribe its own synthesized speech.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;a id=&quot;mictranscriber-stop&quot;&gt;&lt;/a&gt;&lt;code&gt;stop()&lt;/code&gt;: Stops listening and flushes any audio still in flight, so the final line is complete.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;a id=&quot;mictranscriber-close&quot;&gt;&lt;/a&gt;&lt;code&gt;close()&lt;/code&gt;: Releases the microphone, the stream, and the model. Also available as a context manager.&lt;/p&gt; &lt;/li&gt; 
&lt;/ul&gt; 
&lt;h4&gt;Stream&lt;/h4&gt; 
&lt;p&gt;The access point for when you need to feed multiple audio inputs into a single transcriber. Supports &lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/#transcriber-start&quot;&gt;&lt;code&gt;start()&lt;/code&gt;&lt;/a&gt;, &lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/#transcriber-stop&quot;&gt;&lt;code&gt;stop()&lt;/code&gt;&lt;/a&gt;, &lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/#transcriber-add-audio&quot;&gt;&lt;code&gt;add_audio()&lt;/code&gt;&lt;/a&gt;, &lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/#transcriber-update-transcription&quot;&gt;&lt;code&gt;update_transcription()&lt;/code&gt;&lt;/a&gt;, &lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/#transcriber-add-listener&quot;&gt;&lt;code&gt;add_listener()&lt;/code&gt;&lt;/a&gt;, &lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/#transcriber-remove-listener&quot;&gt;&lt;code&gt;remove_listener()&lt;/code&gt;&lt;/a&gt;, and &lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/#transcriber-remove-all-listeners&quot;&gt;&lt;code&gt;remove_all_listeners()&lt;/code&gt;&lt;/a&gt; as documented in the &lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/#transcriber&quot;&gt;&lt;code&gt;Transcriber&lt;/code&gt;&lt;/a&gt; class.&lt;/p&gt; 
&lt;h4&gt;TranscriptEventListener&lt;/h4&gt; 
&lt;p&gt;A convenience class to derive from to create your own listener code. Override any or all of &lt;code&gt;on_line_started()&lt;/code&gt;, &lt;code&gt;on_line_updated()&lt;/code&gt;, &lt;code&gt;on_line_text_changed()&lt;/code&gt;, &lt;code&gt;on_line_speakers_changed()&lt;/code&gt;, &lt;code&gt;on_line_completed()&lt;/code&gt;, and &lt;code&gt;on_error()&lt;/code&gt;, and they&#39;ll be called back when the corresponding event occurs. Every method has a no-op default, so you only need to write the ones you care about.&lt;/p&gt; 
&lt;h4&gt;AgentFlow&lt;/h4&gt; 
&lt;p&gt;A runner that drives generator-based conversational flows, and the entry point for voice interfaces. You register flow functions against trigger phrases, and the runner routes completed transcript lines either to trigger matching (when no flow is active) or to the currently suspended generator (when one is). Matching is semantic, using an embedding model that the runner downloads and loads the first time it needs one. &lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/#agentflow-load&quot;&gt;&lt;code&gt;load()&lt;/code&gt;&lt;/a&gt; opens the microphone transcriber and speech synthesizer for you, so there&#39;s no listener to wire up by hand; pass &lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/#agentflow-use-mic-transcriber&quot;&gt;&lt;code&gt;use_mic_transcriber()&lt;/code&gt;&lt;/a&gt; if you&#39;d rather it listened to a transcriber you already have. See &lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/#getting-started-with-a-conversational-agent&quot;&gt;Getting Started with a Conversational Agent&lt;/a&gt; for usage examples.&lt;/p&gt; 
&lt;p&gt;A flow is an ordinary Python generator function that takes a &lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/#dialog&quot;&gt;&lt;code&gt;Dialog&lt;/code&gt;&lt;/a&gt; as its argument and yields prompt objects back to the runner. The runner carries out each prompt (speaking text, waiting for the user&#39;s response) and resumes the generator with the answer via &lt;code&gt;.send()&lt;/code&gt;. This lets you write multi-step, branching conversations using regular Python control flow, including loops and exception handlers, without any async machinery. Trigger matching, confirmation, and option selection are all done semantically through the embedding model, so alternative phrasings will work without you needing to enumerate them.&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a id=&quot;agentflow-init&quot;&gt;&lt;/a&gt;&lt;code&gt;__init__()&lt;/code&gt;: Constructs an unconfigured runner. Takes no arguments — configure it with the chainable setters below, then call &lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/#agentflow-load&quot;&gt;&lt;code&gt;load()&lt;/code&gt;&lt;/a&gt;.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;Every setter returns the runner, so a whole voice interface can be built in one expression, and every one of them has a working default. Call them before &lt;code&gt;load()&lt;/code&gt;.&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a id=&quot;agentflow-language&quot;&gt;&lt;/a&gt;&lt;code&gt;language()&lt;/code&gt;: Sets the language used for both recognition and speech. Defaults to &lt;code&gt;&quot;en&quot;&lt;/code&gt;.&lt;/li&gt; 
 &lt;li&gt;&lt;a id=&quot;agentflow-model-arch&quot;&gt;&lt;/a&gt;&lt;code&gt;model_arch()&lt;/code&gt;: Picks a specific speech recognition model size instead of the default for the language.&lt;/li&gt; 
 &lt;li&gt;&lt;a id=&quot;agentflow-voice&quot;&gt;&lt;/a&gt;&lt;code&gt;voice()&lt;/code&gt;: Chooses the synthesis voice used to speak prompts.&lt;/li&gt; 
 &lt;li&gt;&lt;a id=&quot;agentflow-speech-options&quot;&gt;&lt;/a&gt;&lt;code&gt;speech_options()&lt;/code&gt;: Passes a dictionary of advanced options straight through to the &lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/#texttospeech&quot;&gt;&lt;code&gt;TextToSpeech&lt;/code&gt;&lt;/a&gt; synthesizer.&lt;/li&gt; 
 &lt;li&gt;&lt;a id=&quot;agentflow-models-from&quot;&gt;&lt;/a&gt;&lt;code&gt;models_from()&lt;/code&gt;: Reads and caches model files under the given directory instead of the default cache location.&lt;/li&gt; 
 &lt;li&gt;&lt;a id=&quot;agentflow-microphone&quot;&gt;&lt;/a&gt;&lt;code&gt;microphone()&lt;/code&gt;: Whether &lt;code&gt;load()&lt;/code&gt; should open a microphone. Defaults to &lt;code&gt;True&lt;/code&gt;. Turn it off to drive the runner from text with &lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/#agentflow-handle-utterance&quot;&gt;&lt;code&gt;handle_utterance()&lt;/code&gt;&lt;/a&gt;.&lt;/li&gt; 
 &lt;li&gt;&lt;a id=&quot;agentflow-speech&quot;&gt;&lt;/a&gt;&lt;code&gt;speech()&lt;/code&gt;: Whether &lt;code&gt;load()&lt;/code&gt; should open a speech synthesizer. Defaults to &lt;code&gt;True&lt;/code&gt;. Turn it off for a silent runner: prompts are still logged and flows still advance, they just aren&#39;t spoken.&lt;/li&gt; 
 &lt;li&gt;&lt;a id=&quot;agentflow-output-device&quot;&gt;&lt;/a&gt;&lt;code&gt;output_device()&lt;/code&gt;: Pins playback to a specific audio output device, for machines where the host default isn&#39;t the speaker you want.&lt;/li&gt; 
 &lt;li&gt;&lt;a id=&quot;agentflow-trigger-threshold&quot;&gt;&lt;/a&gt;&lt;code&gt;trigger_threshold()&lt;/code&gt;: The similarity a phrase must reach to fire, between 0 and 1. Defaults to &lt;code&gt;0.7&lt;/code&gt;. Raise it when triggers fire on unrelated speech, lower it when they don&#39;t fire on genuine attempts.&lt;/li&gt; 
 &lt;li&gt;&lt;a id=&quot;agentflow-use-embeddings&quot;&gt;&lt;/a&gt;&lt;code&gt;use_embeddings()&lt;/code&gt;: Whether to match phrases by meaning. Defaults to &lt;code&gt;True&lt;/code&gt;, which downloads a small language model so &quot;set up wifi&quot; also fires on &quot;I need to get online&quot;. Turn it off to fall back to case-insensitive substring matching and load no model, which is what offline tests usually want.&lt;/li&gt; 
 &lt;li&gt;&lt;a id=&quot;agentflow-beeps&quot;&gt;&lt;/a&gt;&lt;code&gt;beeps()&lt;/code&gt;: Whether to play the recognition cue tones. Defaults to &lt;code&gt;True&lt;/code&gt;, which plays a short &quot;got it&quot; tone when an utterance matches and a distinct &quot;didn&#39;t get that&quot; tone when nothing does, so a misrecognition never ends in silence.&lt;/li&gt; 
 &lt;li&gt;&lt;a id=&quot;agentflow-spell-feedback&quot;&gt;&lt;/a&gt;&lt;code&gt;spell_feedback()&lt;/code&gt;: Whether to echo each character during spelled input. Defaults to &lt;code&gt;True&lt;/code&gt;, speaking back &lt;code&gt;&quot;haitch&quot;&lt;/code&gt; for &lt;code&gt;&quot;h&quot;&lt;/code&gt; and &lt;code&gt;&quot;deleting &amp;lt;character&amp;gt;&quot;&lt;/code&gt; for an undo, so the user hears that the right letter came off the end.&lt;/li&gt; 
 &lt;li&gt;&lt;a id=&quot;agentflow-barge-in&quot;&gt;&lt;/a&gt;&lt;code&gt;barge_in()&lt;/code&gt;: Whether the user can interrupt the assistant mid-prompt. Off by default, because an utterance arriving while the assistant is talking is usually the microphone hearing the speakers. Enable it only when you have reliable echo cancellation.&lt;/li&gt; 
 &lt;li&gt;&lt;a id=&quot;agentflow-log-io&quot;&gt;&lt;/a&gt;&lt;code&gt;log_io()&lt;/code&gt;: Logs the dialogue to stderr as &lt;code&gt;user: ...&lt;/code&gt; / &lt;code&gt;assistant: ...&lt;/code&gt; lines. Off by default. This is the user-facing transcript; use &lt;code&gt;debug()&lt;/code&gt; for the verbose internal trace.&lt;/li&gt; 
 &lt;li&gt;&lt;a id=&quot;agentflow-debug&quot;&gt;&lt;/a&gt;&lt;code&gt;debug()&lt;/code&gt;: Traces every internal stage transition, with timings, to stderr.&lt;/li&gt; 
 &lt;li&gt;&lt;a id=&quot;agentflow-on-progress&quot;&gt;&lt;/a&gt;&lt;code&gt;on_progress()&lt;/code&gt;: Reports model download and load progress as &lt;code&gt;(fraction, name)&lt;/code&gt;.&lt;/li&gt; 
 &lt;li&gt;&lt;a id=&quot;agentflow-on-heard&quot;&gt;&lt;/a&gt;&lt;code&gt;on_heard()&lt;/code&gt;: Reports every utterance the runner receives from the microphone, including trigger phrases and answers to prompts. Use &lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/#agentflow-otherwise&quot;&gt;&lt;code&gt;otherwise()&lt;/code&gt;&lt;/a&gt; instead for just the lines that didn&#39;t match anything.&lt;/li&gt; 
 &lt;li&gt;&lt;a id=&quot;agentflow-on-said&quot;&gt;&lt;/a&gt;&lt;code&gt;on_said()&lt;/code&gt;: Reports every prompt the runner speaks.&lt;/li&gt; 
 &lt;li&gt;&lt;a id=&quot;agentflow-on-error&quot;&gt;&lt;/a&gt;&lt;code&gt;on_error()&lt;/code&gt;: Reports errors raised by a flow or by the audio pipeline. Without a handler the runner prints them to stderr and carries on; a flow that raises is torn down either way, so one bad turn can&#39;t wedge the runner.&lt;/li&gt; 
 &lt;li&gt;&lt;a id=&quot;agentflow-speak-with&quot;&gt;&lt;/a&gt;&lt;code&gt;speak_with()&lt;/code&gt;: Speaks prompts with your own callable instead of the built-in synthesizer. It must block until playback finishes, since the runner resumes the flow as soon as it returns. Setting this stops &lt;code&gt;load()&lt;/code&gt; creating a synthesizer.&lt;/li&gt; 
 &lt;li&gt;&lt;a id=&quot;agentflow-use-text-to-speech&quot;&gt;&lt;/a&gt;&lt;code&gt;use_text_to_speech()&lt;/code&gt;: Speaks with an existing &lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/#texttospeech&quot;&gt;&lt;code&gt;TextToSpeech&lt;/code&gt;&lt;/a&gt; instead of creating one.&lt;/li&gt; 
 &lt;li&gt;&lt;a id=&quot;agentflow-use-mic-transcriber&quot;&gt;&lt;/a&gt;&lt;code&gt;use_mic_transcriber()&lt;/code&gt;: Listens to an existing &lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/#mictranscriber&quot;&gt;&lt;code&gt;MicTranscriber&lt;/code&gt;&lt;/a&gt;, or any object with the same &lt;code&gt;add_listener&lt;/code&gt; / &lt;code&gt;start&lt;/code&gt; / &lt;code&gt;stop&lt;/code&gt; shape — a plain &lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/#transcriber&quot;&gt;&lt;code&gt;Transcriber&lt;/code&gt;&lt;/a&gt; fed from a file works, which is handy for testing a flow against recorded audio.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;The runner won&#39;t close a synthesizer or transcriber it didn&#39;t create.&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt; &lt;p&gt;&lt;a id=&quot;agentflow-listen-for&quot;&gt;&lt;/a&gt;&lt;code&gt;listen_for()&lt;/code&gt;: Starts a flow whenever the user says something like the trigger phrase.&lt;/p&gt; 
  &lt;ul&gt; 
   &lt;li&gt;&lt;code&gt;trigger_phrase&lt;/code&gt;: A canonical phrase that is embedded once at registration time and compared against utterances via cosine similarity, so alternative phrasings of the same meaning will all start the flow.&lt;/li&gt; 
   &lt;li&gt;&lt;code&gt;flow&lt;/code&gt;: A callable that takes a &lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/#dialog&quot;&gt;&lt;code&gt;Dialog&lt;/code&gt;&lt;/a&gt; and returns a generator yielding prompts. Typically a generator function.&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;a id=&quot;agentflow-unregister-flow&quot;&gt;&lt;/a&gt;&lt;code&gt;unregister_flow()&lt;/code&gt;: Removes a flow registered with &lt;code&gt;listen_for()&lt;/code&gt;. Returns &lt;code&gt;True&lt;/code&gt; if a flow was removed, &lt;code&gt;False&lt;/code&gt; otherwise.&lt;/p&gt; 
  &lt;ul&gt; 
   &lt;li&gt;&lt;code&gt;trigger_phrase&lt;/code&gt;: The trigger phrase used when the flow was registered.&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;a id=&quot;agentflow-always&quot;&gt;&lt;/a&gt;&lt;code&gt;always()&lt;/code&gt;: Registers a phrase that stays live at every moment, whether or not a flow is running. &quot;Cancel&quot; and &quot;start over&quot; are built in and need no registration, but they apply only to a flow in progress, so an interface that dictates whatever it hears keeps those words when nothing is active. Registering either here opts it into being live all the time.&lt;/p&gt; 
  &lt;ul&gt; 
   &lt;li&gt;&lt;code&gt;trigger_phrase&lt;/code&gt;: The canonical phrase to match, in the same way as &lt;code&gt;listen_for()&lt;/code&gt;.&lt;/li&gt; 
   &lt;li&gt;&lt;code&gt;handler&lt;/code&gt;: A callable that takes the current &lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/#dialog&quot;&gt;&lt;code&gt;Dialog&lt;/code&gt;&lt;/a&gt; and returns an optional prompt to speak (or &lt;code&gt;None&lt;/code&gt;). The handler can also call &lt;code&gt;d.cancel()&lt;/code&gt; or &lt;code&gt;d.restart()&lt;/code&gt; to abandon or reset the active flow.&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;a id=&quot;agentflow-otherwise&quot;&gt;&lt;/a&gt;&lt;code&gt;otherwise()&lt;/code&gt;: Handles speech that matched no trigger and no waiting prompt. This is what a dictation interface hangs its text off: &lt;code&gt;on_heard()&lt;/code&gt; reports every line including commands and answers, while this one reports only the lines nothing else claimed, so &quot;delete the last sentence&quot; starts your flow instead of being typed into the document. Registering a handler also silences the &quot;didn&#39;t get that&quot; cue, since unmatched speech is no longer a dead end. Nothing arrives here while a flow is running, because a flow&#39;s prompts take every line until it finishes.&lt;/p&gt; 
  &lt;ul&gt; 
   &lt;li&gt;&lt;code&gt;handler&lt;/code&gt;: A callable that takes the utterance as a string.&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;a id=&quot;agentflow-load&quot;&gt;&lt;/a&gt;&lt;code&gt;load()&lt;/code&gt;: Downloads and opens everything the runner needs — the phrase-matching model, a speech synthesizer, and a microphone transcriber — skipping any you&#39;ve supplied or turned off. Blocking, since the first call may have to download models; report progress with &lt;code&gt;on_progress()&lt;/code&gt;. Returns the runner.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;a id=&quot;agentflow-start-listening&quot;&gt;&lt;/a&gt;&lt;code&gt;start_listening()&lt;/code&gt;: Starts listening on the microphone, calling &lt;code&gt;load()&lt;/code&gt; first if you haven&#39;t. Returns as soon as the microphone is live: transcript lines arrive on the audio thread and drive your flows from there, so the caller is free to sleep, run a UI, or do anything else.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;a id=&quot;agentflow-stop-listening&quot;&gt;&lt;/a&gt;&lt;code&gt;stop_listening()&lt;/code&gt;: Stops listening. Safe to call when already stopped.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;a id=&quot;agentflow-handle-utterance&quot;&gt;&lt;/a&gt;&lt;code&gt;handle_utterance()&lt;/code&gt;: Routes an utterance manually, without going through transcript events. Returns &lt;code&gt;True&lt;/code&gt; if the utterance was consumed by a flow or a global handler, &lt;code&gt;False&lt;/code&gt; otherwise. Useful for unit tests, or for driving the runner from input sources other than a &lt;code&gt;Transcriber&lt;/code&gt;.&lt;/p&gt; 
  &lt;ul&gt; 
   &lt;li&gt;&lt;code&gt;utterance&lt;/code&gt;: The string to route.&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;a id=&quot;agentflow-cancel&quot;&gt;&lt;/a&gt;&lt;code&gt;cancel()&lt;/code&gt;: Abandons the currently running flow, if any. Returns &lt;code&gt;True&lt;/code&gt; if a flow was canceled.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;a id=&quot;agentflow-say&quot;&gt;&lt;/a&gt;&lt;code&gt;say()&lt;/code&gt;: Speaks &lt;code&gt;text&lt;/code&gt; outside any flow. Useful for welcome messages, status announcements, and error notifications that don&#39;t need a full flow registration. Blocks until playback finishes, and shares the same playback path as in-flow prompts, so mic muting and self-capture suppression still apply.&lt;/p&gt; 
  &lt;ul&gt; 
   &lt;li&gt;&lt;code&gt;text&lt;/code&gt;: The string to speak.&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;a id=&quot;agentflow-close&quot;&gt;&lt;/a&gt;&lt;code&gt;close()&lt;/code&gt;: Stops listening and releases everything the runner opened. Only closes what it created itself: a synthesizer or transcriber you passed in stays yours to close. Safe to call more than once, and safe on a runner that never loaded anything.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;code&gt;is_active&lt;/code&gt;: A read-only boolean property that&#39;s &lt;code&gt;True&lt;/code&gt; when a flow is currently in progress.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;code&gt;active_trigger&lt;/code&gt;: A read-only property returning the trigger phrase of the active flow, or &lt;code&gt;None&lt;/code&gt; if no flow is running.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;code&gt;registered_flows&lt;/code&gt;: A read-only list of all registered flow trigger phrases.&lt;/p&gt; &lt;/li&gt; 
&lt;/ul&gt; 
&lt;h4&gt;Dialog&lt;/h4&gt; 
&lt;p&gt;The context object passed as the first argument to every flow function. Each method returns a prompt object that the flow &lt;code&gt;yield&lt;/code&gt;s back to the runner; the runner then carries out the prompt (speaking text, waiting for input) and sends the result, if any, back into the generator via &lt;code&gt;.send()&lt;/code&gt;. &lt;code&gt;Dialog&lt;/code&gt; itself performs no I/O, so flows can be unit-tested by constructing a &lt;code&gt;Dialog&lt;/code&gt;, calling the flow function, and driving the resulting generator manually without any audio, TTS, or event loop.&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt; &lt;p&gt;&lt;code&gt;trigger_phrase&lt;/code&gt;: The phrase that started the flow, available to the flow function as &lt;code&gt;d.trigger_phrase&lt;/code&gt;.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;code&gt;state&lt;/code&gt;: A &lt;code&gt;dict&lt;/code&gt; for the flow&#39;s own per-conversation state, initially empty.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;a id=&quot;dialog-say&quot;&gt;&lt;/a&gt;&lt;code&gt;say()&lt;/code&gt;: Returns a prompt that, when yielded, speaks &lt;code&gt;text&lt;/code&gt; and resumes the flow once playback has finished. The flow receives &lt;code&gt;None&lt;/code&gt; from the &lt;code&gt;yield&lt;/code&gt;.&lt;/p&gt; 
  &lt;ul&gt; 
   &lt;li&gt;&lt;code&gt;text&lt;/code&gt;: The string for the assistant to speak.&lt;/li&gt; 
   &lt;li&gt;&lt;code&gt;barge_in&lt;/code&gt;: Reserved for future use; when supported, will allow the user to interrupt playback by speaking.&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;a id=&quot;dialog-ask&quot;&gt;&lt;/a&gt;&lt;code&gt;ask()&lt;/code&gt;: Returns a prompt that speaks a question and resumes the flow with the user&#39;s next utterance as a string.&lt;/p&gt; 
  &lt;ul&gt; 
   &lt;li&gt;&lt;code&gt;prompt&lt;/code&gt;: The string for the assistant to speak before listening.&lt;/li&gt; 
   &lt;li&gt;&lt;code&gt;mode&lt;/code&gt;: One of &lt;code&gt;FREE&lt;/code&gt; (free-form natural-language input, the default), &lt;code&gt;SPELLED&lt;/code&gt; (the user dictates one character at a time, terminated by &quot;done&quot;/&quot;stop&quot;/&quot;finish&quot;, with each character spoken back as feedback and support for NATO-alphabet style words and &quot;delete&quot;/&quot;undo&quot; commands), &lt;code&gt;DIGITS&lt;/code&gt; (digits-only spelled input), or &lt;code&gt;PHRASE&lt;/code&gt; (a single phrase). These constants are exported from the &lt;code&gt;moonshine_voice&lt;/code&gt; package.&lt;/li&gt; 
   &lt;li&gt;&lt;code&gt;bias_terms&lt;/code&gt;: Optional list of strings the recognizer should bias toward when interpreting the response.&lt;/li&gt; 
   &lt;li&gt;&lt;code&gt;timeout&lt;/code&gt;: Seconds to wait for a response before reprompting. Defaults to 8 seconds.&lt;/li&gt; 
   &lt;li&gt;&lt;code&gt;no_input_reprompt&lt;/code&gt;: Template used to reprompt the user when no input arrives within the timeout. &lt;code&gt;{prompt}&lt;/code&gt; is substituted with the original prompt text. Pass &lt;code&gt;None&lt;/code&gt; to skip the reprompt.&lt;/li&gt; 
   &lt;li&gt;&lt;code&gt;max_retries&lt;/code&gt;: Number of times to reprompt before raising &lt;code&gt;NoInputError&lt;/code&gt; into the flow. Defaults to 2.&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;a id=&quot;dialog-confirm&quot;&gt;&lt;/a&gt;&lt;code&gt;confirm()&lt;/code&gt;: Returns a prompt that asks a yes/no question and resumes the flow with a &lt;code&gt;bool&lt;/code&gt;. Matching is semantic, so &quot;okay&quot;, &quot;affirmative&quot;, and &quot;go ahead&quot; all count as yes, and &quot;no&quot;, &quot;cancel&quot;, and &quot;stop&quot; count as no.&lt;/p&gt; 
  &lt;ul&gt; 
   &lt;li&gt;&lt;code&gt;prompt&lt;/code&gt;: The yes/no question for the assistant to speak.&lt;/li&gt; 
   &lt;li&gt;&lt;code&gt;timeout&lt;/code&gt;: Seconds to wait for a response. Defaults to 6 seconds.&lt;/li&gt; 
   &lt;li&gt;&lt;code&gt;max_retries&lt;/code&gt;: Number of reprompts before raising &lt;code&gt;NoMatchError&lt;/code&gt; into the flow. Defaults to 1.&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;a id=&quot;dialog-choose&quot;&gt;&lt;/a&gt;&lt;code&gt;choose()&lt;/code&gt;: Returns a prompt that asks the user to pick from a set of named options and resumes the flow with the key of the matched option as a string. Each option key has a list of associated phrases; matching is done against the union of the key and its phrases using the embedding model.&lt;/p&gt; 
  &lt;ul&gt; 
   &lt;li&gt;&lt;code&gt;prompt&lt;/code&gt;: The string for the assistant to speak.&lt;/li&gt; 
   &lt;li&gt;&lt;code&gt;options&lt;/code&gt;: A mapping of option keys to lists of associated phrases the user might say.&lt;/li&gt; 
   &lt;li&gt;&lt;code&gt;timeout&lt;/code&gt;: Seconds to wait for a response. Defaults to 8 seconds.&lt;/li&gt; 
   &lt;li&gt;&lt;code&gt;max_retries&lt;/code&gt;: Number of reprompts before raising &lt;code&gt;NoMatchError&lt;/code&gt;. Defaults to 2.&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;a id=&quot;dialog-cancel&quot;&gt;&lt;/a&gt;&lt;code&gt;cancel()&lt;/code&gt;: Raises &lt;code&gt;DialogCancelled&lt;/code&gt; into the generator to abandon the active flow entirely. Typically called from a global handler registered with &lt;code&gt;AgentFlow.always()&lt;/code&gt;.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;a id=&quot;dialog-restart&quot;&gt;&lt;/a&gt;&lt;code&gt;restart()&lt;/code&gt;: Raises &lt;code&gt;DialogRestart&lt;/code&gt; into the generator to restart the active flow from the beginning. Typically called from a global handler.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;a id=&quot;dialog-replay-last-prompt&quot;&gt;&lt;/a&gt;&lt;code&gt;replay_last_prompt()&lt;/code&gt;: Returns a &lt;code&gt;Say&lt;/code&gt; prompt that re-speaks the most recent question. Intended for global &quot;repeat&quot; / &quot;say that again&quot; handlers; returns &lt;code&gt;None&lt;/code&gt; if nothing has been spoken yet.&lt;/p&gt; &lt;/li&gt; 
&lt;/ul&gt; 
&lt;h4&gt;TextToSpeech&lt;/h4&gt; 
&lt;p&gt;On-device text-to-speech using the Moonshine native stack (Kokoro and Piper vocoders plus per-language G2P assets). Required files are resolved from the CDN unless you pass &lt;code&gt;download=False&lt;/code&gt; and supply a populated tree. Invalid language tags raise &lt;code&gt;MoonshineTtsLanguageError&lt;/code&gt;; missing or unknown voices raise &lt;code&gt;MoonshineTtsVoiceError&lt;/code&gt;. Playback failures from &lt;code&gt;say()&lt;/code&gt; raise &lt;code&gt;MoonshineAudioOutputError&lt;/code&gt; with a list of output devices when enumeration succeeds.&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;say()&lt;/code&gt; is non-blocking and queued: each call returns immediately and utterances are played back in order by a background pipeline. A dedicated synthesis thread pre-synthesizes the next utterance while the current one is playing, minimizing the gap between consecutive utterances. Use &lt;code&gt;stop()&lt;/code&gt; to cancel all pending speech, &lt;code&gt;wait()&lt;/code&gt; to block until everything has been played, and &lt;code&gt;is_talking()&lt;/code&gt; to poll playback state. The same API shape is available across Python, Swift, and Android (Java).&lt;/p&gt; 
&lt;p&gt;Use &lt;code&gt;list_tts_languages()&lt;/code&gt;, &lt;code&gt;list_tts_voices()&lt;/code&gt;, and &lt;code&gt;get_tts_voice_catalog()&lt;/code&gt; to discover supported tags and voices. Asset layout and licenses are summarized in &lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/core/moonshine-tts/data/README.md&quot;&gt;&lt;code&gt;core/moonshine-tts/data/README.md&lt;/code&gt;&lt;/a&gt;; see also &lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/#text-to-speech-models&quot;&gt;Downloading Models&lt;/a&gt;.&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt; &lt;p&gt;&lt;a id=&quot;texttospeech-init&quot;&gt;&lt;/a&gt;&lt;code&gt;__init__()&lt;/code&gt;: Creates a synthesizer and optionally downloads dependencies into the package cache (or a custom root).&lt;/p&gt; 
  &lt;ul&gt; 
   &lt;li&gt;&lt;code&gt;language&lt;/code&gt;: BCP-47-style tag for the speaking locale (for example &lt;code&gt;en_us&lt;/code&gt;, &lt;code&gt;de&lt;/code&gt;, &lt;code&gt;fr&lt;/code&gt;). Aliases such as &lt;code&gt;en-us&lt;/code&gt; are normalized by the library.&lt;/li&gt; 
   &lt;li&gt;&lt;code&gt;voice&lt;/code&gt;: Optional voice id. Prefix with &lt;code&gt;kokoro_&lt;/code&gt; or &lt;code&gt;piper_&lt;/code&gt; to choose the vocoder (for example &lt;code&gt;kokoro_af_heart&lt;/code&gt;). When &lt;code&gt;download&lt;/code&gt; is true, a catalogued voice that is not yet on disk is downloaded automatically.&lt;/li&gt; 
   &lt;li&gt;&lt;code&gt;options&lt;/code&gt;: Optional mapping of string keys to strings, numbers, or booleans, passed through to the native option parser (see below). The Python binding always sets &lt;code&gt;g2p_root&lt;/code&gt; to the resolved asset directory; do not rely on overriding that key for a different layout—use &lt;code&gt;asset_root&lt;/code&gt; / &lt;code&gt;tts_root&lt;/code&gt;-style options instead.&lt;/li&gt; 
   &lt;li&gt;&lt;code&gt;asset_root&lt;/code&gt;: Optional directory to use as the TTS cache or as the on-disk asset tree. When &lt;code&gt;download&lt;/code&gt; is true, downloads go under this root when set; when false, this path must already contain the expected &lt;code&gt;g2p_root&lt;/code&gt; layout.&lt;/li&gt; 
   &lt;li&gt;&lt;code&gt;download&lt;/code&gt;: When true (default), missing TTS assets are downloaded from &lt;code&gt;https://download.moonshine.ai/tts/&lt;/code&gt;. When false, &lt;code&gt;asset_root&lt;/code&gt; is required and must already contain the files the native layer expects.&lt;/li&gt; 
   &lt;li&gt;&lt;code&gt;clone&lt;/code&gt;: Optional reference clip for ZipVoice voice cloning; either a path to a &lt;code&gt;.wav&lt;/code&gt; file or a &lt;code&gt;(pcm, sample_rate)&lt;/code&gt; pair of mono float PCM. When set, the ZipVoice engine is used automatically; passing &lt;code&gt;voice&lt;/code&gt; together with &lt;code&gt;clone&lt;/code&gt; raises an error.&lt;/li&gt; 
   &lt;li&gt;&lt;code&gt;clone_transcript&lt;/code&gt;: Optional transcript of the &lt;code&gt;clone&lt;/code&gt; clip (recommended for better cloning quality; requires &lt;code&gt;clone&lt;/code&gt;).&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;code&gt;language&lt;/code&gt;: Read-only property returning the normalized language tag in use.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;code&gt;asset_root&lt;/code&gt;: Read-only property returning the &lt;code&gt;pathlib.Path&lt;/code&gt; directory passed to the native layer as &lt;code&gt;g2p_root&lt;/code&gt;.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;a id=&quot;texttospeech-synthesize&quot;&gt;&lt;/a&gt;&lt;code&gt;synthesize()&lt;/code&gt;: Converts &lt;code&gt;text&lt;/code&gt; to mono PCM audio.&lt;/p&gt; 
  &lt;ul&gt; 
   &lt;li&gt;&lt;code&gt;text&lt;/code&gt;: UTF-8 string to speak.&lt;/li&gt; 
   &lt;li&gt;&lt;code&gt;options&lt;/code&gt;: Optional extra native options for this call only (merged with the constructor’s &lt;code&gt;options&lt;/code&gt; semantics on the C side as documented there).&lt;/li&gt; 
   &lt;li&gt;Returns a tuple &lt;code&gt;(samples, sample_rate)&lt;/code&gt; where &lt;code&gt;samples&lt;/code&gt; is a list of 32-bit floats in roughly the −1.0…1.0 range and &lt;code&gt;sample_rate&lt;/code&gt; is the output sample rate in Hz.&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;a id=&quot;texttospeech-say&quot;&gt;&lt;/a&gt;&lt;code&gt;say()&lt;/code&gt;: Queues text for synthesis and playback, returning immediately. A background synthesis thread converts text to audio, then hands it to a playback thread that plays it on the selected output device. Synthesis of the next utterance overlaps with playback of the current one. Requires &lt;code&gt;pip install numpy sounddevice&lt;/code&gt; on Python.&lt;/p&gt; 
  &lt;ul&gt; 
   &lt;li&gt;&lt;code&gt;text&lt;/code&gt;: A string or a list of strings to speak. A list is equivalent to calling &lt;code&gt;say()&lt;/code&gt; once per element in order.&lt;/li&gt; 
   &lt;li&gt;&lt;code&gt;device&lt;/code&gt;: (Python/Swift-macOS) &lt;code&gt;None&lt;/code&gt; for the host default output, an integer PortAudio output device index, a decimal string index, or a case-insensitive substring of a device name. On Android, pass a &lt;code&gt;Context&lt;/code&gt; (required) and optionally an &lt;code&gt;AudioDeviceInfo&lt;/code&gt;.&lt;/li&gt; 
   &lt;li&gt;&lt;code&gt;options&lt;/code&gt;: Optional per-call native options, passed through to synthesis unchanged.&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;a id=&quot;texttospeech-stop&quot;&gt;&lt;/a&gt;&lt;code&gt;stop()&lt;/code&gt;: Clears the utterance queue and stops any audio currently playing. Returns once all pending utterances are discarded and active playback has been halted. It is safe to call &lt;code&gt;say()&lt;/code&gt; again afterwards.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;a id=&quot;texttospeech-wait&quot;&gt;&lt;/a&gt;&lt;code&gt;wait()&lt;/code&gt;: Blocks the calling thread until every queued utterance has been synthesized and played to completion. Named &lt;code&gt;waitUntilDone()&lt;/code&gt; on Android.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;a id=&quot;texttospeech-is-talking&quot;&gt;&lt;/a&gt;&lt;code&gt;is_talking()&lt;/code&gt;: Returns &lt;code&gt;True&lt;/code&gt; if utterances are still queued, being synthesized, or currently playing. Named &lt;code&gt;isTalking()&lt;/code&gt; on Swift and Android.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;a id=&quot;texttospeech-close&quot;&gt;&lt;/a&gt;&lt;code&gt;close()&lt;/code&gt;: Stops any in-progress playback, discards pending utterances, and releases the native synthesizer handle. Called automatically when using a &lt;code&gt;with TextToSpeech(...) as tts:&lt;/code&gt; block or on garbage collection.&lt;/p&gt; &lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;a id=&quot;texttospeech-options&quot;&gt;&lt;/a&gt;&lt;strong&gt;Common &lt;code&gt;options&lt;/code&gt; keys (TTS):&lt;/strong&gt; These mirror &lt;code&gt;MoonshineTTSOptions&lt;/code&gt; in the C++ layer. Values are strings in the underlying API; the Python binding accepts bools and numbers where noted.&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;code&gt;tts_root&lt;/code&gt;, &lt;code&gt;path_root&lt;/code&gt;, &lt;code&gt;model_root&lt;/code&gt;: Aliases for the asset root directory when you need to override layout discovery (same role as &lt;code&gt;g2p_root&lt;/code&gt; in the native parser).&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;voice&lt;/code&gt;: Default voice id if not passed to the constructor (constructor argument wins when both are set in typical use).&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;speed&lt;/code&gt;: Speaking rate multiplier (floating-point).&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;kokoro_dir&lt;/code&gt;, &lt;code&gt;kokoro_model&lt;/code&gt; / &lt;code&gt;kokoro_model_onnx&lt;/code&gt;, &lt;code&gt;kokoro_config&lt;/code&gt; / &lt;code&gt;kokoro_config_json&lt;/code&gt;: Override paths for Kokoro ONNX and config within the asset tree.&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;piper_onnx&lt;/code&gt; / &lt;code&gt;piper_model_onnx&lt;/code&gt;, &lt;code&gt;piper_onnx_json&lt;/code&gt;, &lt;code&gt;piper_voices_dir&lt;/code&gt; / &lt;code&gt;voices_dir&lt;/code&gt;, &lt;code&gt;piper_voices_json_dir&lt;/code&gt; / &lt;code&gt;voices_json_dir&lt;/code&gt;: Override paths for Piper model, JSON sidecar, and voice directories.&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;normalize_audio&lt;/code&gt; / &lt;code&gt;piper_normalize_audio&lt;/code&gt; (legacy alias), &lt;code&gt;output_volume&lt;/code&gt; / &lt;code&gt;piper_output_volume&lt;/code&gt; (legacy alias): Shared post-synthesis effects applied to both Kokoro and Piper output (peak-normalize, apply gain, then clip to &lt;code&gt;[-1, 1]&lt;/code&gt;).&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;piper_noise_scale&lt;/code&gt; / &lt;code&gt;piper_noise_scale_override&lt;/code&gt;, &lt;code&gt;piper_noise_w&lt;/code&gt; / &lt;code&gt;piper_noise_w_override&lt;/code&gt;: Piper inference tuning (see native option parsing for types).&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;zipvoice_clone_sample_rate&lt;/code&gt; / &lt;code&gt;clone_sample_rate&lt;/code&gt;, &lt;code&gt;zipvoice_clone_transcript&lt;/code&gt; / &lt;code&gt;clone_transcript&lt;/code&gt;: Sample rate and transcript for a caller-supplied ZipVoice reference clip (memory key &lt;code&gt;zipvoice/clone_audio&lt;/code&gt;); the Python &lt;code&gt;clone&lt;/code&gt; / &lt;code&gt;clone_transcript&lt;/code&gt; constructor arguments set these for you.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;Additional keys are forwarded to the G2P option parser (language-specific ONNX overrides, feature flags, and so on).&lt;/p&gt; 
&lt;h4&gt;GraphemeToPhonemizer&lt;/h4&gt; 
&lt;p&gt;IPA string generation without speech synthesis. Dependencies are the same CDN lexicon and ONNX bundles as TTS, but restricted to what &lt;code&gt;moonshine_get_g2p_dependencies&lt;/code&gt; reports for the language. When &lt;code&gt;download&lt;/code&gt; is true, assets are placed under the package cache or &lt;code&gt;asset_root&lt;/code&gt;; when false, &lt;code&gt;asset_root&lt;/code&gt; must already contain those files.&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt; &lt;p&gt;&lt;a id=&quot;graphemetophonemizer-init&quot;&gt;&lt;/a&gt;&lt;code&gt;__init__()&lt;/code&gt;: Creates a native G2P handle.&lt;/p&gt; 
  &lt;ul&gt; 
   &lt;li&gt;&lt;code&gt;language&lt;/code&gt;: Locale tag (for example &lt;code&gt;en_us&lt;/code&gt;, &lt;code&gt;ja&lt;/code&gt;). Normalized the same way as for TTS.&lt;/li&gt; 
   &lt;li&gt;&lt;code&gt;options&lt;/code&gt;: Optional mapping passed to the native layer (G2P keys only; the binding sets &lt;code&gt;g2p_root&lt;/code&gt; automatically).&lt;/li&gt; 
   &lt;li&gt;&lt;code&gt;asset_root&lt;/code&gt;: Optional cache or pre-populated directory, same semantics as for &lt;code&gt;TextToSpeech&lt;/code&gt;.&lt;/li&gt; 
   &lt;li&gt;&lt;code&gt;download&lt;/code&gt;: When true (default), missing G2P assets are downloaded. When false, &lt;code&gt;asset_root&lt;/code&gt; is required.&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;code&gt;language&lt;/code&gt;: Read-only normalized tag.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;code&gt;asset_root&lt;/code&gt;: Read-only &lt;code&gt;pathlib.Path&lt;/code&gt; to the directory used as &lt;code&gt;g2p_root&lt;/code&gt;.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;a id=&quot;graphemetophonemizer-to-ipa&quot;&gt;&lt;/a&gt;&lt;code&gt;to_ipa()&lt;/code&gt;: Returns a single IPA string for the input text.&lt;/p&gt; 
  &lt;ul&gt; 
   &lt;li&gt;&lt;code&gt;text&lt;/code&gt;: UTF-8 surface string.&lt;/li&gt; 
   &lt;li&gt;&lt;code&gt;options&lt;/code&gt;: Optional per-call native G2P options.&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;a id=&quot;graphemetophonemizer-close&quot;&gt;&lt;/a&gt;&lt;code&gt;close()&lt;/code&gt;: Frees the native handle; also invoked by context manager exit and &lt;code&gt;__del__&lt;/code&gt;.&lt;/p&gt; &lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Support&lt;/h2&gt; 
&lt;p&gt;Our primary support channel is &lt;a href=&quot;https://discord.gg/27qp9zSRXF&quot;&gt;the Moonshine Discord&lt;/a&gt;. We make our best efforts to respond to questions there, and other channels like &lt;a href=&quot;https://github.com/moonshine-ai/moonshine/issues&quot;&gt;GitHub issues&lt;/a&gt;. We also offer paid support for commercial customers who need porting or acceleration on other platforms, model customization, more languages, or any other services, please &lt;a href=&quot;mailto:contact@moonshine.ai&quot;&gt;get in touch&lt;/a&gt;.&lt;/p&gt; 
&lt;h2&gt;Roadmap&lt;/h2&gt; 
&lt;p&gt;This library is in active development, and we aim to implement:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Binary size reduction for mobile deployment.&lt;/li&gt; 
 &lt;li&gt;More languages.&lt;/li&gt; 
 &lt;li&gt;More streaming models.&lt;/li&gt; 
 &lt;li&gt;Improved speaker identification.&lt;/li&gt; 
 &lt;li&gt;Lightweight domain customization.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Acknowledgements&lt;/h2&gt; 
&lt;p&gt;We&#39;re grateful to:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Lambda and Stephen Balaban for supporting our model training through &lt;a href=&quot;https://lambda.ai/research&quot;&gt;their foundational model grants&lt;/a&gt;.&lt;/li&gt; 
 &lt;li&gt;The ONNX Runtime community for building &lt;a href=&quot;https://github.com/microsoft/onnxruntime&quot;&gt;a fast, cross-platform inference engine&lt;/a&gt;.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/snakers4&quot;&gt;Alexander Veysov&lt;/a&gt; for the great &lt;a href=&quot;https://github.com/snakers4/silero-vad&quot;&gt;Silero Voice Activity Detector&lt;/a&gt;.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/onqtam&quot;&gt;Viktor Kirilov&lt;/a&gt; for &lt;a href=&quot;https://github.com/doctest/doctest&quot;&gt;his fantastic DocTest C++ testing framework&lt;/a&gt;.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/nemtrif&quot;&gt;Nemanja Trifunovic&lt;/a&gt; for &lt;a href=&quot;https://github.com/nemtrif/utfcpp&quot;&gt;his very helpful UTF8 CPP library&lt;/a&gt;.&lt;/li&gt; 
 &lt;li&gt;The &lt;a href=&quot;https://www.pyannote.ai/&quot;&gt;Pyannote team&lt;/a&gt; for making available their speaker embedding model.&lt;/li&gt; 
 &lt;li&gt;The &lt;a href=&quot;https://github.com/espeak-ng/espeak-ng/&quot;&gt;espeak-ng community&lt;/a&gt;, for all of their inspiring work tackling the endless complexities of translating the written word into speech.&lt;/li&gt; 
 &lt;li&gt;The &lt;a href=&quot;https://github.com/cmusphinx/cmudict&quot;&gt;CMU Pronouncing Dictionary&lt;/a&gt; and &lt;a href=&quot;https://github.com/espeak-ng/espeak-ng&quot;&gt;eSpeak NG&lt;/a&gt; for English G2P lexicon and pronunciation filtering (&lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/core/moonshine-tts/data/en_us&quot;&gt;&lt;code&gt;core/moonshine-tts/data/en_us&lt;/code&gt;&lt;/a&gt;).&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/open-dict-data/ipa-dict&quot;&gt;open-dict-data/ipa-dict&lt;/a&gt; for multilingual IPA lexicon data used across many locales (&lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/core/moonshine-tts/data&quot;&gt;&lt;code&gt;core/moonshine-tts/data&lt;/code&gt;&lt;/a&gt;).&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/CUNY-CL/wikipron&quot;&gt;WikiPron&lt;/a&gt; (CUNY-CL) for Italian, Russian, and European Portuguese pronunciations.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://huggingface.co/KoichiYasuoka&quot;&gt;Koichi Yasuoka&lt;/a&gt; for the Hugging Face models &lt;a href=&quot;https://huggingface.co/KoichiYasuoka/chinese-roberta-base-upos&quot;&gt;chinese-roberta-base-upos&lt;/a&gt;, &lt;a href=&quot;https://huggingface.co/KoichiYasuoka/roberta-small-japanese-char-luw-upos&quot;&gt;roberta-small-japanese-char-luw-upos&lt;/a&gt;, and &lt;a href=&quot;https://huggingface.co/KoichiYasuoka/roberta-base-korean-morph-upos&quot;&gt;roberta-base-korean-morph-upos&lt;/a&gt;.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://huggingface.co/hexgrad/Kokoro-82M&quot;&gt;hexgrad/Kokoro-82M&lt;/a&gt; and &lt;a href=&quot;https://huggingface.co/onnx-community/Kokoro-82M-ONNX&quot;&gt;onnx-community/Kokoro-82M-ONNX&lt;/a&gt; for Kokoro TTS weights and ONNX (&lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/core/moonshine-tts/data/kokoro&quot;&gt;&lt;code&gt;core/moonshine-tts/data/kokoro&lt;/code&gt;&lt;/a&gt;).&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://huggingface.co/rhasspy/piper-voices&quot;&gt;PiperTTS&lt;/a&gt; for their excellent lightweight TTS models.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/myshell-ai/MeloTTS&quot;&gt;MeloTTS&lt;/a&gt; from &lt;a href=&quot;https://myshell.ai&quot;&gt;MyShell&lt;/a&gt; as reference for Korean Piper voice training (&lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/core/moonshine-tts/data/ko&quot;&gt;&lt;code&gt;core/moonshine-tts/data/ko&lt;/code&gt;&lt;/a&gt;).&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://en.wiktionary.org/wiki/Wiktionary:Copyrights&quot;&gt;English Wiktionary&lt;/a&gt; and &lt;a href=&quot;https://github.com/hermitdave/FrequencyWords&quot;&gt;hermitdave/FrequencyWords&lt;/a&gt; for Hindi lexicon material (&lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/core/moonshine-tts/data/hi&quot;&gt;&lt;code&gt;core/moonshine-tts/data/hi&lt;/code&gt;&lt;/a&gt;).&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/hbenbel/French-Dictionary&quot;&gt;hbenbel/French-Dictionary&lt;/a&gt; for related French liaison lexicon work (&lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/core/moonshine-tts/data/fr&quot;&gt;&lt;code&gt;core/moonshine-tts/data/fr&lt;/code&gt;&lt;/a&gt;).&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://huggingface.co/AbderrahmanSkiredj1/arabertv02_tashkeel_fadel&quot;&gt;AbderrahmanSkiredj1/arabertv02_tashkeel_fadel&lt;/a&gt; for Arabic diacritization and &lt;a href=&quot;https://camel-tools.readthedocs.io/&quot;&gt;CAMeL Tools&lt;/a&gt; for optional Arabic MSA lexicon builds (&lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/core/moonshine-tts/data/ar_msa&quot;&gt;&lt;code&gt;core/moonshine-tts/data/ar_msa&lt;/code&gt;&lt;/a&gt;).&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/k2-fsa/ZipVoice&quot;&gt;ZipVoice&lt;/a&gt; for their high-quality text to speech and voice cloning.&lt;/li&gt; 
 &lt;li&gt;The team behind the &lt;a href=&quot;https://datashare.ed.ac.uk/collections/8f1b06bc-ec26-4b8d-ac4e-acb14537d811/search&quot;&gt;VCTK dataset&lt;/a&gt; at the University of Edinburgh for generously providing a rich source of voice styles.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;License&lt;/h2&gt; 
&lt;p&gt;This code, apart from the source in &lt;code&gt;core/third-party&lt;/code&gt;, is licensed under the MIT License, see LICENSE in this repository.&lt;/p&gt; 
&lt;p&gt;The English-language models are also released under the MIT License. Models for other languages are released under the &lt;a href=&quot;https://moonshine.ai&quot;&gt;Moonshine Community License&lt;/a&gt;, which is a non-commercial license.&lt;/p&gt; 
&lt;p&gt;The code in &lt;code&gt;core/third-party&lt;/code&gt; is licensed according to the terms of the open source projects it originates from, with details in a LICENSE file in each subfolder.&lt;/p&gt; 
&lt;p&gt;The Eigen library is compiled with only the MPL-2.0 subset, all files with other licenses are removed.&lt;/p&gt; 
&lt;p&gt;The text to speech and grapheme to phoneme models and data files are licensed under the terms listed in their readmes and their source repositories. Per-language details and regeneration notes live under &lt;a href=&quot;https://raw.githubusercontent.com/moonshine-ai/moonshine/main/core/moonshine-tts/data/README.md&quot;&gt;&lt;code&gt;core/moonshine-tts/data/&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>tensorflow/tensorflow</title>
      <link>https://github.com/tensorflow/tensorflow</link>
      <description>&lt;p&gt;An Open Source Machine Learning Framework for Everyone&lt;/p&gt;&lt;hr&gt;&lt;div align=&quot;center&quot;&gt; 
 &lt;img src=&quot;https://www.tensorflow.org/images/tf_logo_horizontal.png&quot; /&gt; 
&lt;/div&gt; 
&lt;p&gt;&lt;a href=&quot;https://badge.fury.io/py/tensorflow&quot;&gt;&lt;img src=&quot;https://img.shields.io/pypi/pyversions/tensorflow.svg?sanitize=true&quot; alt=&quot;Python&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://badge.fury.io/py/tensorflow&quot;&gt;&lt;img src=&quot;https://badge.fury.io/py/tensorflow.svg?sanitize=true&quot; alt=&quot;PyPI&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://doi.org/10.5281/zenodo.4724125&quot;&gt;&lt;img src=&quot;https://zenodo.org/badge/DOI/10.5281/zenodo.4724125.svg?sanitize=true&quot; alt=&quot;DOI&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://bestpractices.coreinfrastructure.org/projects/1486&quot;&gt;&lt;img src=&quot;https://bestpractices.coreinfrastructure.org/projects/1486/badge&quot; alt=&quot;CII Best Practices&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://securityscorecards.dev/viewer/?uri=github.com/tensorflow/tensorflow&quot;&gt;&lt;img src=&quot;https://api.securityscorecards.dev/projects/github.com/tensorflow/tensorflow/badge&quot; alt=&quot;OpenSSF Scorecard&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://bugs.chromium.org/p/oss-fuzz/issues/list?sort=-opened&amp;amp;can=1&amp;amp;q=proj:tensorflow&quot;&gt;&lt;img src=&quot;https://oss-fuzz-build-logs.storage.googleapis.com/badges/tensorflow.svg?sanitize=true&quot; alt=&quot;Fuzzing Status&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://bugs.chromium.org/p/oss-fuzz/issues/list?sort=-opened&amp;amp;can=1&amp;amp;q=proj:tensorflow-py&quot;&gt;&lt;img src=&quot;https://oss-fuzz-build-logs.storage.googleapis.com/badges/tensorflow-py.svg?sanitize=true&quot; alt=&quot;Fuzzing Status&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://ossrank.com/p/44&quot;&gt;&lt;img src=&quot;https://shields.io/endpoint?url=https://ossrank.com/shield/44&quot; alt=&quot;OSSRank&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://raw.githubusercontent.com/tensorflow/tensorflow/master/CODE_OF_CONDUCT.md&quot;&gt;&lt;img src=&quot;https://img.shields.io/badge/Contributor%20Covenant-v1.4%20adopted-ff69b4.svg?sanitize=true&quot; alt=&quot;Contributor Covenant&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;&lt;strong&gt;&lt;code&gt;Documentation&lt;/code&gt;&lt;/strong&gt;&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://www.tensorflow.org/api_docs/&quot;&gt;&lt;img src=&quot;https://img.shields.io/badge/api-reference-blue.svg?sanitize=true&quot; alt=&quot;Documentation&quot; /&gt;&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;p&gt;&lt;a href=&quot;https://www.tensorflow.org/&quot;&gt;TensorFlow&lt;/a&gt; is an end-to-end open source platform for machine learning. It has a comprehensive, flexible ecosystem of &lt;a href=&quot;https://www.tensorflow.org/resources/tools&quot;&gt;tools&lt;/a&gt;, &lt;a href=&quot;https://www.tensorflow.org/resources/libraries-extensions&quot;&gt;libraries&lt;/a&gt;, and &lt;a href=&quot;https://www.tensorflow.org/community&quot;&gt;community&lt;/a&gt; resources that lets researchers push the state-of-the-art in ML and developers easily build and deploy ML-powered applications.&lt;/p&gt; 
&lt;p&gt;TensorFlow was originally developed by researchers and engineers working within the Machine Intelligence team at Google Brain to conduct research in machine learning and neural networks. However, the framework is versatile enough to be used in other areas as well.&lt;/p&gt; 
&lt;p&gt;TensorFlow provides stable &lt;a href=&quot;https://www.tensorflow.org/api_docs/python&quot;&gt;Python&lt;/a&gt; and &lt;a href=&quot;https://www.tensorflow.org/api_docs/cc&quot;&gt;C++&lt;/a&gt; APIs, as well as a non-guaranteed backward compatible API for &lt;a href=&quot;https://www.tensorflow.org/api_docs&quot;&gt;other languages&lt;/a&gt;.&lt;/p&gt; 
&lt;p&gt;Keep up-to-date with release announcements and security updates by subscribing to &lt;a href=&quot;https://groups.google.com/a/tensorflow.org/forum/#!forum/announce&quot;&gt;announce@tensorflow.org&lt;/a&gt;. See all the &lt;a href=&quot;https://www.tensorflow.org/community/forums&quot;&gt;mailing lists&lt;/a&gt;.&lt;/p&gt; 
&lt;h2&gt;Install&lt;/h2&gt; 
&lt;p&gt;See the &lt;a href=&quot;https://www.tensorflow.org/install&quot;&gt;TensorFlow install guide&lt;/a&gt; for the &lt;a href=&quot;https://www.tensorflow.org/install/pip&quot;&gt;pip package&lt;/a&gt;, to &lt;a href=&quot;https://www.tensorflow.org/install/gpu&quot;&gt;enable GPU support&lt;/a&gt;, use a &lt;a href=&quot;https://www.tensorflow.org/install/docker&quot;&gt;Docker container&lt;/a&gt;, and &lt;a href=&quot;https://www.tensorflow.org/install/source&quot;&gt;build from source&lt;/a&gt;.&lt;/p&gt; 
&lt;p&gt;To install the current release, which includes support for &lt;a href=&quot;https://www.tensorflow.org/install/gpu&quot;&gt;CUDA-enabled GPU cards&lt;/a&gt; &lt;em&gt;(Ubuntu and Windows)&lt;/em&gt;:&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt; pip install tensorflow
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Other devices (DirectX and MacOS-metal) are supported using &lt;a href=&quot;https://www.tensorflow.org/install/gpu_plugins#available_devices&quot;&gt;Device Plugins&lt;/a&gt;.&lt;/p&gt; 
&lt;p&gt;A smaller CPU-only TensorFlow package is also available:&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt; pip install tensorflow-cpu
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;To update TensorFlow to the latest version, add the &lt;code&gt;--upgrade&lt;/code&gt; flag to the commands above.&lt;/p&gt; 
&lt;p&gt;&lt;em&gt;Nightly binaries are available for testing using the &lt;a href=&quot;https://pypi.python.org/pypi/tf-nightly&quot;&gt;tf-nightly&lt;/a&gt; and &lt;a href=&quot;https://pypi.python.org/pypi/tf-nightly-cpu&quot;&gt;tf-nightly-cpu&lt;/a&gt; packages on PyPI.&lt;/em&gt;&lt;/p&gt; 
&lt;h4&gt;&lt;em&gt;Try your first TensorFlow program&lt;/em&gt;&lt;/h4&gt; 
&lt;pre&gt;&lt;code class=&quot;language-shell&quot;&gt;$ python
&lt;/code&gt;&lt;/pre&gt; 
&lt;pre&gt;&lt;code class=&quot;language-python&quot;&gt;&amp;gt;&amp;gt;&amp;gt; import tensorflow as tf
&amp;gt;&amp;gt;&amp;gt; tf.add(1, 2).numpy()
3
&amp;gt;&amp;gt;&amp;gt; hello = tf.constant(&#39;Hello, TensorFlow!&#39;)
&amp;gt;&amp;gt;&amp;gt; hello.numpy()
b&#39;Hello, TensorFlow!&#39;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;For more examples, see the &lt;a href=&quot;https://www.tensorflow.org/tutorials/&quot;&gt;TensorFlow Tutorials&lt;/a&gt;.&lt;/p&gt; 
&lt;h2&gt;Contribution guidelines&lt;/h2&gt; 
&lt;p&gt;&lt;strong&gt;If you want to contribute to TensorFlow, be sure to review the &lt;a href=&quot;https://raw.githubusercontent.com/tensorflow/tensorflow/master/CONTRIBUTING.md&quot;&gt;Contribution Guidelines&lt;/a&gt;. This project adheres to TensorFlow&#39;s &lt;a href=&quot;https://raw.githubusercontent.com/tensorflow/tensorflow/master/CODE_OF_CONDUCT.md&quot;&gt;Code of Conduct&lt;/a&gt;. By participating, you are expected to uphold this code.&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;We use &lt;a href=&quot;https://github.com/tensorflow/tensorflow/issues&quot;&gt;GitHub Issues&lt;/a&gt; for tracking requests and bugs, please see &lt;a href=&quot;https://discuss.tensorflow.org/&quot;&gt;TensorFlow Forum&lt;/a&gt; for general questions and discussion, and please direct specific questions to &lt;a href=&quot;https://stackoverflow.com/questions/tagged/tensorflow&quot;&gt;Stack Overflow&lt;/a&gt;.&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;The TensorFlow project strives to abide by generally accepted best practices in open-source software development.&lt;/p&gt; 
&lt;h2&gt;Patching guidelines&lt;/h2&gt; 
&lt;p&gt;Follow these steps to patch a specific version of TensorFlow, for example, to apply fixes to bugs or security vulnerabilities:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Clone the TensorFlow repository and switch to the appropriate branch for your desired version—for example, &lt;code&gt;r2.8&lt;/code&gt; for version 2.8.&lt;/li&gt; 
 &lt;li&gt;Apply the desired changes (i.e., cherry-pick them) and resolve any code conflicts.&lt;/li&gt; 
 &lt;li&gt;Run TensorFlow tests and ensure they pass.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.tensorflow.org/install/source&quot;&gt;Build&lt;/a&gt; the TensorFlow pip package from source.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Continuous build status&lt;/h2&gt; 
&lt;p&gt;You can find more community-supported platforms and configurations in the &lt;a href=&quot;https://github.com/tensorflow/build#community-supported-tensorflow-builds&quot;&gt;TensorFlow SIG Build Community Builds Table&lt;/a&gt;.&lt;/p&gt; 
&lt;h3&gt;Official Builds&lt;/h3&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Build Type&lt;/th&gt; 
   &lt;th&gt;Status&lt;/th&gt; 
   &lt;th&gt;Artifacts&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;Linux CPU&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://storage.googleapis.com/tensorflow-kokoro-build-badges/ubuntu-cc.html&quot;&gt;&lt;img src=&quot;https://storage.googleapis.com/tensorflow-kokoro-build-badges/ubuntu-cc.svg?sanitize=true&quot; alt=&quot;Status&quot; /&gt;&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/tf-nightly/&quot;&gt;PyPI&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;Linux GPU&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://storage.googleapis.com/tensorflow-kokoro-build-badges/ubuntu-gpu-py3.html&quot;&gt;&lt;img src=&quot;https://storage.googleapis.com/tensorflow-kokoro-build-badges/ubuntu-gpu-py3.svg?sanitize=true&quot; alt=&quot;Status&quot; /&gt;&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/tf-nightly-gpu/&quot;&gt;PyPI&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;Linux XLA&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://storage.googleapis.com/tensorflow-kokoro-build-badges/ubuntu-xla.html&quot;&gt;&lt;img src=&quot;https://storage.googleapis.com/tensorflow-kokoro-build-badges/ubuntu-xla.svg?sanitize=true&quot; alt=&quot;Status&quot; /&gt;&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;TBA&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;macOS&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://storage.googleapis.com/tensorflow-kokoro-build-badges/macos-py2-cc.html&quot;&gt;&lt;img src=&quot;https://storage.googleapis.com/tensorflow-kokoro-build-badges/macos-py2-cc.svg?sanitize=true&quot; alt=&quot;Status&quot; /&gt;&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/tf-nightly/&quot;&gt;PyPI&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;Windows CPU&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://storage.googleapis.com/tensorflow-kokoro-build-badges/windows-cpu.html&quot;&gt;&lt;img src=&quot;https://storage.googleapis.com/tensorflow-kokoro-build-badges/windows-cpu.svg?sanitize=true&quot; alt=&quot;Status&quot; /&gt;&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/tf-nightly/&quot;&gt;PyPI&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;Windows GPU&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://storage.googleapis.com/tensorflow-kokoro-build-badges/windows-gpu.html&quot;&gt;&lt;img src=&quot;https://storage.googleapis.com/tensorflow-kokoro-build-badges/windows-gpu.svg?sanitize=true&quot; alt=&quot;Status&quot; /&gt;&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/tf-nightly-gpu/&quot;&gt;PyPI&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;Android&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://storage.googleapis.com/tensorflow-kokoro-build-badges/android.html&quot;&gt;&lt;img src=&quot;https://storage.googleapis.com/tensorflow-kokoro-build-badges/android.svg?sanitize=true&quot; alt=&quot;Status&quot; /&gt;&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://bintray.com/google/tensorflow/tensorflow/_latestVersion&quot;&gt;Download&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;Raspberry Pi 0 and 1&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://storage.googleapis.com/tensorflow-kokoro-build-badges/rpi01-py3.html&quot;&gt;&lt;img src=&quot;https://storage.googleapis.com/tensorflow-kokoro-build-badges/rpi01-py3.svg?sanitize=true&quot; alt=&quot;Status&quot; /&gt;&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://storage.googleapis.com/tensorflow-nightly/tensorflow-1.10.0-cp34-none-linux_armv6l.whl&quot;&gt;Py3&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;Raspberry Pi 2 and 3&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://storage.googleapis.com/tensorflow-kokoro-build-badges/rpi23-py3.html&quot;&gt;&lt;img src=&quot;https://storage.googleapis.com/tensorflow-kokoro-build-badges/rpi23-py3.svg?sanitize=true&quot; alt=&quot;Status&quot; /&gt;&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://storage.googleapis.com/tensorflow-nightly/tensorflow-1.10.0-cp34-none-linux_armv7l.whl&quot;&gt;Py3&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;h2&gt;Resources&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.tensorflow.org&quot;&gt;TensorFlow.org&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.tensorflow.org/tutorials/&quot;&gt;TensorFlow Tutorials&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/tensorflow/models/tree/master/official&quot;&gt;TensorFlow Official Models&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/tensorflow/examples&quot;&gt;TensorFlow Examples&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://codelabs.developers.google.com/?cat=TensorFlow&quot;&gt;TensorFlow Codelabs&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://blog.tensorflow.org&quot;&gt;TensorFlow Blog&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.tensorflow.org/resources/learn-ml&quot;&gt;Learn ML with TensorFlow&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://twitter.com/tensorflow&quot;&gt;TensorFlow Twitter&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.youtube.com/channel/UC0rqucBdTuFTjJiefW5t-IQ&quot;&gt;TensorFlow YouTube&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.tensorflow.org/model_optimization/guide/roadmap&quot;&gt;TensorFlow model optimization roadmap&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.tensorflow.org/about/bib&quot;&gt;TensorFlow White Papers&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/tensorflow/tensorboard&quot;&gt;TensorBoard Visualization Toolkit&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://cs.opensource.google/tensorflow/tensorflow&quot;&gt;TensorFlow Code Search&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;Learn more about the &lt;a href=&quot;https://www.tensorflow.org/community&quot;&gt;TensorFlow Community&lt;/a&gt; and how to &lt;a href=&quot;https://www.tensorflow.org/community/contribute&quot;&gt;Contribute&lt;/a&gt;.&lt;/p&gt; 
&lt;h2&gt;Courses&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.coursera.org/search?query=TensorFlow&quot;&gt;Coursera&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.udacity.com/courses/all?search=TensorFlow&quot;&gt;Udacity&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.edx.org/search?q=TensorFlow&quot;&gt;Edx&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;License&lt;/h2&gt; 
&lt;p&gt;&lt;a href=&quot;https://raw.githubusercontent.com/tensorflow/tensorflow/master/LICENSE&quot;&gt;Apache License 2.0&lt;/a&gt;&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>amnezia-vpn/amnezia-client</title>
      <link>https://github.com/amnezia-vpn/amnezia-client</link>
      <description>&lt;p&gt;Amnezia VPN Client (Desktop+Mobile)&lt;/p&gt;&lt;hr&gt;&lt;h1&gt;Amnezia VPN&lt;/h1&gt; 
&lt;h3&gt;&lt;em&gt;The best client for self-hosted VPN&lt;/em&gt;&lt;/h3&gt; 
&lt;p&gt;&lt;a href=&quot;https://github.com/amnezia-vpn/amnezia-client/actions/workflows/deploy.yml?query=branch:dev&quot;&gt;&lt;img src=&quot;https://github.com/amnezia-vpn/amnezia-client/actions/workflows/deploy.yml/badge.svg?branch=dev&quot; alt=&quot;Build Status&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://gitpod.io/#https://github.com/amnezia-vpn/amnezia-client&quot;&gt;&lt;img src=&quot;https://img.shields.io/badge/Gitpod-ready--to--code-blue?logo=gitpod&quot; alt=&quot;Gitpod ready-to-code&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;h3&gt;&lt;a href=&quot;%5Bhttps://github.com/amnezia-vpn/amnezia-client/blob/dev/README_RU.md%5D(https://github.com/amnezia-vpn/amnezia-client/tree/dev?tab=readme-ov-file#)&quot;&gt;English&lt;/a&gt; | &lt;a href=&quot;https://github.com/amnezia-vpn/amnezia-client/raw/dev/README_RU.md&quot;&gt;Русский&lt;/a&gt;&lt;/h3&gt; 
&lt;p&gt;&lt;a href=&quot;https://amnezia.org?utm_source=github&amp;amp;utm_campaign=amnezia_website-readme-en&quot;&gt;Amnezia&lt;/a&gt; is an open-source VPN client, with a key feature that enables you to deploy your own VPN server on your server.&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://amnezia.org&quot;&gt;&lt;img src=&quot;https://github.com/amnezia-vpn/amnezia-client/raw/dev/metadata/img-readme/uipic4.png&quot; alt=&quot;Image&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;h3&gt;&lt;a href=&quot;https://amnezia.org?utm_source=github&amp;amp;utm_campaign=amnezia_website-readme-en&quot;&gt;Website&lt;/a&gt; | &lt;a href=&quot;https://storage.googleapis.com/amnezia/amnezia.org?utm_source=github&amp;amp;utm_campaign=amnezia_website-readme-en-mirror&quot;&gt;Alt website link&lt;/a&gt; | &lt;a href=&quot;https://docs.amnezia.org&quot;&gt;Documentation&lt;/a&gt; | &lt;a href=&quot;https://docs.amnezia.org/troubleshooting&quot;&gt;Troubleshooting&lt;/a&gt;&lt;/h3&gt; 
&lt;div class=&quot;markdown-alert markdown-alert-tip&quot;&gt;
 &lt;p class=&quot;markdown-alert-title&quot;&gt;
  &lt;svg class=&quot;octicon octicon-light-bulb mr-2&quot; viewbox=&quot;0 0 16 16&quot; version=&quot;1.1&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot;&gt;
   &lt;path d=&quot;M8 1.5c-2.363 0-4 1.69-4 3.75 0 .984.424 1.625.984 2.304l.214.253c.223.264.47.556.673.848.284.411.537.896.621 1.49a.75.75 0 0 1-1.484.211c-.04-.282-.163-.547-.37-.847a8.456 8.456 0 0 0-.542-.68c-.084-.1-.173-.205-.268-.32C3.201 7.75 2.5 6.766 2.5 5.25 2.5 2.31 4.863 0 8 0s5.5 2.31 5.5 5.25c0 1.516-.701 2.5-1.328 3.259-.095.115-.184.22-.268.319-.207.245-.383.453-.541.681-.208.3-.33.565-.37.847a.751.751 0 0 1-1.485-.212c.084-.593.337-1.078.621-1.489.203-.292.45-.584.673-.848.075-.088.147-.173.213-.253.561-.679.985-1.32.985-2.304 0-2.06-1.637-3.75-4-3.75ZM5.75 12h4.5a.75.75 0 0 1 0 1.5h-4.5a.75.75 0 0 1 0-1.5ZM6 15.25a.75.75 0 0 1 .75-.75h2.5a.75.75 0 0 1 0 1.5h-2.5a.75.75 0 0 1-.75-.75Z&quot;&gt;&lt;/path&gt;
  &lt;/svg&gt;Tip&lt;/p&gt;
 &lt;p&gt;If the &lt;a href=&quot;https://amnezia.org?utm_source=github&amp;amp;utm_campaign=amnezia_website-readme-en&quot;&gt;Amnezia website&lt;/a&gt; is blocked in your region, you can use an &lt;a href=&quot;https://storage.googleapis.com/amnezia/amnezia.org?utm_source=github&amp;amp;utm_campaign=amnezia_website-readme-en-mirror&quot;&gt;Alternative website link&lt;/a&gt;.&lt;/p&gt; 
&lt;/div&gt; 
&lt;p&gt;&lt;a href=&quot;https://amnezia.org/en/downloads?utm_source=github&amp;amp;utm_campaign=amnezia_button-readme-en&quot;&gt;&lt;img src=&quot;https://github.com/amnezia-vpn/amnezia-client/raw/dev/metadata/img-readme/download-website.svg?sanitize=true&quot; width=&quot;150&quot; style=&quot;max-width: 100%; margin-right: 10px&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://storage.googleapis.com/amnezia/amnezia.org?m-path=/en/downloads&amp;amp;utm_source=github&amp;amp;utm_campaign=amnezia_button-readme-en-mirrow&quot;&gt;&lt;img src=&quot;https://github.com/amnezia-vpn/amnezia-client/raw/dev/metadata/img-readme/download-alt.svg?sanitize=true&quot; width=&quot;150&quot; style=&quot;max-width: 100%;&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://github.com/amnezia-vpn/amnezia-client/releases&quot;&gt;All releases&lt;/a&gt;&lt;/p&gt; 
&lt;br /&gt; 
&lt;p&gt;&lt;a href=&quot;https://www.testiny.io&quot;&gt;&lt;img src=&quot;https://github.com/amnezia-vpn/amnezia-client/raw/dev/metadata/img-readme/testiny.png&quot; height=&quot;28px&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;h2&gt;Features&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;Very easy to use - enter your IP address, SSH login, password and Amnezia will automatically install VPN docker containers to your server and connect to the VPN.&lt;/li&gt; 
 &lt;li&gt;Classic VPN-protocols: OpenVPN, WireGuard and IKEv2 protocols.&lt;/li&gt; 
 &lt;li&gt;Protocols with traffic Masking (Obfuscation): OpenVPN over &lt;a href=&quot;https://github.com/cbeuw/Cloak&quot;&gt;Cloak&lt;/a&gt; plugin, Shadowsocks (OpenVPN over Shadowsocks), &lt;a href=&quot;https://docs.amnezia.org/documentation/amnezia-wg/&quot;&gt;AmneziaWG&lt;/a&gt; and XRay.&lt;/li&gt; 
 &lt;li&gt;Split tunneling support - add any sites to the client to enable VPN only for them or add Apps (only for Android and Desktop).&lt;/li&gt; 
 &lt;li&gt;Windows, MacOS, Linux, Android, iOS releases.&lt;/li&gt; 
 &lt;li&gt;Support for AmneziaWG protocol configuration on &lt;a href=&quot;https://docs.keenetic.com/ua/air/kn-1611/en/6319-latest-development-release.html#UUID-186c4108-5afd-c10b-f38a-cdff6c17fab3_section-idm33192196168192-improved&quot;&gt;Keenetic beta firmware&lt;/a&gt;.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Links&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://amnezia.org/?utm_source=github&amp;amp;utm_campaign=amnezia_website-read&quot;&gt;https://amnezia.org&lt;/a&gt; - Project website | &lt;a href=&quot;https://storage.googleapis.com/amnezia/amnezia.org?utm_source=github&amp;amp;utm_campaign=amnezia_website-read&quot;&gt;Alternative link (mirror)&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://docs.amnezia.org/?utm_source=github&amp;amp;utm_campaign=amnezia_website-read&quot;&gt;https://docs.amnezia.org&lt;/a&gt; - Documentation | &lt;a href=&quot;https://storage.googleapis.com/amnezia/docs?utm_source=github&amp;amp;utm_campaign=amnezia_website-read&quot;&gt;Alternative link (mirror)&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.reddit.com/r/AmneziaVPN&quot;&gt;https://www.reddit.com/r/AmneziaVPN&lt;/a&gt; - Reddit&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://telegram.me/amnezia_vpn_en&quot;&gt;https://telegram.me/amnezia_vpn_en&lt;/a&gt; - Telegram support channel (English)&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://telegram.me/amnezia_vpn_ir&quot;&gt;https://telegram.me/amnezia_vpn_ir&lt;/a&gt; - Telegram support channel (Farsi)&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://telegram.me/amnezia_vpn_mm&quot;&gt;https://telegram.me/amnezia_vpn_mm&lt;/a&gt; - Telegram support channel (Myanmar)&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://telegram.me/amnezia_vpn&quot;&gt;https://telegram.me/amnezia_vpn&lt;/a&gt; - Telegram support channel (Russian)&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://storage.googleapis.com/amnezia/pay?utm_source=github&amp;amp;utm_campaign=ampay-read&quot;&gt;Get Premium for 6 or 12 months&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Tech&lt;/h2&gt; 
&lt;p&gt;AmneziaVPN uses several open-source projects to work:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.openssl.org/&quot;&gt;OpenSSL&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://openvpn.net/&quot;&gt;OpenVPN&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.qt.io/&quot;&gt;Qt&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://libssh.org&quot;&gt;LibSsh&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.wireguard.com/&quot;&gt;WireGuard&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://xtls.github.io/en/&quot;&gt;Xray-core&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://conan.io/&quot;&gt;Conan&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;and more...&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Help us with translations&lt;/h2&gt; 
&lt;p&gt;Download the most actual translation files.&lt;/p&gt; 
&lt;p&gt;Go to &lt;a href=&quot;https://github.com/amnezia-vpn/amnezia-client/actions?query=is%3Asuccess+branch%3Adev&quot;&gt;&quot;Actions&quot; tab&lt;/a&gt;, click on the first line. Then scroll down to the &quot;Artifacts&quot; section and download &quot;AmneziaVPN_translations&quot;.&lt;/p&gt; 
&lt;p&gt;Unzip this file. Each *.ts file contains strings for one corresponding language.&lt;/p&gt; 
&lt;p&gt;Translate or correct some strings in one or multiple *.ts files and commit them back to this repository into the &lt;code&gt;client/translations&lt;/code&gt; folder. You can do it via a web-interface or any other method you&#39;re familiar with.&lt;/p&gt; 
&lt;h2&gt;Checking out the source code&lt;/h2&gt; 
&lt;p&gt;Make sure to pull all submodules after checking out the repo.&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;git submodule update --init --recursive
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2&gt;Hacking guide&lt;/h2&gt; 
&lt;p&gt;Want to contribute? Welcome!&lt;/p&gt; 
&lt;h3&gt;Build requirements&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://cmake.org/download/&quot;&gt;&lt;code&gt;CMake&lt;/code&gt;&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;Compiler and underlying build system, depending on the target: 
  &lt;ul&gt; 
   &lt;li&gt;[Linux] Any of &lt;code&gt;make&lt;/code&gt; and &lt;code&gt;gcc&lt;/code&gt;&lt;/li&gt; 
   &lt;li&gt;[Apple] &lt;a href=&quot;https://developer.apple.com/xcode/&quot;&gt;&lt;code&gt;Xcode&lt;/code&gt;&lt;/a&gt; or &lt;a href=&quot;https://developer.apple.com/xcode/&quot;&gt;&lt;code&gt;Xcode command line tools&lt;/code&gt;&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;[Windows] &lt;a href=&quot;https://aka.ms/vs/17/release/vs_community.exe&quot;&gt;&lt;code&gt;Visual Studio 2022&lt;/code&gt;&lt;/a&gt; or &lt;a href=&quot;https://aka.ms/vs/17/release/vs_buildtools.exe&quot;&gt;&lt;code&gt;VS 2022 Build Tools&lt;/code&gt;&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;[Android] &lt;a href=&quot;https://raw.githubusercontent.com/amnezia-vpn/amnezia-client/dev/#installing-android-sdk&quot;&gt;&lt;code&gt;Android SDK&lt;/code&gt;&lt;/a&gt; and &lt;a href=&quot;https://ninja-build.org/&quot;&gt;&lt;code&gt;Ninja&lt;/code&gt;&lt;/a&gt;&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.qt.io/download-open-source&quot;&gt;&lt;code&gt;Qt 6.10+&lt;/code&gt;&lt;/a&gt; with the following modules: 
  &lt;ul&gt; 
   &lt;li&gt;Core module for targeting platform (Desktop/Android/iOS)&lt;/li&gt; 
   &lt;li&gt;Qt 5 Compatibility module&lt;/li&gt; 
   &lt;li&gt;Qt Remote Objects&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://conan.io/downloads&quot;&gt;&lt;code&gt;Conan&lt;/code&gt;&lt;/a&gt; package manager 
  &lt;ul&gt; 
   &lt;li&gt;On MacOS is enough just to use &lt;code&gt;homebrew&lt;/code&gt; or install it in &lt;code&gt;.venv&lt;/code&gt; in project root&lt;/li&gt; 
   &lt;li&gt;Other systems must have it in &lt;code&gt;PATH&lt;/code&gt;&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;(Optional) Installer dependencies: 
  &lt;ul&gt; 
   &lt;li&gt;[Windows/Linux] &lt;a href=&quot;https://www.qt.io/download-open-source&quot;&gt;&lt;code&gt;Qt Installer Framework&lt;/code&gt;&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;[Windows] &lt;a href=&quot;https://github.com/wixtoolset/wix/releases&quot;&gt;&lt;code&gt;WIX toolset&lt;/code&gt;&lt;/a&gt;&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Building the project using scripts&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;Run scripts located in &lt;code&gt;deploy&lt;/code&gt; directory&lt;/li&gt; 
 &lt;li&gt;Basically, if dependencies are located in default installation paths, the scripts will find them automatically.&lt;/li&gt; 
 &lt;li&gt;If they differ, specify them using the following variables: 
  &lt;ul&gt; 
   &lt;li&gt;&lt;code&gt;QT_INSTALL_DIR&lt;/code&gt; - Qt root installation folder&lt;/li&gt; 
   &lt;li&gt;&lt;code&gt;QT_ROOT_PATH&lt;/code&gt; - Qt framework root directory&lt;/li&gt; 
   &lt;li&gt;&lt;code&gt;QIF_ROOT_PATH&lt;/code&gt; - Qt Installer Framework root path&lt;/li&gt; 
   &lt;li&gt;&lt;code&gt;ANDROID_HOME&lt;/code&gt; - Path to Android SDK root folder&lt;/li&gt; 
   &lt;li&gt;and others. Check scripts for more&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;Unix-like:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# Build executables for the host platform
deploy/build.sh

# Or just
deploy/build.sh

# Build executables and installers for the host platform
deploy/build.sh --installer all

# Build Android APK and AAB
deploy/build.sh -t android --aab

# Call for help
deploy/build.sh -h
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Windows:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-batch&quot;&gt;:: Build executables for Windows
deploy/build.bat

:: Build executables with IFW installer for Windows
deploy/build.bat --installer ifw

:: Build executables with IFW and WIX installer for Windows
deploy/build.bat --installer ifw --installer wix

:: Or just
deploy/build.bat --installer all
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;Developing the project in IDEs&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt; &lt;p&gt;Basically, you can use any IDE that handles CMake and Qt kits properly to run configure and build steps, and to navigate through the code nicely. For example:&lt;/p&gt; 
  &lt;ul&gt; 
   &lt;li&gt;&lt;code&gt;Qt Creator&lt;/code&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;code&gt;Visual Studio Code&lt;/code&gt; with &lt;code&gt;Qt Extension Pack&lt;/code&gt;&lt;/li&gt; 
   &lt;li&gt;and so on&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;To use &lt;code&gt;Xcode&lt;/code&gt;, you have to configure project first by using &lt;code&gt;cmake&lt;/code&gt;. The easiest way to do it is to use &lt;code&gt;Qt Creator&lt;/code&gt; for configuration. Then open &lt;code&gt;AmneziaVPN.xcodeproj&lt;/code&gt; file from the build folder by using &lt;code&gt;Xcode&lt;/code&gt;. Note that none of the files changed are saved - the files actually getting changed in build directory. Copy them manually if necessary&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;code&gt;Android studio&lt;/code&gt; could be used in the same way - just configure the project by using &lt;code&gt;cmake&lt;/code&gt; manually or by using &lt;code&gt;Qt Creator&lt;/code&gt;. Open &lt;code&gt;&amp;lt;build-dir&amp;gt;/client/android-build&lt;/code&gt; in &lt;code&gt;Android studio&lt;/code&gt; then. Do not forget to copy the changes - everything you do is saved under the build directory actually.&lt;/p&gt; &lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Installing Android SDK&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;Android SDK could be installed using the following methods: 
  &lt;ul&gt; 
   &lt;li&gt;Using &lt;code&gt;Qt Creator&lt;/code&gt;. Use &lt;code&gt;Preferences&lt;/code&gt;-&amp;gt;&lt;code&gt;SDKs&lt;/code&gt;&lt;/li&gt; 
   &lt;li&gt;Using &lt;code&gt;Android studio&lt;/code&gt;. By default it installs necessary &lt;code&gt;SDKs&lt;/code&gt; automatically during the installation&lt;/li&gt; 
   &lt;li&gt;Manually by using &lt;code&gt;sdk-manager&lt;/code&gt;. Check &lt;a href=&quot;https://developer.android.com/tools&quot;&gt;this&lt;/a&gt; page for details&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;License&lt;/h2&gt; 
&lt;p&gt;This project is licensed under the GNU General Public License v3.0 (see LICENSE) and also includes third-party components distributed under their own terms (see THIRD_PARTY_LICENSES.md).&lt;/p&gt; 
&lt;h2&gt;Donate&lt;/h2&gt; 
&lt;p&gt;Patreon: &lt;a href=&quot;https://www.patreon.com/amneziavpn&quot;&gt;https://www.patreon.com/amneziavpn&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;Bitcoin: bc1qmhtgcf9637rl3kqyy22r2a8wa8laka4t9rx2mf &lt;br /&gt; USDT BEP20: 0x6abD576765a826f87D1D95183438f9408C901bE4 &lt;br /&gt; USDT TRC20: TELAitazF1MZGmiNjTcnxDjEiH5oe7LC9d &lt;br /&gt; XMR: 48spms39jt1L2L5vyw2RQW6CXD6odUd4jFu19GZcDyKKQV9U88wsJVjSbL4CfRys37jVMdoaWVPSvezCQPhHXUW5UKLqUp3 &lt;br /&gt; TON: UQDpU1CyKRmg7L8mNScKk9FRc2SlESuI7N-Hby4nX-CcVmns&lt;/p&gt; 
&lt;h2&gt;Acknowledgments&lt;/h2&gt; 
&lt;p&gt;This project is tested with BrowserStack. We express our gratitude to &lt;a href=&quot;https://www.browserstack.com&quot;&gt;BrowserStack&lt;/a&gt; for supporting our project.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>protocolbuffers/protobuf</title>
      <link>https://github.com/protocolbuffers/protobuf</link>
      <description>&lt;p&gt;Protocol Buffers - Google&#39;s data interchange format&lt;/p&gt;&lt;hr&gt;&lt;h1&gt;Protocol Buffers - Google&#39;s data interchange format&lt;/h1&gt; 
&lt;p&gt;&lt;a href=&quot;https://securityscorecards.dev/viewer/?uri=github.com/protocolbuffers/protobuf&quot;&gt;&lt;img src=&quot;https://api.securityscorecards.dev/projects/github.com/protocolbuffers/protobuf/badge&quot; alt=&quot;OpenSSF Scorecard&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;Copyright 2008 Google LLC&lt;/p&gt; 
&lt;h2&gt;Overview&lt;/h2&gt; 
&lt;p&gt;Protocol Buffers (a.k.a., protobuf) are Google&#39;s language-neutral, platform-neutral, extensible mechanism for serializing structured data. You can learn more about it in &lt;a href=&quot;https://protobuf.dev&quot;&gt;protobuf&#39;s documentation&lt;/a&gt;.&lt;/p&gt; 
&lt;p&gt;This README file contains protobuf installation instructions. To install protobuf, you need to install the protocol compiler (used to compile .proto files) and the protobuf runtime for your chosen programming language.&lt;/p&gt; 
&lt;h2&gt;Working With Protobuf Source Code&lt;/h2&gt; 
&lt;p&gt;Most users will find working from &lt;a href=&quot;https://github.com/protocolbuffers/protobuf/releases&quot;&gt;supported releases&lt;/a&gt; to be the easiest path.&lt;/p&gt; 
&lt;p&gt;If you choose to work from the head revision of the main branch your build will occasionally be broken by source-incompatible changes and insufficiently-tested (and therefore broken) behavior.&lt;/p&gt; 
&lt;p&gt;If you are using C++ or otherwise need to build protobuf from source as a part of your project, you should pin to a release commit on a release branch.&lt;/p&gt; 
&lt;p&gt;This is because even release branches can experience some instability in between release commits.&lt;/p&gt; 
&lt;h3&gt;Bazel with Bzlmod&lt;/h3&gt; 
&lt;p&gt;Protobuf supports &lt;a href=&quot;https://bazel.build/external/module&quot;&gt;Bzlmod&lt;/a&gt; with Bazel 8 +. Users should specify a dependency on protobuf in their MODULE.bazel file as follows.&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;bazel_dep(name = &quot;protobuf&quot;, version = &amp;lt;VERSION&amp;gt;)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Users can optionally override the repo name, such as for compatibility with WORKSPACE.&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;bazel_dep(name = &quot;protobuf&quot;, version = &amp;lt;VERSION&amp;gt;, repo_name = &quot;com_google_protobuf&quot;)
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;Bazel with WORKSPACE&lt;/h3&gt; 
&lt;p&gt;Users can also add the following to their legacy &lt;a href=&quot;https://bazel.build/external/overview#workspace-system&quot;&gt;WORKSPACE&lt;/a&gt; file.&lt;/p&gt; 
&lt;p&gt;Note that with the release of 30.x there are a few more load statements to properly set up rules_java and rules_python.&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;http_archive(
    name = &quot;com_google_protobuf&quot;,
    strip_prefix = &quot;protobuf-VERSION&quot;,
    sha256 = ...,
    url = ...,
)

load(&quot;@com_google_protobuf//:protobuf_deps.bzl&quot;, &quot;protobuf_deps&quot;)

protobuf_deps()

load(&quot;@rules_java//java:rules_java_deps.bzl&quot;, &quot;rules_java_dependencies&quot;)

rules_java_dependencies()

load(&quot;@rules_java//java:repositories.bzl&quot;, &quot;rules_java_toolchains&quot;)

rules_java_toolchains()

load(&quot;@rules_python//python:repositories.bzl&quot;, &quot;py_repositories&quot;)

py_repositories()
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2&gt;Protobuf Compiler Installation&lt;/h2&gt; 
&lt;p&gt;The protobuf compiler is written in C++. If you are using C++, please follow the &lt;a href=&quot;https://raw.githubusercontent.com/protocolbuffers/protobuf/main/src/README.md&quot;&gt;C++ Installation Instructions&lt;/a&gt; to install protoc along with the C++ runtime.&lt;/p&gt; 
&lt;p&gt;For non-C++ users, the simplest way to install the protocol compiler is to download a pre-built binary from our &lt;a href=&quot;https://github.com/protocolbuffers/protobuf/releases&quot;&gt;GitHub release page&lt;/a&gt;.&lt;/p&gt; 
&lt;p&gt;In the downloads section of each release, you can find pre-built binaries in zip packages: &lt;code&gt;protoc-$VERSION-$PLATFORM.zip&lt;/code&gt;. It contains the protoc binary as well as a set of standard &lt;code&gt;.proto&lt;/code&gt; files distributed along with protobuf.&lt;/p&gt; 
&lt;p&gt;If you are looking for an old version that is not available in the release page, check out the &lt;a href=&quot;https://repo1.maven.org/maven2/com/google/protobuf/protoc/&quot;&gt;Maven repository&lt;/a&gt;.&lt;/p&gt; 
&lt;p&gt;These pre-built binaries are only provided for released versions. If you want to use the github main version at HEAD, or you need to modify protobuf code, or you are using C++, it&#39;s recommended to build your own protoc binary from source.&lt;/p&gt; 
&lt;p&gt;If you would like to build protoc binary from source, see the &lt;a href=&quot;https://raw.githubusercontent.com/protocolbuffers/protobuf/main/src/README.md&quot;&gt;C++ Installation Instructions&lt;/a&gt;.&lt;/p&gt; 
&lt;h2&gt;Protobuf Runtime Installation&lt;/h2&gt; 
&lt;p&gt;Protobuf supports several different programming languages. For each programming language, you can find instructions in the corresponding source directory about how to install protobuf runtime for that specific language:&lt;/p&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Language&lt;/th&gt; 
   &lt;th&gt;Source&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;C++ (include C++ runtime and protoc)&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://raw.githubusercontent.com/protocolbuffers/protobuf/main/src&quot;&gt;src&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Java&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://raw.githubusercontent.com/protocolbuffers/protobuf/main/java&quot;&gt;java&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Python&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://raw.githubusercontent.com/protocolbuffers/protobuf/main/python&quot;&gt;python&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Objective-C&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://raw.githubusercontent.com/protocolbuffers/protobuf/main/objectivec&quot;&gt;objectivec&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;C#&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://raw.githubusercontent.com/protocolbuffers/protobuf/main/csharp&quot;&gt;csharp&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Ruby&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://raw.githubusercontent.com/protocolbuffers/protobuf/main/ruby&quot;&gt;ruby&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Go&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/protocolbuffers/protobuf-go&quot;&gt;protocolbuffers/protobuf-go&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;PHP&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://raw.githubusercontent.com/protocolbuffers/protobuf/main/php&quot;&gt;php&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Dart&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/dart-lang/protobuf&quot;&gt;dart-lang/protobuf&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;JavaScript&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/protocolbuffers/protobuf-javascript&quot;&gt;protocolbuffers/protobuf-javascript&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;h2&gt;Quick Start&lt;/h2&gt; 
&lt;p&gt;The best way to learn how to use protobuf is to follow the &lt;a href=&quot;https://protobuf.dev/getting-started&quot;&gt;tutorials in our developer guide&lt;/a&gt;.&lt;/p&gt; 
&lt;p&gt;If you want to learn from code examples, take a look at the examples in the &lt;a href=&quot;https://raw.githubusercontent.com/protocolbuffers/protobuf/main/examples&quot;&gt;examples&lt;/a&gt; directory.&lt;/p&gt; 
&lt;h2&gt;Documentation&lt;/h2&gt; 
&lt;p&gt;The complete documentation is available at the &lt;a href=&quot;https://protobuf.dev&quot;&gt;Protocol Buffers doc site&lt;/a&gt;.&lt;/p&gt; 
&lt;h2&gt;Support Policy&lt;/h2&gt; 
&lt;p&gt;Read about our &lt;a href=&quot;https://protobuf.dev/version-support/&quot;&gt;version support policy&lt;/a&gt; to stay current on support timeframes for the language libraries.&lt;/p&gt; 
&lt;h2&gt;Developer Community&lt;/h2&gt; 
&lt;p&gt;To be alerted to upcoming changes in Protocol Buffers and connect with protobuf developers and users, &lt;a href=&quot;https://groups.google.com/g/protobuf&quot;&gt;join the Google Group&lt;/a&gt;.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>aseprite/aseprite</title>
      <link>https://github.com/aseprite/aseprite</link>
      <description>&lt;p&gt;Animated sprite editor &amp; pixel art tool (Windows, macOS, Linux)&lt;/p&gt;&lt;hr&gt;&lt;h1&gt;Aseprite&lt;/h1&gt; 
&lt;p&gt;&lt;a href=&quot;https://github.com/aseprite/aseprite/actions/workflows/build.yml&quot;&gt;&lt;img src=&quot;https://github.com/aseprite/aseprite/actions/workflows/build.yml/badge.svg?sanitize=true&quot; alt=&quot;build&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://hosted.weblate.org/engage/aseprite/&quot;&gt;&lt;img src=&quot;https://hosted.weblate.org/widget/aseprite/aseprite/svg-badge.svg?sanitize=true&quot; alt=&quot;Translation Status&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://community.aseprite.org/&quot;&gt;&lt;img src=&quot;https://img.shields.io/badge/discourse-community-brightgreen.svg?style=flat&quot; alt=&quot;Discourse Community&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://discord.gg/Yb2CeX8&quot;&gt;&lt;img src=&quot;https://discordapp.com/api/guilds/324979738533822464/embed.png&quot; alt=&quot;Discord Server&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;h2&gt;Introduction&lt;/h2&gt; 
&lt;p&gt;&lt;strong&gt;Aseprite&lt;/strong&gt; is a program to create animated sprites. Its main features are:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Sprites are composed of &lt;a href=&quot;https://www.aseprite.org/docs/timeline/&quot;&gt;layers &amp;amp; frames&lt;/a&gt; as separated concepts.&lt;/li&gt; 
 &lt;li&gt;Support for &lt;a href=&quot;https://www.aseprite.org/docs/color-profile/&quot;&gt;color profiles&lt;/a&gt; and different &lt;a href=&quot;https://www.aseprite.org/docs/color-mode/&quot;&gt;color modes&lt;/a&gt;: RGBA, Indexed (palettes up to 256 colors), Grayscale.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.aseprite.org/docs/animation/&quot;&gt;Animation facilities&lt;/a&gt;, with real-time &lt;a href=&quot;https://www.aseprite.org/docs/preview-window/&quot;&gt;preview&lt;/a&gt; and &lt;a href=&quot;https://www.aseprite.org/docs/onion-skinning/&quot;&gt;onion skinning&lt;/a&gt;.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.aseprite.org/docs/exporting/&quot;&gt;Export/import&lt;/a&gt; animations to/from &lt;a href=&quot;https://www.aseprite.org/docs/sprite-sheet/&quot;&gt;sprite sheets&lt;/a&gt;, GIF files, or sequence of PNG files (and FLC, FLI, JPG, BMP, PCX, TGA).&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.aseprite.org/docs/workspace/#drag-and-drop-tabs&quot;&gt;Multiple editors&lt;/a&gt; support.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://imgur.com/x3OKkGj&quot;&gt;Layer groups&lt;/a&gt; for organizing your work, and &lt;a href=&quot;https://twitter.com/aseprite/status/806889204601016325&quot;&gt;reference layers&lt;/a&gt; for rotoscoping.&lt;/li&gt; 
 &lt;li&gt;Pixel-art specific tools like &lt;a href=&quot;https://imgur.com/0fdlNau&quot;&gt;Pixel Perfect freehand mode&lt;/a&gt;, &lt;a href=&quot;https://www.aseprite.org/docs/shading/&quot;&gt;Shading ink&lt;/a&gt;, &lt;a href=&quot;https://twitter.com/aseprite/status/1196883990080344067&quot;&gt;Custom Brushes&lt;/a&gt;, &lt;a href=&quot;https://twitter.com/aseprite/status/1126548469865431041&quot;&gt;Outlines&lt;/a&gt;, &lt;a href=&quot;https://imgur.com/1yZKUcs&quot;&gt;Wide Pixels&lt;/a&gt;, etc.&lt;/li&gt; 
 &lt;li&gt;Other special drawing tools like &lt;a href=&quot;https://twitter.com/aseprite/status/1253770784708886533&quot;&gt;Pressure sensitivity&lt;/a&gt;, &lt;a href=&quot;https://twitter.com/aseprite/status/659709226747625472&quot;&gt;Symmetry Tool&lt;/a&gt;, &lt;a href=&quot;https://imgur.com/7JZQ81o&quot;&gt;Stroke and Fill&lt;/a&gt; selection, &lt;a href=&quot;https://twitter.com/aseprite/status/1126549217856622597&quot;&gt;Gradients&lt;/a&gt;.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://youtu.be/G_JeWBaxQIg&quot;&gt;Tiled mode&lt;/a&gt; useful to draw patterns and textures.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://twitter.com/aseprite/status/1170007034651172866&quot;&gt;Transform multiple frames/layers&lt;/a&gt; at the same time.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.aseprite.org/docs/scripting/&quot;&gt;Lua scripting capabilities&lt;/a&gt;.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.aseprite.org/docs/cli/&quot;&gt;CLI - Command Line Interface&lt;/a&gt; to automatize tasks.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.aseprite.org/quickref/&quot;&gt;Quick Reference / Cheat Sheet&lt;/a&gt; keyboard shortcuts (&lt;a href=&quot;https://imgur.com/rvAUxyF&quot;&gt;customizable keys&lt;/a&gt; and &lt;a href=&quot;https://imgur.com/oNqFqVb&quot;&gt;mouse wheel&lt;/a&gt;).&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://twitter.com/aseprite/status/1202641475256881153&quot;&gt;Reopen closed files&lt;/a&gt; and &lt;a href=&quot;https://www.aseprite.org/docs/data-recovery/&quot;&gt;recover data&lt;/a&gt; in case of crash.&lt;/li&gt; 
 &lt;li&gt;Undo/Redo for every operation and support for &lt;a href=&quot;https://imgur.com/9I42fZK&quot;&gt;non-linear undo&lt;/a&gt;.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://twitter.com/aseprite/status/1124442198651678720&quot;&gt;More features &amp;amp; tips&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Issues&lt;/h2&gt; 
&lt;p&gt;There is a list of &lt;a href=&quot;https://github.com/aseprite/aseprite/issues&quot;&gt;Known Issues&lt;/a&gt; (things to be fixed or that aren&#39;t yet implemented).&lt;/p&gt; 
&lt;p&gt;If you found a bug or have a new idea/feature for the program, &lt;a href=&quot;https://github.com/aseprite/aseprite/issues/new&quot;&gt;you can report them&lt;/a&gt;.&lt;/p&gt; 
&lt;h2&gt;Support&lt;/h2&gt; 
&lt;p&gt;You can ask for help in:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://community.aseprite.org/&quot;&gt;Aseprite Community&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://discord.gg/Yb2CeX8&quot;&gt;Aseprite Discord Server&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;Official support: &lt;a href=&quot;mailto:support@aseprite.org&quot;&gt;support@aseprite.org&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;Social networks and community-driven places: &lt;a href=&quot;https://twitter.com/aseprite/&quot;&gt;Twitter&lt;/a&gt;, &lt;a href=&quot;https://facebook.com/aseprite/&quot;&gt;Facebook&lt;/a&gt;, &lt;a href=&quot;https://www.youtube.com/user/aseprite&quot;&gt;YouTube&lt;/a&gt;, &lt;a href=&quot;https://www.instagram.com/aseprite/&quot;&gt;Instagram&lt;/a&gt;.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Credits&lt;/h2&gt; 
&lt;p&gt;Aseprite was originally created by &lt;a href=&quot;https://davidcapello.com/&quot;&gt;David Capello&lt;/a&gt; and is now being developed and maintained by &lt;a href=&quot;https://igara.com/&quot;&gt;Igara Studio&lt;/a&gt; and contributors.&lt;/p&gt; 
&lt;p&gt;Check the &lt;a href=&quot;https://raw.githubusercontent.com/aseprite/aseprite/main/AUTHORS.md&quot;&gt;AUTHORS&lt;/a&gt; file for details about the active team of developers working on Aseprite.&lt;/p&gt; 
&lt;h2&gt;License&lt;/h2&gt; 
&lt;p&gt;This program is distributed under three different licenses:&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;Source code and official releases/binaries are distributed under our &lt;a href=&quot;https://raw.githubusercontent.com/aseprite/aseprite/main/EULA.txt&quot;&gt;End-User License Agreement for Aseprite (EULA)&lt;/a&gt;. Please check that there are &lt;a href=&quot;https://raw.githubusercontent.com/aseprite/aseprite/main/src/README.md&quot;&gt;modules/libraries in the source code&lt;/a&gt; that are distributed under the MIT license (e.g. &lt;a href=&quot;https://github.com/aseprite/laf&quot;&gt;laf&lt;/a&gt;, &lt;a href=&quot;https://github.com/aseprite/clip&quot;&gt;clip&lt;/a&gt;, &lt;a href=&quot;https://github.com/aseprite/undo&quot;&gt;undo&lt;/a&gt;, &lt;a href=&quot;https://github.com/aseprite/observable&quot;&gt;observable&lt;/a&gt;, &lt;a href=&quot;https://raw.githubusercontent.com/aseprite/aseprite/main/src/ui&quot;&gt;ui&lt;/a&gt;, etc.).&lt;/li&gt; 
 &lt;li&gt;You can request a special &lt;a href=&quot;https://www.aseprite.org/faq/#is-there-an-educational-license&quot;&gt;educational license&lt;/a&gt; in case you are a teacher in an educational institution and want to use Aseprite in your classroom (in-situ).&lt;/li&gt; 
 &lt;li&gt;Steam releases are distributed under the terms of the &lt;a href=&quot;http://store.steampowered.com/subscriber_agreement/&quot;&gt;Steam Subscriber Agreement&lt;/a&gt;.&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;You can get more information about Aseprite license in the &lt;a href=&quot;https://www.aseprite.org/faq/#licensing-&amp;amp;-commercial&quot;&gt;FAQ&lt;/a&gt;.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>vllm-project/vllm-ascend</title>
      <link>https://github.com/vllm-project/vllm-ascend</link>
      <description>&lt;p&gt;Community maintained hardware plugin for vLLM on Ascend&lt;/p&gt;&lt;hr&gt;&lt;p align=&quot;center&quot;&gt; 
 &lt;picture&gt; 
  &lt;source media=&quot;(prefers-color-scheme: dark)&quot; srcset=&quot;https://raw.githubusercontent.com/vllm-project/vllm-ascend/main/docs/source/logos/vllm-ascend-logo-text-dark.png&quot; /&gt; 
  &lt;img alt=&quot;vllm-ascend&quot; src=&quot;https://raw.githubusercontent.com/vllm-project/vllm-ascend/main/docs/source/logos/vllm-ascend-logo-text-light.png&quot; width=&quot;55%&quot; /&gt; 
 &lt;/picture&gt; &lt;/p&gt; 
&lt;h3 align=&quot;center&quot;&gt; vLLM Ascend Plugin &lt;/h3&gt; 
&lt;div align=&quot;center&quot;&gt; 
 &lt;p&gt;&lt;a href=&quot;https://deepwiki.com/vllm-project/vllm-ascend&quot;&gt;&lt;img src=&quot;https://img.shields.io/badge/DeepWiki-Ask_AI-_.svg?style=flat&amp;amp;color=0052D9&amp;amp;labelColor=000000&amp;amp;logo=data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACwAAAAyCAYAAAAnWDnqAAAAAXNSR0IArs4c6QAAA05JREFUaEPtmUtyEzEQhtWTQyQLHNak2AB7ZnyXZMEjXMGeK/AIi+QuHrMnbChYY7MIh8g01fJoopFb0uhhEqqcbWTp06/uv1saEDv4O3n3dV60RfP947Mm9/SQc0ICFQgzfc4CYZoTPAswgSJCCUJUnAAoRHOAUOcATwbmVLWdGoH//PB8mnKqScAhsD0kYP3j/Yt5LPQe2KvcXmGvRHcDnpxfL2zOYJ1mFwrryWTz0advv1Ut4CJgf5uhDuDj5eUcAUoahrdY/56ebRWeraTjMt/00Sh3UDtjgHtQNHwcRGOC98BJEAEymycmYcWwOprTgcB6VZ5JK5TAJ+fXGLBm3FDAmn6oPPjR4rKCAoJCal2eAiQp2x0vxTPB3ALO2CRkwmDy5WohzBDwSEFKRwPbknEggCPB/imwrycgxX2NzoMCHhPkDwqYMr9tRcP5qNrMZHkVnOjRMWwLCcr8ohBVb1OMjxLwGCvjTikrsBOiA6fNyCrm8V1rP93iVPpwaE+gO0SsWmPiXB+jikdf6SizrT5qKasx5j8ABbHpFTx+vFXp9EnYQmLx02h1QTTrl6eDqxLnGjporxl3NL3agEvXdT0WmEost648sQOYAeJS9Q7bfUVoMGnjo4AZdUMQku50McDcMWcBPvr0SzbTAFDfvJqwLzgxwATnCgnp4wDl6Aa+Ax283gghmj+vj7feE2KBBRMW3FzOpLOADl0Isb5587h/U4gGvkt5v60Z1VLG8BhYjbzRwyQZemwAd6cCR5/XFWLYZRIMpX39AR0tjaGGiGzLVyhse5C9RKC6ai42ppWPKiBagOvaYk8lO7DajerabOZP46Lby5wKjw1HCRx7p9sVMOWGzb/vA1hwiWc6jm3MvQDTogQkiqIhJV0nBQBTU+3okKCFDy9WwferkHjtxib7t3xIUQtHxnIwtx4mpg26/HfwVNVDb4oI9RHmx5WGelRVlrtiw43zboCLaxv46AZeB3IlTkwouebTr1y2NjSpHz68WNFjHvupy3q8TFn3Hos2IAk4Ju5dCo8B3wP7VPr/FGaKiG+T+v+TQqIrOqMTL1VdWV1DdmcbO8KXBz6esmYWYKPwDL5b5FA1a0hwapHiom0r/cKaoqr+27/XcrS5UwSMbQAAAABJRU5ErkJggg==&quot; alt=&quot;DeepWiki&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;/div&gt; 
&lt;p align=&quot;center&quot;&gt; | &lt;a href=&quot;https://www.hiascend.com/en/&quot;&gt;&lt;b&gt;About Ascend&lt;/b&gt;&lt;/a&gt; | &lt;a href=&quot;https://docs.vllm.ai/projects/ascend/en/latest/&quot;&gt;&lt;b&gt;Documentation&lt;/b&gt;&lt;/a&gt; | &lt;a href=&quot;https://docs.vllm.ai/projects/ascend/en/latest/user_guide/support_matrix/&quot;&gt;&lt;b&gt;Support Matrix&lt;/b&gt;&lt;/a&gt; | &lt;a href=&quot;https://slack.vllm.ai&quot;&gt;&lt;b&gt;#SIG-Ascend&lt;/b&gt;&lt;/a&gt; | &lt;a href=&quot;https://discuss.vllm.ai/c/hardware-support/vllm-ascend-support&quot;&gt;&lt;b&gt;Users Forum&lt;/b&gt;&lt;/a&gt; | &lt;a href=&quot;https://tinyurl.com/vllm-ascend-meeting&quot;&gt;&lt;b&gt;Weekly Meeting&lt;/b&gt;&lt;/a&gt; | &lt;/p&gt; 
&lt;p align=&quot;center&quot;&gt; &lt;a&gt;&lt;b&gt;English&lt;/b&gt;&lt;/a&gt; | &lt;a href=&quot;https://raw.githubusercontent.com/vllm-project/vllm-ascend/main/README.zh.md&quot;&gt;&lt;b&gt;中文&lt;/b&gt;&lt;/a&gt; &lt;/p&gt; 
&lt;hr /&gt; 
&lt;p&gt;&lt;em&gt;Latest News&lt;/em&gt; 🔥&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;[2026/07] We released the first release candidate &lt;a href=&quot;https://github.com/vllm-project/vllm-ascend/releases/tag/v0.23.0rc1&quot;&gt;v0.23.0rc1&lt;/a&gt;! Please follow the &lt;a href=&quot;https://docs.vllm.ai/projects/ascend/en/v0.23.0rc1/&quot;&gt;official guide&lt;/a&gt; to start using vLLM Ascend Plugin on Ascend.&lt;/li&gt; 
 &lt;li&gt;[2026/05] We released the new official version &lt;a href=&quot;https://github.com/vllm-project/vllm-ascend/releases/tag/v0.18.0&quot;&gt;v0.18.0&lt;/a&gt;! Please follow the &lt;a href=&quot;https://docs.vllm.ai/projects/ascend/en/v0.18.0/&quot;&gt;official guide&lt;/a&gt; to start using vLLM Ascend Plugin on Ascend.&lt;/li&gt; 
 &lt;li&gt;[2026/02] We released the new official version &lt;a href=&quot;https://github.com/vllm-project/vllm-ascend/releases/tag/v0.13.0&quot;&gt;v0.13.0&lt;/a&gt;! Please follow the &lt;a href=&quot;https://docs.vllm.ai/projects/ascend/en/v0.13.0/&quot;&gt;official guide&lt;/a&gt; to start using vLLM Ascend Plugin on Ascend.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;details&gt; 
 &lt;summary&gt;More&lt;/summary&gt; 
 &lt;ul&gt; 
  &lt;li&gt;[2025/12] We released the new official version &lt;a href=&quot;https://github.com/vllm-project/vllm-ascend/releases/tag/v0.11.0&quot;&gt;v0.11.0&lt;/a&gt;! Please follow the &lt;a href=&quot;https://docs.vllm.ai/projects/ascend/en/v0.11.0/&quot;&gt;official guide&lt;/a&gt; to start using vLLM Ascend Plugin on Ascend.&lt;/li&gt; 
  &lt;li&gt;[2025/09] We released the new official version &lt;a href=&quot;https://github.com/vllm-project/vllm-ascend/releases/tag/v0.9.1&quot;&gt;v0.9.1&lt;/a&gt;! Please follow the &lt;a href=&quot;https://docs.vllm.ai/projects/ascend/en/v0.9.1/tutorials/large_scale_ep.html&quot;&gt;official guide&lt;/a&gt; to start deploying large-scale Expert Parallelism (EP) on Ascend.&lt;/li&gt; 
  &lt;li&gt;[2025/08] We hosted the &lt;a href=&quot;https://mp.weixin.qq.com/s/7n8OYNrCC_I9SJaybHA_-Q&quot;&gt;vLLM Beijing Meetup&lt;/a&gt; with vLLM and Tencent! Please find the &lt;a href=&quot;https://drive.google.com/drive/folders/1Pid6NSFLU43DZRi0EaTcPgXsAzDvbBqF&quot;&gt;meetup slides&lt;/a&gt;.&lt;/li&gt; 
  &lt;li&gt;[2025/06] &lt;a href=&quot;https://docs.vllm.ai/projects/ascend/en/latest/community/user_stories/index.html&quot;&gt;User stories&lt;/a&gt; page is now live! It kicks off with LLaMA-Factory/verl/TRL/GPUStack to demonstrate how vLLM Ascend assists Ascend users in enhancing their experience across fine-tuning, evaluation, reinforcement learning (RL), and deployment scenarios.&lt;/li&gt; 
  &lt;li&gt;[2025/06] &lt;a href=&quot;https://docs.vllm.ai/projects/ascend/en/latest/community/contributors.html&quot;&gt;Contributors&lt;/a&gt; page is now live! All contributions deserve to be recorded, thanks for all contributors.&lt;/li&gt; 
  &lt;li&gt;[2025/05] We&#39;ve released the first official version &lt;a href=&quot;https://github.com/vllm-project/vllm-ascend/releases/tag/v0.7.3&quot;&gt;v0.7.3&lt;/a&gt;! We collaborated with the vLLM community to publish a blog post sharing our practice: &lt;a href=&quot;https://blog.vllm.ai/2025/05/12/hardware-plugin.html&quot;&gt;Introducing vLLM Hardware Plugin, Best Practice from Ascend NPU&lt;/a&gt;.&lt;/li&gt; 
  &lt;li&gt;[2025/03] We hosted the &lt;a href=&quot;https://mp.weixin.qq.com/s/VtxO9WXa5fC-mKqlxNUJUQ&quot;&gt;vLLM Beijing Meetup&lt;/a&gt; with vLLM team! Please find the &lt;a href=&quot;https://drive.google.com/drive/folders/1Pid6NSFLU43DZRi0EaTcPgXsAzDvbBqF&quot;&gt;meetup slides&lt;/a&gt;.&lt;/li&gt; 
  &lt;li&gt;[2025/02] vLLM community officially created &lt;a href=&quot;https://github.com/vllm-project/vllm-ascend&quot;&gt;vllm-project/vllm-ascend&lt;/a&gt; repo for running vLLM seamlessly on the Ascend NPU.&lt;/li&gt; 
  &lt;li&gt;[2024/12] We are working with the vLLM community to support &lt;a href=&quot;https://github.com/vllm-project/vllm/issues/11162&quot;&gt;[RFC]: Hardware pluggable&lt;/a&gt;.&lt;/li&gt; 
 &lt;/ul&gt; 
&lt;/details&gt; 
&lt;hr /&gt; 
&lt;h2&gt;Overview&lt;/h2&gt; 
&lt;p&gt;vLLM Ascend (&lt;code&gt;vllm-ascend&lt;/code&gt;) is a community maintained hardware plugin for running vLLM seamlessly on the Ascend NPU.&lt;/p&gt; 
&lt;p&gt;It is the recommended approach for supporting the Ascend backend within the vLLM community. It adheres to the principles outlined in the &lt;a href=&quot;https://github.com/vllm-project/vllm/issues/11162&quot;&gt;[RFC]: Hardware pluggable&lt;/a&gt;, providing a hardware-pluggable interface that decouples the integration of the Ascend NPU with vLLM.&lt;/p&gt; 
&lt;p&gt;By using vLLM Ascend plugin, popular open-source models, including Transformer-like, Mixture-of-Experts (MoE), Embedding, Multi-modal LLMs can run seamlessly on the Ascend NPU.&lt;/p&gt; 
&lt;p&gt;For detailed information on supported models and features, please refer to the &lt;a href=&quot;https://docs.vllm.ai/projects/ascend/en/latest/user_guide/support_matrix/&quot;&gt;support matrix&lt;/a&gt;.&lt;/p&gt; 
&lt;h2&gt;Prerequisites&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;Hardware: Atlas 800I A2 Inference series, Atlas A2 Training series, Atlas 800I A3 Inference series, Atlas A3 Training series, Atlas 300I Duo (Experimental)&lt;/li&gt; 
 &lt;li&gt;OS: Linux&lt;/li&gt; 
 &lt;li&gt;Software: 
  &lt;ul&gt; 
   &lt;li&gt;Python &amp;gt;= 3.10, &amp;lt; 3.13&lt;/li&gt; 
   &lt;li&gt;CANN == 9.1.0 (For Ascend HDK version, please refer to the &lt;a href=&quot;https://www.hiascend.com/document/detail/zh/CANNCommunityEdition/910/softwareinst/releasenote/9.1.0/release-notes.md&quot;&gt;Release Notes&lt;/a&gt;)&lt;/li&gt; 
   &lt;li&gt;PyTorch == 2.10.0, TorchNPU == 2.10.0.post4&lt;/li&gt; 
   &lt;li&gt;vLLM (the same version as vllm-ascend)&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Accessing Ascend NPU&lt;/h2&gt; 
&lt;p&gt;If you need to access Ascend NPU computing resources for development or testing, please visit the &lt;a href=&quot;https://hidevlab.huawei.com/online-develop-intro&quot;&gt;HiDevLab - Online Development&lt;/a&gt; page on the Huawei HiDevLab platform to apply for and use them.&lt;/p&gt; 
&lt;h2&gt;Getting Started&lt;/h2&gt; 
&lt;p&gt;Please use the following recommended versions to get started quickly:&lt;/p&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Version&lt;/th&gt; 
   &lt;th&gt;Release type&lt;/th&gt; 
   &lt;th&gt;Doc&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;v0.23.0rc1&lt;/td&gt; 
   &lt;td&gt;Latest release candidate&lt;/td&gt; 
   &lt;td&gt;See &lt;a href=&quot;https://docs.vllm.ai/projects/ascend/en/v0.23.0rc1/quick_start.html&quot;&gt;QuickStart&lt;/a&gt; and &lt;a href=&quot;https://docs.vllm.ai/projects/ascend/en/v0.23.0rc1/installation.html&quot;&gt;Installation&lt;/a&gt; for more details&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;v0.18.0&lt;/td&gt; 
   &lt;td&gt;Latest stable version&lt;/td&gt; 
   &lt;td&gt;See &lt;a href=&quot;https://docs.vllm.ai/projects/ascend/en/v0.18.0/quick_start.html&quot;&gt;QuickStart&lt;/a&gt; and &lt;a href=&quot;https://docs.vllm.ai/projects/ascend/en/v0.18.0/installation.html&quot;&gt;Installation&lt;/a&gt; for more details&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;h2&gt;Branch&lt;/h2&gt; 
&lt;p&gt;vllm-ascend has a main branch and a dev branch.&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;main&lt;/strong&gt;: main branch, corresponds to the vLLM main branch, and is continuously monitored for quality through Ascend CI.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;releases/vX.Y.Z&lt;/strong&gt;: development branch, created alongside new releases of vLLM. For example, &lt;code&gt;releases/v0.13.0&lt;/code&gt; is the dev branch for vLLM &lt;code&gt;v0.13.0&lt;/code&gt; version.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;Below are the maintained branches:&lt;/p&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Branch&lt;/th&gt; 
   &lt;th&gt;Status&lt;/th&gt; 
   &lt;th&gt;Note&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;main&lt;/td&gt; 
   &lt;td&gt;Maintained&lt;/td&gt; 
   &lt;td&gt;CI commitment for vLLM main branch and vLLM v0.26.0 tag&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;releases/v0.13.0&lt;/td&gt; 
   &lt;td&gt;Maintained&lt;/td&gt; 
   &lt;td&gt;Only bug fixes are allowed, and no new release tags anymore.&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;releases/v0.18.0&lt;/td&gt; 
   &lt;td&gt;Maintained&lt;/td&gt; 
   &lt;td&gt;CI commitment for vLLM 0.18.0 version&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;releases/v0.23.0&lt;/td&gt; 
   &lt;td&gt;Maintained&lt;/td&gt; 
   &lt;td&gt;CI commitment for vLLM 0.23.0 version&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;rfc/
    &lt;feature-name&gt;&lt;/feature-name&gt;&lt;/td&gt; 
   &lt;td&gt;Maintained&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://docs.vllm.ai/projects/ascend/en/latest/community/versioning_policy.html#feature-branches&quot;&gt;Feature branches&lt;/a&gt; for collaboration&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;p&gt;Please refer to &lt;a href=&quot;https://docs.vllm.ai/projects/ascend/en/latest/community/versioning_policy.html&quot;&gt;Versioning policy&lt;/a&gt; for more details.&lt;/p&gt; 
&lt;h2&gt;Contributing&lt;/h2&gt; 
&lt;p&gt;See &lt;a href=&quot;https://docs.vllm.ai/projects/ascend/en/latest/developer_guide/contribution/index.html&quot;&gt;CONTRIBUTING&lt;/a&gt; for more details, which is a step-by-step guide to help you set up the development environment, build and test.&lt;/p&gt; 
&lt;p&gt;We welcome and value any contributions and collaborations:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Please let us know if you encounter a bug by &lt;a href=&quot;https://github.com/vllm-project/vllm-ascend/issues&quot;&gt;filing an issue&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;Please use &lt;a href=&quot;https://discuss.vllm.ai/c/hardware-support/vllm-ascend-support&quot;&gt;User forum&lt;/a&gt; for usage questions and help.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Weekly Meeting&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;vLLM Ascend Weekly Meeting: &lt;a href=&quot;https://tinyurl.com/vllm-ascend-meeting&quot;&gt;https://tinyurl.com/vllm-ascend-meeting&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;Wednesday, 15:00 - 16:00 (UTC+8, &lt;a href=&quot;https://dateful.com/convert/gmt8?t=15&quot;&gt;Convert to your timezone&lt;/a&gt;)&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;License&lt;/h2&gt; 
&lt;p&gt;Apache License 2.0, as found in the &lt;a href=&quot;https://raw.githubusercontent.com/vllm-project/vllm-ascend/main/LICENSE&quot;&gt;LICENSE&lt;/a&gt; file.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>ClickHouse/ClickHouse</title>
      <link>https://github.com/ClickHouse/ClickHouse</link>
      <description>&lt;p&gt;ClickHouse® is a real-time analytics database management system&lt;/p&gt;&lt;hr&gt;&lt;div align=&quot;center&quot;&gt; 
 &lt;p&gt;&lt;a href=&quot;https://clickhouse.com&quot;&gt;&lt;img src=&quot;https://img.shields.io/website?up_message=AVAILABLE&amp;amp;down_message=DOWN&amp;amp;url=https%3A%2F%2Fclickhouse.com&amp;amp;style=for-the-badge&quot; alt=&quot;Website&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://www.apache.org/licenses/LICENSE-2.0&quot;&gt;&lt;img src=&quot;https://img.shields.io/badge/license-Apache%202.0-blueviolet?style=for-the-badge&quot; alt=&quot;Apache 2.0 License&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
 &lt;picture align=&quot;center&quot;&gt; 
  &lt;source media=&quot;(prefers-color-scheme: dark)&quot; srcset=&quot;https://github.com/ClickHouse/clickhouse-docs/assets/9611008/4ef9c104-2d3f-4646-b186-507358d2fe28&quot; /&gt; 
  &lt;source media=&quot;(prefers-color-scheme: light)&quot; srcset=&quot;https://github.com/ClickHouse/clickhouse-docs/assets/9611008/b001dc7b-5a45-4dcd-9275-e03beb7f9177&quot; /&gt; 
  &lt;img alt=&quot;The ClickHouse company logo.&quot; src=&quot;https://github.com/ClickHouse/clickhouse-docs/assets/9611008/b001dc7b-5a45-4dcd-9275-e03beb7f9177&quot; /&gt; 
 &lt;/picture&gt; 
 &lt;h4&gt;ClickHouse® is an open-source column-oriented database management system that allows generating analytical data reports in real-time.&lt;/h4&gt; 
&lt;/div&gt; 
&lt;h2&gt;How To Install (Linux, macOS, FreeBSD)&lt;/h2&gt; 
&lt;pre&gt;&lt;code&gt;curl https://clickhouse.com/ | sh
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2&gt;Useful Links&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://clickhouse.com/&quot;&gt;Official website&lt;/a&gt; has a quick high-level overview of ClickHouse on the main page.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://clickhouse.cloud&quot;&gt;ClickHouse Cloud&lt;/a&gt; ClickHouse as a service, built by the creators and maintainers.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://clickhouse.com/docs/getting_started/tutorial/&quot;&gt;Tutorial&lt;/a&gt; shows how to set up and query a small ClickHouse cluster.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://clickhouse.com/docs/&quot;&gt;Documentation&lt;/a&gt; provides more in-depth information.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.youtube.com/c/ClickHouseDB&quot;&gt;YouTube channel&lt;/a&gt; has a lot of content about ClickHouse in video format.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://presentations.clickhouse.com/&quot;&gt;ClickHouse Theater&lt;/a&gt; contains presentations and videos about ClickHouse.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://clickhouse.com/slack&quot;&gt;Slack&lt;/a&gt; and &lt;a href=&quot;https://telegram.me/clickhouse_en&quot;&gt;Telegram&lt;/a&gt; allow chatting with ClickHouse users in real-time.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://clickhouse.com/blog/&quot;&gt;Blog&lt;/a&gt; contains various ClickHouse-related articles, as well as announcements and reports about events.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://bsky.app/profile/clickhouse.com&quot;&gt;Bluesky&lt;/a&gt; and &lt;a href=&quot;https://x.com/ClickHouseDB&quot;&gt;X&lt;/a&gt; for short news.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.dev/ClickHouse/ClickHouse&quot;&gt;Code Browser (github.dev)&lt;/a&gt; with syntax highlighting, powered by github.dev.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://clickhouse.com/company/contact&quot;&gt;Contacts&lt;/a&gt; can help to get your questions answered if there are any.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Monthly Release &amp;amp; Community Call&lt;/h2&gt; 
&lt;p&gt;The &lt;a href=&quot;https://www.youtube.com/watch?v=mKBNLaFOVDA&quot;&gt;ClickHouse &lt;strong&gt;26.7&lt;/strong&gt; Release Call&lt;/a&gt; took place on July 23, 2026 — watch the recording and the &lt;a href=&quot;https://presentations.clickhouse.com/2026-release-26.7/&quot;&gt;slides&lt;/a&gt;.&lt;/p&gt; 
&lt;p&gt;The &lt;a href=&quot;https://www.youtube.com/watch?v=-NmqMH9y4EY&quot;&gt;ClickHouse &lt;strong&gt;26.6&lt;/strong&gt; special &quot;10 Year Anniversary&quot; Release Call&lt;/a&gt; — recording and &lt;a href=&quot;https://presentations.clickhouse.com/2026-release-26.6/&quot;&gt;slides&lt;/a&gt;.&lt;/p&gt; 
&lt;p&gt;Watch all release presentations and videos at &lt;a href=&quot;https://presentations.clickhouse.com/&quot;&gt;ClickHouse Theater&lt;/a&gt; and &lt;a href=&quot;https://www.youtube.com/playlist?list=PL0Z2YDlm0b3jAlSy1JxyP8zluvXaN3nxU&quot;&gt;YouTube Playlist&lt;/a&gt;.&lt;/p&gt; 
&lt;h2&gt;Upcoming Events&lt;/h2&gt; 
&lt;p&gt;Keep an eye out for upcoming meetups and events around the world. Want to speak? Apply &lt;a href=&quot;https://forms.gle/3h4XCEENJZ3eaVGy7&quot;&gt;here&lt;/a&gt; You can also peruse &lt;a href=&quot;https://clickhouse.com/company/news-events&quot;&gt;ClickHouse Events&lt;/a&gt; for a list of all upcoming trainings, meetups, speaking engagements, etc.&lt;/p&gt; 
&lt;p&gt;Upcoming meetups&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://luma.com/clickh-gz0r&quot;&gt;AI Builders Night SF&lt;/a&gt; - July 14th, 2026&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://luma.com/sbonpt98&quot;&gt;Data Engineering Things Seattle Meetup&lt;/a&gt; - July 16th, 2026&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://luma.com/gpzn0n8v&quot;&gt;Bangkok OSS &amp;amp; Data Evening: Queries, Code &amp;amp; Community&lt;/a&gt; - July 23rd, 2026&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://luma.com/clickh-bkld&quot;&gt;Happy Hour warm-up: AWS Summit Bogotá&lt;/a&gt; - July 30th, 2026&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://luma.com/clickh-2r4t&quot;&gt;ClickHouse Singapore August 2026 Edition&lt;/a&gt; - August 4th, 2026&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://luma.com/clickh-552k&quot;&gt;ClickHouse Jakarta Meetup&lt;/a&gt; - August 5th, 2026&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://luma.com/qeg73alr&quot;&gt;AI Demo Night&lt;/a&gt; - August 6th, 2026&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://luma.com/clickh-z578&quot;&gt;Data Engineering Meetup&lt;/a&gt; - August 11th, 2026&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://luma.com/c4alsewg&quot;&gt;AI Demo Night&lt;/a&gt; - August 18th, 2026&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://luma.com/t3z5q5s8&quot;&gt;NYC Apache Iceberg™ Community Meetup&lt;/a&gt; - August 20th, 2026&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://luma.com/clickh-t3iz&quot;&gt;Bangalore Iceberg Community Meetup&lt;/a&gt; - August 22nd, 2026&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://luma.com/jr8tc94e&quot;&gt;Vancouver Meetup&lt;/a&gt; - August 25th, 2026&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://luma.com/clickh-2ccj&quot;&gt;The Agentic Data Stack: Berlin&lt;/a&gt; - September 2nd, 2026&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://luma.com/clickh-vu1p&quot;&gt;Amsterdam Meetup&lt;/a&gt; - September 15th, 2026&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://luma.com/clickh-dw1v&quot;&gt;Cape Town Meetup&lt;/a&gt; - September 15th, 2026&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://luma.com/event/evt-bQcR6tDKi8OmTXu&quot;&gt;Rows And Columns Summit&lt;/a&gt; - September 22nd, 2026&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://luma.com/clickh-gsz1&quot;&gt;Paris Meetup&lt;/a&gt; - September 29th, 2026&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;Recent meetups&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://luma.com/clickh-o8up&quot;&gt;Happy Hour Open Source de Montréal&lt;/a&gt; - July 9th, 2026&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://luma.com/clickh-lz8k&quot;&gt;AI Builders Night NY&lt;/a&gt; - July 8th, 2026&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://paris.aitinkerers.org/p/ait-raise-docker-for-ai&quot;&gt;AI Builders Offstage: Docker &amp;amp; ClickHouse&lt;/a&gt; - July 7th, 2026&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://luma.com/clickh-2crf&quot;&gt;AI Demo Night SF&lt;/a&gt; - July 1st, 2026&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://luma.com/clickh-8cfv&quot;&gt;KL Meetup&lt;/a&gt; - June 26th, 2026&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://luma.com/vwt2i2rs&quot;&gt;Seattle Iceberg Meetup&lt;/a&gt; - June 25th, 2026&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Recent Recordings&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;Recent Meetup Videos&lt;/strong&gt;: &lt;a href=&quot;https://www.youtube.com/playlist?list=PL0Z2YDlm0b3iNDUzpY1S3L_iV4nARda_U&quot;&gt;Meetup Playlist&lt;/a&gt; Whenever possible recordings of the ClickHouse Community Meetups are edited and presented as individual talks.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Interested in joining ClickHouse and making it your full-time job?&lt;/h2&gt; 
&lt;p&gt;ClickHouse is a nice DBMS, and it&#39;s a good place to work.&lt;/p&gt; 
&lt;p&gt;Check out our &lt;strong&gt;current openings&lt;/strong&gt; here: &lt;a href=&quot;https://clickhouse.com/company/careers&quot;&gt;https://clickhouse.com/company/careers&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;Email: &lt;a href=&quot;mailto:careers@clickhouse.com&quot;&gt;careers@clickhouse.com&lt;/a&gt;!&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>godotengine/godot</title>
      <link>https://github.com/godotengine/godot</link>
      <description>&lt;p&gt;Godot Engine – Multi-platform 2D and 3D game engine&lt;/p&gt;&lt;hr&gt;&lt;h1&gt;Godot Engine&lt;/h1&gt; 
&lt;p align=&quot;center&quot;&gt; &lt;a href=&quot;https://godotengine.org&quot;&gt; &lt;img src=&quot;https://raw.githubusercontent.com/godotengine/godot/master/misc/logo/logo_outlined.svg?sanitize=true&quot; width=&quot;400&quot; alt=&quot;Godot Engine logo&quot; /&gt; &lt;/a&gt; &lt;/p&gt; 
&lt;h2&gt;2D and 3D cross-platform game engine&lt;/h2&gt; 
&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://godotengine.org&quot;&gt;Godot Engine&lt;/a&gt; is a feature-packed, cross-platform game engine to create 2D and 3D games from a unified interface.&lt;/strong&gt; It provides a comprehensive set of &lt;a href=&quot;https://godotengine.org/features&quot;&gt;common tools&lt;/a&gt;, so that users can focus on making games without having to reinvent the wheel. Games can be exported with one click to a number of platforms, including the major desktop platforms (Linux, macOS, Windows), mobile platforms (Android, iOS), as well as Web-based platforms and &lt;a href=&quot;https://godotengine.org/consoles&quot;&gt;consoles&lt;/a&gt;.&lt;/p&gt; 
&lt;h2&gt;Free, open source and community-driven&lt;/h2&gt; 
&lt;p&gt;Godot is completely free and open source under the very permissive &lt;a href=&quot;https://godotengine.org/license&quot;&gt;MIT license&lt;/a&gt;. No strings attached, no royalties, nothing. The users&#39; games are theirs, down to the last line of engine code. Godot&#39;s development is fully independent and community-driven, empowering users to help shape their engine to match their expectations. It is supported by the &lt;a href=&quot;https://godot.foundation/&quot;&gt;Godot Foundation&lt;/a&gt; not-for-profit.&lt;/p&gt; 
&lt;p&gt;Before being open sourced in &lt;a href=&quot;https://github.com/godotengine/godot/commit/0b806ee0fc9097fa7bda7ac0109191c9c5e0a1ac&quot;&gt;February 2014&lt;/a&gt;, Godot had been developed by &lt;a href=&quot;https://github.com/reduz&quot;&gt;Juan Linietsky&lt;/a&gt; and &lt;a href=&quot;https://github.com/punto-&quot;&gt;Ariel Manzur&lt;/a&gt; for several years as an in-house engine, used to publish several work-for-hire titles.&lt;/p&gt; 
&lt;p&gt;&lt;img src=&quot;https://raw.githubusercontent.com/godotengine/godot-design/master/screenshots/editor_tps_demo_1920x1080.jpg&quot; alt=&quot;Screenshot of a 3D scene in the Godot Engine editor&quot; /&gt;&lt;/p&gt; 
&lt;h2&gt;Getting the engine&lt;/h2&gt; 
&lt;h3&gt;Binary downloads&lt;/h3&gt; 
&lt;p&gt;Official binaries for the Godot editor and the export templates can be found &lt;a href=&quot;https://godotengine.org/download&quot;&gt;on the Godot website&lt;/a&gt;.&lt;/p&gt; 
&lt;h3&gt;Compiling from source&lt;/h3&gt; 
&lt;p&gt;&lt;a href=&quot;https://docs.godotengine.org/en/latest/engine_details/development/compiling&quot;&gt;See the official docs&lt;/a&gt; for compilation instructions for every supported platform.&lt;/p&gt; 
&lt;h2&gt;Community and contributing&lt;/h2&gt; 
&lt;p&gt;Godot is not only an engine but an ever-growing community of users and engine developers. The main community channels are listed &lt;a href=&quot;https://godotengine.org/community&quot;&gt;on the homepage&lt;/a&gt;.&lt;/p&gt; 
&lt;p&gt;The best way to get in touch with the core engine developers is to join the &lt;a href=&quot;https://chat.godotengine.org&quot;&gt;Godot Contributors Chat&lt;/a&gt;.&lt;/p&gt; 
&lt;p&gt;To get started contributing to the project, see the &lt;a href=&quot;https://raw.githubusercontent.com/godotengine/godot/master/CONTRIBUTING.md&quot;&gt;contributing guide&lt;/a&gt;. This document also includes guidelines for reporting bugs.&lt;/p&gt; 
&lt;h2&gt;Documentation and demos&lt;/h2&gt; 
&lt;p&gt;The official documentation is hosted on &lt;a href=&quot;https://docs.godotengine.org&quot;&gt;Read the Docs&lt;/a&gt;. It is maintained by the Godot community in its own &lt;a href=&quot;https://github.com/godotengine/godot-docs&quot;&gt;GitHub repository&lt;/a&gt;.&lt;/p&gt; 
&lt;p&gt;The &lt;a href=&quot;https://docs.godotengine.org/en/latest/classes/&quot;&gt;class reference&lt;/a&gt; is also accessible from the Godot editor.&lt;/p&gt; 
&lt;p&gt;We also maintain official demos in their own &lt;a href=&quot;https://github.com/godotengine/godot-demo-projects&quot;&gt;GitHub repository&lt;/a&gt; as well as a list of &lt;a href=&quot;https://github.com/godotengine/awesome-godot&quot;&gt;awesome Godot community resources&lt;/a&gt;.&lt;/p&gt; 
&lt;p&gt;There are also a number of other &lt;a href=&quot;https://docs.godotengine.org/en/latest/community/tutorials.html&quot;&gt;learning resources&lt;/a&gt; provided by the community, such as text and video tutorials, demos, etc. Consult the &lt;a href=&quot;https://godotengine.org/community&quot;&gt;community channels&lt;/a&gt; for more information.&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://www.codetriage.com/godotengine/godot&quot;&gt;&lt;img src=&quot;https://www.codetriage.com/godotengine/godot/badges/users.svg?sanitize=true&quot; alt=&quot;Code Triagers Badge&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://hosted.weblate.org/engage/godot-engine/?utm_source=widget&quot;&gt;&lt;img src=&quot;https://hosted.weblate.org/widgets/godot-engine/-/godot/svg-badge.svg?sanitize=true&quot; alt=&quot;Translate on Weblate&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>YimMenu/YimMenuV2</title>
      <link>https://github.com/YimMenu/YimMenuV2</link>
      <description>&lt;p&gt;Experimental menu for GTA 5: Enhanced&lt;/p&gt;&lt;hr&gt;&lt;h1&gt;YimMenuV2&lt;/h1&gt; 
&lt;p&gt;Experimental menu for GTA 5: Enhanced&lt;/p&gt; 
&lt;h2&gt;How to use&lt;/h2&gt; 
&lt;ol&gt; 
 &lt;li&gt;Download the latest version of FSL from &lt;a href=&quot;https://www.unknowncheats.me/forum/grand-theft-auto-v/616977-fsl-local-gtao-saves.html&quot;&gt;here&lt;/a&gt; and place WINMM.dll in your GTA V directory. Using FSL is now optional but highly recommended for account safety&lt;/li&gt; 
 &lt;li&gt;Download YimMenuV2 from &lt;a href=&quot;https://github.com/YimMenu/YimMenuV2/releases/tag/nightly&quot;&gt;GitHub Releases&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;Download an injector, such as &lt;a href=&quot;https://www.unknowncheats.me/forum/general-programming-and-reversing/124013-xenos-injector-v2-3-2-a.html&quot;&gt;Xenos&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;Open Rockstar Launcher, select Grand Theft Auto V Enhanced, go to settings, and disable BattlEye. If you are using Steam or Epic Games, you may have to pass the -nobattleye command line parameter as well&lt;/li&gt; 
 &lt;li&gt;Launch GTA V, then use your injector to inject YimMenuV2.dll at the main menu&lt;/li&gt; 
&lt;/ol&gt; 
&lt;h2&gt;How to open the menu?&lt;/h2&gt; 
&lt;p&gt;Press the &lt;code&gt;INSERT&lt;/code&gt; key or &lt;code&gt;Ctrl+\&lt;/code&gt; to open the menu&lt;/p&gt; 
&lt;h2&gt;Common issues&lt;/h2&gt; 
&lt;h3&gt;I keep getting desynced from public sessions every five minutes&lt;/h3&gt; 
&lt;p&gt;We currently do not have a BattlEye bypass, and legitimate hosts will eventually remove you due to a heartbeat failure. There is currently no way to stop this other than using an actual (private) bypass&lt;/p&gt; 
&lt;h3&gt;I removed FSL and all my progress disappeared!&lt;/h3&gt; 
&lt;p&gt;FSL reroutes account save data to disk, so any progress made with FSL will only show up if you have FSL enabled. If you don&#39;t want this, you can also use YimMenuV2 without FSL, but this is not recommended&lt;/p&gt; 
&lt;h3&gt;I removed FSL and the game doesn&#39;t start up anymore&lt;/h3&gt; 
&lt;p&gt;This is a known issue; delete &quot;Documents/GTAV Enhanced/Profiles&quot; to fix&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>nlohmann/json</title>
      <link>https://github.com/nlohmann/json</link>
      <description>&lt;p&gt;JSON for Modern C++&lt;/p&gt;&lt;hr&gt;&lt;p&gt;&lt;a href=&quot;https://github.com/nlohmann/json/releases&quot;&gt;&lt;img src=&quot;https://raw.githubusercontent.com/nlohmann/json/develop/docs/mkdocs/docs/images/json.gif&quot; alt=&quot;JSON for Modern C++&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://ci.appveyor.com/project/nlohmann/json&quot;&gt;&lt;img src=&quot;https://ci.appveyor.com/api/projects/status/1acb366xfyg3qybk/branch/develop?svg=true&quot; alt=&quot;Build Status&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://github.com/nlohmann/json/actions?query=workflow%3AUbuntu&quot;&gt;&lt;img src=&quot;https://github.com/nlohmann/json/workflows/Ubuntu/badge.svg?sanitize=true&quot; alt=&quot;Ubuntu&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://github.com/nlohmann/json/actions?query=workflow%3AmacOS&quot;&gt;&lt;img src=&quot;https://github.com/nlohmann/json/workflows/macOS/badge.svg?sanitize=true&quot; alt=&quot;macOS&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://github.com/nlohmann/json/actions?query=workflow%3AWindows&quot;&gt;&lt;img src=&quot;https://github.com/nlohmann/json/workflows/Windows/badge.svg?sanitize=true&quot; alt=&quot;Windows&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://coveralls.io/github/nlohmann/json?branch=develop&quot;&gt;&lt;img src=&quot;https://coveralls.io/repos/github/nlohmann/json/badge.svg?branch=develop&quot; alt=&quot;Coverage Status&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://scan.coverity.com/projects/nlohmann-json&quot;&gt;&lt;img src=&quot;https://scan.coverity.com/projects/5550/badge.svg?sanitize=true&quot; alt=&quot;Coverity Scan Build Status&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://app.codacy.com/gh/nlohmann/json/dashboard?utm_source=gh&amp;amp;utm_medium=referral&amp;amp;utm_content=&amp;amp;utm_campaign=Badge_grade&quot;&gt;&lt;img src=&quot;https://app.codacy.com/project/badge/Grade/e0d1a9d5d6fd46fcb655c4cb930bb3e8&quot; alt=&quot;Codacy Badge&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://cirrus-ci.com/github/nlohmann/json&quot;&gt;&lt;img src=&quot;https://api.cirrus-ci.com/github/nlohmann/json.svg?sanitize=true&quot; alt=&quot;Cirrus CI&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://bugs.chromium.org/p/oss-fuzz/issues/list?sort=-opened&amp;amp;can=1&amp;amp;q=proj:json&quot;&gt;&lt;img src=&quot;https://oss-fuzz-build-logs.storage.googleapis.com/badges/json.svg?sanitize=true&quot; alt=&quot;Fuzzing Status&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://wandbox.org/permlink/1mp10JbaANo6FUc7&quot;&gt;&lt;img src=&quot;https://img.shields.io/badge/try-online-blue.svg?sanitize=true&quot; alt=&quot;Try online&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://json.nlohmann.me&quot;&gt;&lt;img src=&quot;https://img.shields.io/badge/docs-mkdocs-blue.svg?sanitize=true&quot; alt=&quot;Documentation&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://raw.githubusercontent.com/nlohmann/json/develop/LICENSE.MIT&quot;&gt;&lt;img src=&quot;https://img.shields.io/badge/license-MIT-blue.svg?sanitize=true&quot; alt=&quot;GitHub license&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://github.com/nlohmann/json/releases&quot;&gt;&lt;img src=&quot;https://img.shields.io/github/release/nlohmann/json.svg?sanitize=true&quot; alt=&quot;GitHub Releases&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://repology.org/project/nlohmann-json/versions&quot;&gt;&lt;img src=&quot;https://repology.org/badge/tiny-repos/nlohmann-json.svg?sanitize=true&quot; alt=&quot;Packaging status&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://github.com/nlohmann/json/releases&quot;&gt;&lt;img src=&quot;https://img.shields.io/github/downloads/nlohmann/json/total&quot; alt=&quot;GitHub Downloads&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://github.com/nlohmann/json/issues&quot;&gt;&lt;img src=&quot;https://img.shields.io/github/issues/nlohmann/json.svg?sanitize=true&quot; alt=&quot;GitHub Issues&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://isitmaintained.com/project/nlohmann/json&quot; title=&quot;Average time to resolve an issue&quot;&gt;&lt;img src=&quot;https://isitmaintained.com/badge/resolution/nlohmann/json.svg?sanitize=true&quot; alt=&quot;Average time to resolve an issue&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://bestpractices.coreinfrastructure.org/projects/289&quot;&gt;&lt;img src=&quot;https://bestpractices.coreinfrastructure.org/projects/289/badge&quot; alt=&quot;CII Best Practices&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://scorecard.dev/viewer/?uri=github.com/nlohmann/json&quot;&gt;&lt;img src=&quot;https://api.scorecard.dev/projects/github.com/nlohmann/json/badge&quot; alt=&quot;OpenSSF Scorecard&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://cloudback.it&quot;&gt;&lt;img src=&quot;https://app.cloudback.it/badge/nlohmann/json&quot; alt=&quot;Backup Status&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://github.com/sponsors/nlohmann&quot;&gt;&lt;img src=&quot;https://img.shields.io/badge/GitHub-Sponsors-ff69b4&quot; alt=&quot;GitHub Sponsors&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://api.reuse.software/info/github.com/nlohmann/json&quot;&gt;&lt;img src=&quot;https://api.reuse.software/badge/github.com/nlohmann/json&quot; alt=&quot;REUSE status&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://discord.gg/6mrGXKvX7y&quot;&gt;&lt;img src=&quot;https://img.shields.io/discord/1003743314341793913&quot; alt=&quot;Discord&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/nlohmann/json/develop/#design-goals&quot;&gt;Design goals&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/nlohmann/json/develop/#sponsors&quot;&gt;Sponsors&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/nlohmann/json/develop/#support&quot;&gt;Support&lt;/a&gt; (&lt;a href=&quot;https://json.nlohmann.me&quot;&gt;documentation&lt;/a&gt;, &lt;a href=&quot;https://json.nlohmann.me/home/faq/&quot;&gt;FAQ&lt;/a&gt;, &lt;a href=&quot;https://github.com/nlohmann/json/discussions&quot;&gt;discussions&lt;/a&gt;, &lt;a href=&quot;https://json.nlohmann.me/api/basic_json/&quot;&gt;API&lt;/a&gt;, &lt;a href=&quot;https://github.com/nlohmann/json/issues&quot;&gt;bug issues&lt;/a&gt;)&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/nlohmann/json/develop/#quick-reference&quot;&gt;Quick reference&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/nlohmann/json/develop/#examples&quot;&gt;Examples&lt;/a&gt; 
  &lt;ul&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/nlohmann/json/develop/#read-json-from-a-file&quot;&gt;Read JSON from a file&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/nlohmann/json/develop/#creating-json-objects-from-json-literals&quot;&gt;Creating &lt;code&gt;json&lt;/code&gt; objects from JSON literals&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/nlohmann/json/develop/#json-as-a-first-class-data-type&quot;&gt;JSON as a first-class data type&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/nlohmann/json/develop/#serialization--deserialization&quot;&gt;Serialization / Deserialization&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/nlohmann/json/develop/#stl-like-access&quot;&gt;STL-like access&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/nlohmann/json/develop/#conversion-from-stl-containers&quot;&gt;Conversion from STL containers&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/nlohmann/json/develop/#json-pointer-and-json-patch&quot;&gt;JSON Pointer and JSON Patch&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/nlohmann/json/develop/#json-merge-patch&quot;&gt;JSON Merge Patch&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/nlohmann/json/develop/#implicit-conversions&quot;&gt;Implicit conversions&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/nlohmann/json/develop/#arbitrary-types-conversions&quot;&gt;Conversions to/from arbitrary types&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/nlohmann/json/develop/#specializing-enum-conversion&quot;&gt;Specializing enum conversion&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/nlohmann/json/develop/#binary-formats-bson-cbor-messagepack-ubjson-and-bjdata&quot;&gt;Binary formats (BSON, CBOR, MessagePack, UBJSON, and BJData)&lt;/a&gt;&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/nlohmann/json/develop/#customers&quot;&gt;Customers&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/nlohmann/json/develop/#ecosystem&quot;&gt;Ecosystem&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/nlohmann/json/develop/#supported-compilers&quot;&gt;Supported compilers&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/nlohmann/json/develop/#integration&quot;&gt;Integration&lt;/a&gt; 
  &lt;ul&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/nlohmann/json/develop/#cmake&quot;&gt;CMake&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/nlohmann/json/develop/#package-managers&quot;&gt;Package Managers&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/nlohmann/json/develop/#pkg-config&quot;&gt;Pkg-config&lt;/a&gt;&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/nlohmann/json/develop/#license&quot;&gt;License&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/nlohmann/json/develop/#contact&quot;&gt;Contact&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/nlohmann/json/develop/#thanks&quot;&gt;Thanks&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/nlohmann/json/develop/#used-third-party-tools&quot;&gt;Used third-party tools&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/nlohmann/json/develop/#notes&quot;&gt;Notes&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/nlohmann/json/develop/#execute-unit-tests&quot;&gt;Execute unit tests&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Design goals&lt;/h2&gt; 
&lt;p&gt;There are myriads of &lt;a href=&quot;https://json.org&quot;&gt;JSON&lt;/a&gt; libraries out there, and each may even have its reason to exist. Our class had these design goals:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;Intuitive syntax&lt;/strong&gt;. In languages such as Python, JSON feels like a first-class data type. We used all the operator magic of modern C++ to achieve the same feeling in your code. Check out the &lt;a href=&quot;https://raw.githubusercontent.com/nlohmann/json/develop/#examples&quot;&gt;examples below&lt;/a&gt; and you&#39;ll know what I mean.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;Trivial integration&lt;/strong&gt;. Our whole code consists of a single header file &lt;a href=&quot;https://github.com/nlohmann/json/raw/develop/single_include/nlohmann/json.hpp&quot;&gt;&lt;code&gt;json.hpp&lt;/code&gt;&lt;/a&gt;. That&#39;s it. No library, no subproject, no dependencies, no complex build system. The class is written in vanilla C++11. All in all, everything should require no adjustment of your compiler flags or project settings. The library is also included in all popular &lt;a href=&quot;https://json.nlohmann.me/integration/package_managers/&quot;&gt;package managers&lt;/a&gt;.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;Serious testing&lt;/strong&gt;. Our code is heavily &lt;a href=&quot;https://github.com/nlohmann/json/tree/develop/tests/src&quot;&gt;unit-tested&lt;/a&gt; and covers &lt;a href=&quot;https://coveralls.io/r/nlohmann/json&quot;&gt;100%&lt;/a&gt; of the code, including all exceptional behavior. Furthermore, we checked with &lt;a href=&quot;https://valgrind.org&quot;&gt;Valgrind&lt;/a&gt; and the &lt;a href=&quot;https://clang.llvm.org/docs/index.html&quot;&gt;Clang Sanitizers&lt;/a&gt; that there are no memory leaks. &lt;a href=&quot;https://github.com/google/oss-fuzz/tree/master/projects/json&quot;&gt;Google OSS-Fuzz&lt;/a&gt; additionally runs fuzz tests against all parsers 24/7, effectively executing billions of tests so far. To maintain high quality, the project is following the &lt;a href=&quot;https://bestpractices.coreinfrastructure.org/projects/289&quot;&gt;Core Infrastructure Initiative (CII) best practices&lt;/a&gt;. See the &lt;a href=&quot;https://json.nlohmann.me/community/quality_assurance&quot;&gt;quality assurance&lt;/a&gt; overview documentation.&lt;/p&gt; &lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;Other aspects were not so important to us:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;Memory efficiency&lt;/strong&gt;. Each JSON object has an overhead of one pointer (the maximal size of a union) and one enumeration element (1 byte). The default generalization uses the following C++ data types: &lt;code&gt;std::string&lt;/code&gt; for strings, &lt;code&gt;int64_t&lt;/code&gt;, &lt;code&gt;uint64_t&lt;/code&gt; or &lt;code&gt;double&lt;/code&gt; for numbers, &lt;code&gt;std::map&lt;/code&gt; for objects, &lt;code&gt;std::vector&lt;/code&gt; for arrays, and &lt;code&gt;bool&lt;/code&gt; for Booleans. However, you can template the generalized class &lt;code&gt;basic_json&lt;/code&gt; to your needs.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;Speed&lt;/strong&gt;. There are certainly &lt;a href=&quot;https://github.com/miloyip/nativejson-benchmark#parsing-time&quot;&gt;faster JSON libraries&lt;/a&gt; out there. However, if your goal is to speed up your development by adding JSON support with a single header, then this library is the way to go. If you know how to use a &lt;code&gt;std::vector&lt;/code&gt; or &lt;code&gt;std::map&lt;/code&gt;, you are already set.&lt;/p&gt; &lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;See the &lt;a href=&quot;https://github.com/nlohmann/json/raw/develop/.github/CONTRIBUTING.md#please-dont&quot;&gt;contribution guidelines&lt;/a&gt; for more information.&lt;/p&gt; 
&lt;h2&gt;Sponsors&lt;/h2&gt; 
&lt;p&gt;You can sponsor this library at &lt;a href=&quot;https://github.com/sponsors/nlohmann&quot;&gt;GitHub Sponsors&lt;/a&gt;.&lt;/p&gt; 
&lt;h3&gt;🙋 Priority Sponsor&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/codeclown&quot;&gt;Martti Laine&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/phrrngtn&quot;&gt;Paul Harrington&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/mercedes-benz&quot;&gt;Mercedes-Benz Group&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/mccaffers&quot;&gt;Ryan McCaffery&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;🏷️ Named Sponsors&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/reFX-Mike&quot;&gt;Michael Hartmann&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/sthagen&quot;&gt;Stefan Hagen&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/homer6&quot;&gt;Steve Sperandeo&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/eljefedelrodeodeljefe&quot;&gt;Robert Jefe Lindstädt&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/ciroque&quot;&gt;Steve Wagner&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Further support&lt;/h3&gt; 
&lt;p&gt;The development of the library is further supported by JetBrains by providing free access to their IDE tools.&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://jb.gg/OpenSourceSupport&quot;&gt;&lt;img src=&quot;https://resources.jetbrains.com/storage/products/company/brand/logos/jetbrains.svg?sanitize=true&quot; alt=&quot;JetBrains logo.&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;Thanks everyone!&lt;/p&gt; 
&lt;h2&gt;Support&lt;/h2&gt; 
&lt;p&gt;❓ If you have a &lt;strong&gt;question&lt;/strong&gt;, please check if it is already answered in the &lt;a href=&quot;https://json.nlohmann.me/home/faq/&quot;&gt;&lt;strong&gt;FAQ&lt;/strong&gt;&lt;/a&gt; or the &lt;a href=&quot;https://github.com/nlohmann/json/discussions/categories/q-a&quot;&gt;&lt;strong&gt;Q&amp;amp;A&lt;/strong&gt;&lt;/a&gt; section. If not, please &lt;a href=&quot;https://github.com/nlohmann/json/discussions/new&quot;&gt;&lt;strong&gt;ask a new question&lt;/strong&gt;&lt;/a&gt; there.&lt;/p&gt; 
&lt;p&gt;📚 If you want to &lt;strong&gt;learn more&lt;/strong&gt; about how to use the library, check out the rest of the &lt;a href=&quot;https://raw.githubusercontent.com/nlohmann/json/develop/#examples&quot;&gt;&lt;strong&gt;README&lt;/strong&gt;&lt;/a&gt;, have a look at &lt;a href=&quot;https://github.com/nlohmann/json/tree/develop/docs/mkdocs/docs/examples&quot;&gt;&lt;strong&gt;code examples&lt;/strong&gt;&lt;/a&gt;, or browse through the &lt;a href=&quot;https://json.nlohmann.me&quot;&gt;&lt;strong&gt;help pages&lt;/strong&gt;&lt;/a&gt;.&lt;/p&gt; 
&lt;p&gt;🚧 If you want to understand the &lt;strong&gt;API&lt;/strong&gt; better, check out the &lt;a href=&quot;https://json.nlohmann.me/api/basic_json/&quot;&gt;&lt;strong&gt;API Reference&lt;/strong&gt;&lt;/a&gt; or have a look at the &lt;a href=&quot;https://raw.githubusercontent.com/nlohmann/json/develop/#quick-reference&quot;&gt;quick reference&lt;/a&gt; below.&lt;/p&gt; 
&lt;p&gt;🐛 If you found a &lt;strong&gt;bug&lt;/strong&gt;, please check the &lt;a href=&quot;https://json.nlohmann.me/home/faq/&quot;&gt;&lt;strong&gt;FAQ&lt;/strong&gt;&lt;/a&gt; if it is a known issue or the result of a design decision. Please also have a look at the &lt;a href=&quot;https://github.com/nlohmann/json/issues&quot;&gt;&lt;strong&gt;issue list&lt;/strong&gt;&lt;/a&gt; before you &lt;a href=&quot;https://github.com/nlohmann/json/issues/new/choose&quot;&gt;&lt;strong&gt;create a new issue&lt;/strong&gt;&lt;/a&gt;. Please provide as much information as possible to help us understand and reproduce your issue.&lt;/p&gt; 
&lt;p&gt;There is also a &lt;a href=&quot;https://github.com/Kapeli/Dash-User-Contributions/tree/master/docsets/JSON_for_Modern_C%2B%2B&quot;&gt;&lt;strong&gt;docset&lt;/strong&gt;&lt;/a&gt; for the documentation browsers &lt;a href=&quot;https://kapeli.com/dash&quot;&gt;Dash&lt;/a&gt;, &lt;a href=&quot;https://velocity.silverlakesoftware.com&quot;&gt;Velocity&lt;/a&gt;, and &lt;a href=&quot;https://zealdocs.org&quot;&gt;Zeal&lt;/a&gt; that contains the full &lt;a href=&quot;https://json.nlohmann.me&quot;&gt;documentation&lt;/a&gt; as an offline resource.&lt;/p&gt; 
&lt;h2&gt;Quick reference&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;Constructors&lt;/strong&gt; &lt;a href=&quot;https://json.nlohmann.me/api/basic_json/basic_json&quot;&gt;basic_json&lt;/a&gt;, &lt;a href=&quot;https://json.nlohmann.me/api/basic_json/array&quot;&gt;array&lt;/a&gt;, &lt;a href=&quot;https://json.nlohmann.me/api/basic_json/binary&quot;&gt;binary&lt;/a&gt;, &lt;a href=&quot;https://json.nlohmann.me/api/basic_json/object&quot;&gt;object&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Object inspection&lt;/strong&gt;: &lt;a href=&quot;https://json.nlohmann.me/api/basic_json/type&quot;&gt;type&lt;/a&gt;, &lt;a href=&quot;https://json.nlohmann.me/api/basic_json/operator_value_t&quot;&gt;operator value_t&lt;/a&gt;, &lt;a href=&quot;https://json.nlohmann.me/api/basic_json/type_name&quot;&gt;type_name&lt;/a&gt;, &lt;a href=&quot;https://json.nlohmann.me/api/basic_json/is_primitive&quot;&gt;is_primitive&lt;/a&gt;, &lt;a href=&quot;https://json.nlohmann.me/api/basic_json/is_structured&quot;&gt;is_structured&lt;/a&gt;, &lt;a href=&quot;https://json.nlohmann.me/api/basic_json/is_null&quot;&gt;is_null&lt;/a&gt;, &lt;a href=&quot;https://json.nlohmann.me/api/basic_json/is_boolean&quot;&gt;is_boolean&lt;/a&gt;, &lt;a href=&quot;https://json.nlohmann.me/api/basic_json/is_number&quot;&gt;is_number&lt;/a&gt;, &lt;a href=&quot;https://json.nlohmann.me/api/basic_json/is_number_integer&quot;&gt;is_number_integer&lt;/a&gt;, &lt;a href=&quot;https://json.nlohmann.me/api/basic_json/is_number_unsigned&quot;&gt;is_number_unsigned&lt;/a&gt;, &lt;a href=&quot;https://json.nlohmann.me/api/basic_json/is_number_float&quot;&gt;is_number_float&lt;/a&gt;, &lt;a href=&quot;https://json.nlohmann.me/api/basic_json/is_object&quot;&gt;is_object&lt;/a&gt;, &lt;a href=&quot;https://json.nlohmann.me/api/basic_json/is_array&quot;&gt;is_array&lt;/a&gt;, &lt;a href=&quot;https://json.nlohmann.me/api/basic_json/is_string&quot;&gt;is_string&lt;/a&gt;, &lt;a href=&quot;https://json.nlohmann.me/api/basic_json/is_binary&quot;&gt;is_binary&lt;/a&gt;, &lt;a href=&quot;https://json.nlohmann.me/api/basic_json/is_discarded&quot;&gt;is_discarded&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Value access&lt;/strong&gt;; &lt;a href=&quot;https://json.nlohmann.me/api/basic_json/get&quot;&gt;get&lt;/a&gt;, &lt;a href=&quot;https://json.nlohmann.me/api/basic_json/get_to&quot;&gt;get_to&lt;/a&gt;, &lt;a href=&quot;https://json.nlohmann.me/api/basic_json/get_ptr&quot;&gt;get_ptr&lt;/a&gt;, &lt;a href=&quot;https://json.nlohmann.me/api/basic_json/get_ref&quot;&gt;get_ref&lt;/a&gt;, &lt;a href=&quot;https://json.nlohmann.me/api/basic_json/operator_ValueType&quot;&gt;operator ValueType&lt;/a&gt;, &lt;a href=&quot;https://json.nlohmann.me/api/basic_json/get_binary&quot;&gt;get_binary&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Element access&lt;/strong&gt;: &lt;a href=&quot;https://json.nlohmann.me/api/basic_json/at&quot;&gt;at&lt;/a&gt;, &lt;a href=&quot;https://json.nlohmann.me/api/basic_json/operator%5B%5D&quot;&gt;operator[]&lt;/a&gt;, &lt;a href=&quot;https://json.nlohmann.me/api/basic_json/value&quot;&gt;value&lt;/a&gt;, &lt;a href=&quot;https://json.nlohmann.me/api/basic_json/front&quot;&gt;front&lt;/a&gt;, &lt;a href=&quot;https://json.nlohmann.me/api/basic_json/back&quot;&gt;back&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Lookup&lt;/strong&gt;: &lt;a href=&quot;https://json.nlohmann.me/api/basic_json/find&quot;&gt;find&lt;/a&gt;, &lt;a href=&quot;https://json.nlohmann.me/api/basic_json/count&quot;&gt;count&lt;/a&gt;, &lt;a href=&quot;https://json.nlohmann.me/api/basic_json/contains&quot;&gt;contains&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Iterators&lt;/strong&gt;: &lt;a href=&quot;https://json.nlohmann.me/api/basic_json/begin&quot;&gt;begin&lt;/a&gt;, &lt;a href=&quot;https://json.nlohmann.me/api/basic_json/cbegin&quot;&gt;cbegin&lt;/a&gt;, &lt;a href=&quot;https://json.nlohmann.me/api/basic_json/end&quot;&gt;end&lt;/a&gt;, &lt;a href=&quot;https://json.nlohmann.me/api/basic_json/cend&quot;&gt;cend&lt;/a&gt;, &lt;a href=&quot;https://json.nlohmann.me/api/basic_json/rbegin&quot;&gt;rbegin&lt;/a&gt;, &lt;a href=&quot;https://json.nlohmann.me/api/basic_json/rend&quot;&gt;rend&lt;/a&gt;, &lt;a href=&quot;https://json.nlohmann.me/api/basic_json/crbegin&quot;&gt;crbegin&lt;/a&gt;, &lt;a href=&quot;https://json.nlohmann.me/api/basic_json/crend&quot;&gt;crend&lt;/a&gt;, &lt;a href=&quot;https://json.nlohmann.me/api/basic_json/items&quot;&gt;items&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Capacity&lt;/strong&gt;: &lt;a href=&quot;https://json.nlohmann.me/api/basic_json/empty&quot;&gt;empty&lt;/a&gt;, &lt;a href=&quot;https://json.nlohmann.me/api/basic_json/size&quot;&gt;size&lt;/a&gt;, &lt;a href=&quot;https://json.nlohmann.me/api/basic_json/max_size&quot;&gt;max_size&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Modifiers&lt;/strong&gt;: &lt;a href=&quot;https://json.nlohmann.me/api/basic_json/clear&quot;&gt;clear&lt;/a&gt;, &lt;a href=&quot;https://json.nlohmann.me/api/basic_json/push_back&quot;&gt;push_back&lt;/a&gt;, &lt;a href=&quot;https://json.nlohmann.me/api/basic_json/operator+=&quot;&gt;operator+=&lt;/a&gt;, &lt;a href=&quot;https://json.nlohmann.me/api/basic_json/emplace_back&quot;&gt;emplace_back&lt;/a&gt;, &lt;a href=&quot;https://json.nlohmann.me/api/basic_json/emplace&quot;&gt;emplace&lt;/a&gt;, &lt;a href=&quot;https://json.nlohmann.me/api/basic_json/erase&quot;&gt;erase&lt;/a&gt;, &lt;a href=&quot;https://json.nlohmann.me/api/basic_json/insert&quot;&gt;insert&lt;/a&gt;, &lt;a href=&quot;https://json.nlohmann.me/api/basic_json/update&quot;&gt;update&lt;/a&gt;, &lt;a href=&quot;https://json.nlohmann.me/api/basic_json/swap&quot;&gt;swap&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Lexicographical comparison operators&lt;/strong&gt;: &lt;a href=&quot;https://json.nlohmann.me/api/basic_json/operator_eq&quot;&gt;operator==&lt;/a&gt;, &lt;a href=&quot;https://json.nlohmann.me/api/basic_json/operator_ne&quot;&gt;operator!=&lt;/a&gt;, &lt;a href=&quot;https://json.nlohmann.me/api/basic_json/operator_lt&quot;&gt;operator&amp;lt;&lt;/a&gt;, &lt;a href=&quot;https://json.nlohmann.me/api/basic_json/operator_gt&quot;&gt;operator&amp;gt;&lt;/a&gt;, &lt;a href=&quot;https://json.nlohmann.me/api/basic_json/operator_le&quot;&gt;operator&amp;lt;=&lt;/a&gt;, &lt;a href=&quot;https://json.nlohmann.me/api/basic_json/operator_ge&quot;&gt;operator&amp;gt;=&lt;/a&gt;, &lt;a href=&quot;https://json.nlohmann.me/api/basic_json/operator_spaceship&quot;&gt;operator&amp;lt;=&amp;gt;&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Serialization / Dumping&lt;/strong&gt;: &lt;a href=&quot;https://json.nlohmann.me/api/basic_json/dump&quot;&gt;dump&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Deserialization / Parsing&lt;/strong&gt;: &lt;a href=&quot;https://json.nlohmann.me/api/basic_json/parse&quot;&gt;parse&lt;/a&gt;, &lt;a href=&quot;https://json.nlohmann.me/api/basic_json/accept&quot;&gt;accept&lt;/a&gt;, &lt;a href=&quot;https://json.nlohmann.me/api/basic_json/sax_parse&quot;&gt;sax_parse&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;JSON Pointer functions&lt;/strong&gt;: &lt;a href=&quot;https://json.nlohmann.me/api/basic_json/flatten&quot;&gt;flatten&lt;/a&gt;, &lt;a href=&quot;https://json.nlohmann.me/api/basic_json/unflatten&quot;&gt;unflatten&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;JSON Patch functions&lt;/strong&gt;: &lt;a href=&quot;https://json.nlohmann.me/api/basic_json/patch&quot;&gt;patch&lt;/a&gt;, &lt;a href=&quot;https://json.nlohmann.me/api/basic_json/patch_inplace&quot;&gt;patch_inplace&lt;/a&gt;, &lt;a href=&quot;https://json.nlohmann.me/api/basic_json/diff&quot;&gt;diff&lt;/a&gt;, &lt;a href=&quot;https://json.nlohmann.me/api/basic_json/merge_patch&quot;&gt;merge_patch&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Static functions&lt;/strong&gt;: &lt;a href=&quot;https://json.nlohmann.me/api/basic_json/meta&quot;&gt;meta&lt;/a&gt;, &lt;a href=&quot;https://json.nlohmann.me/api/basic_json/get_allocator&quot;&gt;get_allocator&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Binary formats&lt;/strong&gt;: &lt;a href=&quot;https://json.nlohmann.me/api/basic_json/from_bjdata&quot;&gt;from_bjdata&lt;/a&gt;, &lt;a href=&quot;https://json.nlohmann.me/api/basic_json/from_bson&quot;&gt;from_bson&lt;/a&gt;, &lt;a href=&quot;https://json.nlohmann.me/api/basic_json/from_cbor&quot;&gt;from_cbor&lt;/a&gt;, &lt;a href=&quot;https://json.nlohmann.me/api/basic_json/from_msgpack&quot;&gt;from_msgpack&lt;/a&gt;, &lt;a href=&quot;https://json.nlohmann.me/api/basic_json/from_ubjson&quot;&gt;from_ubjson&lt;/a&gt;, &lt;a href=&quot;https://json.nlohmann.me/api/basic_json/to_bjdata&quot;&gt;to_bjdata&lt;/a&gt;, &lt;a href=&quot;https://json.nlohmann.me/api/basic_json/to_bson&quot;&gt;to_bson&lt;/a&gt;, &lt;a href=&quot;https://json.nlohmann.me/api/basic_json/to_cbor&quot;&gt;to_cbor&lt;/a&gt;, &lt;a href=&quot;https://json.nlohmann.me/api/basic_json/to_msgpack&quot;&gt;to_msgpack&lt;/a&gt;, &lt;a href=&quot;https://json.nlohmann.me/api/basic_json/to_ubjson&quot;&gt;to_ubjson&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Non-member functions&lt;/strong&gt;: &lt;a href=&quot;https://json.nlohmann.me/api/operator_ltlt/&quot;&gt;operator&amp;lt;&amp;lt;&lt;/a&gt;, &lt;a href=&quot;https://json.nlohmann.me/api/operator_gtgt/&quot;&gt;operator&amp;gt;&amp;gt;&lt;/a&gt;, &lt;a href=&quot;https://json.nlohmann.me/api/basic_json/to_string&quot;&gt;to_string&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Literals&lt;/strong&gt;: &lt;a href=&quot;https://json.nlohmann.me/api/operator_literal_json&quot;&gt;operator&quot;&quot;_json&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Helper classes&lt;/strong&gt;: &lt;a href=&quot;https://json.nlohmann.me/api/basic_json/std_hash&quot;&gt;std::hash&amp;lt;basic_json&amp;gt;&lt;/a&gt;, &lt;a href=&quot;https://json.nlohmann.me/api/basic_json/std_swap&quot;&gt;std::swap&amp;lt;basic_json&amp;gt;&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;a href=&quot;https://json.nlohmann.me/api/basic_json/&quot;&gt;&lt;strong&gt;Full API documentation&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;h2&gt;Examples&lt;/h2&gt; 
&lt;p&gt;Here are some examples to give you an idea how to use the class.&lt;/p&gt; 
&lt;p&gt;Besides the examples below, you may want to:&lt;/p&gt; 
&lt;p&gt;→ Check the &lt;a href=&quot;https://json.nlohmann.me/&quot;&gt;documentation&lt;/a&gt;&lt;br /&gt; → Browse the &lt;a href=&quot;https://github.com/nlohmann/json/tree/develop/docs/mkdocs/docs/examples&quot;&gt;standalone example files&lt;/a&gt;&lt;br /&gt; → Read the full &lt;a href=&quot;https://json.nlohmann.me/api/basic_json/&quot;&gt;API Documentation&lt;/a&gt; with self-contained examples for every function&lt;/p&gt; 
&lt;h3&gt;Read JSON from a file&lt;/h3&gt; 
&lt;p&gt;The &lt;code&gt;json&lt;/code&gt; class provides an API for manipulating a JSON value. To create a &lt;code&gt;json&lt;/code&gt; object by reading a JSON file:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-cpp&quot;&gt;#include &amp;lt;fstream&amp;gt;
#include &amp;lt;nlohmann/json.hpp&amp;gt;
using json = nlohmann::json;

// ...

std::ifstream f(&quot;example.json&quot;);
json data = json::parse(f);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;If using modules (enabled with &lt;code&gt;NLOHMANN_JSON_BUILD_MODULES&lt;/code&gt;), this example becomes:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-cpp&quot;&gt;import std;
import nlohmann.json;

using json = nlohmann::json;

// ...

std::ifstream f(&quot;example.json&quot;);
json data = json::parse(f);
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;Creating &lt;code&gt;json&lt;/code&gt; objects from JSON literals&lt;/h3&gt; 
&lt;p&gt;Assume you want to hard-code this literal JSON value as a &lt;code&gt;json&lt;/code&gt; object:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-json&quot;&gt;{
  &quot;pi&quot;: 3.141,
  &quot;happy&quot;: true
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;There are various options:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-cpp&quot;&gt;// Using (raw) string literals and json::parse
json ex1 = json::parse(R&quot;(
  {
    &quot;pi&quot;: 3.141,
    &quot;happy&quot;: true
  }
)&quot;);

// Using user-defined (raw) string literals
using namespace nlohmann::literals;
json ex2 = R&quot;(
  {
    &quot;pi&quot;: 3.141,
    &quot;happy&quot;: true
  }
)&quot;_json;

// Using initializer lists
json ex3 = {
  {&quot;happy&quot;, true},
  {&quot;pi&quot;, 3.141},
};
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;JSON as a first-class data type&lt;/h3&gt; 
&lt;p&gt;Here are some examples to give you an idea how to use the class.&lt;/p&gt; 
&lt;p&gt;Assume you want to create the JSON object&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-json&quot;&gt;{
  &quot;pi&quot;: 3.141,
  &quot;happy&quot;: true,
  &quot;name&quot;: &quot;Niels&quot;,
  &quot;nothing&quot;: null,
  &quot;answer&quot;: {
    &quot;everything&quot;: 42
  },
  &quot;list&quot;: [1, 0, 2],
  &quot;object&quot;: {
    &quot;currency&quot;: &quot;USD&quot;,
    &quot;value&quot;: 42.99
  }
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;With this library, you could write:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-cpp&quot;&gt;// create an empty structure (null)
json j;

// add a number stored as double (note the implicit conversion of j to an object)
j[&quot;pi&quot;] = 3.141;

// add a Boolean stored as bool
j[&quot;happy&quot;] = true;

// add a string stored as std::string
j[&quot;name&quot;] = &quot;Niels&quot;;

// add another null object by passing nullptr
j[&quot;nothing&quot;] = nullptr;

// add an object inside the object
j[&quot;answer&quot;][&quot;everything&quot;] = 42;

// add an array stored as std::vector (using an initializer list)
j[&quot;list&quot;] = { 1, 0, 2 };

// add another object (using an initializer list of pairs)
j[&quot;object&quot;] = { {&quot;currency&quot;, &quot;USD&quot;}, {&quot;value&quot;, 42.99} };

// instead, you could also write (which looks very similar to the JSON above)
json j2 = {
  {&quot;pi&quot;, 3.141},
  {&quot;happy&quot;, true},
  {&quot;name&quot;, &quot;Niels&quot;},
  {&quot;nothing&quot;, nullptr},
  {&quot;answer&quot;, {
    {&quot;everything&quot;, 42}
  }},
  {&quot;list&quot;, {1, 0, 2}},
  {&quot;object&quot;, {
    {&quot;currency&quot;, &quot;USD&quot;},
    {&quot;value&quot;, 42.99}
  }}
};
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Note that in all these cases, you never need to &quot;tell&quot; the compiler which JSON value type you want to use. If you want to be explicit or express some edge cases, the functions &lt;a href=&quot;https://json.nlohmann.me/api/basic_json/array/&quot;&gt;&lt;code&gt;json::array()&lt;/code&gt;&lt;/a&gt; and &lt;a href=&quot;https://json.nlohmann.me/api/basic_json/object/&quot;&gt;&lt;code&gt;json::object()&lt;/code&gt;&lt;/a&gt; will help:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-cpp&quot;&gt;// a way to express the empty array []
json empty_array_explicit = json::array();

// ways to express the empty object {}
json empty_object_implicit = json({});
json empty_object_explicit = json::object();

// a way to express an _array_ of key/value pairs [[&quot;currency&quot;, &quot;USD&quot;], [&quot;value&quot;, 42.99]]
json array_not_object = json::array({ {&quot;currency&quot;, &quot;USD&quot;}, {&quot;value&quot;, 42.99} });
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;Serialization / Deserialization&lt;/h3&gt; 
&lt;h4&gt;To/from strings&lt;/h4&gt; 
&lt;p&gt;You can create a JSON value (deserialization) by appending &lt;code&gt;_json&lt;/code&gt; to a string literal:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-cpp&quot;&gt;// create object from string literal
json j = &quot;{ \&quot;happy\&quot;: true, \&quot;pi\&quot;: 3.141 }&quot;_json;

// or even nicer with a raw string literal
auto j2 = R&quot;(
  {
    &quot;happy&quot;: true,
    &quot;pi&quot;: 3.141
  }
)&quot;_json;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Note that without appending the &lt;code&gt;_json&lt;/code&gt; suffix, the passed string literal is not parsed, but just used as JSON string value. That is, &lt;code&gt;json j = &quot;{ \&quot;happy\&quot;: true, \&quot;pi\&quot;: 3.141 }&quot;&lt;/code&gt; would just store the string &lt;code&gt;&quot;{ &quot;happy&quot;: true, &quot;pi&quot;: 3.141 }&quot;&lt;/code&gt; rather than parsing the actual object.&lt;/p&gt; 
&lt;p&gt;The string literal should be brought into scope with &lt;code&gt;using namespace nlohmann::literals;&lt;/code&gt; (see &lt;a href=&quot;https://json.nlohmann.me/api/operator_literal_json/&quot;&gt;&lt;code&gt;json::parse()&lt;/code&gt;&lt;/a&gt;).&lt;/p&gt; 
&lt;p&gt;The above example can also be expressed explicitly using &lt;a href=&quot;https://json.nlohmann.me/api/basic_json/parse/&quot;&gt;&lt;code&gt;json::parse()&lt;/code&gt;&lt;/a&gt;:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-cpp&quot;&gt;// parse explicitly
auto j3 = json::parse(R&quot;({&quot;happy&quot;: true, &quot;pi&quot;: 3.141})&quot;);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;You can also get a string representation of a JSON value (serialize):&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-cpp&quot;&gt;// explicit conversion to string
std::string s = j.dump();    // {&quot;happy&quot;:true,&quot;pi&quot;:3.141}

// serialization with pretty printing
// pass in the amount of spaces to indent
std::cout &amp;lt;&amp;lt; j.dump(4) &amp;lt;&amp;lt; std::endl;
// {
//     &quot;happy&quot;: true,
//     &quot;pi&quot;: 3.141
// }
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Note the difference between serialization and assignment:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-cpp&quot;&gt;// store a string in a JSON value
json j_string = &quot;this is a string&quot;;

// retrieve the string value
auto cpp_string = j_string.get&amp;lt;std::string&amp;gt;();
// retrieve the string value (alternative when a variable already exists)
std::string cpp_string2;
j_string.get_to(cpp_string2);

// retrieve the serialized value (explicit JSON serialization)
std::string serialized_string = j_string.dump();

// output of original string
std::cout &amp;lt;&amp;lt; cpp_string &amp;lt;&amp;lt; &quot; == &quot; &amp;lt;&amp;lt; cpp_string2 &amp;lt;&amp;lt; &quot; == &quot; &amp;lt;&amp;lt; j_string.get&amp;lt;std::string&amp;gt;() &amp;lt;&amp;lt; &#39;\n&#39;;
// output of serialized value
std::cout &amp;lt;&amp;lt; j_string &amp;lt;&amp;lt; &quot; == &quot; &amp;lt;&amp;lt; serialized_string &amp;lt;&amp;lt; std::endl;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;a href=&quot;https://json.nlohmann.me/api/basic_json/dump/&quot;&gt;&lt;code&gt;.dump()&lt;/code&gt;&lt;/a&gt; returns the originally stored string value.&lt;/p&gt; 
&lt;p&gt;Note the library only supports UTF-8. When you store strings with different encodings in the library, calling &lt;a href=&quot;https://json.nlohmann.me/api/basic_json/dump/&quot;&gt;&lt;code&gt;dump()&lt;/code&gt;&lt;/a&gt; may throw an exception unless &lt;code&gt;json::error_handler_t::replace&lt;/code&gt; or &lt;code&gt;json::error_handler_t::ignore&lt;/code&gt; are used as error handlers.&lt;/p&gt; 
&lt;h4&gt;To/from streams (e.g., files, string streams)&lt;/h4&gt; 
&lt;p&gt;You can also use streams to serialize and deserialize:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-cpp&quot;&gt;// deserialize from standard input
json j;
std::cin &amp;gt;&amp;gt; j;

// serialize to standard output
std::cout &amp;lt;&amp;lt; j;

// the setw manipulator was overloaded to set the indentation for pretty printing
std::cout &amp;lt;&amp;lt; std::setw(4) &amp;lt;&amp;lt; j &amp;lt;&amp;lt; std::endl;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;These operators work for any subclasses of &lt;code&gt;std::istream&lt;/code&gt; or &lt;code&gt;std::ostream&lt;/code&gt;. Here is the same example with files:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-cpp&quot;&gt;// read a JSON file
std::ifstream i(&quot;file.json&quot;);
json j;
i &amp;gt;&amp;gt; j;

// write prettified JSON to another file
std::ofstream o(&quot;pretty.json&quot;);
o &amp;lt;&amp;lt; std::setw(4) &amp;lt;&amp;lt; j &amp;lt;&amp;lt; std::endl;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Please note that setting the exception bit for &lt;code&gt;failbit&lt;/code&gt; is inappropriate for this use case. It will result in program termination due to the &lt;code&gt;noexcept&lt;/code&gt; specifier in use.&lt;/p&gt; 
&lt;h4&gt;Read from iterator range&lt;/h4&gt; 
&lt;p&gt;You can also parse JSON from an iterator range; that is, from any container accessible by iterators whose &lt;code&gt;value_type&lt;/code&gt; is an integral type of 1, 2, or 4 bytes, which will be interpreted as UTF-8, UTF-16, and UTF-32 respectively. For instance, a &lt;code&gt;std::vector&amp;lt;std::uint8_t&amp;gt;&lt;/code&gt;, or a &lt;code&gt;std::list&amp;lt;std::uint16_t&amp;gt;&lt;/code&gt;:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-cpp&quot;&gt;std::vector&amp;lt;std::uint8_t&amp;gt; v = {&#39;t&#39;, &#39;r&#39;, &#39;u&#39;, &#39;e&#39;};
json j = json::parse(v.begin(), v.end());
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;You may leave the iterators for the range [begin, end):&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-cpp&quot;&gt;std::vector&amp;lt;std::uint8_t&amp;gt; v = {&#39;t&#39;, &#39;r&#39;, &#39;u&#39;, &#39;e&#39;};
json j = json::parse(v);
&lt;/code&gt;&lt;/pre&gt; 
&lt;h4&gt;Custom data source&lt;/h4&gt; 
&lt;p&gt;Since the parse function accepts arbitrary iterator ranges, you can provide your own data sources by implementing the &lt;code&gt;LegacyInputIterator&lt;/code&gt; concept.&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-cpp&quot;&gt;struct MyContainer {
  void advance();
  const char&amp;amp; get_current();
};

struct MyIterator {
    using difference_type = std::ptrdiff_t;
    using value_type = char;
    using pointer = const char*;
    using reference = const char&amp;amp;;
    using iterator_category = std::input_iterator_tag;

    explicit MyIterator(MyContainer* tgt = nullptr) : target(tgt) {}

    MyIterator&amp;amp; operator++() {
        target-&amp;gt;advance();
        return *this;
    }

    bool operator!=(const MyIterator&amp;amp; rhs) const {
        return rhs.target != target;
    }

    reference operator*() const {
        return target-&amp;gt;get_current();
    }

    MyContainer* target = nullptr;
};

MyIterator begin(MyContainer&amp;amp; tgt) {
    return MyIterator{&amp;amp;tgt};
}

MyIterator end(const MyContainer&amp;amp;) {
    return MyIterator{};
}

void foo() {
    MyContainer c;
    json j = json::parse(begin(c), end(c));
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;h4&gt;SAX interface&lt;/h4&gt; 
&lt;p&gt;The library uses a SAX-like interface with the following functions:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-cpp&quot;&gt;// called when null is parsed
bool null();

// called when a boolean is parsed; value is passed
bool boolean(bool val);

// called when a signed or unsigned integer number is parsed; value is passed
bool number_integer(number_integer_t val);
bool number_unsigned(number_unsigned_t val);

// called when a floating-point number is parsed; value and original string is passed
bool number_float(number_float_t val, const string_t&amp;amp; s);

// called when a string is parsed; value is passed and can be safely moved away
bool string(string_t&amp;amp; val);
// called when a binary value is parsed; value is passed and can be safely moved away
bool binary(binary_t&amp;amp; val);

// called when an object or array begins or ends, resp. The number of elements is passed (or -1 if not known)
bool start_object(std::size_t elements);
bool end_object();
bool start_array(std::size_t elements);
bool end_array();
// called when an object key is parsed; value is passed and can be safely moved away
bool key(string_t&amp;amp; val);

// called when a parse error occurs; byte position, the last token, and an exception is passed
bool parse_error(std::size_t position, const std::string&amp;amp; last_token, const detail::exception&amp;amp; ex);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;The return value of each function determines whether parsing should proceed.&lt;/p&gt; 
&lt;p&gt;To implement your own SAX handler, proceed as follows:&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;Implement the SAX interface in a class. You can use class &lt;code&gt;nlohmann::json_sax&amp;lt;json&amp;gt;&lt;/code&gt; as base class, but you can also use any class where the functions described above are implemented and public.&lt;/li&gt; 
 &lt;li&gt;Create an object of your SAX interface class, e.g. &lt;code&gt;my_sax&lt;/code&gt;.&lt;/li&gt; 
 &lt;li&gt;Call &lt;code&gt;bool json::sax_parse(input, &amp;amp;my_sax)&lt;/code&gt;; where the first parameter can be any input like a string or an input stream and the second parameter is a pointer to your SAX interface.&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;Note the &lt;code&gt;sax_parse&lt;/code&gt; function only returns a &lt;code&gt;bool&lt;/code&gt; indicating the result of the last executed SAX event. It does not return a &lt;code&gt;json&lt;/code&gt; value - it is up to you to decide what to do with the SAX events. Furthermore, no exceptions are thrown in case of a parse error -- it is up to you what to do with the exception object passed to your &lt;code&gt;parse_error&lt;/code&gt; implementation. Internally, the SAX interface is used for the DOM parser (class &lt;code&gt;json_sax_dom_parser&lt;/code&gt;) as well as the acceptor (&lt;code&gt;json_sax_acceptor&lt;/code&gt;), see file &lt;a href=&quot;https://github.com/nlohmann/json/raw/develop/include/nlohmann/detail/input/json_sax.hpp&quot;&gt;&lt;code&gt;json_sax.hpp&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt; 
&lt;h3&gt;STL-like access&lt;/h3&gt; 
&lt;p&gt;We designed the JSON class to behave just like an STL container. In fact, it satisfies the &lt;a href=&quot;https://en.cppreference.com/w/cpp/named_req/ReversibleContainer&quot;&gt;&lt;strong&gt;ReversibleContainer&lt;/strong&gt;&lt;/a&gt; requirement.&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-cpp&quot;&gt;// create an array using push_back
json j;
j.push_back(&quot;foo&quot;);
j.push_back(1);
j.push_back(true);

// also use emplace_back
j.emplace_back(1.78);

// iterate the array
for (json::iterator it = j.begin(); it != j.end(); ++it) {
  std::cout &amp;lt;&amp;lt; *it &amp;lt;&amp;lt; &#39;\n&#39;;
}

// range-based for
for (auto&amp;amp; element : j) {
  std::cout &amp;lt;&amp;lt; element &amp;lt;&amp;lt; &#39;\n&#39;;
}

// getter/setter
const auto tmp = j[0].get&amp;lt;std::string&amp;gt;();
j[1] = 42;
bool foo = j.at(2);

// comparison
j == R&quot;([&quot;foo&quot;, 1, true, 1.78])&quot;_json;  // true

// other stuff
j.size();     // 4 entries
j.empty();    // false
j.type();     // json::value_t::array
j.clear();    // the array is empty again

// convenience type checkers
j.is_null();
j.is_boolean();
j.is_number();
j.is_object();
j.is_array();
j.is_string();

// create an object
json o;
o[&quot;foo&quot;] = 23;
o[&quot;bar&quot;] = false;
o[&quot;baz&quot;] = 3.141;

// also use emplace
o.emplace(&quot;weather&quot;, &quot;sunny&quot;);

// special iterator member functions for objects
for (json::iterator it = o.begin(); it != o.end(); ++it) {
  std::cout &amp;lt;&amp;lt; it.key() &amp;lt;&amp;lt; &quot; : &quot; &amp;lt;&amp;lt; it.value() &amp;lt;&amp;lt; &quot;\n&quot;;
}

// the same code as range for
for (auto&amp;amp; el : o.items()) {
  std::cout &amp;lt;&amp;lt; el.key() &amp;lt;&amp;lt; &quot; : &quot; &amp;lt;&amp;lt; el.value() &amp;lt;&amp;lt; &quot;\n&quot;;
}

// even easier with structured bindings (C++17)
for (auto&amp;amp; [key, value] : o.items()) {
  std::cout &amp;lt;&amp;lt; key &amp;lt;&amp;lt; &quot; : &quot; &amp;lt;&amp;lt; value &amp;lt;&amp;lt; &quot;\n&quot;;
}

// find an entry
if (o.contains(&quot;foo&quot;)) {
  // there is an entry with key &quot;foo&quot;
}

// or via find and an iterator
if (o.find(&quot;foo&quot;) != o.end()) {
  // there is an entry with key &quot;foo&quot;
}

// or simpler using count()
int foo_present = o.count(&quot;foo&quot;); // 1
int fob_present = o.count(&quot;fob&quot;); // 0

// delete an entry
o.erase(&quot;foo&quot;);
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;Conversion from STL containers&lt;/h3&gt; 
&lt;p&gt;Any sequence container (&lt;code&gt;std::array&lt;/code&gt;, &lt;code&gt;std::vector&lt;/code&gt;, &lt;code&gt;std::deque&lt;/code&gt;, &lt;code&gt;std::forward_list&lt;/code&gt;, &lt;code&gt;std::list&lt;/code&gt;) whose values can be used to construct JSON values (e.g., integers, floating point numbers, Booleans, string types, or again STL containers described in this section) can be used to create a JSON array. The same holds for similar associative containers (&lt;code&gt;std::set&lt;/code&gt;, &lt;code&gt;std::multiset&lt;/code&gt;, &lt;code&gt;std::unordered_set&lt;/code&gt;, &lt;code&gt;std::unordered_multiset&lt;/code&gt;), but in these cases the order of the elements of the array depends on how the elements are ordered in the respective STL container.&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-cpp&quot;&gt;std::vector&amp;lt;int&amp;gt; c_vector {1, 2, 3, 4};
json j_vec(c_vector);
// [1, 2, 3, 4]

std::deque&amp;lt;double&amp;gt; c_deque {1.2, 2.3, 3.4, 5.6};
json j_deque(c_deque);
// [1.2, 2.3, 3.4, 5.6]

std::list&amp;lt;bool&amp;gt; c_list {true, true, false, true};
json j_list(c_list);
// [true, true, false, true]

std::forward_list&amp;lt;int64_t&amp;gt; c_flist {12345678909876, 23456789098765, 34567890987654, 45678909876543};
json j_flist(c_flist);
// [12345678909876, 23456789098765, 34567890987654, 45678909876543]

std::array&amp;lt;unsigned long, 4&amp;gt; c_array {{1, 2, 3, 4}};
json j_array(c_array);
// [1, 2, 3, 4]

std::set&amp;lt;std::string&amp;gt; c_set {&quot;one&quot;, &quot;two&quot;, &quot;three&quot;, &quot;four&quot;, &quot;one&quot;};
json j_set(c_set); // only one entry for &quot;one&quot; is used
// [&quot;four&quot;, &quot;one&quot;, &quot;three&quot;, &quot;two&quot;]

std::unordered_set&amp;lt;std::string&amp;gt; c_uset {&quot;one&quot;, &quot;two&quot;, &quot;three&quot;, &quot;four&quot;, &quot;one&quot;};
json j_uset(c_uset); // only one entry for &quot;one&quot; is used
// maybe [&quot;two&quot;, &quot;three&quot;, &quot;four&quot;, &quot;one&quot;]

std::multiset&amp;lt;std::string&amp;gt; c_mset {&quot;one&quot;, &quot;two&quot;, &quot;one&quot;, &quot;four&quot;};
json j_mset(c_mset); // both entries for &quot;one&quot; are used
// maybe [&quot;one&quot;, &quot;two&quot;, &quot;one&quot;, &quot;four&quot;]

std::unordered_multiset&amp;lt;std::string&amp;gt; c_umset {&quot;one&quot;, &quot;two&quot;, &quot;one&quot;, &quot;four&quot;};
json j_umset(c_umset); // both entries for &quot;one&quot; are used
// maybe [&quot;one&quot;, &quot;two&quot;, &quot;one&quot;, &quot;four&quot;]
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Likewise, any associative key-value containers (&lt;code&gt;std::map&lt;/code&gt;, &lt;code&gt;std::multimap&lt;/code&gt;, &lt;code&gt;std::unordered_map&lt;/code&gt;, &lt;code&gt;std::unordered_multimap&lt;/code&gt;) whose keys can construct an &lt;code&gt;std::string&lt;/code&gt; and whose values can be used to construct JSON values (see examples above) can be used to create a JSON object. Note that in case of multimaps, only one key is used in the JSON object and the value depends on the internal order of the STL container.&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-cpp&quot;&gt;std::map&amp;lt;std::string, int&amp;gt; c_map { {&quot;one&quot;, 1}, {&quot;two&quot;, 2}, {&quot;three&quot;, 3} };
json j_map(c_map);
// {&quot;one&quot;: 1, &quot;three&quot;: 3, &quot;two&quot;: 2 }

std::unordered_map&amp;lt;const char*, double&amp;gt; c_umap { {&quot;one&quot;, 1.2}, {&quot;two&quot;, 2.3}, {&quot;three&quot;, 3.4} };
json j_umap(c_umap);
// {&quot;one&quot;: 1.2, &quot;two&quot;: 2.3, &quot;three&quot;: 3.4}

std::multimap&amp;lt;std::string, bool&amp;gt; c_mmap { {&quot;one&quot;, true}, {&quot;two&quot;, true}, {&quot;three&quot;, false}, {&quot;three&quot;, true} };
json j_mmap(c_mmap); // only one entry for key &quot;three&quot; is used
// maybe {&quot;one&quot;: true, &quot;two&quot;: true, &quot;three&quot;: true}

std::unordered_multimap&amp;lt;std::string, bool&amp;gt; c_ummap { {&quot;one&quot;, true}, {&quot;two&quot;, true}, {&quot;three&quot;, false}, {&quot;three&quot;, true} };
json j_ummap(c_ummap); // only one entry for key &quot;three&quot; is used
// maybe {&quot;one&quot;: true, &quot;two&quot;: true, &quot;three&quot;: true}
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;JSON Pointer and JSON Patch&lt;/h3&gt; 
&lt;p&gt;The library supports &lt;strong&gt;JSON Pointer&lt;/strong&gt; (&lt;a href=&quot;https://tools.ietf.org/html/rfc6901&quot;&gt;RFC 6901&lt;/a&gt;) as an alternative means to address structured values. On top of this, &lt;strong&gt;JSON Patch&lt;/strong&gt; (&lt;a href=&quot;https://tools.ietf.org/html/rfc6902&quot;&gt;RFC 6902&lt;/a&gt;) allows describing differences between two JSON values -- effectively allowing patch and diff operations known from Unix.&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-cpp&quot;&gt;// a JSON value
json j_original = R&quot;({
  &quot;baz&quot;: [&quot;one&quot;, &quot;two&quot;, &quot;three&quot;],
  &quot;foo&quot;: &quot;bar&quot;
})&quot;_json;

// access members with a JSON pointer (RFC 6901)
j_original[&quot;/baz/1&quot;_json_pointer];
// &quot;two&quot;

// a JSON patch (RFC 6902)
json j_patch = R&quot;([
  { &quot;op&quot;: &quot;replace&quot;, &quot;path&quot;: &quot;/baz&quot;, &quot;value&quot;: &quot;boo&quot; },
  { &quot;op&quot;: &quot;add&quot;, &quot;path&quot;: &quot;/hello&quot;, &quot;value&quot;: [&quot;world&quot;] },
  { &quot;op&quot;: &quot;remove&quot;, &quot;path&quot;: &quot;/foo&quot;}
])&quot;_json;

// apply the patch
json j_result = j_original.patch(j_patch);
// {
//    &quot;baz&quot;: &quot;boo&quot;,
//    &quot;hello&quot;: [&quot;world&quot;]
// }

// calculate a JSON patch from two JSON values
json::diff(j_result, j_original);
// [
//   { &quot;op&quot;:&quot; replace&quot;, &quot;path&quot;: &quot;/baz&quot;, &quot;value&quot;: [&quot;one&quot;, &quot;two&quot;, &quot;three&quot;] },
//   { &quot;op&quot;: &quot;remove&quot;,&quot;path&quot;: &quot;/hello&quot; },
//   { &quot;op&quot;: &quot;add&quot;, &quot;path&quot;: &quot;/foo&quot;, &quot;value&quot;: &quot;bar&quot; }
// ]
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;JSON Merge Patch&lt;/h3&gt; 
&lt;p&gt;The library supports &lt;strong&gt;JSON Merge Patch&lt;/strong&gt; (&lt;a href=&quot;https://tools.ietf.org/html/rfc7386&quot;&gt;RFC 7386&lt;/a&gt;) as a patch format. Instead of using JSON Pointer (see above) to specify values to be manipulated, it describes the changes using a syntax that closely mimics the document being modified.&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-cpp&quot;&gt;// a JSON value
json j_document = R&quot;({
  &quot;a&quot;: &quot;b&quot;,
  &quot;c&quot;: {
    &quot;d&quot;: &quot;e&quot;,
    &quot;f&quot;: &quot;g&quot;
  }
})&quot;_json;

// a patch
json j_patch = R&quot;({
  &quot;a&quot;:&quot;z&quot;,
  &quot;c&quot;: {
    &quot;f&quot;: null
  }
})&quot;_json;

// apply the patch
j_document.merge_patch(j_patch);
// {
//  &quot;a&quot;: &quot;z&quot;,
//  &quot;c&quot;: {
//    &quot;d&quot;: &quot;e&quot;
//  }
// }
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;Implicit conversions&lt;/h3&gt; 
&lt;p&gt;Supported types can be implicitly converted to JSON values.&lt;/p&gt; 
&lt;p&gt;It is recommended to &lt;strong&gt;NOT USE&lt;/strong&gt; implicit conversions &lt;strong&gt;FROM&lt;/strong&gt; a JSON value. You can find more details about this recommendation &lt;a href=&quot;https://www.github.com/nlohmann/json/issues/958&quot;&gt;here&lt;/a&gt;. You can switch off implicit conversions by defining &lt;code&gt;JSON_USE_IMPLICIT_CONVERSIONS&lt;/code&gt; to &lt;code&gt;0&lt;/code&gt; before including the &lt;code&gt;json.hpp&lt;/code&gt; header. When using CMake, you can also achieve this by setting the option &lt;code&gt;JSON_ImplicitConversions&lt;/code&gt; to &lt;code&gt;OFF&lt;/code&gt;.&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-cpp&quot;&gt;// strings
std::string s1 = &quot;Hello, world!&quot;;
json js = s1;
auto s2 = js.get&amp;lt;std::string&amp;gt;();
// NOT RECOMMENDED
std::string s3 = js;
std::string s4;
s4 = js;

// Booleans
bool b1 = true;
json jb = b1;
auto b2 = jb.get&amp;lt;bool&amp;gt;();
// NOT RECOMMENDED
bool b3 = jb;
bool b4;
b4 = jb;

// numbers
int i = 42;
json jn = i;
auto f = jn.get&amp;lt;double&amp;gt;();
// NOT RECOMMENDED
double f2 = jn;
double f3;
f3 = jn;

// etc.
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Note that &lt;code&gt;char&lt;/code&gt; types are not automatically converted to JSON strings, but to integer numbers. A conversion to a string must be specified explicitly:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-cpp&quot;&gt;char ch = &#39;A&#39;;                       // ASCII value 65
json j_default = ch;                 // stores integer number 65
json j_string = std::string(1, ch);  // stores string &quot;A&quot;
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;Arbitrary types conversions&lt;/h3&gt; 
&lt;p&gt;Every type can be serialized in JSON, not just STL containers and scalar types. Usually, you would do something along those lines:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-cpp&quot;&gt;namespace ns {
    // a simple struct to model a person
    struct person {
        std::string name;
        std::string address;
        int age;
    };
}

ns::person p = {&quot;Ned Flanders&quot;, &quot;744 Evergreen Terrace&quot;, 60};

// convert to JSON: copy each value into the JSON object
json j;
j[&quot;name&quot;] = p.name;
j[&quot;address&quot;] = p.address;
j[&quot;age&quot;] = p.age;

// ...

// convert from JSON: copy each value from the JSON object
ns::person p {
    j[&quot;name&quot;].get&amp;lt;std::string&amp;gt;(),
    j[&quot;address&quot;].get&amp;lt;std::string&amp;gt;(),
    j[&quot;age&quot;].get&amp;lt;int&amp;gt;()
};
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;It works, but that&#39;s quite a lot of boilerplate... Fortunately, there&#39;s a better way:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-cpp&quot;&gt;// create a person
ns::person p {&quot;Ned Flanders&quot;, &quot;744 Evergreen Terrace&quot;, 60};

// conversion: person -&amp;gt; json
json j = p;

std::cout &amp;lt;&amp;lt; j &amp;lt;&amp;lt; std::endl;
// {&quot;address&quot;:&quot;744 Evergreen Terrace&quot;,&quot;age&quot;:60,&quot;name&quot;:&quot;Ned Flanders&quot;}

// conversion: json -&amp;gt; person
auto p2 = j.get&amp;lt;ns::person&amp;gt;();

// that&#39;s it
assert(p == p2);
&lt;/code&gt;&lt;/pre&gt; 
&lt;h4&gt;Basic usage&lt;/h4&gt; 
&lt;p&gt;To make this work with one of your types, you only need to provide two functions:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-cpp&quot;&gt;using json = nlohmann::json;

namespace ns {
    void to_json(json&amp;amp; j, const person&amp;amp; p) {
        j = json{{&quot;name&quot;, p.name}, {&quot;address&quot;, p.address}, {&quot;age&quot;, p.age}};
    }

    void from_json(const json&amp;amp; j, person&amp;amp; p) {
        j.at(&quot;name&quot;).get_to(p.name);
        j.at(&quot;address&quot;).get_to(p.address);
        j.at(&quot;age&quot;).get_to(p.age);
    }
} // namespace ns
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;That&#39;s all! When calling the &lt;code&gt;json&lt;/code&gt; constructor with your type, your custom &lt;code&gt;to_json&lt;/code&gt; method will be automatically called. Likewise, when calling &lt;code&gt;get&amp;lt;your_type&amp;gt;()&lt;/code&gt; or &lt;code&gt;get_to(your_type&amp;amp;)&lt;/code&gt;, the &lt;code&gt;from_json&lt;/code&gt; method will be called.&lt;/p&gt; 
&lt;p&gt;Some important things:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Those methods &lt;strong&gt;MUST&lt;/strong&gt; be in your type&#39;s namespace (which can be the global namespace), or the library will not be able to locate them (in this example, they are in namespace &lt;code&gt;ns&lt;/code&gt;, where &lt;code&gt;person&lt;/code&gt; is defined).&lt;/li&gt; 
 &lt;li&gt;Those methods &lt;strong&gt;MUST&lt;/strong&gt; be available (e.g., proper headers must be included) everywhere you use these conversions. Look at &lt;a href=&quot;https://github.com/nlohmann/json/issues/1108&quot;&gt;issue 1108&lt;/a&gt; for errors that may occur otherwise.&lt;/li&gt; 
 &lt;li&gt;When using &lt;code&gt;get&amp;lt;your_type&amp;gt;()&lt;/code&gt;, &lt;code&gt;your_type&lt;/code&gt; &lt;strong&gt;MUST&lt;/strong&gt; be &lt;a href=&quot;https://en.cppreference.com/w/cpp/named_req/DefaultConstructible&quot;&gt;DefaultConstructible&lt;/a&gt;. (There is a way to bypass this requirement described later.)&lt;/li&gt; 
 &lt;li&gt;In function &lt;code&gt;from_json&lt;/code&gt;, use function &lt;a href=&quot;https://json.nlohmann.me/api/basic_json/at/&quot;&gt;&lt;code&gt;at()&lt;/code&gt;&lt;/a&gt; to access the object values rather than &lt;code&gt;operator[]&lt;/code&gt;. In case a key does not exist, &lt;code&gt;at&lt;/code&gt; throws an exception that you can handle, whereas &lt;code&gt;operator[]&lt;/code&gt; exhibits undefined behavior.&lt;/li&gt; 
 &lt;li&gt;You do not need to add serializers or deserializers for STL types like &lt;code&gt;std::vector&lt;/code&gt;: the library already implements these.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h4&gt;Simplify your life with macros&lt;/h4&gt; 
&lt;p&gt;If you just want to serialize/deserialize some structs, the &lt;code&gt;to_json&lt;/code&gt;/&lt;code&gt;from_json&lt;/code&gt; functions can be a lot of boilerplate. There are &lt;a href=&quot;https://json.nlohmann.me/api/macros/#serializationdeserialization-macros&quot;&gt;&lt;strong&gt;several macros&lt;/strong&gt;&lt;/a&gt; to make your life easier as long as you want to use a JSON object as serialization.&lt;/p&gt; 
&lt;p&gt;Which macro to choose depends on whether private member variables need to be accessed, a deserialization is needed, missing values should yield an error or should be replaced by default values, and if derived classes are used. See &lt;a href=&quot;https://json.nlohmann.me/features/arbitrary_types/#simplify-your-life-with-macros&quot;&gt;this overview to choose the right one for your use case&lt;/a&gt;.&lt;/p&gt; 
&lt;h5&gt;Example usage of macros&lt;/h5&gt; 
&lt;p&gt;The &lt;code&gt;to_json&lt;/code&gt;/&lt;code&gt;from_json&lt;/code&gt; functions for the &lt;code&gt;person&lt;/code&gt; struct above can be created with &lt;a href=&quot;https://json.nlohmann.me/api/macros/nlohmann_define_type_non_intrusive/&quot;&gt;&lt;code&gt;NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE&lt;/code&gt;&lt;/a&gt;. In all macros, the first parameter is the name of the class/struct, and all remaining parameters name the members.&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-cpp&quot;&gt;namespace ns {
    NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(person, name, address, age)
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;If you want to inherit the &lt;code&gt;person&lt;/code&gt; struct and add a field to it, it can be done with:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-cpp&quot;&gt;namespace ns {
    struct person_derived : person {
        std::string email;
    };
    
    NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE(person_derived, person, email)
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Here is another example with private members, where &lt;a href=&quot;https://json.nlohmann.me/api/macros/nlohmann_define_type_intrusive/&quot;&gt;&lt;code&gt;NLOHMANN_DEFINE_TYPE_INTRUSIVE&lt;/code&gt;&lt;/a&gt; is needed:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-cpp&quot;&gt;namespace ns {
    class address {
      private:
        std::string street;
        int housenumber;
        int postcode;
  
      public:
        NLOHMANN_DEFINE_TYPE_INTRUSIVE(address, street, housenumber, postcode)
    };
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Or in case if you use some naming convention that you do not want to expose to JSON:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-cpp&quot;&gt;namespace ns {
    class address {
      private:
        std::string m_street;
        int m_housenumber;
        int m_postcode;

      public:
        NLOHMANN_DEFINE_TYPE_INTRUSIVE_WITH_NAMES(address, &quot;street&quot;, m_street,
                                                           &quot;housenumber&quot;, m_housenumber,
                                                           &quot;postcode&quot;, m_postcode)
    };
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;h4&gt;How do I convert third-party types?&lt;/h4&gt; 
&lt;p&gt;This requires a bit more advanced technique. But first, let&#39;s see how this conversion mechanism works:&lt;/p&gt; 
&lt;p&gt;The library uses &lt;strong&gt;JSON Serializers&lt;/strong&gt; to convert types to JSON. The default serializer for &lt;code&gt;nlohmann::json&lt;/code&gt; is &lt;code&gt;nlohmann::adl_serializer&lt;/code&gt; (ADL means &lt;a href=&quot;https://en.cppreference.com/w/cpp/language/adl&quot;&gt;Argument-Dependent Lookup&lt;/a&gt;).&lt;/p&gt; 
&lt;p&gt;It is implemented like this (simplified):&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-cpp&quot;&gt;template &amp;lt;typename T&amp;gt;
struct adl_serializer {
    static void to_json(json&amp;amp; j, const T&amp;amp; value) {
        // calls the &quot;to_json&quot; method in T&#39;s namespace
    }

    static void from_json(const json&amp;amp; j, T&amp;amp; value) {
        // same thing, but with the &quot;from_json&quot; method
    }
};
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;This serializer works fine when you have control over the type&#39;s namespace. However, what about &lt;code&gt;boost::optional&lt;/code&gt; or &lt;code&gt;std::filesystem::path&lt;/code&gt; (C++17)? Hijacking the &lt;code&gt;boost&lt;/code&gt; namespace is pretty bad, and it&#39;s illegal to add something other than template specializations to &lt;code&gt;std&lt;/code&gt;...&lt;/p&gt; 
&lt;p&gt;To solve this, you need to add a specialization of &lt;code&gt;adl_serializer&lt;/code&gt; to the &lt;code&gt;nlohmann&lt;/code&gt; namespace, here&#39;s an example:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-cpp&quot;&gt;// partial specialization (full specialization works too)
namespace nlohmann {
    template &amp;lt;typename T&amp;gt;
    struct adl_serializer&amp;lt;boost::optional&amp;lt;T&amp;gt;&amp;gt; {
        static void to_json(json&amp;amp; j, const boost::optional&amp;lt;T&amp;gt;&amp;amp; opt) {
            if (opt == boost::none) {
                j = nullptr;
            } else {
              j = *opt; // this will call adl_serializer&amp;lt;T&amp;gt;::to_json which will
                        // find the free function to_json in T&#39;s namespace!
            }
        }

        static void from_json(const json&amp;amp; j, boost::optional&amp;lt;T&amp;gt;&amp;amp; opt) {
            if (j.is_null()) {
                opt = boost::none;
            } else {
                opt = j.get&amp;lt;T&amp;gt;(); // same as above, but with
                                  // adl_serializer&amp;lt;T&amp;gt;::from_json
            }
        }
    };
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;h4&gt;How can I use &lt;code&gt;get()&lt;/code&gt; for non-default constructible/non-copyable types?&lt;/h4&gt; 
&lt;p&gt;There is a way if your type is &lt;a href=&quot;https://en.cppreference.com/w/cpp/named_req/MoveConstructible&quot;&gt;MoveConstructible&lt;/a&gt;. You will need to specialize the &lt;code&gt;adl_serializer&lt;/code&gt; as well, but with a special &lt;code&gt;from_json&lt;/code&gt; overload:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-cpp&quot;&gt;struct move_only_type {
    move_only_type() = delete;
    move_only_type(int ii): i(ii) {}
    move_only_type(const move_only_type&amp;amp;) = delete;
    move_only_type(move_only_type&amp;amp;&amp;amp;) = default;

    int i;
};

namespace nlohmann {
    template &amp;lt;&amp;gt;
    struct adl_serializer&amp;lt;move_only_type&amp;gt; {
        // note: the return type is no longer &#39;void&#39;, and the method only takes
        // one argument
        static move_only_type from_json(const json&amp;amp; j) {
            return {j.get&amp;lt;int&amp;gt;()};
        }

        // Here&#39;s the catch! You must provide a to_json method! Otherwise, you
        // will not be able to convert move_only_type to json, since you fully
        // specialized adl_serializer on that type
        static void to_json(json&amp;amp; j, move_only_type t) {
            j = t.i;
        }
    };
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;h4&gt;Can I write my own serializer? (Advanced use)&lt;/h4&gt; 
&lt;p&gt;Yes. You might want to take a look at &lt;a href=&quot;https://github.com/nlohmann/json/raw/develop/tests/src/unit-udt.cpp&quot;&gt;&lt;code&gt;unit-udt.cpp&lt;/code&gt;&lt;/a&gt; in the test suite, to see a few examples.&lt;/p&gt; 
&lt;p&gt;If you write your own serializer, you&#39;ll need to do a few things:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;use a different &lt;code&gt;basic_json&lt;/code&gt; alias than &lt;code&gt;nlohmann::json&lt;/code&gt; (the last template parameter of &lt;code&gt;basic_json&lt;/code&gt; is the &lt;code&gt;JSONSerializer&lt;/code&gt;)&lt;/li&gt; 
 &lt;li&gt;use your &lt;code&gt;basic_json&lt;/code&gt; alias (or a template parameter) in all your &lt;code&gt;to_json&lt;/code&gt;/&lt;code&gt;from_json&lt;/code&gt; methods&lt;/li&gt; 
 &lt;li&gt;use &lt;code&gt;nlohmann::to_json&lt;/code&gt; and &lt;code&gt;nlohmann::from_json&lt;/code&gt; when you need ADL&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;Here is an example, without simplifications, that only accepts types with a size &amp;lt;= 32, and uses ADL.&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-cpp&quot;&gt;// You should use void as a second template argument
// if you don&#39;t need compile-time checks on T
template&amp;lt;typename T, typename SFINAE = typename std::enable_if&amp;lt;sizeof(T) &amp;lt;= 32&amp;gt;::type&amp;gt;
struct less_than_32_serializer {
    template &amp;lt;typename BasicJsonType&amp;gt;
    static void to_json(BasicJsonType&amp;amp; j, T value) {
        // we want to use ADL, and call the correct to_json overload
        using nlohmann::to_json; // this method is called by adl_serializer,
                                 // this is where the magic happens
        to_json(j, value);
    }

    template &amp;lt;typename BasicJsonType&amp;gt;
    static void from_json(const BasicJsonType&amp;amp; j, T&amp;amp; value) {
        // same thing here
        using nlohmann::from_json;
        from_json(j, value);
    }
};
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Be &lt;strong&gt;very&lt;/strong&gt; careful when reimplementing your serializer, you can stack overflow if you don&#39;t pay attention:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-cpp&quot;&gt;template &amp;lt;typename T, void&amp;gt;
struct bad_serializer
{
    template &amp;lt;typename BasicJsonType&amp;gt;
    static void to_json(BasicJsonType&amp;amp; j, const T&amp;amp; value) {
      // this calls BasicJsonType::json_serializer&amp;lt;T&amp;gt;::to_json(j, value)
      // if BasicJsonType::json_serializer == bad_serializer ... oops!
      j = value;
    }

    template &amp;lt;typename BasicJsonType&amp;gt;
    static void to_json(const BasicJsonType&amp;amp; j, T&amp;amp; value) {
      // this calls BasicJsonType::json_serializer&amp;lt;T&amp;gt;::from_json(j, value)
      // if BasicJsonType::json_serializer == bad_serializer ... oops!
      value = j.get&amp;lt;T&amp;gt;(); // oops!
    }
};
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;Specializing enum conversion&lt;/h3&gt; 
&lt;p&gt;By default, enum values are serialized to JSON as integers. In some cases, this could result in undesired behavior. If an enum is modified or re-ordered after data has been serialized to JSON, the later deserialized JSON data may be undefined or a different enum value than was originally intended.&lt;/p&gt; 
&lt;p&gt;It is possible to more precisely specify how a given enum is mapped to and from JSON as shown below:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-cpp&quot;&gt;// example enum type declaration
enum TaskState {
    TS_STOPPED,
    TS_RUNNING,
    TS_COMPLETED,
    TS_INVALID=-1,
};

// map TaskState values to JSON as strings
NLOHMANN_JSON_SERIALIZE_ENUM( TaskState, {
    {TS_INVALID, nullptr},
    {TS_STOPPED, &quot;stopped&quot;},
    {TS_RUNNING, &quot;running&quot;},
    {TS_COMPLETED, &quot;completed&quot;},
})
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;The &lt;code&gt;NLOHMANN_JSON_SERIALIZE_ENUM()&lt;/code&gt; macro declares a set of &lt;code&gt;to_json()&lt;/code&gt; / &lt;code&gt;from_json()&lt;/code&gt; functions for type &lt;code&gt;TaskState&lt;/code&gt; while avoiding repetition and boilerplate serialization code.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Usage:&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-cpp&quot;&gt;// enum to JSON as string
json j = TS_STOPPED;
assert(j == &quot;stopped&quot;);

// json string to enum
json j3 = &quot;running&quot;;
assert(j3.get&amp;lt;TaskState&amp;gt;() == TS_RUNNING);

// undefined json value to enum (where the first map entry above is the default)
json jPi = 3.14;
assert(jPi.get&amp;lt;TaskState&amp;gt;() == TS_INVALID);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Just as in &lt;a href=&quot;https://raw.githubusercontent.com/nlohmann/json/develop/#arbitrary-types-conversions&quot;&gt;Arbitrary Type Conversions&lt;/a&gt; above,&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;code&gt;NLOHMANN_JSON_SERIALIZE_ENUM()&lt;/code&gt; MUST be declared in your enum type&#39;s namespace (which can be the global namespace), or the library will not be able to locate it, and it will default to integer serialization.&lt;/li&gt; 
 &lt;li&gt;It MUST be available (e.g., proper headers must be included) everywhere you use the conversions.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;Other Important points:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;When using &lt;code&gt;get&amp;lt;ENUM_TYPE&amp;gt;()&lt;/code&gt;, undefined JSON values will default to the first pair specified in your map. Select this default pair carefully. If you desire an exception in this circumstance use &lt;code&gt;NLOHMANN_JSON_SERIALIZE_ENUM_STRICT()&lt;/code&gt; which behaves identically except for throwing an exception on unrecognized values.&lt;/li&gt; 
 &lt;li&gt;If an enum or JSON value is specified more than once in your map, the first matching occurrence from the top of the map will be returned when converting to or from JSON.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Binary formats (BSON, CBOR, MessagePack, UBJSON, and BJData)&lt;/h3&gt; 
&lt;p&gt;Though JSON is a ubiquitous data format, it is not a very compact format suitable for data exchange, for instance over a network. Hence, the library supports &lt;a href=&quot;https://bsonspec.org&quot;&gt;BSON&lt;/a&gt; (Binary JSON), &lt;a href=&quot;https://cbor.io&quot;&gt;CBOR&lt;/a&gt; (Concise Binary Object Representation), &lt;a href=&quot;https://msgpack.org&quot;&gt;MessagePack&lt;/a&gt;, &lt;a href=&quot;https://ubjson.org&quot;&gt;UBJSON&lt;/a&gt; (Universal Binary JSON Specification) and &lt;a href=&quot;https://neurojson.org/bjdata&quot;&gt;BJData&lt;/a&gt; (Binary JData) to efficiently encode JSON values to byte vectors and to decode such vectors.&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-cpp&quot;&gt;// create a JSON value
json j = R&quot;({&quot;compact&quot;: true, &quot;schema&quot;: 0})&quot;_json;

// serialize to BSON
std::vector&amp;lt;std::uint8_t&amp;gt; v_bson = json::to_bson(j);

// 0x1B, 0x00, 0x00, 0x00, 0x08, 0x63, 0x6F, 0x6D, 0x70, 0x61, 0x63, 0x74, 0x00, 0x01, 0x10, 0x73, 0x63, 0x68, 0x65, 0x6D, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00

// roundtrip
json j_from_bson = json::from_bson(v_bson);

// serialize to CBOR
std::vector&amp;lt;std::uint8_t&amp;gt; v_cbor = json::to_cbor(j);

// 0xA2, 0x67, 0x63, 0x6F, 0x6D, 0x70, 0x61, 0x63, 0x74, 0xF5, 0x66, 0x73, 0x63, 0x68, 0x65, 0x6D, 0x61, 0x00

// roundtrip
json j_from_cbor = json::from_cbor(v_cbor);

// serialize to MessagePack
std::vector&amp;lt;std::uint8_t&amp;gt; v_msgpack = json::to_msgpack(j);

// 0x82, 0xA7, 0x63, 0x6F, 0x6D, 0x70, 0x61, 0x63, 0x74, 0xC3, 0xA6, 0x73, 0x63, 0x68, 0x65, 0x6D, 0x61, 0x00

// roundtrip
json j_from_msgpack = json::from_msgpack(v_msgpack);

// serialize to UBJSON
std::vector&amp;lt;std::uint8_t&amp;gt; v_ubjson = json::to_ubjson(j);

// 0x7B, 0x69, 0x07, 0x63, 0x6F, 0x6D, 0x70, 0x61, 0x63, 0x74, 0x54, 0x69, 0x06, 0x73, 0x63, 0x68, 0x65, 0x6D, 0x61, 0x69, 0x00, 0x7D

// roundtrip
json j_from_ubjson = json::from_ubjson(v_ubjson);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;The library also supports binary types from BSON, CBOR (byte strings), and MessagePack (bin, ext, fixext). They are stored by default as &lt;code&gt;std::vector&amp;lt;std::uint8_t&amp;gt;&lt;/code&gt; to be processed outside the library.&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-cpp&quot;&gt;// CBOR byte string with payload 0xCAFE
std::vector&amp;lt;std::uint8_t&amp;gt; v = {0x42, 0xCA, 0xFE};

// read value
json j = json::from_cbor(v);

// the JSON value has type binary
j.is_binary(); // true

// get reference to stored binary value
auto&amp;amp; binary = j.get_binary();

// the binary value has no subtype (CBOR has no binary subtypes)
binary.has_subtype(); // false

// access std::vector&amp;lt;std::uint8_t&amp;gt; member functions
binary.size(); // 2
binary[0]; // 0xCA
binary[1]; // 0xFE

// set subtype to 0x10
binary.set_subtype(0x10);

// serialize to MessagePack
auto cbor = json::to_msgpack(j); // 0xD5 (fixext2), 0x10, 0xCA, 0xFE
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2&gt;Customers&lt;/h2&gt; 
&lt;p&gt;The library is used in multiple projects, applications, operating systems, etc. The list below is not exhaustive, but the result of an internet search. If you know further customers of the library, please let me know, see &lt;a href=&quot;https://raw.githubusercontent.com/nlohmann/json/develop/#contact&quot;&gt;contact&lt;/a&gt;.&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://json.nlohmann.me/home/customers/&quot;&gt;&lt;img src=&quot;https://raw.githubusercontent.com/nlohmann/json/develop/docs/mkdocs/docs/images/customers.png&quot; alt=&quot;logos of customers using the library&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;h2&gt;Ecosystem&lt;/h2&gt; 
&lt;p&gt;Beyond projects that use the library, there are third-party projects that build on top of it - schema validators, language bindings, format converters, and the like. See the curated &lt;a href=&quot;https://json.nlohmann.me/community/ecosystem/&quot;&gt;Ecosystem&lt;/a&gt; page.&lt;/p&gt; 
&lt;h2&gt;Supported compilers&lt;/h2&gt; 
&lt;p&gt;Though it&#39;s 2026 already, the support for C++11 is still a bit sparse. Currently, the following compilers are known to work:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;GCC 4.8 - 14.2 (and possibly later)&lt;/li&gt; 
 &lt;li&gt;Clang 3.4 - 21.0 (and possibly later)&lt;/li&gt; 
 &lt;li&gt;Apple Clang 9.1 - 16.0 (and possibly later)&lt;/li&gt; 
 &lt;li&gt;Intel C++ Compiler 17.0.2 (and possibly later)&lt;/li&gt; 
 &lt;li&gt;Nvidia CUDA Compiler 11.0.221 (and possibly later)&lt;/li&gt; 
 &lt;li&gt;Microsoft Visual C++ 2015 / Build Tools 14.0.25123.0 (and possibly later)&lt;/li&gt; 
 &lt;li&gt;Microsoft Visual C++ 2017 / Build Tools 15.5.180.51428 (and possibly later)&lt;/li&gt; 
 &lt;li&gt;Microsoft Visual C++ 2019 / Build Tools 16.3.1+1def00d3d (and possibly later)&lt;/li&gt; 
 &lt;li&gt;Microsoft Visual C++ 2022 / Build Tools 19.30.30709.0 (and possibly later)&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;I would be happy to learn about other compilers/versions.&lt;/p&gt; 
&lt;p&gt;Please note:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt; &lt;p&gt;GCC 4.8 has a bug &lt;a href=&quot;https://gcc.gnu.org/bugzilla/show_bug.cgi?id=57824&quot;&gt;57824&lt;/a&gt;: multiline raw strings cannot be the arguments to macros. Don&#39;t use multiline raw strings directly in macros with this compiler.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;Android defaults to using very old compilers and C++ libraries. To fix this, add the following to your &lt;code&gt;Application.mk&lt;/code&gt;. This will switch to the LLVM C++ library, the Clang compiler, and enable C++11 and other features disabled by default.&lt;/p&gt; &lt;pre&gt;&lt;code class=&quot;language-makefile&quot;&gt;APP_STL := c++_shared
NDK_TOOLCHAIN_VERSION := clang3.6
APP_CPPFLAGS += -frtti -fexceptions
&lt;/code&gt;&lt;/pre&gt; &lt;p&gt;The code compiles successfully with &lt;a href=&quot;https://developer.android.com/ndk/index.html?hl=ml&quot;&gt;Android NDK&lt;/a&gt;, Revision 9 - 11 (and possibly later) and &lt;a href=&quot;https://www.crystax.net/en/android/ndk&quot;&gt;CrystaX&#39;s Android NDK&lt;/a&gt; version 10.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;For GCC running on MinGW or Android SDK, the error &lt;code&gt;&#39;to_string&#39; is not a member of &#39;std&#39;&lt;/code&gt; (or similarly, for &lt;code&gt;strtod&lt;/code&gt; or &lt;code&gt;strtof&lt;/code&gt;) may occur. Note this is not an issue with the code, but rather with the compiler itself. On Android, see above to build with a newer environment. For MinGW, please refer to &lt;a href=&quot;https://tehsausage.com/mingw-to-string&quot;&gt;this site&lt;/a&gt; and &lt;a href=&quot;https://github.com/nlohmann/json/issues/136&quot;&gt;this discussion&lt;/a&gt; for information on how to fix this bug. For Android NDK using &lt;code&gt;APP_STL := gnustl_static&lt;/code&gt;, please refer to &lt;a href=&quot;https://github.com/nlohmann/json/issues/219&quot;&gt;this discussion&lt;/a&gt;.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;Unsupported versions of GCC and Clang are rejected by &lt;code&gt;#error&lt;/code&gt; directives. This can be switched off by defining &lt;code&gt;JSON_SKIP_UNSUPPORTED_COMPILER_CHECK&lt;/code&gt;. Note that you can expect no support in this case.&lt;/p&gt; &lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;See the page &lt;a href=&quot;https://json.nlohmann.me/community/quality_assurance&quot;&gt;quality assurance&lt;/a&gt; on the compilers used to check the library in the CI.&lt;/p&gt; 
&lt;h2&gt;Integration&lt;/h2&gt; 
&lt;p&gt;&lt;a href=&quot;https://github.com/nlohmann/json/raw/develop/single_include/nlohmann/json.hpp&quot;&gt;&lt;code&gt;json.hpp&lt;/code&gt;&lt;/a&gt; is the single required file in &lt;code&gt;single_include/nlohmann&lt;/code&gt; or &lt;a href=&quot;https://github.com/nlohmann/json/releases&quot;&gt;released here&lt;/a&gt;. You need to add&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-cpp&quot;&gt;#include &amp;lt;nlohmann/json.hpp&amp;gt;

// for convenience
using json = nlohmann::json;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;to the files you want to process JSON and set the necessary switches to enable C++11 (e.g., &lt;code&gt;-std=c++11&lt;/code&gt; for GCC and Clang).&lt;/p&gt; 
&lt;p&gt;You can further use file &lt;a href=&quot;https://github.com/nlohmann/json/raw/develop/include/nlohmann/json_fwd.hpp&quot;&gt;&lt;code&gt;include/nlohmann/json_fwd.hpp&lt;/code&gt;&lt;/a&gt; for forward-declarations. The installation of &lt;code&gt;json_fwd.hpp&lt;/code&gt; (as part of cmake&#39;s install step) can be achieved by setting &lt;code&gt;-DJSON_MultipleHeaders=ON&lt;/code&gt;.&lt;/p&gt; 
&lt;h3&gt;CMake&lt;/h3&gt; 
&lt;p&gt;You can also use the &lt;code&gt;nlohmann_json::nlohmann_json&lt;/code&gt; interface target in CMake. This target populates the appropriate usage requirements for &lt;code&gt;INTERFACE_INCLUDE_DIRECTORIES&lt;/code&gt; to point to the appropriate include directories and &lt;code&gt;INTERFACE_COMPILE_FEATURES&lt;/code&gt; for the necessary C++11 flags.&lt;/p&gt; 
&lt;h4&gt;External&lt;/h4&gt; 
&lt;p&gt;To use this library from a CMake project, you can locate it directly with &lt;code&gt;find_package()&lt;/code&gt; and use the namespaced imported target from the generated package configuration:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-cmake&quot;&gt;# CMakeLists.txt
find_package(nlohmann_json 3.12.0 REQUIRED)
...
add_library(foo ...)
...
target_link_libraries(foo PRIVATE nlohmann_json::nlohmann_json)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;The package configuration file, &lt;code&gt;nlohmann_jsonConfig.cmake&lt;/code&gt;, can be used either from an install tree or directly out of the build tree.&lt;/p&gt; 
&lt;h4&gt;Embedded&lt;/h4&gt; 
&lt;p&gt;To embed the library directly into an existing CMake project, place the entire source tree in a subdirectory and call &lt;code&gt;add_subdirectory()&lt;/code&gt; in your &lt;code&gt;CMakeLists.txt&lt;/code&gt; file:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-cmake&quot;&gt;# Typically you don&#39;t care so much for a third party library&#39;s tests to be
# run from your own project&#39;s code.
set(JSON_BuildTests OFF CACHE INTERNAL &quot;&quot;)

# If you only include this third party in PRIVATE source files, you do not
# need to install it when your main project gets installed.
# set(JSON_Install OFF CACHE INTERNAL &quot;&quot;)

# Don&#39;t use include(nlohmann_json/CMakeLists.txt) since that carries with it
# unintended consequences that will break the build.  It&#39;s generally
# discouraged (although not necessarily well documented as such) to use
# include(...) for pulling in other CMake projects anyways.
add_subdirectory(nlohmann_json)
...
add_library(foo ...)
...
target_link_libraries(foo PRIVATE nlohmann_json::nlohmann_json)
&lt;/code&gt;&lt;/pre&gt; 
&lt;h5&gt;Embedded (FetchContent)&lt;/h5&gt; 
&lt;p&gt;Since CMake v3.11, &lt;a href=&quot;https://cmake.org/cmake/help/v3.11/module/FetchContent.html&quot;&gt;FetchContent&lt;/a&gt; can be used to automatically download a release as a dependency at configure time.&lt;/p&gt; 
&lt;p&gt;Example:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-cmake&quot;&gt;include(FetchContent)

FetchContent_Declare(json URL https://github.com/nlohmann/json/releases/download/v3.12.0/json.tar.xz)
FetchContent_MakeAvailable(json)

target_link_libraries(foo PRIVATE nlohmann_json::nlohmann_json)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;: It is recommended to use the URL approach described above, which is supported as of version 3.10.0. See &lt;a href=&quot;https://json.nlohmann.me/integration/cmake/#fetchcontent&quot;&gt;https://json.nlohmann.me/integration/cmake/#fetchcontent&lt;/a&gt; for more information.&lt;/p&gt; 
&lt;h4&gt;Supporting Both&lt;/h4&gt; 
&lt;p&gt;To allow your project to support either an externally supplied or an embedded JSON library, you can use a pattern akin to the following:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-cmake&quot;&gt;# Top level CMakeLists.txt
project(FOO)
...
option(FOO_USE_EXTERNAL_JSON &quot;Use an external JSON library&quot; OFF)
...
add_subdirectory(thirdparty)
...
add_library(foo ...)
...
# Note that the namespaced target will always be available regardless of the
# import method
target_link_libraries(foo PRIVATE nlohmann_json::nlohmann_json)
&lt;/code&gt;&lt;/pre&gt; 
&lt;pre&gt;&lt;code class=&quot;language-cmake&quot;&gt;# thirdparty/CMakeLists.txt
...
if(FOO_USE_EXTERNAL_JSON)
  find_package(nlohmann_json 3.12.0 REQUIRED)
else()
  set(JSON_BuildTests OFF CACHE INTERNAL &quot;&quot;)
  add_subdirectory(nlohmann_json)
endif()
...
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;code&gt;thirdparty/nlohmann_json&lt;/code&gt; is then a complete copy of this source tree.&lt;/p&gt; 
&lt;h3&gt;Package Managers&lt;/h3&gt; 
&lt;p&gt;Use your favorite &lt;a href=&quot;https://json.nlohmann.me/integration/package_managers/&quot;&gt;&lt;strong&gt;package manager&lt;/strong&gt;&lt;/a&gt; to use the library.&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;img src=&quot;https://raw.githubusercontent.com/nlohmann/json/refs/heads/develop/docs/mkdocs/docs/images/package_managers/homebrew.svg?sanitize=true&quot; height=&quot;20&quot; /&gt;&amp;nbsp;&lt;a href=&quot;https://json.nlohmann.me/integration/package_managers/#homebrew&quot;&gt;&lt;strong&gt;Homebrew&lt;/strong&gt;&lt;/a&gt; &lt;code&gt;nlohmann-json&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;img src=&quot;https://raw.githubusercontent.com/nlohmann/json/refs/heads/develop/docs/mkdocs/docs/images/package_managers/meson.svg?sanitize=true&quot; height=&quot;20&quot; /&gt;&amp;nbsp;&lt;a href=&quot;https://json.nlohmann.me/integration/package_managers/#meson&quot;&gt;&lt;strong&gt;Meson&lt;/strong&gt;&lt;/a&gt; &lt;code&gt;nlohmann_json&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;img src=&quot;https://raw.githubusercontent.com/nlohmann/json/refs/heads/develop/docs/mkdocs/docs/images/package_managers/bazel.svg?sanitize=true&quot; height=&quot;20&quot; /&gt;&amp;nbsp;&lt;a href=&quot;https://json.nlohmann.me/integration/package_managers/#bazel&quot;&gt;&lt;strong&gt;Bazel&lt;/strong&gt;&lt;/a&gt; &lt;code&gt;nlohmann_json&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;img src=&quot;https://raw.githubusercontent.com/nlohmann/json/refs/heads/develop/docs/mkdocs/docs/images/package_managers/conan.svg?sanitize=true&quot; height=&quot;20&quot; /&gt;&amp;nbsp;&lt;a href=&quot;https://json.nlohmann.me/integration/package_managers/#conan&quot;&gt;&lt;strong&gt;Conan&lt;/strong&gt;&lt;/a&gt; &lt;code&gt;nlohmann_json&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;img src=&quot;https://raw.githubusercontent.com/nlohmann/json/refs/heads/develop/docs/mkdocs/docs/images/package_managers/spack.svg?sanitize=true&quot; height=&quot;20&quot; /&gt;&amp;nbsp;&lt;a href=&quot;https://json.nlohmann.me/integration/package_managers/#spack&quot;&gt;&lt;strong&gt;Spack&lt;/strong&gt;&lt;/a&gt; &lt;code&gt;nlohmann-json&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://json.nlohmann.me/integration/package_managers/#hunter&quot;&gt;&lt;strong&gt;Hunter&lt;/strong&gt;&lt;/a&gt; &lt;code&gt;nlohmann_json&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;img src=&quot;https://raw.githubusercontent.com/nlohmann/json/refs/heads/develop/docs/mkdocs/docs/images/package_managers/vcpkg.png&quot; height=&quot;20&quot; /&gt;&amp;nbsp;&lt;a href=&quot;https://json.nlohmann.me/integration/package_managers/#vcpkg&quot;&gt;&lt;strong&gt;vcpkg&lt;/strong&gt;&lt;/a&gt; &lt;code&gt;nlohmann-json&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://json.nlohmann.me/integration/package_managers/#cget&quot;&gt;&lt;strong&gt;cget&lt;/strong&gt;&lt;/a&gt; &lt;code&gt;nlohmann/json&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;img src=&quot;https://raw.githubusercontent.com/nlohmann/json/refs/heads/develop/docs/mkdocs/docs/images/package_managers/swift.svg?sanitize=true&quot; height=&quot;20&quot; /&gt;&amp;nbsp;&lt;a href=&quot;https://json.nlohmann.me/integration/package_managers/#swift-package-manager&quot;&gt;&lt;strong&gt;Swift Package Manager&lt;/strong&gt;&lt;/a&gt; &lt;code&gt;nlohmann/json&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;img src=&quot;https://raw.githubusercontent.com/nlohmann/json/refs/heads/develop/docs/mkdocs/docs/images/package_managers/nuget.svg?sanitize=true&quot; height=&quot;20&quot; /&gt;&amp;nbsp;&lt;a href=&quot;https://json.nlohmann.me/integration/package_managers/#nuget&quot;&gt;&lt;strong&gt;Nuget&lt;/strong&gt;&lt;/a&gt; &lt;code&gt;nlohmann.json&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;img src=&quot;https://raw.githubusercontent.com/nlohmann/json/refs/heads/develop/docs/mkdocs/docs/images/package_managers/conda.svg?sanitize=true&quot; height=&quot;20&quot; /&gt;&amp;nbsp;&lt;a href=&quot;https://json.nlohmann.me/integration/package_managers/#conda&quot;&gt;&lt;strong&gt;Conda&lt;/strong&gt;&lt;/a&gt; &lt;code&gt;nlohmann_json&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;img src=&quot;https://raw.githubusercontent.com/nlohmann/json/refs/heads/develop/docs/mkdocs/docs/images/package_managers/macports.svg?sanitize=true&quot; height=&quot;20&quot; /&gt;&amp;nbsp;&lt;a href=&quot;https://json.nlohmann.me/integration/package_managers/#macports&quot;&gt;&lt;strong&gt;MacPorts&lt;/strong&gt;&lt;/a&gt; &lt;code&gt;nlohmann-json&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;img src=&quot;https://raw.githubusercontent.com/nlohmann/json/refs/heads/develop/docs/mkdocs/docs/images/package_managers/CPM.png&quot; height=&quot;20&quot; /&gt;&amp;nbsp;&lt;a href=&quot;https://json.nlohmann.me/integration/package_managers/#cpmcmake&quot;&gt;&lt;strong&gt;cpm.cmake&lt;/strong&gt;&lt;/a&gt; &lt;code&gt;gh:nlohmann/json&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;img src=&quot;https://raw.githubusercontent.com/nlohmann/json/refs/heads/develop/docs/mkdocs/docs/images/package_managers/xmake.svg?sanitize=true&quot; height=&quot;20&quot; /&gt;&amp;nbsp;&lt;a href=&quot;https://json.nlohmann.me/integration/package_managers/#xmake&quot;&gt;&lt;strong&gt;xmake&lt;/strong&gt;&lt;/a&gt; &lt;code&gt;nlohmann_json&lt;/code&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;The library is part of many package managers. See the &lt;a href=&quot;https://json.nlohmann.me/integration/package_managers/&quot;&gt;&lt;strong&gt;documentation&lt;/strong&gt;&lt;/a&gt; for detailed descriptions and examples.&lt;/p&gt; 
&lt;h3&gt;Pkg-config&lt;/h3&gt; 
&lt;p&gt;If you are using bare Makefiles, you can use &lt;code&gt;pkg-config&lt;/code&gt; to generate the include flags that point to where the library is installed:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-sh&quot;&gt;pkg-config nlohmann_json --cflags
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2&gt;License&lt;/h2&gt; 
&lt;img align=&quot;right&quot; src=&quot;https://149753425.v2.pressablecdn.com/wp-content/uploads/2009/06/OSIApproved_100X125.png&quot; alt=&quot;OSI approved license&quot; /&gt; 
&lt;p&gt;The class is licensed under the &lt;a href=&quot;https://opensource.org/licenses/MIT&quot;&gt;MIT License&lt;/a&gt;:&lt;/p&gt; 
&lt;p&gt;Copyright © 2013-2026 &lt;a href=&quot;https://nlohmann.me&quot;&gt;Niels Lohmann&lt;/a&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 “Software”), 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 “AS IS”, 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;hr /&gt; 
&lt;ul&gt; 
 &lt;li&gt;The class contains the UTF-8 Decoder from Bjoern Hoehrmann which is licensed under the &lt;a href=&quot;https://opensource.org/licenses/MIT&quot;&gt;MIT License&lt;/a&gt; (see above). Copyright © 2008-2009 &lt;a href=&quot;https://bjoern.hoehrmann.de/&quot;&gt;Björn Hoehrmann&lt;/a&gt; &lt;a href=&quot;mailto:bjoern@hoehrmann.de&quot;&gt;bjoern@hoehrmann.de&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;The class contains a slightly modified version of the Grisu2 algorithm from Florian Loitsch which is licensed under the &lt;a href=&quot;https://opensource.org/licenses/MIT&quot;&gt;MIT License&lt;/a&gt; (see above). Copyright © 2009 &lt;a href=&quot;https://florian.loitsch.com/&quot;&gt;Florian Loitsch&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;The class contains a copy of &lt;a href=&quot;https://nemequ.github.io/hedley/&quot;&gt;Hedley&lt;/a&gt; from Evan Nemerson which is licensed as &lt;a href=&quot;https://creativecommons.org/publicdomain/zero/1.0/&quot;&gt;CC0-1.0&lt;/a&gt;.&lt;/li&gt; 
 &lt;li&gt;The class contains parts of &lt;a href=&quot;https://github.com/abseil/abseil-cpp&quot;&gt;Google Abseil&lt;/a&gt; which is licensed under the &lt;a href=&quot;https://opensource.org/licenses/Apache-2.0&quot;&gt;Apache 2.0 License&lt;/a&gt;.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;img align=&quot;right&quot; src=&quot;https://git.fsfe.org/reuse/reuse-ci/raw/branch/master/reuse-horizontal.png&quot; alt=&quot;REUSE Software&quot; /&gt; 
&lt;p&gt;The library is compliant to version 3.3 of the &lt;a href=&quot;https://reuse.software&quot;&gt;&lt;strong&gt;REUSE specification&lt;/strong&gt;&lt;/a&gt;:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Every source file contains an SPDX copyright header.&lt;/li&gt; 
 &lt;li&gt;The full text of all licenses used in the repository can be found in the &lt;code&gt;LICENSES&lt;/code&gt; folder.&lt;/li&gt; 
 &lt;li&gt;File &lt;code&gt;.reuse/dep5&lt;/code&gt; contains an overview of all files&#39; copyrights and licenses.&lt;/li&gt; 
 &lt;li&gt;Run &lt;code&gt;pipx run reuse lint&lt;/code&gt; to verify the project&#39;s REUSE compliance and &lt;code&gt;pipx run reuse spdx&lt;/code&gt; to generate a SPDX SBOM.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Contact&lt;/h2&gt; 
&lt;p&gt;If you have questions regarding the library, I would like to invite you to &lt;a href=&quot;https://github.com/nlohmann/json/issues/new/choose&quot;&gt;open an issue at GitHub&lt;/a&gt;. Please describe your request, problem, or question as detailed as possible, and also mention the version of the library you are using as well as the version of your compiler and operating system. Opening an issue at GitHub allows other users and contributors to this library to collaborate. For instance, I have little experience with MSVC, and most issues in this regard have been solved by a growing community. If you have a look at the &lt;a href=&quot;https://github.com/nlohmann/json/issues?q=is%3Aissue+is%3Aclosed&quot;&gt;closed issues&lt;/a&gt;, you will see that we react quite timely in most cases.&lt;/p&gt; 
&lt;p&gt;Only if your request would contain confidential information, please &lt;a href=&quot;mailto:mail@nlohmann.me&quot;&gt;send me an email&lt;/a&gt;. For encrypted messages, please use &lt;a href=&quot;https://keybase.io/nlohmann/pgp_keys.asc&quot;&gt;this key&lt;/a&gt;.&lt;/p&gt; 
&lt;h2&gt;Security&lt;/h2&gt; 
&lt;p&gt;&lt;a href=&quot;https://github.com/nlohmann/json/commits&quot;&gt;Commits by Niels Lohmann&lt;/a&gt; and &lt;a href=&quot;https://github.com/nlohmann/json/releases&quot;&gt;releases&lt;/a&gt; are signed with this &lt;a href=&quot;https://keybase.io/nlohmann/pgp_keys.asc?fingerprint=797167ae41c0a6d9232e48457f3cea63ae251b69&quot;&gt;PGP Key&lt;/a&gt;.&lt;/p&gt; 
&lt;h2&gt;Thanks&lt;/h2&gt; 
&lt;p&gt;I deeply appreciate the help of the following people.&lt;/p&gt; 
&lt;img src=&quot;https://raw.githubusercontent.com/nlohmann/json/develop/docs/avatars.png&quot; align=&quot;right&quot; alt=&quot;GitHub avatars of the contributors&quot; /&gt; 
&lt;ol&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/Teemperor&quot;&gt;Teemperor&lt;/a&gt; implemented CMake support and lcov integration, realized escape and Unicode handling in the string parser, and fixed the JSON serialization.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/elliotgoodrich&quot;&gt;elliotgoodrich&lt;/a&gt; fixed an issue with double deletion in the iterator classes.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/kirkshoop&quot;&gt;kirkshoop&lt;/a&gt; made the iterators of the class composable to other libraries.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/wanwc&quot;&gt;wancw&lt;/a&gt; fixed a bug that hindered the class to compile with Clang.&lt;/li&gt; 
 &lt;li&gt;Tomas Åblad found a bug in the iterator implementation.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/jrandall&quot;&gt;Joshua C. Randall&lt;/a&gt; fixed a bug in the floating-point serialization.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/aburgh&quot;&gt;Aaron Burghardt&lt;/a&gt; implemented code to parse streams incrementally. Furthermore, he greatly improved the parser class by allowing the definition of a filter function to discard undesired elements while parsing.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/dkopecek&quot;&gt;Daniel Kopeček&lt;/a&gt; fixed a bug in the compilation with GCC 5.0.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/Florianjw&quot;&gt;Florian Weber&lt;/a&gt; fixed a bug in and improved the performance of the comparison operators.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/EricMCornelius&quot;&gt;Eric Cornelius&lt;/a&gt; pointed out a bug in the handling with NaN and infinity values. He also improved the performance of the string escaping.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/likebeta&quot;&gt;易思龙&lt;/a&gt; implemented a conversion from anonymous enums.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/kepkin&quot;&gt;kepkin&lt;/a&gt; patiently pushed forward the support for Microsoft Visual Studio.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/gregmarr&quot;&gt;gregmarr&lt;/a&gt; simplified the implementation of reverse iterators and helped with numerous hints and improvements. In particular, he pushed forward the implementation of user-defined types.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/caiovlp&quot;&gt;Caio Luppi&lt;/a&gt; fixed a bug in the Unicode handling.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/dariomt&quot;&gt;dariomt&lt;/a&gt; fixed some typos in the examples.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/d-frey&quot;&gt;Daniel Frey&lt;/a&gt; cleaned up some pointers and implemented exception-safe memory allocation.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/ColinH&quot;&gt;Colin Hirsch&lt;/a&gt; took care of a small namespace issue.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/whoshuu&quot;&gt;Huu Nguyen&lt;/a&gt; corrected a variable name in the documentation.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/silverweed&quot;&gt;Silverweed&lt;/a&gt; overloaded &lt;code&gt;parse()&lt;/code&gt; to accept an rvalue reference.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/dariomt&quot;&gt;dariomt&lt;/a&gt; fixed a subtlety in MSVC type support and implemented the &lt;code&gt;get_ref()&lt;/code&gt; function to get a reference to stored values.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/ZahlGraf&quot;&gt;ZahlGraf&lt;/a&gt; added a workaround that allows compilation using Android NDK.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/whackashoe&quot;&gt;whackashoe&lt;/a&gt; replaced a function that was marked as unsafe by Visual Studio.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/406345&quot;&gt;406345&lt;/a&gt; fixed two small warnings.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/glenfe&quot;&gt;Glen Fernandes&lt;/a&gt; noted a potential portability problem in the &lt;code&gt;has_mapped_type&lt;/code&gt; function.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/nibroc&quot;&gt;Corbin Hughes&lt;/a&gt; fixed some typos in the contribution guidelines.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/twelsby&quot;&gt;twelsby&lt;/a&gt; fixed the array subscript operator, an issue that failed the MSVC build, and floating-point parsing/dumping. He further added support for unsigned integer numbers and implemented better roundtrip support for parsed numbers.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/vog&quot;&gt;Volker Diels-Grabsch&lt;/a&gt; fixed a link in the README file.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/msm-&quot;&gt;msm-&lt;/a&gt; added support for American Fuzzy Lop.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/Annihil&quot;&gt;Annihil&lt;/a&gt; fixed an example in the README file.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/Themercee&quot;&gt;Themercee&lt;/a&gt; noted a wrong URL in the README file.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/lv-zheng&quot;&gt;Lv Zheng&lt;/a&gt; fixed a namespace issue with &lt;code&gt;int64_t&lt;/code&gt; and &lt;code&gt;uint64_t&lt;/code&gt;.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/abc100m&quot;&gt;abc100m&lt;/a&gt; analyzed the issues with GCC 4.8 and proposed a &lt;a href=&quot;https://github.com/nlohmann/json/pull/212&quot;&gt;partial solution&lt;/a&gt;.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/zewt&quot;&gt;zewt&lt;/a&gt; added useful notes to the README file about Android.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/robertmrk&quot;&gt;Róbert Márki&lt;/a&gt; added a fix to use move iterators and improved the integration via CMake.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/ChrisKitching&quot;&gt;Chris Kitching&lt;/a&gt; cleaned up the CMake files.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/06needhamt&quot;&gt;Tom Needham&lt;/a&gt; fixed a subtle bug with MSVC 2015 which was also proposed by &lt;a href=&quot;https://github.com/Epidal&quot;&gt;Michael K.&lt;/a&gt;.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/thelostt&quot;&gt;Mário Feroldi&lt;/a&gt; fixed a small typo.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/duncanwerner&quot;&gt;duncanwerner&lt;/a&gt; found a really embarrassing performance regression in the 2.0.0 release.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/dtoma&quot;&gt;Damien&lt;/a&gt; fixed one of the last conversion warnings.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/t-b&quot;&gt;Thomas Braun&lt;/a&gt; fixed a warning in a test case and adjusted MSVC calls in the CI.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/theodelrieu&quot;&gt;Théo DELRIEU&lt;/a&gt; patiently and constructively oversaw the long way toward &lt;a href=&quot;https://github.com/nlohmann/json/issues/290&quot;&gt;iterator-range parsing&lt;/a&gt;. He also implemented the magic behind the serialization/deserialization of user-defined types and split the single header file into smaller chunks.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/5tefan&quot;&gt;Stefan&lt;/a&gt; fixed a minor issue in the documentation.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/vasild&quot;&gt;Vasil Dimov&lt;/a&gt; fixed the documentation regarding conversions from &lt;code&gt;std::multiset&lt;/code&gt;.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/ChristophJud&quot;&gt;ChristophJud&lt;/a&gt; overworked the CMake files to ease project inclusion.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/vpetrigo&quot;&gt;Vladimir Petrigo&lt;/a&gt; made a SFINAE hack more readable and added Visual Studio 17 to the build matrix.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/seeekr&quot;&gt;Denis Andrejew&lt;/a&gt; fixed a grammar issue in the README file.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/palacaze&quot;&gt;Pierre-Antoine Lacaze&lt;/a&gt; found a subtle bug in the &lt;code&gt;dump()&lt;/code&gt; function.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/TurpentineDistillery&quot;&gt;TurpentineDistillery&lt;/a&gt; pointed to &lt;a href=&quot;https://en.cppreference.com/w/cpp/locale/locale/classic&quot;&gt;&lt;code&gt;std::locale::classic()&lt;/code&gt;&lt;/a&gt; to avoid too much locale joggling, found some nice performance improvements in the parser, improved the benchmarking code, and realized locale-independent number parsing and printing.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/cgzones&quot;&gt;cgzones&lt;/a&gt; had an idea how to fix the Coverity scan.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/jaredgrubb&quot;&gt;Jared Grubb&lt;/a&gt; silenced a nasty documentation warning.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/qwename&quot;&gt;Yixin Zhang&lt;/a&gt; fixed an integer overflow check.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/Bosswestfalen&quot;&gt;Bosswestfalen&lt;/a&gt; merged two iterator classes into a smaller one.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/Daniel599&quot;&gt;Daniel599&lt;/a&gt; helped to get Travis to execute the tests with Clang&#39;s sanitizers.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/vjon&quot;&gt;Jonathan Lee&lt;/a&gt; fixed an example in the README file.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/gnzlbg&quot;&gt;gnzlbg&lt;/a&gt; supported the implementation of user-defined types.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/qis&quot;&gt;Alexej Harm&lt;/a&gt; helped to get the user-defined types working with Visual Studio.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/jaredgrubb&quot;&gt;Jared Grubb&lt;/a&gt; supported the implementation of user-defined types.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/EnricoBilla&quot;&gt;EnricoBilla&lt;/a&gt; noted a typo in an example.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/horenmar&quot;&gt;Martin Hořeňovský&lt;/a&gt; found a way for a 2x speedup for the compilation time of the test suite.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/ukhegg&quot;&gt;ukhegg&lt;/a&gt; proposed an improvement for the examples section.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/rswanson-ihi&quot;&gt;rswanson-ihi&lt;/a&gt; noted a typo in the README.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/stanmihai4&quot;&gt;Mihai Stan&lt;/a&gt; fixed a bug in the comparison with &lt;code&gt;nullptr&lt;/code&gt;s.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/tusharpm&quot;&gt;Tushar Maheshwari&lt;/a&gt; added &lt;a href=&quot;https://github.com/sakra/cotire&quot;&gt;cotire&lt;/a&gt; support to speed up the compilation.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/TedLyngmo&quot;&gt;TedLyngmo&lt;/a&gt; noted a typo in the README, removed unnecessary bit arithmetic, and fixed some &lt;code&gt;-Weffc++&lt;/code&gt; warnings.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/krzysztofwos&quot;&gt;Krzysztof Woś&lt;/a&gt; made exceptions more visible.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/ftillier&quot;&gt;ftillier&lt;/a&gt; fixed a compiler warning.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/tinloaf&quot;&gt;tinloaf&lt;/a&gt; made sure all pushed warnings are properly popped.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/Fytch&quot;&gt;Fytch&lt;/a&gt; found a bug in the documentation.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/Type1J&quot;&gt;Jay Sistar&lt;/a&gt; implemented a Meson build description.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/HenryRLee&quot;&gt;Henry Lee&lt;/a&gt; fixed a warning in ICC and improved the iterator implementation.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/vthiery&quot;&gt;Vincent Thiery&lt;/a&gt; maintains a package for the Conan package manager.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/koemeet&quot;&gt;Steffen&lt;/a&gt; fixed a potential issue with MSVC and &lt;code&gt;std::min&lt;/code&gt;.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/Chocobo1&quot;&gt;Mike Tzou&lt;/a&gt; fixed some typos.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/amrcode&quot;&gt;amrcode&lt;/a&gt; noted misleading documentation about comparison of floats.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/olegendo&quot;&gt;Oleg Endo&lt;/a&gt; reduced the memory consumption by replacing &lt;code&gt;&amp;lt;iostream&amp;gt;&lt;/code&gt; with &lt;code&gt;&amp;lt;iosfwd&amp;gt;&lt;/code&gt;.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/dan-42&quot;&gt;dan-42&lt;/a&gt; cleaned up the CMake files to simplify including/reusing of the library.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/himikof&quot;&gt;Nikita Ofitserov&lt;/a&gt; allowed for moving values from initializer lists.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/wincent&quot;&gt;Greg Hurrell&lt;/a&gt; fixed a typo.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/DmitryKuk&quot;&gt;Dmitry Kukovinets&lt;/a&gt; fixed a typo.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/kbthomp1&quot;&gt;kbthomp1&lt;/a&gt; fixed an issue related to the Intel OSX compiler.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/daixtrose&quot;&gt;Markus Werle&lt;/a&gt; fixed a typo.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/WebProdPP&quot;&gt;WebProdPP&lt;/a&gt; fixed a subtle error in a precondition check.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/leha-bot&quot;&gt;Alex&lt;/a&gt; noted an error in a code sample.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/tdegeus&quot;&gt;Tom de Geus&lt;/a&gt; reported some warnings with ICC and helped to fix them.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/pjkundert&quot;&gt;Perry Kundert&lt;/a&gt; simplified reading from input streams.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/sonulohani&quot;&gt;Sonu Lohani&lt;/a&gt; fixed a small compilation error.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/jseward&quot;&gt;Jamie Seward&lt;/a&gt; fixed all MSVC warnings.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/eld00d&quot;&gt;Nate Vargas&lt;/a&gt; added a Doxygen tag file.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/pvleuven&quot;&gt;pvleuven&lt;/a&gt; helped to fix a warning in ICC.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/crea7or&quot;&gt;Pavel&lt;/a&gt; helped to fix some warnings in MSVC.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/jseward&quot;&gt;Jamie Seward&lt;/a&gt; avoided unnecessary string copies in &lt;code&gt;find()&lt;/code&gt; and &lt;code&gt;count()&lt;/code&gt;.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/Itja&quot;&gt;Mitja&lt;/a&gt; fixed some typos.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/jowr&quot;&gt;Jorrit Wronski&lt;/a&gt; updated the Hunter package links.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/TinyTinni&quot;&gt;Matthias Möller&lt;/a&gt; added a &lt;code&gt;.natvis&lt;/code&gt; for the MSVC debug view.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/bogemic&quot;&gt;bogemic&lt;/a&gt; fixed some C++17 deprecation warnings.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/erengy&quot;&gt;Eren Okka&lt;/a&gt; fixed some MSVC warnings.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/abolz&quot;&gt;abolz&lt;/a&gt; integrated the Grisu2 algorithm for proper floating-point formatting, allowing more roundtrip checks to succeed.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/Pipeliner&quot;&gt;Vadim Evard&lt;/a&gt; fixed a Markdown issue in the README.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/zerodefect&quot;&gt;zerodefect&lt;/a&gt; fixed a compiler warning.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/kaidokert&quot;&gt;Kert&lt;/a&gt; allowed to template the string type in the serialization and added the possibility to override the exceptional behavior.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/mark-99&quot;&gt;mark-99&lt;/a&gt; helped fix an ICC error.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/patrikhuber&quot;&gt;Patrik Huber&lt;/a&gt; fixed links in the README file.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/johnfb&quot;&gt;johnfb&lt;/a&gt; found a bug in the implementation of CBOR&#39;s indefinite length strings.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/pfultz2&quot;&gt;Paul Fultz II&lt;/a&gt; added a note on the cget package manager.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/wla80&quot;&gt;Wilson Lin&lt;/a&gt; made the integration section of the README more concise.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/ralfbielig&quot;&gt;RalfBielig&lt;/a&gt; detected and fixed a memory leak in the parser callback.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/agrianius&quot;&gt;agrianius&lt;/a&gt; allowed dumping JSON to an alternative string type.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/ktonon&quot;&gt;Kevin Tonon&lt;/a&gt; overworked the C++11 compiler checks in CMake.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/ax3l&quot;&gt;Axel Huebl&lt;/a&gt; simplified a CMake check and added support for the &lt;a href=&quot;https://spack.io&quot;&gt;Spack package manager&lt;/a&gt;.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/coryan&quot;&gt;Carlos O&#39;Ryan&lt;/a&gt; fixed a typo.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/jammehcow&quot;&gt;James Upjohn&lt;/a&gt; fixed a version number in the compilers section.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/chuckatkins&quot;&gt;Chuck Atkins&lt;/a&gt; adjusted the CMake files to the CMake packaging guidelines and provided documentation for the CMake integration.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/dns13&quot;&gt;Jan Schöppach&lt;/a&gt; fixed a typo.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/martin-mfg&quot;&gt;martin-mfg&lt;/a&gt; fixed a typo.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/TinyTinni&quot;&gt;Matthias Möller&lt;/a&gt; removed the dependency from &lt;code&gt;std::stringstream&lt;/code&gt;.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/agrianius&quot;&gt;agrianius&lt;/a&gt; added code to use alternative string implementations.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/Daniel599&quot;&gt;Daniel599&lt;/a&gt; allowed to use more algorithms with the &lt;code&gt;items()&lt;/code&gt; function.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/jrakow&quot;&gt;Julius Rakow&lt;/a&gt; fixed the Meson include directory and fixed the links to &lt;a href=&quot;https://cppreference.com&quot;&gt;cppreference.com&lt;/a&gt;.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/sonulohani&quot;&gt;Sonu Lohani&lt;/a&gt; fixed the compilation with MSVC 2015 in debug mode.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/grembo&quot;&gt;grembo&lt;/a&gt; fixed the test suite and re-enabled several test cases.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/simnalamburt&quot;&gt;Hyeon Kim&lt;/a&gt; introduced the macro &lt;code&gt;JSON_INTERNAL_CATCH&lt;/code&gt; to control the exception handling inside the library.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/thyu&quot;&gt;thyu&lt;/a&gt; fixed a compiler warning.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/LEgregius&quot;&gt;David Guthrie&lt;/a&gt; fixed a subtle compilation error with Clang 3.4.2.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/dennisfischer&quot;&gt;Dennis Fischer&lt;/a&gt; allowed to call &lt;code&gt;find_package&lt;/code&gt; without installing the library.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/simnalamburt&quot;&gt;Hyeon Kim&lt;/a&gt; fixed an issue with a double macro definition.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/rivertam&quot;&gt;Ben Berman&lt;/a&gt; made some error messages more understandable.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/zakalibit&quot;&gt;zakalibit&lt;/a&gt; fixed a compilation problem with the Intel C++ compiler.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/mandreyel&quot;&gt;mandreyel&lt;/a&gt; fixed a compilation problem.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/koponomarenko&quot;&gt;Kostiantyn Ponomarenko&lt;/a&gt; added version and license information to the Meson build file.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/henryiii&quot;&gt;Henry Schreiner&lt;/a&gt; added support for GCC 4.8.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/knilch0r&quot;&gt;knilch&lt;/a&gt; made sure the test suite does not stall when run in the wrong directory.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/antonioborondo&quot;&gt;Antonio Borondo&lt;/a&gt; fixed an MSVC 2017 warning.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/dgendreau&quot;&gt;Dan Gendreau&lt;/a&gt; implemented the &lt;code&gt;NLOHMANN_JSON_SERIALIZE_ENUM&lt;/code&gt; macro to quickly define an enum/JSON mapping.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/efp&quot;&gt;efp&lt;/a&gt; added line and column information to parse errors.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/julian-becker&quot;&gt;julian-becker&lt;/a&gt; added BSON support.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/pratikpc&quot;&gt;Pratik Chowdhury&lt;/a&gt; added support for structured bindings.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/davedissian&quot;&gt;David Avedissian&lt;/a&gt; added support for Clang 5.0.1 (PS4 version).&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/dumarjo&quot;&gt;Jonathan Dumaresq&lt;/a&gt; implemented an input adapter to read from &lt;code&gt;FILE*&lt;/code&gt;.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/kjpus&quot;&gt;kjpus&lt;/a&gt; fixed a link in the documentation.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/manu-chroma&quot;&gt;Manvendra Singh&lt;/a&gt; fixed a typo in the documentation.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/ziggurat29&quot;&gt;ziggurat29&lt;/a&gt; fixed an MSVC warning.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/SylvainCorlay&quot;&gt;Sylvain Corlay&lt;/a&gt; added code to avoid an issue with MSVC.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/mefyl&quot;&gt;mefyl&lt;/a&gt; fixed a bug when JSON was parsed from an input stream.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/mpoquet&quot;&gt;Millian Poquet&lt;/a&gt; allowed to install the library via Meson.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/moodboom&quot;&gt;Michael Behrns-Miller&lt;/a&gt; found an issue with a missing namespace.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/naszta&quot;&gt;Nasztanovics Ferenc&lt;/a&gt; fixed a compilation issue with libc 2.12.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/andreas-schwab&quot;&gt;Andreas Schwab&lt;/a&gt; fixed the endian conversion.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/Mark-Dunning&quot;&gt;Mark-Dunning&lt;/a&gt; fixed a warning in MSVC.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/garethsb-sony&quot;&gt;Gareth Sylvester-Bradley&lt;/a&gt; added &lt;code&gt;operator/&lt;/code&gt; for JSON Pointers.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/johnmarkwayve&quot;&gt;John-Mark&lt;/a&gt; noted a missing header.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/xvitaly&quot;&gt;Vitaly Zaitsev&lt;/a&gt; fixed compilation with GCC 9.0.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/stac47&quot;&gt;Laurent Stacul&lt;/a&gt; fixed compilation with GCC 9.0.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/iwanders&quot;&gt;Ivor Wanders&lt;/a&gt; helped to reduce the CMake requirement to version 3.1.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/njlr&quot;&gt;njlr&lt;/a&gt; updated the Buckaroo instructions.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/lieff&quot;&gt;Lion&lt;/a&gt; fixed a compilation issue with GCC 7 on CentOS.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/nickaein&quot;&gt;Isaac Nickaein&lt;/a&gt; improved the integer serialization performance and implemented the &lt;code&gt;contains()&lt;/code&gt; function.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/past-due&quot;&gt;past-due&lt;/a&gt; suppressed an unfixable warning.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/elvisoric&quot;&gt;Elvis Oric&lt;/a&gt; improved Meson support.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/Afforix&quot;&gt;Matěj Plch&lt;/a&gt; fixed an example in the README.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/wythe&quot;&gt;Mark Beckwith&lt;/a&gt; fixed a typo.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/scinart&quot;&gt;scinart&lt;/a&gt; fixed a bug in the serializer.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/pboettch&quot;&gt;Patrick Boettcher&lt;/a&gt; implemented &lt;code&gt;push_back()&lt;/code&gt; and &lt;code&gt;pop_back()&lt;/code&gt; for JSON Pointers.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/nicoddemus&quot;&gt;Bruno Oliveira&lt;/a&gt; added support for Conda.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/skypjack&quot;&gt;Michele Caini&lt;/a&gt; fixed links in the README.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/hnkb&quot;&gt;Hani&lt;/a&gt; documented how to install the library with NuGet.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/wythe&quot;&gt;Mark Beckwith&lt;/a&gt; fixed a typo.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/yann-morin-1998&quot;&gt;yann-morin-1998&lt;/a&gt; helped to reduce the CMake requirement to version 3.1.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/podsvirov&quot;&gt;Konstantin Podsvirov&lt;/a&gt; maintains a package for the MSYS2 software distro.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/remyabel&quot;&gt;remyabel&lt;/a&gt; added GNUInstallDirs to the CMake files.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/taylorhoward92&quot;&gt;Taylor Howard&lt;/a&gt; fixed a unit test.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/Macr0Nerd&quot;&gt;Gabe Ron&lt;/a&gt; implemented the &lt;code&gt;to_string&lt;/code&gt; method.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/heavywatal&quot;&gt;Watal M. Iwasaki&lt;/a&gt; fixed a Clang warning.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/onqtam&quot;&gt;Viktor Kirilov&lt;/a&gt; switched the unit tests from &lt;a href=&quot;https://github.com/philsquared/Catch&quot;&gt;Catch&lt;/a&gt; to &lt;a href=&quot;https://github.com/onqtam/doctest&quot;&gt;doctest&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/ejcjason&quot;&gt;Juncheng E&lt;/a&gt; fixed a typo.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/tete17&quot;&gt;tete17&lt;/a&gt; fixed a bug in the &lt;code&gt;contains&lt;/code&gt; function.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/Xav83&quot;&gt;Xav83&lt;/a&gt; fixed some cppcheck warnings.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/0xflotus&quot;&gt;0xflotus&lt;/a&gt; fixed some typos.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/chris0x44&quot;&gt;Christian Deneke&lt;/a&gt; added a const version of &lt;code&gt;json_pointer::back&lt;/code&gt;.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/crazyjul&quot;&gt;Julien Hamaide&lt;/a&gt; made the &lt;code&gt;items()&lt;/code&gt; function work with custom string types.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/nemequ&quot;&gt;Evan Nemerson&lt;/a&gt; updated fixed a bug in Hedley and updated this library accordingly.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/flopp&quot;&gt;Florian Pigorsch&lt;/a&gt; fixed a lot of typos.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/cbegue&quot;&gt;Camille Bégué&lt;/a&gt; fixed an issue in the conversion from &lt;code&gt;std::pair&lt;/code&gt; and &lt;code&gt;std::tuple&lt;/code&gt; to &lt;code&gt;json&lt;/code&gt;.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/AnthonyVH&quot;&gt;Anthony VH&lt;/a&gt; fixed a compile error in an enum deserialization.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/ua-code-dragon&quot;&gt;Yuriy Vountesmery&lt;/a&gt; noted a subtle bug in a preprocessor check.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/dota17&quot;&gt;Chen&lt;/a&gt; fixed numerous issues in the library.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/aokellermann&quot;&gt;Antony Kellermann&lt;/a&gt; added a CI step for GCC 10.1.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/gistrec&quot;&gt;Alex&lt;/a&gt; fixed an MSVC warning.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/rvjr&quot;&gt;Rainer&lt;/a&gt; proposed an improvement in the floating-point serialization in CBOR.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/FrancoisChabot&quot;&gt;Francois Chabot&lt;/a&gt; made performance improvements in the input adapters.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/ArthurSonzogni&quot;&gt;Arthur Sonzogni&lt;/a&gt; documented how the library can be included via &lt;code&gt;FetchContent&lt;/code&gt;.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/rmisev&quot;&gt;Rimas Misevičius&lt;/a&gt; fixed an error message.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/alexandermyasnikov&quot;&gt;Alexander Myasnikov&lt;/a&gt; fixed some examples and a link in the README.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/uhoreg&quot;&gt;Hubert Chathi&lt;/a&gt; made CMake&#39;s version config file architecture-independent.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/OmnipotentEntity&quot;&gt;OmnipotentEntity&lt;/a&gt; implemented the binary values for CBOR, MessagePack, BSON, and UBJSON.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/ArtemSarmini&quot;&gt;ArtemSarmini&lt;/a&gt; fixed a compilation issue with GCC 10 and fixed a leak.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/sea-kg&quot;&gt;Evgenii Sopov&lt;/a&gt; integrated the library to the wsjcpp package manager.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/linev&quot;&gt;Sergey Linev&lt;/a&gt; fixed a compiler warning.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/magamig&quot;&gt;Miguel Magalhães&lt;/a&gt; fixed the year in the copyright.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/garethsb-sony&quot;&gt;Gareth Sylvester-Bradley&lt;/a&gt; fixed a compilation issue with MSVC.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/alex-weej&quot;&gt;Alexander “weej” Jones&lt;/a&gt; fixed an example in the README.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/Coeur&quot;&gt;Antoine Cœur&lt;/a&gt; fixed some typos in the documentation.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/jothepro&quot;&gt;jothepro&lt;/a&gt; updated links to the Hunter package.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/kastiglione&quot;&gt;Dave Lee&lt;/a&gt; fixed a link in the README.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/Klaim&quot;&gt;Joël Lamotte&lt;/a&gt; added instruction for using Build2&#39;s package manager.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/pauljurczak&quot;&gt;Paul Jurczak&lt;/a&gt; fixed an example in the README.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/sonulohani&quot;&gt;Sonu Lohani&lt;/a&gt; fixed a warning.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/gocarlos&quot;&gt;Carlos Gomes Martinho&lt;/a&gt; updated the Conan package source.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/podsvirov&quot;&gt;Konstantin Podsvirov&lt;/a&gt; fixed the MSYS2 package documentation.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/Tridacnid&quot;&gt;Tridacnid&lt;/a&gt; improved the CMake tests.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/MBalszun&quot;&gt;Michael&lt;/a&gt; fixed MSVC warnings.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/quentin-dev&quot;&gt;Quentin Barbarat&lt;/a&gt; fixed an example in the documentation.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/XyFreak&quot;&gt;XyFreak&lt;/a&gt; fixed a compiler warning.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/TotalCaesar659&quot;&gt;TotalCaesar659&lt;/a&gt; fixed links in the README.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/tanuj208&quot;&gt;Tanuj Garg&lt;/a&gt; improved the fuzzer coverage for UBSAN input.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/AODQ&quot;&gt;AODQ&lt;/a&gt; fixed a compiler warning.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/jwittbrodt&quot;&gt;jwittbrodt&lt;/a&gt; made &lt;code&gt;NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE&lt;/code&gt; inline.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/pfeatherstone&quot;&gt;pfeatherstone&lt;/a&gt; improved the upper bound of arguments of the &lt;code&gt;NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE&lt;/code&gt;/&lt;code&gt;NLOHMANN_DEFINE_TYPE_INTRUSIVE&lt;/code&gt; macros.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/jprochazk&quot;&gt;Jan Procházka&lt;/a&gt; fixed a bug in the CBOR parser for binary and string values.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/T0b1-iOS&quot;&gt;T0b1-iOS&lt;/a&gt; fixed a bug in the new hash implementation.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/matthewbauer&quot;&gt;Matthew Bauer&lt;/a&gt; adjusted the CBOR writer to create tags for binary subtypes.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/gatopeich&quot;&gt;gatopeich&lt;/a&gt; implemented an ordered map container for &lt;code&gt;nlohmann::ordered_json&lt;/code&gt;.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/ericonr&quot;&gt;Érico Nogueira Rolim&lt;/a&gt; added support for pkg-config.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/KonanM&quot;&gt;KonanM&lt;/a&gt; proposed an implementation for the &lt;code&gt;NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE&lt;/code&gt;/&lt;code&gt;NLOHMANN_DEFINE_TYPE_INTRUSIVE&lt;/code&gt; macros.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/gracicot&quot;&gt;Guillaume Racicot&lt;/a&gt; implemented &lt;code&gt;string_view&lt;/code&gt; support and allowed C++20 support.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/alexreinking&quot;&gt;Alex Reinking&lt;/a&gt; improved CMake support for &lt;code&gt;FetchContent&lt;/code&gt;.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/ssbssa&quot;&gt;Hannes Domani&lt;/a&gt; provided a GDB pretty printer.&lt;/li&gt; 
 &lt;li&gt;Lars Wirzenius reviewed the README file.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/ongjunjie&quot;&gt;Jun Jie&lt;/a&gt; fixed a compiler path in the CMake scripts.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/rbuch&quot;&gt;Ronak Buch&lt;/a&gt; fixed typos in the documentation.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/karzhenkov&quot;&gt;Alexander Karzhenkov&lt;/a&gt; fixed a move constructor and the Travis builds.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/leozz37&quot;&gt;Leonardo Lima&lt;/a&gt; added CPM.Cmake support.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/jbzdarkid&quot;&gt;Joseph Blackman&lt;/a&gt; fixed a warning.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/YarikTH&quot;&gt;Yaroslav&lt;/a&gt; updated doctest and implemented unit tests.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/globberwops&quot;&gt;Martin Stump&lt;/a&gt; fixed a bug in the CMake files.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/jasujm&quot;&gt;Jaakko Moisio&lt;/a&gt; fixed a bug in the input adapters.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/bl-ue&quot;&gt;bl-ue&lt;/a&gt; fixed some Markdown issues in the README file.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/wawiesel&quot;&gt;William A. Wieselquist&lt;/a&gt; fixed an example from the README.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/abbaswasim&quot;&gt;abbaswasim&lt;/a&gt; fixed an example from the README.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/remyjette&quot;&gt;Remy Jette&lt;/a&gt; fixed a warning.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/frasermarlow&quot;&gt;Fraser&lt;/a&gt; fixed the documentation.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/musicinmybrain&quot;&gt;Ben Beasley&lt;/a&gt; updated doctest.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/doronbehar&quot;&gt;Doron Behar&lt;/a&gt; fixed pkg-config.pc.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/raduteo&quot;&gt;raduteo&lt;/a&gt; fixed a warning.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/theShmoo&quot;&gt;David Pfahler&lt;/a&gt; added the possibility to compile the library without I/O support.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/mortenfyhn&quot;&gt;Morten Fyhn Amundsen&lt;/a&gt; fixed a typo.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/jpl-mac&quot;&gt;jpl-mac&lt;/a&gt; allowed treating the library as a system header in CMake.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/jasmcaus&quot;&gt;Jason Dsouza&lt;/a&gt; fixed the indentation of the CMake file.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/offa&quot;&gt;offa&lt;/a&gt; added a link to Conan Center to the documentation.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/TotalCaesar659&quot;&gt;TotalCaesar659&lt;/a&gt; updated the links in the documentation to use HTTPS.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/grafail&quot;&gt;Rafail Giavrimis&lt;/a&gt; fixed the Google Benchmark default branch.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/ldionne&quot;&gt;Louis Dionne&lt;/a&gt; fixed a conversion operator.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/justanotheranonymoususer&quot;&gt;justanotheranonymoususer&lt;/a&gt; made the examples in the README more consistent.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/Finkman&quot;&gt;Finkman&lt;/a&gt; suppressed some &lt;code&gt;-Wfloat-equal&lt;/code&gt; warnings.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/fhuberts&quot;&gt;Ferry Huberts&lt;/a&gt; fixed &lt;code&gt;-Wswitch-enum&lt;/code&gt; warnings.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/senyai&quot;&gt;Arseniy Terekhin&lt;/a&gt; made the GDB pretty-printer robust against unset variable names.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/amirmasoudabdol&quot;&gt;Amir Masoud Abdol&lt;/a&gt; updated the Homebrew command as nlohmann/json is now in homebrew-core.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/Hallot&quot;&gt;Hallot&lt;/a&gt; fixed some &lt;code&gt;-Wextra-semi-stmt warnings&lt;/code&gt;.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/gcerretani&quot;&gt;Giovanni Cerretani&lt;/a&gt; fixed &lt;code&gt;-Wunused&lt;/code&gt; warnings on &lt;code&gt;JSON_DIAGNOSTICS&lt;/code&gt;.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/Kapeli&quot;&gt;Bogdan Popescu&lt;/a&gt; hosts the &lt;a href=&quot;https://github.com/Kapeli/Dash-User-Contributions/tree/master/docsets/JSON_for_Modern_C%2B%2B&quot;&gt;docset&lt;/a&gt; for offline documentation viewers.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/carlsmedstad&quot;&gt;Carl Smedstad&lt;/a&gt; fixed an assertion error when using &lt;code&gt;JSON_DIAGNOSTICS&lt;/code&gt;.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/miikka75&quot;&gt;miikka75&lt;/a&gt; provided an important fix to compile C++17 code with Clang 9.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/kernie&quot;&gt;Maarten Becker&lt;/a&gt; fixed a warning for shadowed variables.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/axnsan12&quot;&gt;Cristi Vîjdea&lt;/a&gt; fixed typos in the &lt;code&gt;operator[]&lt;/code&gt; documentation.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/axic&quot;&gt;Alex Beregszaszi&lt;/a&gt; fixed spelling mistakes in comments.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/striezel&quot;&gt;Dirk Stolle&lt;/a&gt; fixed typos in documentation.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/daniel-kun&quot;&gt;Daniel Albuschat&lt;/a&gt; corrected the parameter name in the &lt;code&gt;parse&lt;/code&gt; documentation.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/Prince-Mendiratta&quot;&gt;Prince Mendiratta&lt;/a&gt; fixed a link to the FAQ.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/falbrechtskirchinger&quot;&gt;Florian Albrechtskirchinger&lt;/a&gt; implemented &lt;code&gt;std::string_view&lt;/code&gt; support for object keys and made dozens of other improvements.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/fangq&quot;&gt;Qianqian Fang&lt;/a&gt; implemented the Binary JData (BJData) format.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/pketelsen&quot;&gt;pketelsen&lt;/a&gt; added macros &lt;code&gt;NLOHMANN_DEFINE_TYPE_INTRUSIVE_WITH_DEFAULT&lt;/code&gt; and &lt;code&gt;NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_WITH_DEFAULT&lt;/code&gt;.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/DarkZeros&quot;&gt;DarkZeros&lt;/a&gt; adjusted to code to not clash with Arduino defines.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/flagarde&quot;&gt;flagarde&lt;/a&gt; fixed the output of &lt;code&gt;meta()&lt;/code&gt; for MSVC.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/gcerretani&quot;&gt;Giovanni Cerretani&lt;/a&gt; fixed a check for &lt;code&gt;std::filesystem&lt;/code&gt;.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/rex4539&quot;&gt;Dimitris Apostolou&lt;/a&gt; fixed a typo.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/fhuberts&quot;&gt;Ferry Huberts&lt;/a&gt; fixed a typo.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/heinemml&quot;&gt;Michael Nosthoff&lt;/a&gt; fixed a typo.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/jhnlee&quot;&gt;JungHoon Lee&lt;/a&gt; fixed a typo.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/fdiblen&quot;&gt;Faruk D.&lt;/a&gt; fixed the CITATION.CFF file.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/puffetto&quot;&gt;Andrea Cocito&lt;/a&gt; added a clarification on macro usage to the documentation.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/kkarbowiak&quot;&gt;Krzysiek Karbowiak&lt;/a&gt; refactored the tests to use &lt;code&gt;CHECK_THROWS_WITH_AS&lt;/code&gt;.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/prncoprs&quot;&gt;Chaoqi Zhang&lt;/a&gt; fixed a typo.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/ivanovmp&quot;&gt;ivanovmp&lt;/a&gt; fixed a whitespace error.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/KsaNL&quot;&gt;KsaNL&lt;/a&gt; fixed a build error when including &lt;code&gt;&amp;lt;windows.h&amp;gt;&lt;/code&gt;.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/Tachi107&quot;&gt;Andrea Pappacoda&lt;/a&gt; moved &lt;code&gt;.pc&lt;/code&gt; and &lt;code&gt;.cmake&lt;/code&gt; files to &lt;code&gt;share&lt;/code&gt; directory.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/wolfv&quot;&gt;Wolf Vollprecht&lt;/a&gt; added the &lt;code&gt;patch_inplace&lt;/code&gt; function.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/jez&quot;&gt;Jake Zimmerman&lt;/a&gt; highlighted common usage patterns in the README file.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/NN---&quot;&gt;NN&lt;/a&gt; added the Visual Studio output directory to &lt;code&gt;.gitignore&lt;/code&gt;.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/romainreignier&quot;&gt;Romain Reignier&lt;/a&gt; improved the performance of the vector output adapter.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/Mike-Leo-Smith&quot;&gt;Mike&lt;/a&gt; fixed the &lt;code&gt;std::iterator_traits&lt;/code&gt;.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/zxey&quot;&gt;Richard Hozák&lt;/a&gt; added macro &lt;code&gt;JSON_NO_ENUM&lt;/code&gt; to disable default enum conversions.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/vakokako&quot;&gt;vakokako&lt;/a&gt; fixed tests when compiling with C++20.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/alexweej&quot;&gt;Alexander “weej” Jones&lt;/a&gt; fixed an example in the README.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/eli-schwartz&quot;&gt;Eli Schwartz&lt;/a&gt; added more files to the &lt;code&gt;include.zip&lt;/code&gt; archive.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/kevinlul&quot;&gt;Kevin Lu&lt;/a&gt; fixed a compilation issue when typedefs with certain names were present.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/luxe&quot;&gt;Trevor Hickey&lt;/a&gt; improved the description of an example.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/jef&quot;&gt;Jef LeCompte&lt;/a&gt; updated the year in the README file.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/ahamez&quot;&gt;Alexandre Hamez&lt;/a&gt; fixed a warning.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/mbadhan&quot;&gt;Maninderpal Badhan&lt;/a&gt; fixed a typo.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/kevin--&quot;&gt;kevin--&lt;/a&gt; added a note to an example in the README file.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/wx257osn2&quot;&gt;I&lt;/a&gt; fixed a typo.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/Lord-Kamina&quot;&gt;Gregorio Litenstein&lt;/a&gt; fixed the Clang detection.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/andoma&quot;&gt;Andreas Smas&lt;/a&gt; added a Doozer badge.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/wancw&quot;&gt;WanCW&lt;/a&gt; fixed the string conversion with Clang.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/zhaohuaxishi&quot;&gt;zhaohuaxishi&lt;/a&gt; fixed a Doxygen error.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/emvivre&quot;&gt;emvivre&lt;/a&gt; removed an invalid parameter from CMake.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/Dobiasd&quot;&gt;Tobias Hermann&lt;/a&gt; fixed a link in the README file.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/traits&quot;&gt;Michael&lt;/a&gt; fixed a warning.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/ryanjmulder&quot;&gt;Ryan Mulder&lt;/a&gt; added &lt;code&gt;ensure_ascii&lt;/code&gt; to the &lt;code&gt;dump&lt;/code&gt; function.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/murinicanor&quot;&gt;Muri Nicanor&lt;/a&gt; fixed the &lt;code&gt;sed&lt;/code&gt; discovery in the Makefile.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/dgavedissian&quot;&gt;David Avedissian&lt;/a&gt; implemented SFINAE-friendly &lt;code&gt;iterator_traits&lt;/code&gt;.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/aqnouch&quot;&gt;AQNOUCH Mohammed&lt;/a&gt; fixed a typo in the README.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/garethsb&quot;&gt;Gareth Sylvester-Bradley&lt;/a&gt; added &lt;code&gt;operator/=&lt;/code&gt; and &lt;code&gt;operator/&lt;/code&gt; to construct JSON pointers.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/mykter&quot;&gt;Michael Macnair&lt;/a&gt; added support for afl-fuzz testing.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/berkus&quot;&gt;Berkus Decker&lt;/a&gt; fixed a typo in the README.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/effolkronium&quot;&gt;Illia Polishchuk&lt;/a&gt; improved the CMake testing.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/eltociear&quot;&gt;Ikko Ashimine&lt;/a&gt; fixed a typo.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/barcode&quot;&gt;Raphael Grimm&lt;/a&gt; added the possibility to define a custom base class.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/tocic&quot;&gt;tocic&lt;/a&gt; fixed typos in the documentation.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/Vertexwahn&quot;&gt;Vertexwahn&lt;/a&gt; added Bazel build support.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/striezel&quot;&gt;Dirk Stolle&lt;/a&gt; fixed typos in the documentation.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/DavidKorczynski&quot;&gt;DavidKorczynski&lt;/a&gt; added a CIFuzz CI GitHub action.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/Finkman&quot;&gt;Finkman&lt;/a&gt; fixed the debug pretty-printer.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/floriansegginger&quot;&gt;Florian Segginger&lt;/a&gt; bumped the years in the README.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/haadfida&quot;&gt;haadfida&lt;/a&gt; cleaned up the badges of used services.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/ArsenArsen&quot;&gt;Arsen Arsenović&lt;/a&gt; fixed a build error.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/theevilone45&quot;&gt;theevilone45&lt;/a&gt; fixed a typo in a CMake file.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/trofi&quot;&gt;Sergei Trofimovich&lt;/a&gt; fixed the custom allocator support.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/joycebrum&quot;&gt;Joyce&lt;/a&gt; fixed some security issues in the GitHub workflows.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/njakob&quot;&gt;Nicolas Jakob&lt;/a&gt; add vcpkg version badge.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/Tomerkm&quot;&gt;Tomerkm&lt;/a&gt; added tests.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/tusooa&quot;&gt;No.&lt;/a&gt; fixed the use of &lt;code&gt;get&amp;lt;&amp;gt;&lt;/code&gt; calls.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/tarolling&quot;&gt;taro&lt;/a&gt; fixed a typo in the &lt;code&gt;CODEOWNERS&lt;/code&gt; file.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/eltociear&quot;&gt;Ikko Eltociear Ashimine&lt;/a&gt; fixed a typo.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/felixonmars&quot;&gt;Felix Yan&lt;/a&gt; fixed a typo in the README.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/HO-COOH&quot;&gt;HO-COOH&lt;/a&gt; fixed a parenthesis in the documentation.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/iwanders&quot;&gt;Ivor Wanders&lt;/a&gt; fixed the examples to catch exception by &lt;code&gt;const&amp;amp;&lt;/code&gt;.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/miny1233&quot;&gt;miny1233&lt;/a&gt; fixed a parenthesis in the documentation.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/tomalakgeretkal&quot;&gt;tomalakgeretkal&lt;/a&gt; fixed a compilation error.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/ALF-ONE&quot;&gt;alferov&lt;/a&gt; fixed a compilation error.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/craigscott-crascit&quot;&gt;Craig Scott&lt;/a&gt; fixed a deprecation warning in CMake.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/ZeronSix&quot;&gt;Vyacheslav Zhdanovskiy&lt;/a&gt; added macros for serialization-only types.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/mwestphal&quot;&gt;Mathieu Westphal&lt;/a&gt; fixed typos.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/scribam&quot;&gt;scribam&lt;/a&gt; fixed the MinGW workflow.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/aleksproger&quot;&gt;Aleksei Sapitskii&lt;/a&gt; added support for Apple&#39;s Swift Package Manager.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/bebuch&quot;&gt;Benjamin Buch&lt;/a&gt; fixed the installation path in CMake.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/colbychaskell&quot;&gt;Colby Haskell&lt;/a&gt; clarified the parse error message in case a file cannot be opened.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/TheJCAB&quot;&gt;Juan Carlos Arevalo Baeza&lt;/a&gt; fixed the enum conversion.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/ALF-ONE&quot;&gt;alferov&lt;/a&gt; fixed a version in the documentation.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/serge-s&quot;&gt;ss&lt;/a&gt; fixed the amalgamation call.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/AniketDhemare&quot;&gt;AniketDhemare&lt;/a&gt; fixed a version in the documentation.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/philip-paul-mueller&quot;&gt;Philip Müller&lt;/a&gt; fixed an example.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/LeilaShcheglova&quot;&gt;Leila Shcheglova&lt;/a&gt; fixed a warning in a test.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/alexprabhat99&quot;&gt;Alex Prabhat Bara&lt;/a&gt; fixed a function name in the documentation.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/laterlaugh&quot;&gt;laterlaugh&lt;/a&gt; fixed some typos.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/MrJia1997&quot;&gt;Yuanhao Jia&lt;/a&gt; fixed the GDB pretty printer.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/Fallen-Breath&quot;&gt;Fallen_Breath&lt;/a&gt; fixed an example for JSON Pointer.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/tsnl&quot;&gt;Nikhil Idiculla&lt;/a&gt; fixed some typos.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/gmyers18&quot;&gt;Griffin Myers&lt;/a&gt; updated the Natvis file.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/thetimr&quot;&gt;thetimr&lt;/a&gt; fixed a typo in the documentation.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/zerocukor287&quot;&gt;Balazs Erseki&lt;/a&gt; fixed a URL in the contribution guidelines.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/rotolof&quot;&gt;Niccolò Iardella&lt;/a&gt; added &lt;code&gt;NLOHMANN_DEFINE_DERIVED_TYPE_*&lt;/code&gt; macros.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/iboB&quot;&gt;Borislav Stanimirov&lt;/a&gt; allowed overriding the CMake target name.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/captaincrutches&quot;&gt;Captain Crutches&lt;/a&gt; made &lt;code&gt;iterator_proxy_value&lt;/code&gt; a &lt;code&gt;std::forward_iterator&lt;/code&gt;.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/fsandhei&quot;&gt;Fredrik Sandhei&lt;/a&gt; added type conversion support for &lt;code&gt;std::optional&lt;/code&gt;.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/jordan-hoang&quot;&gt;jh96&lt;/a&gt; added exceptions when &lt;code&gt;nullptr&lt;/code&gt; is passed to &lt;code&gt;parse&lt;/code&gt;.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/StuartGorman&quot;&gt;Stuart Gorman&lt;/a&gt; fixed number parsing when &lt;code&gt;EINTR&lt;/code&gt; set in &lt;code&gt;errno&lt;/code&gt;.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/dcbaker&quot;&gt;Dylan Baker&lt;/a&gt; generated a pkg-config file that follows the pkg-config conventions.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/TianyiChen&quot;&gt;Tianyi Chen&lt;/a&gt; optimized the binary &lt;code&gt;get_number&lt;/code&gt; implementation.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/peng-wang-cn&quot;&gt;peng-wang-cn&lt;/a&gt; added type conversion support for multidimensional arrays.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/EinarsNG&quot;&gt;Einars Netlis-Galejs&lt;/a&gt; added &lt;code&gt;ONLY_SERIALIZE&lt;/code&gt; for &lt;code&gt;NLOHMANN_DEFINE_DERIVED_TYPE_*&lt;/code&gt; macros.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/mering&quot;&gt;Marcel&lt;/a&gt; removed &lt;code&gt;alwayslink=True&lt;/code&gt; Bazel flag.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/hnampally&quot;&gt;Harinath Nampally&lt;/a&gt; added diagnostic positions to exceptions.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/NissimBendanan&quot;&gt;Nissim Armand Ben Danan&lt;/a&gt; fixed &lt;code&gt;NLOHMANN_DEFINE_TYPE_INTRUSIVE_WITH_DEFAULT&lt;/code&gt; with an empty JSON instance.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/codenut&quot;&gt;Michael Valladolid&lt;/a&gt; added support for BSON uint64 serialization/deserialization.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/nikhilreddydev&quot;&gt;Nikhil&lt;/a&gt; updated the documentation.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/nebkat&quot;&gt;Nebojša Cvetković&lt;/a&gt; added support for BJDATA optimized binary array type.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/sushshring&quot;&gt;Sushrut Shringarputale&lt;/a&gt; added support for diagnostic positions.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/kimci86&quot;&gt;kimci86&lt;/a&gt; templated to &lt;code&gt;NLOHMANN_DEFINE_TYPE&lt;/code&gt; macros to also support &lt;code&gt;ordered_json&lt;/code&gt;.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/richardtop&quot;&gt;Richard Topchii&lt;/a&gt; added support for VisionOS in the Swift Package Manager.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/Robadob&quot;&gt;Robert Chisholm&lt;/a&gt; fixed a typo.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/zjyhjqs&quot;&gt;zjyhjqs&lt;/a&gt; added CPack support.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/bitFiedler&quot;&gt;bitFiedler&lt;/a&gt; made GDB pretty printer work with Python 3.8.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/LocutusOfBorg&quot;&gt;Gianfranco Costamagna&lt;/a&gt; fixed a compiler warning.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/risa2000&quot;&gt;risa2000&lt;/a&gt; made &lt;code&gt;std::filesystem::path&lt;/code&gt; conversion to/from UTF-8 encoded string explicit.&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;Thanks a lot for helping out! Please &lt;a href=&quot;mailto:mail@nlohmann.me&quot;&gt;let me know&lt;/a&gt; if I forgot someone.&lt;/p&gt; 
&lt;h2&gt;Used third-party tools&lt;/h2&gt; 
&lt;p&gt;The library itself consists of a single header file licensed under the MIT license. However, it is built, tested, documented, and whatnot using a lot of third-party tools and services. Thanks a lot!&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/edlund/amalgamate&quot;&gt;&lt;strong&gt;amalgamate.py - Amalgamate C source and header files&lt;/strong&gt;&lt;/a&gt; to create a single header file&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://lcamtuf.coredump.cx/afl/&quot;&gt;&lt;strong&gt;American fuzzy lop&lt;/strong&gt;&lt;/a&gt; for fuzz testing&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.appveyor.com&quot;&gt;&lt;strong&gt;AppVeyor&lt;/strong&gt;&lt;/a&gt; for &lt;a href=&quot;https://ci.appveyor.com/project/nlohmann/json&quot;&gt;continuous integration&lt;/a&gt; on Windows&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://astyle.sourceforge.net&quot;&gt;&lt;strong&gt;Artistic Style&lt;/strong&gt;&lt;/a&gt; for automatic source code indentation&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://clang.llvm.org&quot;&gt;&lt;strong&gt;Clang&lt;/strong&gt;&lt;/a&gt; for compilation with code sanitizers&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://cmake.org&quot;&gt;&lt;strong&gt;CMake&lt;/strong&gt;&lt;/a&gt; for build automation&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.codacy.com&quot;&gt;&lt;strong&gt;Codacy&lt;/strong&gt;&lt;/a&gt; for further &lt;a href=&quot;https://app.codacy.com/gh/nlohmann/json/dashboard&quot;&gt;code analysis&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://coveralls.io&quot;&gt;&lt;strong&gt;Coveralls&lt;/strong&gt;&lt;/a&gt; to measure &lt;a href=&quot;https://coveralls.io/github/nlohmann/json&quot;&gt;code coverage&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://scan.coverity.com&quot;&gt;&lt;strong&gt;Coverity Scan&lt;/strong&gt;&lt;/a&gt; for &lt;a href=&quot;https://scan.coverity.com/projects/nlohmann-json&quot;&gt;static analysis&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://cppcheck.sourceforge.io&quot;&gt;&lt;strong&gt;cppcheck&lt;/strong&gt;&lt;/a&gt; for static analysis&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/onqtam/doctest&quot;&gt;&lt;strong&gt;doctest&lt;/strong&gt;&lt;/a&gt; for the unit tests&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/skywinder/github-changelog-generator&quot;&gt;&lt;strong&gt;GitHub Changelog Generator&lt;/strong&gt;&lt;/a&gt; to generate the &lt;a href=&quot;https://github.com/nlohmann/json/raw/develop/ChangeLog.md&quot;&gt;ChangeLog&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/google/benchmark&quot;&gt;&lt;strong&gt;Google Benchmark&lt;/strong&gt;&lt;/a&gt; to implement the benchmarks&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://nemequ.github.io/hedley/&quot;&gt;&lt;strong&gt;Hedley&lt;/strong&gt;&lt;/a&gt; to avoid re-inventing several compiler-agnostic feature macros&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/linux-test-project/lcov&quot;&gt;&lt;strong&gt;lcov&lt;/strong&gt;&lt;/a&gt; to process coverage information and create an HTML view&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://llvm.org/docs/LibFuzzer.html&quot;&gt;&lt;strong&gt;libFuzzer&lt;/strong&gt;&lt;/a&gt; to implement fuzz testing for OSS-Fuzz&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://squidfunk.github.io/mkdocs-material/&quot;&gt;&lt;strong&gt;Material for MkDocs&lt;/strong&gt;&lt;/a&gt; for the style of the documentation site&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.mkdocs.org&quot;&gt;&lt;strong&gt;MkDocs&lt;/strong&gt;&lt;/a&gt; for the documentation site&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/google/oss-fuzz&quot;&gt;&lt;strong&gt;OSS-Fuzz&lt;/strong&gt;&lt;/a&gt; for continuous fuzz testing of the library (&lt;a href=&quot;https://github.com/google/oss-fuzz/tree/master/projects/json&quot;&gt;project repository&lt;/a&gt;)&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://probot.github.io&quot;&gt;&lt;strong&gt;Probot&lt;/strong&gt;&lt;/a&gt; for automating maintainer tasks such as closing stale issues, requesting missing information, or detecting toxic comments.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://valgrind.org&quot;&gt;&lt;strong&gt;Valgrind&lt;/strong&gt;&lt;/a&gt; to check for correct memory management&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Notes&lt;/h2&gt; 
&lt;h3&gt;Standards compliance&lt;/h3&gt; 
&lt;p&gt;The library targets strict conformance with &lt;a href=&quot;https://tools.ietf.org/html/rfc8259.html&quot;&gt;RFC 8259&lt;/a&gt;. Both the original &lt;a href=&quot;https://github.com/nst/JSONTestSuite&quot;&gt;JSONTestSuite&lt;/a&gt; and its updated revision are exercised in CI; their test data is downloaded from &lt;a href=&quot;https://github.com/nlohmann/json_test_data&quot;&gt;&lt;code&gt;nlohmann/json_test_data&lt;/code&gt;&lt;/a&gt; at configure time rather than committed to this repository (see &lt;a href=&quot;https://github.com/nlohmann/json/raw/develop/tests/src/unit-testsuites.cpp&quot;&gt;&lt;code&gt;tests/src/unit-testsuites.cpp&lt;/code&gt;&lt;/a&gt;):&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;The updated revision runs all mandatory &lt;code&gt;y_&lt;/code&gt; (must-accept) and &lt;code&gt;n_&lt;/code&gt; (must-reject) cases through the strict &lt;a href=&quot;https://json.nlohmann.me/api/basic_json/parse/&quot;&gt;&lt;code&gt;parse()&lt;/code&gt;&lt;/a&gt; entry point; the original suite runs its &lt;code&gt;n_&lt;/code&gt; cases through &lt;code&gt;parse()&lt;/code&gt; and its &lt;code&gt;y_&lt;/code&gt; cases through &lt;a href=&quot;https://json.nlohmann.me/api/operator_gtgt/&quot;&gt;&lt;code&gt;operator&amp;gt;&amp;gt;&lt;/code&gt;&lt;/a&gt;.&lt;/li&gt; 
 &lt;li&gt;The &lt;code&gt;i_&lt;/code&gt; (implementation-defined) cases are, by RFC 8259, free to be accepted &lt;em&gt;or&lt;/em&gt; rejected, so &quot;passing all &lt;code&gt;i_&lt;/code&gt; cases&quot; is not a meaningful conformance metric. The library makes deliberate, documented choices there: nesting depth is not artificially limited, a leading UTF-8 byte order mark is silently ignored, &lt;a href=&quot;https://www.unicode.org/faq/private_use.html#nonchar1&quot;&gt;Unicode noncharacters&lt;/a&gt; are forwarded unchanged, invalid UTF-8 and lone/unpaired UTF-16 surrogates are rejected (stricter than required), and a number that cannot be stored without becoming &lt;code&gt;NaN&lt;/code&gt;/&lt;code&gt;INF&lt;/code&gt; raises &lt;a href=&quot;https://json.nlohmann.me/home/exceptions/#jsonexceptionout_of_range406&quot;&gt;&lt;code&gt;out_of_range.406&lt;/code&gt;&lt;/a&gt;.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;One behavioral nuance is worth calling out, because a superficial test often misreads it as non-compliance: &lt;a href=&quot;https://json.nlohmann.me/api/basic_json/parse/&quot;&gt;&lt;code&gt;parse()&lt;/code&gt;&lt;/a&gt; is strict and rejects trailing data after a value, whereas &lt;a href=&quot;https://json.nlohmann.me/api/operator_gtgt/&quot;&gt;&lt;code&gt;operator&amp;gt;&amp;gt;&lt;/code&gt;&lt;/a&gt; follows relaxed iostream semantics — it parses a single value and leaves the stream positioned right after it. Feeding &quot;a valid document followed by trailing bytes&quot; through &lt;code&gt;operator&amp;gt;&amp;gt;&lt;/code&gt; reports success; the same input through &lt;code&gt;parse()&lt;/code&gt; is rejected. This is a documented two-API design, not a conformance gap. See &lt;a href=&quot;https://json.nlohmann.me/features/parsing/&quot;&gt;&lt;strong&gt;parsing&lt;/strong&gt;&lt;/a&gt; for details.&lt;/p&gt; 
&lt;h3&gt;Character encoding&lt;/h3&gt; 
&lt;p&gt;The library supports &lt;strong&gt;Unicode input&lt;/strong&gt; as follows:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Only &lt;strong&gt;UTF-8&lt;/strong&gt; encoded input is supported, which is the default encoding for JSON according to &lt;a href=&quot;https://tools.ietf.org/html/rfc8259.html#section-8.1&quot;&gt;RFC 8259&lt;/a&gt;.&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;std::u16string&lt;/code&gt; and &lt;code&gt;std::u32string&lt;/code&gt; can be parsed, assuming UTF-16 and UTF-32 encoding, respectively. These encodings are not supported when reading from files or other input containers.&lt;/li&gt; 
 &lt;li&gt;Other encodings such as Latin-1 or ISO 8859-1 are &lt;strong&gt;not&lt;/strong&gt; supported and will yield parse or serialization errors.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.unicode.org/faq/private_use.html#nonchar1&quot;&gt;Unicode noncharacters&lt;/a&gt; will not be replaced by the library.&lt;/li&gt; 
 &lt;li&gt;Invalid surrogates (e.g., incomplete pairs such as &lt;code&gt;\uDEAD&lt;/code&gt;) will yield parse errors.&lt;/li&gt; 
 &lt;li&gt;The strings stored in the library are UTF-8 encoded. When using the default string type (&lt;code&gt;std::string&lt;/code&gt;), note that its length/size functions return the number of stored bytes rather than the number of characters or glyphs.&lt;/li&gt; 
 &lt;li&gt;When you store strings with different encodings in the library, calling &lt;a href=&quot;https://json.nlohmann.me/api/basic_json/dump/&quot;&gt;&lt;code&gt;dump()&lt;/code&gt;&lt;/a&gt; may throw an exception unless &lt;code&gt;json::error_handler_t::replace&lt;/code&gt; or &lt;code&gt;json::error_handler_t::ignore&lt;/code&gt; are used as error handlers.&lt;/li&gt; 
 &lt;li&gt;To store wide strings (e.g., &lt;code&gt;std::wstring&lt;/code&gt;), you need to convert them to a UTF-8 encoded &lt;code&gt;std::string&lt;/code&gt; before, see &lt;a href=&quot;https://json.nlohmann.me/home/faq/#wide-string-handling&quot;&gt;an example&lt;/a&gt;.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Comments in JSON&lt;/h3&gt; 
&lt;p&gt;This library does not support comments by default. It does so for three reasons:&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt; &lt;p&gt;Comments are not part of the &lt;a href=&quot;https://tools.ietf.org/html/rfc8259&quot;&gt;JSON specification&lt;/a&gt;. You may argue that &lt;code&gt;//&lt;/code&gt; or &lt;code&gt;/* */&lt;/code&gt; are allowed in JavaScript, but JSON is not JavaScript.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;This was not an oversight: Douglas Crockford &lt;a href=&quot;https://news.ycombinator.com/item?id=3912149&quot;&gt;wrote on this&lt;/a&gt; in May 2012:&lt;/p&gt; 
  &lt;blockquote&gt; 
   &lt;p&gt;I removed comments from JSON because I saw people were using them to hold parsing directives, a practice which would have destroyed interoperability. I know that the lack of comments makes some people sad, but it shouldn&#39;t.&lt;/p&gt; 
   &lt;p&gt;Suppose you are using JSON to keep configuration files, which you would like to annotate. Go ahead and insert all the comments you like. Then pipe it through JSMin before handing it to your JSON parser.&lt;/p&gt; 
  &lt;/blockquote&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;It is dangerous for interoperability if some libraries would add comment support while others don&#39;t. Please check &lt;a href=&quot;https://tools.ietf.org/html/draft-iab-protocol-maintenance-01&quot;&gt;The Harmful Consequences of the Robustness Principle&lt;/a&gt; on this.&lt;/p&gt; &lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;However, you can set parameter &lt;code&gt;ignore_comments&lt;/code&gt; to true in the &lt;code&gt;parse&lt;/code&gt; function to ignore &lt;code&gt;//&lt;/code&gt; or &lt;code&gt;/* */&lt;/code&gt; comments. Comments will then be treated as whitespace.&lt;/p&gt; 
&lt;h3&gt;Trailing commas&lt;/h3&gt; 
&lt;p&gt;The JSON specification does not allow trailing commas in arrays and objects, and hence this library is treating them as parsing errors by default.&lt;/p&gt; 
&lt;p&gt;Like comments, you can set parameter &lt;code&gt;ignore_trailing_commas&lt;/code&gt; to true in the &lt;code&gt;parse&lt;/code&gt; function to ignore trailing commas in arrays and objects. Note that a single comma as the only content of the array or object (&lt;code&gt;[,]&lt;/code&gt; or &lt;code&gt;{,}&lt;/code&gt;) is not allowed, and multiple trailing commas (&lt;code&gt;[1,,]&lt;/code&gt;) are not allowed either.&lt;/p&gt; 
&lt;p&gt;This library does not add trailing commas when serializing JSON data.&lt;/p&gt; 
&lt;p&gt;For more information, see &lt;a href=&quot;https://nigeltao.github.io/blog/2021/json-with-commas-comments.html&quot;&gt;JSON With Commas and Comments (JWCC)&lt;/a&gt;.&lt;/p&gt; 
&lt;h3&gt;Order of object keys&lt;/h3&gt; 
&lt;p&gt;By default, the library does not preserve the &lt;strong&gt;insertion order of object elements&lt;/strong&gt;. This is standards-compliant, as the &lt;a href=&quot;https://tools.ietf.org/html/rfc8259.html&quot;&gt;JSON standard&lt;/a&gt; defines objects as &quot;an unordered collection of zero or more name/value pairs&quot;.&lt;/p&gt; 
&lt;p&gt;If you do want to preserve the insertion order, you can try the type &lt;a href=&quot;https://github.com/nlohmann/json/issues/2179&quot;&gt;&lt;code&gt;nlohmann::ordered_json&lt;/code&gt;&lt;/a&gt;. Alternatively, you can use a more sophisticated ordered map like &lt;a href=&quot;https://github.com/Tessil/ordered-map&quot;&gt;&lt;code&gt;tsl::ordered_map&lt;/code&gt;&lt;/a&gt; (&lt;a href=&quot;https://github.com/nlohmann/json/issues/546#issuecomment-304447518&quot;&gt;integration&lt;/a&gt;) or &lt;a href=&quot;https://github.com/nlohmann/fifo_map&quot;&gt;&lt;code&gt;nlohmann::fifo_map&lt;/code&gt;&lt;/a&gt; (&lt;a href=&quot;https://github.com/nlohmann/json/issues/485#issuecomment-333652309&quot;&gt;integration&lt;/a&gt;).&lt;/p&gt; 
&lt;p&gt;See the &lt;a href=&quot;https://json.nlohmann.me/features/object_order/&quot;&gt;&lt;strong&gt;documentation on object order&lt;/strong&gt;&lt;/a&gt; for more information.&lt;/p&gt; 
&lt;h3&gt;Memory Release&lt;/h3&gt; 
&lt;p&gt;We checked with Valgrind and the Address Sanitizer (ASAN) that there are no memory leaks.&lt;/p&gt; 
&lt;p&gt;If you find that a parsing program with this library does not release memory, please consider the following case, and it may be unrelated to this library.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Your program is compiled with glibc.&lt;/strong&gt; There is a tunable threshold that glibc uses to decide whether to actually return memory to the system or whether to cache it for later reuse. If in your program you make lots of small allocations and those small allocations are not a contiguous block and are presumably below the threshold, then they will not get returned to the OS. Here is a related issue &lt;a href=&quot;https://github.com/nlohmann/json/issues/1924&quot;&gt;#1924&lt;/a&gt;.&lt;/p&gt; 
&lt;h3&gt;Further notes&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;The code contains numerous debug &lt;strong&gt;assertions&lt;/strong&gt; which can be switched off by defining the preprocessor macro &lt;code&gt;NDEBUG&lt;/code&gt;, see the &lt;a href=&quot;https://en.cppreference.com/w/cpp/error/assert&quot;&gt;documentation of &lt;code&gt;assert&lt;/code&gt;&lt;/a&gt;. In particular, note &lt;a href=&quot;https://json.nlohmann.me/api/basic_json/operator%5B%5D/&quot;&gt;&lt;code&gt;operator[]&lt;/code&gt;&lt;/a&gt; implements &lt;strong&gt;unchecked access&lt;/strong&gt; for const objects: If the given key is not present, the behavior is undefined (think of a dereferenced null pointer) and yields an &lt;a href=&quot;https://github.com/nlohmann/json/issues/289&quot;&gt;assertion failure&lt;/a&gt; if assertions are switched on. If you are not sure whether an element in an object exists, use checked access with the &lt;a href=&quot;https://json.nlohmann.me/api/basic_json/at/&quot;&gt;&lt;code&gt;at()&lt;/code&gt; function&lt;/a&gt;. Furthermore, you can define &lt;code&gt;JSON_ASSERT(x)&lt;/code&gt; to replace calls to &lt;code&gt;assert(x)&lt;/code&gt;. See the &lt;a href=&quot;https://json.nlohmann.me/features/assertions/&quot;&gt;&lt;strong&gt;documentation on runtime assertions&lt;/strong&gt;&lt;/a&gt; for more information.&lt;/li&gt; 
 &lt;li&gt;As the exact number type is not defined in the &lt;a href=&quot;https://tools.ietf.org/html/rfc8259.html&quot;&gt;JSON specification&lt;/a&gt;, this library tries to choose the best fitting C++ number type automatically. As a result, the type &lt;code&gt;double&lt;/code&gt; may be used to store numbers which may yield &lt;a href=&quot;https://github.com/nlohmann/json/issues/181&quot;&gt;&lt;strong&gt;floating-point exceptions&lt;/strong&gt;&lt;/a&gt; in certain rare situations if floating-point exceptions have been unmasked in the calling code. These exceptions are not caused by the library and need to be fixed in the calling code, such as by re-masking the exceptions prior to calling library functions.&lt;/li&gt; 
 &lt;li&gt;The code can be compiled without C++ &lt;strong&gt;runtime type identification&lt;/strong&gt; features; that is, you can use the &lt;code&gt;-fno-rtti&lt;/code&gt; compiler flag.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Exceptions&lt;/strong&gt; are used widely within the library. They can, however, be switched off with either using the compiler flag &lt;code&gt;-fno-exceptions&lt;/code&gt; or by defining the symbol &lt;code&gt;JSON_NOEXCEPTION&lt;/code&gt;. In this case, exceptions are replaced by &lt;code&gt;abort()&lt;/code&gt; calls. You can further control this behavior by defining &lt;code&gt;JSON_THROW_USER&lt;/code&gt; (overriding &lt;code&gt;throw&lt;/code&gt;), &lt;code&gt;JSON_TRY_USER&lt;/code&gt; (overriding &lt;code&gt;try&lt;/code&gt;), and &lt;code&gt;JSON_CATCH_USER&lt;/code&gt; (overriding &lt;code&gt;catch&lt;/code&gt;). Note that &lt;code&gt;JSON_THROW_USER&lt;/code&gt; should leave the current scope (e.g., by throwing or aborting), as continuing after it may yield undefined behavior. Note the explanatory &lt;a href=&quot;https://en.cppreference.com/w/cpp/error/exception/what&quot;&gt;&lt;code&gt;what()&lt;/code&gt;&lt;/a&gt; string of exceptions is not available for MSVC if exceptions are disabled, see &lt;a href=&quot;https://github.com/nlohmann/json/discussions/2824&quot;&gt;#2824&lt;/a&gt;. See the &lt;a href=&quot;https://json.nlohmann.me/home/exceptions/&quot;&gt;&lt;strong&gt;documentation of exceptions&lt;/strong&gt;&lt;/a&gt; for more information.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Execute unit tests&lt;/h2&gt; 
&lt;p&gt;To compile and run the tests, you need to execute&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-shell&quot;&gt;mkdir build
cd build
cmake .. -DJSON_BuildTests=On
cmake --build .
ctest --output-on-failure
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Note that during the &lt;code&gt;ctest&lt;/code&gt; stage, several JSON test files are downloaded from an &lt;a href=&quot;https://github.com/nlohmann/json_test_data&quot;&gt;external repository&lt;/a&gt;. If policies forbid downloading artifacts during testing, you can download the files yourself and pass the directory with the test files via &lt;code&gt;-DJSON_TestDataDirectory=path&lt;/code&gt; to CMake. Then, no Internet connectivity is required. See &lt;a href=&quot;https://github.com/nlohmann/json/issues/2189&quot;&gt;issue #2189&lt;/a&gt; for more information.&lt;/p&gt; 
&lt;p&gt;If the testdata is not found, several test suites will fail like this:&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;===============================================================================
json/tests/src/make_test_data_available.hpp:21:
TEST CASE:  check test suite is downloaded

json/tests/src/make_test_data_available.hpp:23: FATAL ERROR: REQUIRE( utils::check_testsuite_downloaded() ) is NOT correct!
  values: REQUIRE( false )
  logged: Test data not found in &#39;json/cmake-build-debug/json_test_data&#39;.
          Please execute target &#39;download_test_data&#39; before running this test suite.
          See &amp;lt;https://github.com/nlohmann/json#execute-unit-tests&amp;gt; for more information.

===============================================================================
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;In case you have downloaded the library rather than checked out the code via Git, test &lt;code&gt;cmake_fetch_content_configure&lt;/code&gt; will fail. Please execute &lt;code&gt;ctest -LE git_required&lt;/code&gt; to skip these tests. See &lt;a href=&quot;https://github.com/nlohmann/json/issues/2189&quot;&gt;issue #2189&lt;/a&gt; for more information.&lt;/p&gt; 
&lt;p&gt;Some tests are requiring network to be properly execute. They are labeled as &lt;code&gt;git_required&lt;/code&gt;. Please execute &lt;code&gt;ctest -LE git_required&lt;/code&gt; to skip these tests. See &lt;a href=&quot;https://github.com/nlohmann/json/issues/4851&quot;&gt;issue #4851&lt;/a&gt; for more information.&lt;/p&gt; 
&lt;p&gt;Some tests change the installed files and hence make the whole process not reproducible. Please execute &lt;code&gt;ctest -LE not_reproducible&lt;/code&gt; to skip these tests. See &lt;a href=&quot;https://github.com/nlohmann/json/issues/2324&quot;&gt;issue #2324&lt;/a&gt; for more information. Furthermore, assertions must be switched off to ensure reproducible builds (see &lt;a href=&quot;https://github.com/nlohmann/json/discussions/4494&quot;&gt;discussion 4494&lt;/a&gt;).&lt;/p&gt; 
&lt;p&gt;Note you need to call &lt;code&gt;cmake -LE &quot;not_reproducible|git_required&quot;&lt;/code&gt; to exclude both labels. See &lt;a href=&quot;https://github.com/nlohmann/json/issues/2596&quot;&gt;issue #2596&lt;/a&gt; for more information.&lt;/p&gt; 
&lt;p&gt;As Intel compilers use unsafe floating point optimization by default, the unit tests may fail. Use flag &lt;a href=&quot;https://www.intel.com/content/www/us/en/docs/cpp-compiler/developer-guide-reference/2021-8/fp-model-fp.html&quot;&gt;&lt;code&gt;/fp:precise&lt;/code&gt;&lt;/a&gt; then.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>duckdb/duckdb</title>
      <link>https://github.com/duckdb/duckdb</link>
      <description>&lt;p&gt;DuckDB is an analytical in-process SQL database management system&lt;/p&gt;&lt;hr&gt;&lt;div align=&quot;center&quot;&gt; 
 &lt;picture&gt; 
  &lt;source media=&quot;(prefers-color-scheme: light)&quot; srcset=&quot;logo/DuckDB_Logo-horizontal.svg&quot; /&gt; 
  &lt;source media=&quot;(prefers-color-scheme: dark)&quot; srcset=&quot;logo/DuckDB_Logo-horizontal-dark-mode.svg&quot; /&gt; 
  &lt;img alt=&quot;DuckDB logo&quot; src=&quot;https://raw.githubusercontent.com/duckdb/duckdb/main/logo/DuckDB_Logo-horizontal.svg?sanitize=true&quot; height=&quot;100&quot; /&gt; 
 &lt;/picture&gt; 
&lt;/div&gt; 
&lt;br /&gt; 
&lt;p align=&quot;center&quot;&gt; &lt;a href=&quot;https://github.com/duckdb/duckdb/actions&quot;&gt;&lt;img src=&quot;https://github.com/duckdb/duckdb/actions/workflows/Main.yml/badge.svg?branch=main&quot; alt=&quot;Github Actions Badge&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://discord.gg/tcvwpjfnZx&quot;&gt;&lt;img src=&quot;https://shields.io/discord/909674491309850675&quot; alt=&quot;discord&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://github.com/duckdb/duckdb/releases/&quot;&gt;&lt;img src=&quot;https://img.shields.io/github/v/release/duckdb/duckdb?color=brightgreen&amp;amp;display_name=tag&amp;amp;logo=duckdb&amp;amp;logoColor=white&quot; alt=&quot;Latest Release&quot; /&gt;&lt;/a&gt; &lt;/p&gt; 
&lt;h2&gt;DuckDB&lt;/h2&gt; 
&lt;p&gt;DuckDB is a high-performance analytical database system. It is designed to be fast, reliable, portable, and easy to use. DuckDB provides a rich SQL dialect with support far beyond basic SQL. DuckDB supports arbitrary and nested correlated subqueries, window functions, collations, complex types (arrays, structs, maps), and &lt;a href=&quot;https://duckdb.org/docs/current/sql/dialect/friendly_sql.html&quot;&gt;several extensions designed to make SQL easier to use&lt;/a&gt;.&lt;/p&gt; 
&lt;p&gt;DuckDB is available as a &lt;a href=&quot;https://duckdb.org/docs/current/clients/cli/overview&quot;&gt;standalone CLI application&lt;/a&gt; and has clients for &lt;a href=&quot;https://duckdb.org/docs/current/clients/python/overview&quot;&gt;Python&lt;/a&gt;, &lt;a href=&quot;https://duckdb.org/docs/current/clients/r&quot;&gt;R&lt;/a&gt;, &lt;a href=&quot;https://duckdb.org/docs/current/clients/java&quot;&gt;Java&lt;/a&gt;, &lt;a href=&quot;https://duckdb.org/docs/current/clients/wasm/overview&quot;&gt;Wasm&lt;/a&gt;, etc., with deep integrations with packages such as &lt;a href=&quot;https://duckdb.org/docs/guides/python/sql_on_pandas&quot;&gt;pandas&lt;/a&gt; and &lt;a href=&quot;https://duckdb.org/docs/current/clients/r#duckplyr-dplyr-api&quot;&gt;dplyr&lt;/a&gt;.&lt;/p&gt; 
&lt;p&gt;For more information on using DuckDB, please refer to the &lt;a href=&quot;https://duckdb.org/docs/current/&quot;&gt;DuckDB documentation&lt;/a&gt;.&lt;/p&gt; 
&lt;h2&gt;Installation&lt;/h2&gt; 
&lt;p&gt;If you want to install DuckDB, please see &lt;a href=&quot;https://duckdb.org/docs/installation/&quot;&gt;our installation page&lt;/a&gt; for instructions.&lt;/p&gt; 
&lt;h2&gt;Data Import&lt;/h2&gt; 
&lt;p&gt;For CSV files and Parquet files, data import is as simple as referencing the file in the FROM clause:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-sql&quot;&gt;SELECT * FROM &#39;myfile.csv&#39;;
SELECT * FROM &#39;myfile.parquet&#39;;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Refer to our &lt;a href=&quot;https://duckdb.org/docs/current/data/overview&quot;&gt;Data Import&lt;/a&gt; section for more information.&lt;/p&gt; 
&lt;h2&gt;SQL Reference&lt;/h2&gt; 
&lt;p&gt;The documentation contains a &lt;a href=&quot;https://duckdb.org/docs/current/sql/introduction&quot;&gt;SQL introduction and reference&lt;/a&gt;.&lt;/p&gt; 
&lt;h2&gt;Development&lt;/h2&gt; 
&lt;p&gt;For development, DuckDB requires &lt;a href=&quot;https://cmake.org&quot;&gt;CMake&lt;/a&gt;, Python 3 and a &lt;code&gt;C++17&lt;/code&gt; compliant compiler. In the root directory, run &lt;code&gt;make&lt;/code&gt; to compile the sources. For development, use &lt;code&gt;make debug&lt;/code&gt; to build a non-optimized debug version. You should run &lt;code&gt;make unit&lt;/code&gt; and &lt;code&gt;make allunit&lt;/code&gt; to verify that your version works properly after making changes. To test performance, you can run &lt;code&gt;BUILD_BENCHMARK=1 BUILD_TPCH=1 make&lt;/code&gt; and then perform several standard benchmarks from the root directory by executing &lt;code&gt;./build/release/benchmark/benchmark_runner&lt;/code&gt;. The details of benchmarks are in our &lt;a href=&quot;https://raw.githubusercontent.com/duckdb/duckdb/main/benchmark/README.md&quot;&gt;Benchmark Guide&lt;/a&gt;.&lt;/p&gt; 
&lt;p&gt;Please also refer to our &lt;a href=&quot;https://duckdb.org/docs/current/dev/building/overview&quot;&gt;Build Guide&lt;/a&gt; and &lt;a href=&quot;https://raw.githubusercontent.com/duckdb/duckdb/main/CONTRIBUTING.md&quot;&gt;Contribution Guide&lt;/a&gt;.&lt;/p&gt; 
&lt;h2&gt;Support&lt;/h2&gt; 
&lt;p&gt;See the &lt;a href=&quot;https://ducklabs.com/support/&quot;&gt;Support Options&lt;/a&gt; page and the dedicated &lt;a href=&quot;https://endoflife.date/duckdb&quot;&gt;&lt;code&gt;endoflife.date&lt;/code&gt;&lt;/a&gt; page.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>wazuh/wazuh</title>
      <link>https://github.com/wazuh/wazuh</link>
      <description>&lt;p&gt;Wazuh - The Open Source Security Platform. Unified XDR and SIEM protection for endpoints and cloud workloads.&lt;/p&gt;&lt;hr&gt;&lt;h1&gt;Wazuh&lt;/h1&gt; 
&lt;p&gt;&lt;a href=&quot;https://wazuh.com/community/join-us-on-slack/&quot;&gt;&lt;img src=&quot;https://img.shields.io/badge/slack-join-blue.svg?sanitize=true&quot; alt=&quot;Slack&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://groups.google.com/forum/#!forum/wazuh&quot;&gt;&lt;img src=&quot;https://img.shields.io/badge/email-join-blue.svg?sanitize=true&quot; alt=&quot;Email&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://documentation.wazuh.com&quot;&gt;&lt;img src=&quot;https://img.shields.io/badge/docs-view-green.svg?sanitize=true&quot; alt=&quot;Documentation&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://wazuh.com&quot;&gt;&lt;img src=&quot;https://img.shields.io/badge/web-view-green.svg?sanitize=true&quot; alt=&quot;Documentation&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://scan.coverity.com/projects/wazuh-wazuh&quot;&gt;&lt;img src=&quot;https://scan.coverity.com/projects/10992/badge.svg?sanitize=true&quot; alt=&quot;Coverity&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://twitter.com/wazuh&quot;&gt;&lt;img src=&quot;https://img.shields.io/twitter/follow/wazuh?style=social&quot; alt=&quot;Twitter&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://www.youtube.com/watch?v=peTSzcAueEc&quot;&gt;&lt;img src=&quot;https://img.shields.io/youtube/views/peTSzcAueEc?style=social&quot; alt=&quot;YouTube&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;Wazuh is a free and open source platform used for threat prevention, detection, and response. It is capable of protecting workloads across on-premises, virtualized, containerized, and cloud-based environments.&lt;/p&gt; 
&lt;p&gt;Wazuh solution consists of an endpoint security agent, deployed to the monitored systems, and a management server, which collects and analyzes data gathered by the agents. Besides, Wazuh has been fully integrated with the Elastic Stack, providing a search engine and data visualization tool that allows users to navigate through their security alerts.&lt;/p&gt; 
&lt;h2&gt;Wazuh capabilities&lt;/h2&gt; 
&lt;p&gt;A brief presentation of some of the more common use cases of the Wazuh solution.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Intrusion detection&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;Wazuh agents scan the monitored systems looking for malware, rootkits and suspicious anomalies. They can detect hidden files, cloaked processes or unregistered network listeners, as well as inconsistencies in system call responses.&lt;/p&gt; 
&lt;p&gt;In addition to agent capabilities, the server component uses a signature-based approach to intrusion detection, using its regular expression engine to analyze collected log data and look for indicators of compromise.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Log data analysis&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;Wazuh agents read operating system and application logs, and securely forward them to a central manager for rule-based analysis and storage. When no agent is deployed, the server can also receive data via syslog from network devices or applications.&lt;/p&gt; 
&lt;p&gt;The Wazuh rules help make you aware of application or system errors, misconfigurations, attempted and/or successful malicious activities, policy violations and a variety of other security and operational issues.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;File integrity monitoring&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;Wazuh monitors the file system, identifying changes in content, permissions, ownership, and attributes of files that you need to keep an eye on. In addition, it natively identifies users and applications used to create or modify files.&lt;/p&gt; 
&lt;p&gt;File integrity monitoring capabilities can be used in combination with threat intelligence to identify threats or compromised hosts. In addition, several regulatory compliance standards, such as PCI DSS, require it.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Vulnerability detection&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;Wazuh agents pull software inventory data and send this information to the server, where it is correlated with continuously updated CVE (Common Vulnerabilities and Exposure) databases, in order to identify well-known vulnerable software.&lt;/p&gt; 
&lt;p&gt;Automated vulnerability assessment helps you find the weak spots in your critical assets and take corrective action before attackers exploit them to sabotage your business or steal confidential data.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Configuration assessment&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;Wazuh monitors system and application configuration settings to ensure they are compliant with your security policies, standards and/or hardening guides. Agents perform periodic scans to detect applications that are known to be vulnerable, unpatched, or insecurely configured.&lt;/p&gt; 
&lt;p&gt;Additionally, configuration checks can be customized, tailoring them to properly align with your organization. Alerts include recommendations for better configuration, references and mapping with regulatory compliance.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Incident response&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;Wazuh agents provide out-of-the-box active responses to perform various countermeasures to address active threats, such as blocking access to a system from the threat source when certain criteria are met.&lt;/p&gt; 
&lt;p&gt;In addition, Wazuh can be used to remotely run commands or system queries on agents, identifying indicators of compromise (IOCs) and helping perform other live forensics or incident response tasks.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Regulatory compliance&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;Wazuh provides some of the necessary security controls to become compliant with industry standards and regulations. These features, combined with its scalability and multi-platform support help organizations meet technical compliance requirements.&lt;/p&gt; 
&lt;p&gt;Wazuh is widely used by payment processing companies and financial institutions to meet PCI DSS (Payment Card Industry Data Security Standard) requirements. Its web user interface provides reports and dashboards that can help with this and other regulations (e.g. GPG13 or GDPR).&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Cloud security&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;Wazuh helps monitoring cloud infrastructure at an API level, using integration modules that are able to pull security data from well known cloud providers, such as Amazon AWS, Azure or Google Cloud. In addition, Wazuh provides rules to assess the configuration of your cloud environment, easily spotting weaknesses.&lt;/p&gt; 
&lt;p&gt;In addition, Wazuh light-weight and multi-platform agents are commonly used to monitor cloud environments at the instance level.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Containers security&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;Wazuh provides security visibility into your Docker hosts and containers, monitoring their behavior and detecting threats, vulnerabilities and anomalies. The Wazuh agent has native integration with the Docker engine allowing users to monitor images, volumes, network settings, and running containers.&lt;/p&gt; 
&lt;p&gt;Wazuh continuously collects and analyzes detailed runtime information. For example, alerting for containers running in privileged mode, vulnerable applications, a shell running in a container, changes to persistent volumes or images, and other possible threats.&lt;/p&gt; 
&lt;h2&gt;WUI&lt;/h2&gt; 
&lt;p&gt;The Wazuh WUI provides a powerful user interface for data visualization and analysis. This interface can also be used to manage Wazuh configuration and to monitor its status.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Modules overview&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;&lt;img src=&quot;https://github.com/wazuh/wazuh-dashboard-plugins/raw/main/screenshots/app.png&quot; alt=&quot;Modules overview&quot; /&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Security events&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;&lt;img src=&quot;https://github.com/wazuh/wazuh-dashboard-plugins/raw/main/screenshots/app2.png&quot; alt=&quot;Overview&quot; /&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Integrity monitoring&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;&lt;img src=&quot;https://github.com/wazuh/wazuh-dashboard-plugins/raw/main/screenshots/app3.png&quot; alt=&quot;Overview&quot; /&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Vulnerability detection&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;&lt;img src=&quot;https://github.com/wazuh/wazuh-dashboard-plugins/raw/main/screenshots/app4.png&quot; alt=&quot;Overview&quot; /&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Regulatory compliance&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;&lt;img src=&quot;https://github.com/wazuh/wazuh-dashboard-plugins/raw/main/screenshots/app5.png&quot; alt=&quot;Overview&quot; /&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Agents overview&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;&lt;img src=&quot;https://github.com/wazuh/wazuh-dashboard-plugins/raw/main/screenshots/app6.png&quot; alt=&quot;Overview&quot; /&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Agent summary&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;&lt;img src=&quot;https://github.com/wazuh/wazuh-dashboard-plugins/raw/main/screenshots/app7.png&quot; alt=&quot;Overview&quot; /&gt;&lt;/p&gt; 
&lt;h2&gt;Orchestration&lt;/h2&gt; 
&lt;p&gt;Here you can find all the automation tools maintained by the Wazuh team.&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt; &lt;p&gt;&lt;a href=&quot;https://github.com/wazuh/wazuh-cloudformation&quot;&gt;Wazuh AWS CloudFormation&lt;/a&gt;&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;a href=&quot;https://github.com/wazuh/wazuh-docker&quot;&gt;Docker containers&lt;/a&gt;&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;a href=&quot;https://github.com/wazuh/wazuh-ansible&quot;&gt;Wazuh Ansible&lt;/a&gt;&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;a href=&quot;https://github.com/wazuh/wazuh-chef&quot;&gt;Wazuh Chef&lt;/a&gt;&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;a href=&quot;https://github.com/wazuh/wazuh-puppet&quot;&gt;Wazuh Puppet&lt;/a&gt;&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;a href=&quot;https://github.com/wazuh/wazuh-kubernetes&quot;&gt;Wazuh Kubernetes&lt;/a&gt;&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;a href=&quot;https://github.com/wazuh/wazuh-bosh&quot;&gt;Wazuh Bosh&lt;/a&gt;&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;a href=&quot;https://github.com/wazuh/wazuh-salt&quot;&gt;Wazuh Salt&lt;/a&gt;&lt;/p&gt; &lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Branches&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;code&gt;main&lt;/code&gt; branch contains the latest code, be aware of possible bugs on this branch.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Software and libraries used&lt;/h2&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Software&lt;/th&gt; 
   &lt;th&gt;Version&lt;/th&gt; 
   &lt;th&gt;Author&lt;/th&gt; 
   &lt;th&gt;License&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/libbpf/bpftool&quot;&gt;bpftool&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;7.7.0&lt;/td&gt; 
   &lt;td&gt;libbpf&lt;/td&gt; 
   &lt;td&gt;GNU Public License version 2&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/libarchive/bzip2&quot;&gt;bzip2&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;1.0.8&lt;/td&gt; 
   &lt;td&gt;Julian Seward&lt;/td&gt; 
   &lt;td&gt;BSD License&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/DaveGamble/cJSON&quot;&gt;cJSON&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;1.7.18&lt;/td&gt; 
   &lt;td&gt;Dave Gamble&lt;/td&gt; 
   &lt;td&gt;MIT License&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/yhirose/cpp-httplib&quot;&gt;cpp-httplib&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;0.25.0&lt;/td&gt; 
   &lt;td&gt;yhirose&lt;/td&gt; 
   &lt;td&gt;MIT License&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/python/cpython&quot;&gt;cPython&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;3.12.13&lt;/td&gt; 
   &lt;td&gt;Guido van Rossum&lt;/td&gt; 
   &lt;td&gt;Python Software Foundation License version 2&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/curl/curl&quot;&gt;cURL&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;8.20.0&lt;/td&gt; 
   &lt;td&gt;Daniel Stenberg&lt;/td&gt; 
   &lt;td&gt;MIT License&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://gitlab.freedesktop.org/dbus/dbus&quot;&gt;dbus&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;1.14.10&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;http://freedesktop.org&quot;&gt;freedesktop.org&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;GNU Public License version 2&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/google/flatbuffers/&quot;&gt;Flatbuffers&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;23.5.26&lt;/td&gt; 
   &lt;td&gt;Google Inc.&lt;/td&gt; 
   &lt;td&gt;Apache 2.0 License&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/google/benchmark&quot;&gt;Google Benchmark&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;1.6.1&lt;/td&gt; 
   &lt;td&gt;Google Inc.&lt;/td&gt; 
   &lt;td&gt;Apache 2.0 License&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/google/googletest&quot;&gt;GoogleTest&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;1.11.0&lt;/td&gt; 
   &lt;td&gt;Google Inc.&lt;/td&gt; 
   &lt;td&gt;3-Clause &quot;New&quot; BSD License&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/jemalloc/jemalloc&quot;&gt;jemalloc&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;5.2.1&lt;/td&gt; 
   &lt;td&gt;Jason Evans&lt;/td&gt; 
   &lt;td&gt;2-Clause &quot;Simplified&quot; BSD License&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/libarchive/libarchive&quot;&gt;libarchive&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;3.8.7&lt;/td&gt; 
   &lt;td&gt;Tim Kientzle&lt;/td&gt; 
   &lt;td&gt;3-Clause &quot;New&quot; BSD License&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/libbpf/libbpf&quot;&gt;libbpf&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;1.7.0&lt;/td&gt; 
   &lt;td&gt;libbpf&lt;/td&gt; 
   &lt;td&gt;GNU Lesser General Public License version 2.1&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/yasuhirokimura/db18&quot;&gt;libdb&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;18.1.40&lt;/td&gt; 
   &lt;td&gt;Oracle Corporation&lt;/td&gt; 
   &lt;td&gt;Affero GPL v3&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/libffi/libffi&quot;&gt;libffi&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;3.2.1&lt;/td&gt; 
   &lt;td&gt;Anthony Green&lt;/td&gt; 
   &lt;td&gt;MIT License&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/PCRE2Project/pcre2&quot;&gt;libpcre2&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;10.42.0&lt;/td&gt; 
   &lt;td&gt;Philip Hazel&lt;/td&gt; 
   &lt;td&gt;BSD License&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/libimobiledevice/libplist&quot;&gt;libplist&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;2.2.0&lt;/td&gt; 
   &lt;td&gt;Aaron Burghardt et al.&lt;/td&gt; 
   &lt;td&gt;GNU Lesser General Public License version 2.1&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/yaml/libyaml&quot;&gt;libYAML&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;0.1.7&lt;/td&gt; 
   &lt;td&gt;Kirill Simonov&lt;/td&gt; 
   &lt;td&gt;MIT License&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/tukaani-project/xz&quot;&gt;liblzma&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;5.8.3&lt;/td&gt; 
   &lt;td&gt;Lasse Collin, Jia Tan et al.&lt;/td&gt; 
   &lt;td&gt;GNU Public License version 3&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/linux-audit/audit-userspace&quot;&gt;Linux Audit userspace&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;2.8.4&lt;/td&gt; 
   &lt;td&gt;Rik Faith&lt;/td&gt; 
   &lt;td&gt;GNU Lesser General Public License&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/lua/lua&quot;&gt;Lua&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;5.4.8&lt;/td&gt; 
   &lt;td&gt;PUC-Rio&lt;/td&gt; 
   &lt;td&gt;MIT License&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/nlohmann/json&quot;&gt;nlohmann&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;3.11.2&lt;/td&gt; 
   &lt;td&gt;Niels Lohmann&lt;/td&gt; 
   &lt;td&gt;MIT License&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/openssl/openssl&quot;&gt;OpenSSL&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;3.6.2&lt;/td&gt; 
   &lt;td&gt;OpenSSL Software Foundation&lt;/td&gt; 
   &lt;td&gt;Apache 2.0 License&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/rpm-software-management/popt&quot;&gt;popt&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;1.16&lt;/td&gt; 
   &lt;td&gt;Jeff Johnson &amp;amp; Erik Troan&lt;/td&gt; 
   &lt;td&gt;MIT License&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://gitlab.com/procps-ng/procps&quot;&gt;procps&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;2.8.3&lt;/td&gt; 
   &lt;td&gt;Brian Edmonds et al.&lt;/td&gt; 
   &lt;td&gt;GNU Lesser General Public License&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/facebook/rocksdb/&quot;&gt;RocksDB&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;8.3.2&lt;/td&gt; 
   &lt;td&gt;Facebook Inc.&lt;/td&gt; 
   &lt;td&gt;Apache 2.0 License&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/rpm-software-management/rpm&quot;&gt;rpm&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;4.20.1&lt;/td&gt; 
   &lt;td&gt;Marc Ewing &amp;amp; Erik Troan&lt;/td&gt; 
   &lt;td&gt;GNU Public License version 2&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/simdjson/simdjson&quot;&gt;simdjson&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;3.13.0&lt;/td&gt; 
   &lt;td&gt;Daniel Lemire&lt;/td&gt; 
   &lt;td&gt;Apache License 2.0&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/sqlite/sqlite&quot;&gt;sqlite&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;3.53.1&lt;/td&gt; 
   &lt;td&gt;D. Richard Hipp&lt;/td&gt; 
   &lt;td&gt;Public Domain (no restrictions)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/madler/zlib&quot;&gt;zlib&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;1.3.1&lt;/td&gt; 
   &lt;td&gt;Jean-loup Gailly &amp;amp; Mark Adler&lt;/td&gt; 
   &lt;td&gt;zlib/libpng License&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/wazuh/wazuh/main/framework/requirements.txt&quot;&gt;PyPi packages&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Documentation&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;http://documentation.wazuh.com&quot;&gt;Full documentation&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://documentation.wazuh.com/current/installation-guide/index.html&quot;&gt;Wazuh installation guide&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Get involved&lt;/h2&gt; 
&lt;p&gt;Become part of the &lt;a href=&quot;https://wazuh.com/community/&quot;&gt;Wazuh&#39;s community&lt;/a&gt; to learn from other users, participate in discussions, talk to our developers and contribute to the project.&lt;/p&gt; 
&lt;p&gt;If you want to contribute to our project please don’t hesitate to make pull-requests, submit issues or send commits, we will review all your questions.&lt;/p&gt; 
&lt;p&gt;You can also join our &lt;a href=&quot;https://wazuh.com/community/join-us-on-slack/&quot;&gt;Slack community channel&lt;/a&gt; and &lt;a href=&quot;https://groups.google.com/d/forum/wazuh&quot;&gt;mailing list&lt;/a&gt; by sending an email to &lt;a href=&quot;mailto:wazuh+subscribe@googlegroups.com&quot;&gt;wazuh+subscribe@googlegroups.com&lt;/a&gt;, to ask questions and participate in discussions.&lt;/p&gt; 
&lt;p&gt;Stay up to date on news, releases, engineering articles and more.&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;http://wazuh.com&quot;&gt;Wazuh website&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.linkedin.com/company/wazuh&quot;&gt;Linkedin&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.youtube.com/c/wazuhsecurity&quot;&gt;YouTube&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://twitter.com/wazuh&quot;&gt;Twitter&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://wazuh.com/blog/&quot;&gt;Wazuh blog&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://wazuh.com/community/join-us-on-slack/&quot;&gt;Slack announcements channel&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Authors&lt;/h2&gt; 
&lt;p&gt;Wazuh Copyright (C) 2015-2023 Wazuh Inc. (License GPLv2)&lt;/p&gt; 
&lt;p&gt;Based on the OSSEC project started by Daniel Cid.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>deskflow/deskflow</title>
      <link>https://github.com/deskflow/deskflow</link>
      <description>&lt;p&gt;Share a single keyboard and mouse between multiple computers.&lt;/p&gt;&lt;hr&gt;&lt;picture&gt; 
 &lt;source media=&quot;(prefers-color-scheme: dark)&quot; srcset=&quot;https://github.com/deskflow/deskflow-artwork/blob/main/logo/deskflow-logo-dark-200px.png?raw=true&quot; /&gt; 
 &lt;source media=&quot;(prefers-color-scheme: light)&quot; srcset=&quot;https://github.com/deskflow/deskflow-artwork/blob/main/logo/deskflow-logo-light-200px.png?raw=true&quot; /&gt; 
 &lt;img alt=&quot;Deskflow&quot; src=&quot;https://github.com/user-attachments/assets/f005b958-24df-4f4a-9bfd-4f834dae59d6&quot; /&gt; 
&lt;/picture&gt; 
&lt;p&gt;&lt;strong&gt;Deskflow&lt;/strong&gt; is a free and open source keyboard and mouse sharing app. Use the keyboard, mouse, or trackpad of one computer to control nearby computers, and work seamlessly between them. It&#39;s like a software KVM (but without the video). TLS encryption is enabled by default. Wayland is supported. Clipboard sharing is supported.&lt;/p&gt; 
&lt;div class=&quot;markdown-alert markdown-alert-tip&quot;&gt;
 &lt;p class=&quot;markdown-alert-title&quot;&gt;
  &lt;svg class=&quot;octicon octicon-light-bulb mr-2&quot; viewbox=&quot;0 0 16 16&quot; version=&quot;1.1&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot;&gt;
   &lt;path d=&quot;M8 1.5c-2.363 0-4 1.69-4 3.75 0 .984.424 1.625.984 2.304l.214.253c.223.264.47.556.673.848.284.411.537.896.621 1.49a.75.75 0 0 1-1.484.211c-.04-.282-.163-.547-.37-.847a8.456 8.456 0 0 0-.542-.68c-.084-.1-.173-.205-.268-.32C3.201 7.75 2.5 6.766 2.5 5.25 2.5 2.31 4.863 0 8 0s5.5 2.31 5.5 5.25c0 1.516-.701 2.5-1.328 3.259-.095.115-.184.22-.268.319-.207.245-.383.453-.541.681-.208.3-.33.565-.37.847a.751.751 0 0 1-1.485-.212c.084-.593.337-1.078.621-1.489.203-.292.45-.584.673-.848.075-.088.147-.173.213-.253.561-.679.985-1.32.985-2.304 0-2.06-1.637-3.75-4-3.75ZM5.75 12h4.5a.75.75 0 0 1 0 1.5h-4.5a.75.75 0 0 1 0-1.5ZM6 15.25a.75.75 0 0 1 .75-.75h2.5a.75.75 0 0 1 0 1.5h-2.5a.75.75 0 0 1-.75-.75Z&quot;&gt;&lt;/path&gt;
  &lt;/svg&gt;Tip&lt;/p&gt;
 &lt;p&gt;&lt;/p&gt; 
 &lt;p&gt;&lt;strong&gt;Chat with us&lt;/strong&gt;&lt;/p&gt; 
 &lt;ul&gt; 
  &lt;li&gt;Main discussion on Matrix: &lt;a href=&quot;https://matrix.to/#/%23deskflow:matrix.org&quot;&gt;&lt;code&gt;#deskflow:matrix.org&lt;/code&gt;&lt;/a&gt; (&lt;a href=&quot;https://matrix.org/ecosystem/clients/&quot;&gt;Matrix clients&lt;/a&gt;)&lt;/li&gt; 
  &lt;li&gt;Discussion also happens on IRC: &lt;code&gt;#deskflow&lt;/code&gt; or &lt;code&gt;#deskflow-dev&lt;/code&gt; on &lt;a href=&quot;https://libera.chat/&quot;&gt;Libera Chat&lt;/a&gt;&lt;/li&gt; 
  &lt;li&gt;Start a &lt;a href=&quot;https://github.com/deskflow/deskflow/discussions&quot;&gt;new discussion&lt;/a&gt; on our GitHub project.&lt;/li&gt; 
 &lt;/ul&gt; 
&lt;/div&gt; 
&lt;h2&gt;Download&lt;/h2&gt; 
&lt;p&gt;&lt;a href=&quot;https://github.com/deskflow/deskflow/releases/latest&quot;&gt;&lt;img src=&quot;https://img.shields.io/github/downloads/deskflow/deskflow/latest/total?style=for-the-badge&amp;amp;logo=github&amp;amp;label=Download%20Stable&quot; alt=&quot;Downloads: Stable Release&quot; /&gt;&lt;/a&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;https://github.com/deskflow/deskflow/releases/continuous&quot;&gt;&lt;img src=&quot;https://img.shields.io/github/downloads/deskflow/deskflow/continuous/total?style=for-the-badge&amp;amp;logo=github&amp;amp;label=Download%20Continuous&quot; alt=&quot;Downloads: Continuous Build&quot; /&gt;&lt;/a&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;https://flathub.org/apps/org.deskflow.deskflow&quot;&gt;&lt;img src=&quot;https://img.shields.io/flathub/downloads/org.deskflow.deskflow?style=for-the-badge&amp;amp;logo=flathub&amp;amp;label=Download%20from%20flathub&quot; alt=&quot;Download From Flathub&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;div class=&quot;markdown-alert markdown-alert-note&quot;&gt;
 &lt;p class=&quot;markdown-alert-title&quot;&gt;
  &lt;svg class=&quot;octicon octicon-info mr-2&quot; viewbox=&quot;0 0 16 16&quot; version=&quot;1.1&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot;&gt;
   &lt;path d=&quot;M0 8a8 8 0 1 1 16 0A8 8 0 0 1 0 8Zm8-6.5a6.5 6.5 0 1 0 0 13 6.5 6.5 0 0 0 0-13ZM6.5 7.75A.75.75 0 0 1 7.25 7h1a.75.75 0 0 1 .75.75v2.75h.25a.75.75 0 0 1 0 1.5h-2a.75.75 0 0 1 0-1.5h.25v-2h-.25a.75.75 0 0 1-.75-.75ZM8 6a1 1 0 1 1 0-2 1 1 0 0 1 0 2Z&quot;&gt;&lt;/path&gt;
  &lt;/svg&gt;Note&lt;/p&gt;
 &lt;p&gt;On Windows, you will need to install the &lt;a href=&quot;https://learn.microsoft.com/en-us/cpp/windows/latest-supported-vc-redist?view=msvc-170#latest-microsoft-visual-c-redistributable-version&quot;&gt;Microsoft Visual C++ Redistributable&lt;/a&gt;.&lt;br /&gt; Download latest: &lt;a href=&quot;https://aka.ms/vc14/vc_redist.x64.exe&quot;&gt;&lt;code&gt;vc_redist.x64.exe&lt;/code&gt;&lt;/a&gt; &lt;a href=&quot;https://aka.ms/vc14/vc_redist.arm64.exe&quot;&gt;&lt;code&gt;vc_redist.arm64.exe&lt;/code&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;/div&gt; 
&lt;div class=&quot;markdown-alert markdown-alert-tip&quot;&gt;
 &lt;p class=&quot;markdown-alert-title&quot;&gt;
  &lt;svg class=&quot;octicon octicon-light-bulb mr-2&quot; viewbox=&quot;0 0 16 16&quot; version=&quot;1.1&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot;&gt;
   &lt;path d=&quot;M8 1.5c-2.363 0-4 1.69-4 3.75 0 .984.424 1.625.984 2.304l.214.253c.223.264.47.556.673.848.284.411.537.896.621 1.49a.75.75 0 0 1-1.484.211c-.04-.282-.163-.547-.37-.847a8.456 8.456 0 0 0-.542-.68c-.084-.1-.173-.205-.268-.32C3.201 7.75 2.5 6.766 2.5 5.25 2.5 2.31 4.863 0 8 0s5.5 2.31 5.5 5.25c0 1.516-.701 2.5-1.328 3.259-.095.115-.184.22-.268.319-.207.245-.383.453-.541.681-.208.3-.33.565-.37.847a.751.751 0 0 1-1.485-.212c.084-.593.337-1.078.621-1.489.203-.292.45-.584.673-.848.075-.088.147-.173.213-.253.561-.679.985-1.32.985-2.304 0-2.06-1.637-3.75-4-3.75ZM5.75 12h4.5a.75.75 0 0 1 0 1.5h-4.5a.75.75 0 0 1 0-1.5ZM6 15.25a.75.75 0 0 1 .75-.75h2.5a.75.75 0 0 1 0 1.5h-2.5a.75.75 0 0 1-.75-.75Z&quot;&gt;&lt;/path&gt;
  &lt;/svg&gt;Tip&lt;/p&gt;
 &lt;p&gt;For macOS users, the easiest way to install and stay up to date is to use &lt;a href=&quot;https://brew.sh&quot;&gt;Homebrew&lt;/a&gt; with our &lt;a href=&quot;https://github.com/deskflow/homebrew-tap&quot;&gt;homebrew-tap&lt;/a&gt;. macOS reports unsigned apps as damaged. This occurs because we do not use an Apple certificate for notarization. Clear the quarantine attribute to run the app: &lt;code&gt;xattr -c Deskflow.app&lt;/code&gt;&lt;/p&gt; 
&lt;/div&gt; 
&lt;p&gt;To use Deskflow, download one of our &lt;a href=&quot;https://github.com/deskflow/deskflow/releases&quot;&gt;packages&lt;/a&gt;, install &lt;code&gt;deskflow&lt;/code&gt; (from your package repository), or &lt;a href=&quot;https://github.com/deskflow/deskflow/wiki/Building&quot;&gt;build it&lt;/a&gt; from source.&lt;/p&gt; 
&lt;h2&gt;Stats&lt;/h2&gt; 
&lt;p&gt;&lt;a href=&quot;https://github.com/deskflow/deskflow/commits/master/&quot;&gt;&lt;img src=&quot;https://img.shields.io/github/commit-activity/m/deskflow/deskflow?logo=github&quot; alt=&quot;GitHub commit activity&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://github.com/deskflow/deskflow/commits/master/&quot;&gt;&lt;img src=&quot;https://img.shields.io/github/languages/top/deskflow/deskflow?logo=github&quot; alt=&quot;GitHub top language&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://raw.githubusercontent.com/deskflow/deskflow/master/LICENSE&quot;&gt;&lt;img src=&quot;https://img.shields.io/github/license/deskflow/deskflow?logo=github&quot; alt=&quot;GitHub License&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://api.reuse.software/info/github.com/deskflow/deskflow&quot;&gt;&lt;img src=&quot;https://api.reuse.software/badge/github.com/deskflow/deskflow&quot; alt=&quot;REUSE status&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://sonarcloud.io/summary/new_code?id=deskflow_deskflow&quot;&gt;&lt;img src=&quot;https://sonarcloud.io/api/project_badges/measure?project=deskflow_deskflow&amp;amp;metric=alert_status&quot; alt=&quot;Quality Gate Status&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://sonarcloud.io/summary/new_code?id=deskflow_deskflow&quot;&gt;&lt;img src=&quot;https://sonarcloud.io/api/project_badges/measure?project=deskflow_deskflow&amp;amp;metric=coverage&quot; alt=&quot;Coverage&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://sonarcloud.io/summary/new_code?id=deskflow_deskflow&quot;&gt;&lt;img src=&quot;https://sonarcloud.io/api/project_badges/measure?project=deskflow_deskflow&amp;amp;metric=code_smells&quot; alt=&quot;Code Smells&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://sonarcloud.io/summary/new_code?id=deskflow_deskflow&quot;&gt;&lt;img src=&quot;https://sonarcloud.io/api/project_badges/measure?project=deskflow_deskflow&amp;amp;metric=vulnerabilities&quot; alt=&quot;Vulnerabilities&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://github.com/deskflow/deskflow/actions/workflows/continuous-integration.yml&quot;&gt;&lt;img src=&quot;https://github.com/deskflow/deskflow/actions/workflows/continuous-integration.yml/badge.svg?sanitize=true&quot; alt=&quot;CI&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://github.com/deskflow/deskflow/actions/workflows/codeql-analysis.yml&quot;&gt;&lt;img src=&quot;https://github.com/deskflow/deskflow/actions/workflows/codeql-analysis.yml/badge.svg?sanitize=true&quot; alt=&quot;CodeQL Analysis&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://github.com/deskflow/deskflow/actions/workflows/sonarcloud-analysis.yml&quot;&gt;&lt;img src=&quot;https://github.com/deskflow/deskflow/actions/workflows/sonarcloud-analysis.yml/badge.svg?sanitize=true&quot; alt=&quot;SonarCloud Analysis&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;h2&gt;Contribute&lt;/h2&gt; 
&lt;p&gt;&lt;a href=&quot;https://github.com/deskflow/deskflow/labels/good%20first%20issue&quot;&gt;&lt;img src=&quot;https://img.shields.io/github/issues/deskflow/deskflow/good%20first%20issue?label=good%20first%20issues&amp;amp;color=%2344cc11&quot; alt=&quot;Good first issues&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;There are many ways to contribute to the Deskflow project.&lt;/p&gt; 
&lt;p&gt;We&#39;re a friendly, active, and welcoming community focused on building a great app.&lt;/p&gt; 
&lt;p&gt;Read our &lt;a href=&quot;https://github.com/deskflow/deskflow/wiki/Contributing&quot;&gt;Contributing&lt;/a&gt; page to get started.&lt;/p&gt; 
&lt;p&gt;For instructions on building Deskflow, use the wiki page: &lt;a href=&quot;https://github.com/deskflow/deskflow/wiki/Building&quot;&gt;Building&lt;/a&gt;&lt;/p&gt; 
&lt;h2&gt;Operating Systems&lt;/h2&gt; 
&lt;p&gt;We support all major operating systems, including Windows, macOS, Linux, and Unix-like BSD-derived.&lt;/p&gt; 
&lt;p&gt;Windows 10 v1809 or higher is required.&lt;/p&gt; 
&lt;p&gt;macOS 13 or higher is required to use our CI builds for Apple Silicon machines. macOS 12 or higher is required for Intel macs or local builds.&lt;/p&gt; 
&lt;p&gt;Linux requires libei 1.3+ and libportal 0.8+ for the server/client. Additionally, Qt 6.7+ is required for the GUI. Linux users with systems not meeting these requirements should use flatpak in place of a native package.&lt;/p&gt; 
&lt;p&gt;We officially support FreeBSD, and would also like to support: OpenBSD, NetBSD, DragonFly, Solaris.&lt;/p&gt; 
&lt;h2&gt;Repology&lt;/h2&gt; 
&lt;p&gt;Repology monitors a huge number of package repositories and other sources comparing package versions across them and gathering other information.&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://repology.org/project/deskflow/versions&quot;&gt;&lt;img src=&quot;https://repology.org/badge/vertical-allrepos/deskflow.svg?columns=2&amp;amp;exclude_unsupported&quot; alt=&quot;Repology&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;h2&gt;Installing on macOS&lt;/h2&gt; 
&lt;p&gt;When you install Deskflow on macOS, you need to allow accessibility access (Privacy &amp;amp; Security) to both the &lt;code&gt;Deskflow&lt;/code&gt; app and the &lt;code&gt;deskflow&lt;/code&gt; process.&lt;/p&gt; 
&lt;p&gt;If using Sequoia, you may also need to allow &lt;code&gt;Deskflow&lt;/code&gt; under Local Network‍ settings (Privacy &amp;amp; Security). When prompted by the OS, go to the settings and enable the access.&lt;/p&gt; 
&lt;p&gt;If you are upgrading and you already have &lt;code&gt;Deskflow&lt;/code&gt; or &lt;code&gt;deskflow&lt;/code&gt; on the allowed list you will need to manually remove them before accessibility access can be granted to the new version.&lt;/p&gt; 
&lt;p&gt;macOS users who download directly from releases may need to run &lt;code&gt;xattr -c /Applications/Deskflow.app&lt;/code&gt; after copying the app to the &lt;code&gt;Applications&lt;/code&gt; dir.&lt;/p&gt; 
&lt;p&gt;It is recommended to install Deskflow using &lt;a href=&quot;https://brew.sh&quot;&gt;Homebrew&lt;/a&gt; from our &lt;a href=&quot;https://github.com/deskflow/homebrew-tap&quot;&gt;homebrew-tap&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;To add our tap, run:&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;brew tap deskflow/tap
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Then install either:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Stable: &lt;code&gt;brew install deskflow&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;Continuous: &lt;code&gt;brew install deskflow-dev&lt;/code&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Similar Projects&lt;/h2&gt; 
&lt;p&gt;In the open source developer community, similar projects collaborate for the improvement of all mouse and keyboard sharing tools. We aim for idea sharing and interoperability.&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/feschber/lan-mouse&quot;&gt;&lt;strong&gt;Lan Mouse&lt;/strong&gt;&lt;/a&gt; - Rust implementation with the goal of having native front-ends and interoperability with Deskflow/Synergy.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://symless.com/synergy&quot;&gt;&lt;strong&gt;Synergy&lt;/strong&gt;&lt;/a&gt; - Downstream commercial fork. Synergy sponsors Deskflow with financial support and contributes code (&lt;a href=&quot;https://github.com/deskflow/deskflow/wiki/Relationship-with-Synergy&quot;&gt;learn more&lt;/a&gt;).&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/input-leap/input-leap&quot;&gt;&lt;strong&gt;Input Leap&lt;/strong&gt;&lt;/a&gt; - Inactive Deskflow/Synergy-derivative with the goal continuing Barrier development (now a dead fork).&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;FAQ&lt;/h2&gt; 
&lt;h3&gt;Is Deskflow compatible with Synergy, Input Leap, or Barrier?&lt;/h3&gt; 
&lt;p&gt;Yes, Deskflow has network compatibility with all forks:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Requires Deskflow &amp;gt;= v1.17.0.96&lt;/li&gt; 
 &lt;li&gt;Deskflow will &lt;em&gt;just work&lt;/em&gt; with Input Leap and Barrier (server or client).&lt;/li&gt; 
 &lt;li&gt;Connecting a Deskflow client to a Synergy 1 server will also &lt;em&gt;just work&lt;/em&gt;.&lt;/li&gt; 
 &lt;li&gt;To connect a Synergy 1 client, you need to select the Synergy protocol in the Deskflow server settings.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;em&gt;Note:&lt;/em&gt; Only Synergy 1 is compatible with Deskflow (Synergy 3 is not yet compatible).&lt;/p&gt; 
&lt;h3&gt;Is Deskflow compatible with Lan Mouse?&lt;/h3&gt; 
&lt;p&gt;We would love to see compatibility with Lan Mouse. This may be quite an effort as currently the way they handle the generated input is very different.&lt;/p&gt; 
&lt;h3&gt;If I want to solve issues in Deskflow do I need to contribute to a fork?&lt;/h3&gt; 
&lt;p&gt;We welcome PRs (pull requests) from the community. If you&#39;d like to make a change, please feel free to &lt;a href=&quot;https://github.com/deskflow/deskflow/discussions&quot;&gt;start a discussion&lt;/a&gt; or &lt;a href=&quot;https://github.com/deskflow/deskflow/wiki/Contributing&quot;&gt;open a PR&lt;/a&gt;.&lt;/p&gt; 
&lt;h3&gt;Is clipboard sharing supported?&lt;/h3&gt; 
&lt;p&gt;Absolutely. The clipboard-sharing feature is a cornerstone feature of the product and we are committed to maintaining and improving that feature.&lt;/p&gt; 
&lt;h3&gt;Is Wayland for Linux supported?&lt;/h3&gt; 
&lt;p&gt;Yes! Wayland (the Linux display server protocol aimed to become the successor of the X Window System) is an important platform for us. The &lt;a href=&quot;https://gitlab.freedesktop.org/libinput/libei&quot;&gt;&lt;code&gt;libei&lt;/code&gt;&lt;/a&gt; and &lt;a href=&quot;https://github.com/flatpak/libportal&quot;&gt;&lt;code&gt;libportal&lt;/code&gt;&lt;/a&gt; libraries enable Wayland support for Deskflow. We would like to give special thanks to Peter Hutterer, who is the author of &lt;code&gt;libei&lt;/code&gt;, a major contributor to &lt;code&gt;libportal&lt;/code&gt;, and the author of the Wayland implementation in Deskflow. Others such as Olivier Fourdan and Povilas Kanapickas helped with the Wayland implementation.&lt;/p&gt; 
&lt;p&gt;Some features &lt;em&gt;may&lt;/em&gt; be unavailable or broken on Wayland. Please see the &lt;a href=&quot;https://github.com/deskflow/deskflow/discussions/7499&quot;&gt;known Wayland issues&lt;/a&gt;.&lt;/p&gt; 
&lt;h3&gt;Where did it all start?&lt;/h3&gt; 
&lt;p&gt;Deskflow was first created as Synergy in 2001 by Chris Schoeneman. Read about the &lt;a href=&quot;https://github.com/deskflow/deskflow/wiki/History&quot;&gt;history of the project&lt;/a&gt; on our wiki.&lt;/p&gt; 
&lt;h2&gt;Meow&#39;Dib (our mascot)&lt;/h2&gt; 
&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/726f695c-3dfb-4abd-875d-ed658f6c610f&quot; alt=&quot;Meow&#39;Dib&quot; /&gt;&lt;/p&gt; 
&lt;h2&gt;Deskflow Contributors&lt;/h2&gt; 
&lt;p&gt;&lt;a href=&quot;https://symless.com/synergy&quot;&gt;&lt;img src=&quot;https://raw.githubusercontent.com/deskflow/deskflow-artwork/b2c72a3e60a42dee793bd47efc275b5ee0bdaa5f/misc/synergy-sponsor.svg?sanitize=true&quot; alt=&quot;Sponsored by Synergy&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://symless.com/synergy&quot;&gt;Synergy&lt;/a&gt; sponsors the Deskflow project by contributing code and providing financial support (&lt;a href=&quot;https://github.com/deskflow/deskflow/wiki/Relationship-with-Synergy&quot;&gt;learn more&lt;/a&gt;).&lt;/p&gt; 
&lt;p&gt;Deskflow is made by possible by these contributors.&lt;/p&gt; 
&lt;a href=&quot;https://github.com/deskflow/deskflow/graphs/contributors&quot;&gt; &lt;img src=&quot;https://contrib.rocks/image?repo=deskflow/deskflow&quot; /&gt; &lt;/a&gt; 
&lt;h2&gt;License&lt;/h2&gt; 
&lt;p&gt;This project is licensed under &lt;a href=&quot;https://raw.githubusercontent.com/deskflow/deskflow/master/LICENSE&quot;&gt;GPL-2.0&lt;/a&gt; with an &lt;a href=&quot;https://raw.githubusercontent.com/deskflow/deskflow/LICENSES/LicenseRef-OpenSSL-Exception.txt&quot;&gt;OpenSSL exception&lt;/a&gt;.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>kvcache-ai/Mooncake</title>
      <link>https://github.com/kvcache-ai/Mooncake</link>
      <description>&lt;p&gt;Mooncake is the serving platform for Kimi, a leading LLM service provided by Moonshot AI.&lt;/p&gt;&lt;hr&gt;&lt;div align=&quot;center&quot;&gt; 
 &lt;img src=&quot;https://raw.githubusercontent.com/kvcache-ai/Mooncake/main/image/mooncake-icon.png&quot; width=&quot;44%&quot; /&gt; 
 &lt;h2 align=&quot;center&quot;&gt; A KVCache-centric Disaggregated Architecture for LLM Serving &lt;/h2&gt; 
 &lt;a href=&quot;https://www.usenix.org/system/files/fast25-qin.pdf&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;Paper&lt;/strong&gt;&lt;/a&gt; | 
 &lt;a href=&quot;https://www.usenix.org/system/files/fast25_slides-qin.pdf&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;Slides&lt;/strong&gt;&lt;/a&gt; | 
 &lt;a href=&quot;https://raw.githubusercontent.com/kvcache-ai/Mooncake/main/FAST25-release/traces&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;Traces&lt;/strong&gt;&lt;/a&gt; | 
 &lt;a href=&quot;https://kvcache-ai.github.io/Mooncake/&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;Documentation&lt;/strong&gt;&lt;/a&gt; | 
 &lt;a href=&quot;https://kvcache.ai/&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;Blog&lt;/strong&gt;&lt;/a&gt; | 
 &lt;a href=&quot;https://join.slack.com/t/mooncake-project/shared_invite/zt-3qx4x35ea-zSSTqTHItHJs9SCoXLOSPA&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;Slack&lt;/strong&gt;&lt;/a&gt; 
 &lt;br /&gt; 
 &lt;br /&gt; 
 &lt;p&gt;&lt;a href=&quot;https://deepwiki.com/kvcache-ai/Mooncake&quot;&gt;&lt;img src=&quot;https://deepwiki.com/badge.svg?sanitize=true&quot; alt=&quot;Ask DeepWiki&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://pypi.org/project/mooncake-transfer-engine&quot;&gt;&lt;img src=&quot;https://static.pepy.tech/badge/mooncake-transfer-engine?period=month&quot; alt=&quot;PyPI - Downloads&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://github.com/kvcache-ai/Mooncake/graphs/commit-activity&quot;&gt;&lt;img src=&quot;https://img.shields.io/github/commit-activity/w/kvcache-ai/Mooncake&quot; alt=&quot;GitHub commit activity&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://github.com/kvcache-ai/Mooncake/raw/main/LICENSE-APACHE&quot;&gt;&lt;img src=&quot;https://img.shields.io/github/license/kvcache-ai/mooncake.svg?sanitize=true&quot; alt=&quot;license&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://hub.docker.com/r/kvcacheai/mooncake&quot;&gt;&lt;img src=&quot;https://img.shields.io/docker/v/kvcacheai/mooncake?label=docker&amp;amp;logo=docker&amp;amp;logoColor=white&amp;amp;color=2496ED&quot; alt=&quot;Docker&quot; /&gt;&lt;/a&gt; &lt;br /&gt;&lt;/p&gt; 
 &lt;p&gt;&lt;a href=&quot;https://pypi.org/project/mooncake-transfer-engine&quot;&gt;&lt;img src=&quot;https://img.shields.io/static/v1?label=pypi&amp;amp;message=CUDA%20%3C%3D12.9&amp;amp;color=76B900&quot; alt=&quot;PyPI CUDA &lt;=12.9&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://pypi.org/project/mooncake-transfer-engine-cuda13&quot;&gt;&lt;img src=&quot;https://img.shields.io/static/v1?label=pypi&amp;amp;message=CUDA%2013.0%2F13.1&amp;amp;color=76B900&quot; alt=&quot;PyPI CUDA 13.0/13.1&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://pypi.org/project/mooncake-transfer-engine-non-cuda/&quot;&gt;&lt;img src=&quot;https://img.shields.io/static/v1?label=pypi&amp;amp;message=non-CUDA&amp;amp;color=00BFFF&quot; alt=&quot;PyPI Non-CUDA&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://pypi.org/project/mooncake-transfer-engine-npu/&quot;&gt;&lt;img src=&quot;https://img.shields.io/static/v1?label=pypi&amp;amp;message=NPU&amp;amp;color=F87171&quot; alt=&quot;PyPI NPU&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://pypi.org/project/mooncake-transfer-engine-musa/&quot;&gt;&lt;img src=&quot;https://img.shields.io/static/v1?label=pypi&amp;amp;message=MUSA&amp;amp;color=F97316&quot; alt=&quot;PyPI MUSA&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://pypi.org/project/mooncake-transfer-engine-efa/&quot;&gt;&lt;img src=&quot;https://img.shields.io/static/v1?label=pypi&amp;amp;message=EFA%20%2B%20CUDA%2012&amp;amp;color=F59E0B&quot; alt=&quot;PyPI EFA CUDA 12&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://pypi.org/project/mooncake-transfer-engine-efa-non-cuda/&quot;&gt;&lt;img src=&quot;https://img.shields.io/static/v1?label=pypi&amp;amp;message=EFA%20non-CUDA&amp;amp;color=F59E0B&quot; alt=&quot;PyPI EFA Non-CUDA&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;/div&gt; 
&lt;br /&gt; 
&lt;p&gt;Mooncake is the serving platform for &lt;a href=&quot;https://kimi.ai/&quot;&gt;&lt;img src=&quot;https://raw.githubusercontent.com/kvcache-ai/Mooncake/main/image/kimi.png&quot; alt=&quot;icon&quot; style=&quot;height: 16px; vertical-align: middle;&quot; /&gt; Kimi&lt;/a&gt;, a leading LLM service provided by &lt;a href=&quot;https://www.moonshot.cn/&quot;&gt;&lt;img src=&quot;https://raw.githubusercontent.com/kvcache-ai/Mooncake/main/image/moonshot.jpg&quot; alt=&quot;icon&quot; style=&quot;height: 16px; vertical-align: middle;&quot; /&gt; Moonshot AI&lt;/a&gt;. Under real workloads, Mooncake’s innovative architecture enables Kimi to handle 75% more requests while adhering to SLOs.&lt;/p&gt; 
&lt;h2 id=&quot;updates&quot;&gt;🔄 Updates&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;Jul 2, 2026&lt;/strong&gt;: &lt;a href=&quot;https://x.com/mgoin_/status/2072785822231728363&quot;&gt;DSpark&lt;/a&gt; scales fully online training on a GB300 NVL72 system with Speculators and Mooncake: 9 vLLM nodes serve the GLM 5.2 FP8 verifier through Mooncake RDMA Store to 6 FSDP training nodes (DP=24), achieving 125k prefill tokens/s and 1.5 steps/s.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;May 7, 2026&lt;/strong&gt;: 🚀 &lt;a href=&quot;https://vllm.ai/blog/mooncake-store&quot;&gt;vLLM officially features Mooncake Store&lt;/a&gt; — a deep dive into how Mooncake&#39;s distributed KVCache engine supercharges vLLM inference with high-throughput, memory-efficient, cross-instance KV cache sharing!&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Apr 29, 2026&lt;/strong&gt;: SGLang introduces &lt;a href=&quot;https://lmsys.org/blog/2026-04-29-p2p-update/&quot;&gt;RDMA-based P2P weight transfer for large-scale distributed RL&lt;/a&gt; using Mooncake TransferEngine, achieving 7x faster weight updates for the 1T-parameter Kimi-K2 model (53s → 7.2s) with zero-copy RDMA transfer across thousands of GPUs.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Mar 19, 2026&lt;/strong&gt;: &lt;a href=&quot;https://pytorch.org/blog/torchspec-speculative-decoding-training-at-scale&quot;&gt;TorchSpec: Speculative Decoding Training at Scale&lt;/a&gt; is &lt;a href=&quot;https://github.com/torchspec-project/TorchSpec&quot;&gt;open sourced&lt;/a&gt;, using Mooncake to decouple inference and training via efficient hidden states management.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Mar 5, 2026&lt;/strong&gt;: &lt;a href=&quot;https://github.com/ModelTC/LightX2V/pull/893&quot;&gt;LightX2V&lt;/a&gt; now supports disaggregated deployment based on Mooncake, enabling encoder/transformer service decoupling with Mooncake Transfer Engine for high-performance cross-device and cross-machine data transfer. Details in &lt;a href=&quot;https://light-ai.top/LightX2V-BLOG/posts/Disaggregation/&quot;&gt;blog&lt;/a&gt;.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Feb 25, 2026&lt;/strong&gt;: &lt;a href=&quot;https://github.com/sgl-project/sglang&quot;&gt;SGLang&lt;/a&gt; merged &lt;a href=&quot;https://github.com/sgl-project/sglang/pull/16137&quot;&gt;Encoder Global Cache Manager&lt;/a&gt;, introducing a Mooncake-powered global multimodal embedding cache that enables cross-instance sharing of ViT embeddings to avoid redundant GPU computation.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;details&gt; 
 &lt;summary&gt;More&lt;/summary&gt; 
 &lt;ul&gt; 
  &lt;li&gt;&lt;strong&gt;Feb 24, 2026&lt;/strong&gt;: &lt;a href=&quot;https://docs.vllm.ai/projects/vllm-omni/en/latest/design/feature/disaggregated_inference/&quot;&gt;vLLM-Omni&lt;/a&gt; introduces disaggregated inference connectors with support for both &lt;code&gt;MooncakeStoreConnector&lt;/code&gt; and &lt;code&gt;MooncakeTransferEngineConnector&lt;/code&gt; for multi-node omni-modality pipelines.&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;Feb 12, 2026&lt;/strong&gt;: &lt;a href=&quot;https://pytorch.org/blog/mooncake-joins-pytorch-ecosystem/&quot;&gt;Mooncake Joins PyTorch Ecosystem&lt;/a&gt; We are thrilled to announce that Mooncake has officially joined the PyTorch Ecosystem!&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;Jan 28, 2026&lt;/strong&gt;: &lt;a href=&quot;https://github.com/taco-project/FlexKV&quot;&gt;FlexKV&lt;/a&gt;, a distributed KV store and cache system from Tencent and NVIDIA in collaboration with the community, now supports &lt;a href=&quot;https://github.com/taco-project/FlexKV/raw/main/docs/dist_reuse/README_en.md&quot;&gt;distributed KVCache reuse&lt;/a&gt; with the Mooncake Transfer Engine.&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;Dec 27, 2025&lt;/strong&gt;: Collaboration with &lt;a href=&quot;https://github.com/alibaba/ROLL&quot;&gt;ROLL&lt;/a&gt;! Check out the paper &lt;a href=&quot;https://arxiv.org/abs/2512.22560&quot;&gt;here&lt;/a&gt;.&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;Dec 23, 2025&lt;/strong&gt;: SGLang introduces &lt;a href=&quot;https://lmsys.org/blog/2026-01-12-epd/&quot;&gt;Encode-Prefill-Decode (EPD) Disaggregation&lt;/a&gt; with Mooncake as a transfer backend. This integration allows decoupling compute-intensive multimodal encoders (e.g., Vision Transformers) from language model nodes, utilizing Mooncake&#39;s RDMA engine for zero-copy transfer of large multimodal embeddings.&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;Dec 19, 2025&lt;/strong&gt;: Mooncake Transfer Engine has been &lt;a href=&quot;https://github.com/NVIDIA/TensorRT-LLM/tree/main/cpp/tensorrt_llm/executor/cache_transmission/mooncake_utils&quot;&gt;integrated into TensorRT LLM&lt;/a&gt; for KVCache transfer in PD-disaggregated inference.&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;Dec 19, 2025&lt;/strong&gt;: Mooncake Transfer Engine has been directly integrated into vLLM v1 as a &lt;a href=&quot;https://docs.vllm.ai/en/latest/features/mooncake_connector_usage/&quot;&gt;KV Connector&lt;/a&gt; in PD-disaggregated setups.&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;Nov 07, 2025&lt;/strong&gt;: &lt;a href=&quot;https://github.com/sgl-project/rbg/raw/main/keps/74-mooncake-integration/README.md&quot;&gt;RBG + SGLang HiCache + Mooncake&lt;/a&gt;, a role-based out-of-the-box solution for cloud native deployment, which is elastic, scalable, and high-performance.&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;Sept 18, 2025&lt;/strong&gt;: Mooncake Store empowers vLLM Ascend by serving as &lt;a href=&quot;https://docs.vllm.ai/projects/ascend/zh-cn/main/user_guide/feature_guide/kv_pool.html&quot;&gt;the distributed KV cache pool backend&lt;/a&gt;.&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;Sept 10, 2025&lt;/strong&gt;: SGLang officially supports Mooncake Store as a &lt;a href=&quot;https://lmsys.org/blog/2025-09-10-sglang-hicache/&quot;&gt;hierarchical KV caching storage backend&lt;/a&gt;. The integration extends RadixAttention with multi-tier KV cache storage across device, host, and remote storage layers.&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;Sept 10, 2025&lt;/strong&gt;: The official &amp;amp; high-performance version of Mooncake P2P Store is open-sourced as &lt;a href=&quot;https://github.com/MoonshotAI/checkpoint-engine/&quot;&gt;checkpoint-engine&lt;/a&gt;. It has been successfully applied in K1.5 and K2 production training, updating Kimi-K2 model (1T parameters) across thousands of GPUs in ~20s.&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;Aug 23, 2025&lt;/strong&gt;: &lt;a href=&quot;https://github.com/jd-opensource/xllm&quot;&gt;xLLM&lt;/a&gt; high-performance inference engine builds hybrid KV cache management based on Mooncake, supporting global KV cache management with intelligent offloading and prefetching.&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;Aug 18, 2025&lt;/strong&gt;: vLLM-Ascend &lt;a href=&quot;https://docs.vllm.ai/projects/ascend/en/latest/developer_guide/feature_guide/disaggregated_prefill.html&quot;&gt;integrates Mooncake Transfer Engine&lt;/a&gt; for KV cache register and disaggregate prefill, enabling efficient distributed inference on Ascend NPUs.&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;Jul 20, 2025&lt;/strong&gt;: Mooncake powers &lt;a href=&quot;https://lmsys.org/blog/2025-07-20-k2-large-scale-ep/&quot;&gt;the deployment of Kimi K2&lt;/a&gt; on 128 H200 GPUs with PD disaggregation and large-scale expert parallelism, achieving 224k tokens/sec prefill throughput and 288k tokens/sec decode throughput.&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;Jun 20, 2025&lt;/strong&gt;: Mooncake becomes a PD disaggregation &lt;a href=&quot;https://kvcache-ai.github.io/Mooncake/deployment/integrations/lmdeploy.html&quot;&gt;backend&lt;/a&gt; for LMDeploy.&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;May 9, 2025&lt;/strong&gt;: NIXL officially supports Mooncake Transfer Engine as &lt;a href=&quot;https://github.com/ai-dynamo/nixl/raw/main/src/plugins/mooncake/README.md&quot;&gt;a backend plugin&lt;/a&gt;.&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;May 8, 2025&lt;/strong&gt;: &lt;a href=&quot;https://kvcache-ai.github.io/Mooncake/deployment/integrations/lmcache/index.html&quot;&gt;Mooncake x LMCache&lt;/a&gt; unite to pioneer KVCache-centric LLM serving system.&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;May 5, 2025&lt;/strong&gt;: Supported by Mooncake Team, SGLang release &lt;a href=&quot;https://lmsys.org/blog/2025-05-05-large-scale-ep/&quot; target=&quot;_blank&quot;&gt;guidance&lt;/a&gt; to deploy DeepSeek with PD Disaggregation on 96 H100 GPUs.&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;Apr 22, 2025&lt;/strong&gt;: LMCache officially supports Mooncake Store as a &lt;a href=&quot;https://blog.lmcache.ai/2025-04-22-tencent/&quot; target=&quot;_blank&quot;&gt;remote connector&lt;/a&gt;.&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;Apr 10, 2025&lt;/strong&gt;: SGLang officially supports Mooncake Transfer Engine for disaggregated prefilling and KV cache transfer.&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;Mar 7, 2025&lt;/strong&gt;: We open-sourced the Mooncake Store, a distributed KVCache based on Transfer Engine. vLLM&#39;s xPyD disaggregated prefilling &amp;amp; decoding based on Mooncake Store will be released soon.&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;Feb 25, 2025&lt;/strong&gt;: Mooncake receives the &lt;strong&gt;Best Paper Award&lt;/strong&gt; at &lt;strong&gt;FAST 2025&lt;/strong&gt;!&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;Feb 21, 2025&lt;/strong&gt;: The updated &lt;a href=&quot;https://raw.githubusercontent.com/kvcache-ai/Mooncake/main/FAST25-release/traces&quot; target=&quot;_blank&quot;&gt;traces&lt;/a&gt; used in our FAST&#39;25 paper have been released.&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;Dec 16, 2024&lt;/strong&gt;: vLLM officially supports Mooncake Transfer Engine for disaggregated prefilling and KV cache transfer.&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;Nov 28, 2024&lt;/strong&gt;: We open-sourced the Transfer Engine, the central component of Mooncake. We also provide two demonstrations of Transfer Engine: a P2P Store and vLLM integration.&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;July 9, 2024&lt;/strong&gt;: We open-sourced the trace as a &lt;a href=&quot;https://github.com/kvcache-ai/Mooncake/raw/main/FAST25-release/arxiv-trace/mooncake_trace.jsonl&quot; target=&quot;_blank&quot;&gt;JSONL file&lt;/a&gt;.&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;June 27, 2024&lt;/strong&gt;: We present a series of Chinese blogs with more discussions on &lt;a href=&quot;https://zhuanlan.zhihu.com/p/705754254&quot;&gt;zhihu 1&lt;/a&gt;, &lt;a href=&quot;https://zhuanlan.zhihu.com/p/705910725&quot;&gt;2&lt;/a&gt;, &lt;a href=&quot;https://zhuanlan.zhihu.com/p/706204757&quot;&gt;3&lt;/a&gt;, &lt;a href=&quot;https://zhuanlan.zhihu.com/p/707997501&quot;&gt;4&lt;/a&gt;, &lt;a href=&quot;https://zhuanlan.zhihu.com/p/9461861451&quot;&gt;5&lt;/a&gt;, &lt;a href=&quot;https://zhuanlan.zhihu.com/p/1939988652114580803&quot;&gt;6&lt;/a&gt;, &lt;a href=&quot;https://zhuanlan.zhihu.com/p/1959366095443064318&quot;&gt;7&lt;/a&gt;.&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;June 26, 2024&lt;/strong&gt;: Initial technical report release.&lt;/li&gt; 
 &lt;/ul&gt; 
&lt;/details&gt; 
&lt;h2 id=&quot;overview&quot;&gt;🎉 Overview&lt;/h2&gt; 
&lt;!-- ![components](image/components.png) --&gt; 
&lt;div align=&quot;center&quot;&gt; 
 &lt;img src=&quot;https://raw.githubusercontent.com/kvcache-ai/Mooncake/main/image/components.png&quot; width=&quot;74%&quot; /&gt; 
&lt;/div&gt; 
&lt;p&gt;Mooncake is an infrastructure project for large-scale LLM inference and training. It features a KV cache-centric disaggregated architecture that separates prefill and decode clusters, while leveraging otherwise underutilized CPU, DRAM, and SSD resources in GPU clusters to build a disaggregated KV cache pool.&lt;/p&gt; 
&lt;p&gt;Mooncake includes a high-performance Transfer Engine for low-latency data movement across heterogeneous networks and accelerators; Mooncake Store for distributed KV cache and model-weight management; and Mooncake EP &amp;amp; PG for elastic MoE serving. Deeply integrated with ecosystems such as SGLang and vLLM, Mooncake helps LLM systems improve cache reuse, reduce serving latency, and scale efficiently across multi-node clusters.&lt;/p&gt; 
&lt;h2 id=&quot;show-cases&quot;&gt;🔥 Show Cases&lt;/h2&gt; 
&lt;h3&gt;Transfer Engine (TE)&lt;/h3&gt; 
&lt;p&gt;The core of Mooncake is the Transfer Engine (TE), a high-performance data transfer framework. TE offers a unified interface for batched data movement across diverse storage, network, and accelerator environments. By supporting multiple transport protocols, topology-aware routing, multi-NIC bandwidth aggregation, and automatic failover, TE delivers low-latency, scalable, and robust data transmission for distributed AI workloads. See the &lt;a href=&quot;https://kvcache-ai.github.io/Mooncake/design/transfer-engine/index.html&quot;&gt;Transfer Engine guide&lt;/a&gt; for details.&lt;/p&gt; 
&lt;details&gt; 
 &lt;summary&gt;Highlights&lt;/summary&gt; 
 &lt;ul&gt; 
  &lt;li&gt; &lt;p&gt;&lt;strong&gt;Efficient use of multiple RDMA NIC devices.&lt;/strong&gt; Transfer Engine supports the use of multiple RDMA NIC devices to achieve the &lt;em&gt;aggregation of transfer bandwidth&lt;/em&gt;.&lt;/p&gt; &lt;/li&gt; 
  &lt;li&gt; &lt;p&gt;&lt;strong&gt;Topology-aware path selection.&lt;/strong&gt; Transfer Engine can &lt;em&gt;select optimal devices&lt;/em&gt; based on the location (NUMA affinity, etc.) of both source and destination.&lt;/p&gt; &lt;/li&gt; 
  &lt;li&gt; &lt;p&gt;&lt;strong&gt;Robust against temporary network errors.&lt;/strong&gt; Once transmission fails, Transfer Engine will try to use alternative paths for data delivery automatically.&lt;/p&gt; &lt;/li&gt; 
  &lt;li&gt; &lt;p&gt;&lt;strong&gt;Superior performance at scale.&lt;/strong&gt; With 40 GB of data (equivalent to the size of the KVCache generated by 128k tokens in the LLaMA3-70B model), Mooncake Transfer Engine delivers up to &lt;strong&gt;87 GB/s&lt;/strong&gt; and &lt;strong&gt;190 GB/s&lt;/strong&gt; of bandwidth in 4×200 Gbps and 8×400 Gbps RoCE networks respectively, which are about &lt;strong&gt;2.4x and 4.6x faster&lt;/strong&gt; than the TCP protocol.&lt;/p&gt; &lt;/li&gt; 
 &lt;/ul&gt; 
 &lt;!-- ![transfer-engine-performance.png](image/transfer-engine-performance.png) --&gt; 
 &lt;img src=&quot;https://raw.githubusercontent.com/kvcache-ai/Mooncake/main/image/transfer-engine-performance.png&quot; width=&quot;75%&quot; /&gt; 
 &lt;ul&gt; 
  &lt;li&gt; &lt;p&gt;&lt;strong&gt;Broad support for heterogeneous transports and accelerators.&lt;/strong&gt; Transfer Engine provides unified data transfer across diverse protocols, including TCP, RDMA, AWS EFA, NVMe-oF, NVLink, HIP, Barex, CXL, and Ascend-family transports. When built with the corresponding runtime, Transfer Engine can detect accelerator memory and select suitable transport paths for efficient data movement across CUDA, MUSA, HIP, MACA, Cambricon MLU, and Ascend-enabled environments. For a complete list of supported protocols and configuration guide, see the &lt;a href=&quot;https://kvcache-ai.github.io/Mooncake/getting_started/supported-protocols.html&quot;&gt;Supported Protocols Documentation&lt;/a&gt;.&lt;/p&gt; &lt;/li&gt; 
  &lt;li&gt; &lt;p&gt;&lt;strong&gt;Widely adopted across the LLM ecosystem.&lt;/strong&gt; TE is used in production inference stacks such as &lt;a href=&quot;https://github.com/sgl-project/sglang&quot;&gt;SGLang&lt;/a&gt;, &lt;a href=&quot;https://github.com/vllm-project/vllm&quot;&gt;vLLM&lt;/a&gt;, &lt;a href=&quot;https://github.com/NVIDIA/TensorRT-LLM&quot;&gt;TensorRT-LLM&lt;/a&gt;, &lt;a href=&quot;https://github.com/vllm-project/vllm-ascend&quot;&gt;vLLM-Ascend&lt;/a&gt;, &lt;a href=&quot;https://github.com/MoonshotAI/checkpoint-engine&quot;&gt;checkpoint-engine&lt;/a&gt;, and &lt;a href=&quot;https://github.com/ai-dynamo/nixl&quot;&gt;NIXL&lt;/a&gt;, among others, to efficiently transfer KV cache, embeddings, model weights, and other data.&lt;/p&gt; &lt;/li&gt; 
 &lt;/ul&gt; 
&lt;/details&gt; 
&lt;h3&gt;Mooncake Store&lt;/h3&gt; 
&lt;p&gt;Mooncake Store is a high-performance distributed key-value cache storage engine designed for LLM inference. Built on the Transfer Engine, it stores and manages reusable KV caches and model weights across inference clusters, with support for efficient object storage, replication, eviction, and high-bandwidth data transfer. See the &lt;a href=&quot;https://kvcache-ai.github.io/Mooncake/design/mooncake-store.html&quot;&gt;Mooncake Store guide&lt;/a&gt; for details.&lt;/p&gt; 
&lt;details&gt; 
 &lt;summary&gt;Highlights&lt;/summary&gt; 
 &lt;ul&gt; 
  &lt;li&gt; &lt;p&gt;&lt;strong&gt;High bandwidth utilization.&lt;/strong&gt; Mooncake Store supports large-object striping, parallel I/O, and end-to-end zero-copy data transfer, fully utilizing aggregated bandwidth across multiple NICs.&lt;/p&gt; &lt;/li&gt; 
  &lt;li&gt; &lt;p&gt;&lt;strong&gt;Multi-tier cache hierarchy&lt;/strong&gt;. Mooncake Store supports a multi-level cache design across DRAM and SSD/NVMe, enabling larger cache capacity.&lt;/p&gt; &lt;/li&gt; 
  &lt;li&gt; &lt;p&gt;&lt;strong&gt;Elastic and disaggregated storage.&lt;/strong&gt; Mooncake Store decouples KVCache storage from inference engines, allowing storage nodes to be dynamically added or removed while keeping cached data independent from engine restarts, upgrades, and scheduling decisions.&lt;/p&gt; &lt;/li&gt; 
  &lt;li&gt; &lt;p&gt;&lt;strong&gt;Programmatic object management.&lt;/strong&gt; Mooncake Store allows applications to control object placement and lifecycle through per-object policies, including replica counts, preferred segments, soft pin, and hard pin. These controls help inference systems protect important KV caches and model weights while guiding replication, placement, and eviction behavior.&lt;/p&gt; &lt;/li&gt; 
  &lt;li&gt; &lt;p&gt;&lt;strong&gt;Broad ecosystem adoption.&lt;/strong&gt; Mooncake Store is used across the LLM systems ecosystem as a high-performance distributed storage backend for KV caches, hidden states, and model weights. It supports integrations with &lt;a href=&quot;https://lmsys.org/blog/2025-09-10-sglang-hicache/&quot;&gt;SGLang&#39;s Hierarchical KV Caching&lt;/a&gt;, &lt;a href=&quot;https://docs.vllm.ai/en/latest/features/disagg_prefill.html&quot;&gt;vLLM&#39;s prefill serving&lt;/a&gt;, and &lt;a href=&quot;https://kvcache-ai.github.io/Mooncake/deployment/integrations/lmcache/index.html&quot;&gt;LMCache&lt;/a&gt;, and has been adopted by systems such as &lt;a href=&quot;https://pytorch.org/blog/torchspec-speculative-decoding-training-at-scale/&quot;&gt;TorchSpec&lt;/a&gt; and &lt;a href=&quot;https://github.com/Ascend/TransferQueue&quot;&gt;TransferQueue&lt;/a&gt; to decouple inference, training, and reinforcement-learning workloads through efficient state management and asynchronous data movement.&lt;/p&gt; &lt;/li&gt; 
 &lt;/ul&gt; 
&lt;/details&gt; 
&lt;h3&gt;Mooncake EP and Process Group (PG)&lt;/h3&gt; 
&lt;p&gt;Mooncake EP and Mooncake PG extend Mooncake from high-performance data movement to fault-tolerant distributed execution for large-scale MoE inference. Mooncake EP adapts DeepEP-style expert-parallel dispatch and combine operations with rank activeness awareness, while Mooncake PG provides a PyTorch distributed process-group backend with collective communication primitives that can detect failed ranks, report failures to upper layers, and recover ranks without restarting the entire inference service. See the &lt;a href=&quot;https://kvcache-ai.github.io/Mooncake/api-reference/python/ep-backend.html&quot;&gt;Mooncake EP &amp;amp; Backend guide&lt;/a&gt; for details.&lt;/p&gt; 
&lt;details&gt; 
 &lt;summary&gt;Highlights&lt;/summary&gt; 
 &lt;ul&gt; 
  &lt;li&gt; &lt;p&gt;&lt;strong&gt;Fault-tolerant expert parallelism.&lt;/strong&gt; Mooncake EP adds &lt;code&gt;active_ranks&lt;/code&gt; awareness to expert-parallel dispatch and combine APIs, allowing MoE inference systems to route around failed ranks and continue serving with healthy experts.&lt;/p&gt; &lt;/li&gt; 
  &lt;li&gt; &lt;p&gt;&lt;strong&gt;DeepEP-compatible programming model.&lt;/strong&gt; Mooncake EP keeps the API largely consistent with DeepEP&#39;s low-latency mode, making it easier for inference engines to adopt fault-tolerant expert parallelism without rewriting their MoE communication stack.&lt;/p&gt; &lt;/li&gt; 
  &lt;li&gt; &lt;p&gt;&lt;strong&gt;PyTorch ProcessGroup integration.&lt;/strong&gt; Mooncake PG can be registered as a &lt;code&gt;torch.distributed&lt;/code&gt; backend, enabling standard collective APIs such as &lt;code&gt;all_gather&lt;/code&gt; while using Mooncake&#39;s communication and failure-reporting mechanisms underneath.&lt;/p&gt; &lt;/li&gt; 
  &lt;li&gt; &lt;p&gt;&lt;strong&gt;Elastic rank recovery.&lt;/strong&gt; Mooncake PG exposes recovery-oriented primitives such as peer-state polling and rank recovery, allowing replacement processes to rejoin existing process groups and helping inference services recover from partial failures.&lt;/p&gt; &lt;/li&gt; 
  &lt;li&gt; &lt;p&gt;&lt;strong&gt;SGLang integration for production MoE serving.&lt;/strong&gt; Mooncake&#39;s collective backend and expert-parallel kernels are integrated into SGLang to support fault-tolerant expert-parallel inference for large MoE models, including Elastic Expert Parallel serving scenarios.&lt;/p&gt; &lt;/li&gt; 
 &lt;/ul&gt; 
&lt;/details&gt; 
&lt;h3&gt;Tensor-Centric Ecosystem&lt;/h3&gt; 
&lt;p&gt;Mooncake establishes a full-stack, Tensor-oriented AI infrastructure where Tensors serve as the fundamental data carrier. The ecosystem spans from the Transfer Engine, which accelerates Tensor data movement across heterogeneous storage (DRAM/VRAM/NVMe), to Mooncake Store for distributed management of Tensor objects (e.g., KVCache and model weight), up to the Mooncake Backend enabling Tensor-based elastic distributed computing. This architecture is designed to maximize Tensor processing efficiency for large-scale model inference and training.&lt;/p&gt; 
&lt;h3&gt;SGLang Integration (&lt;a href=&quot;https://kvcache-ai.github.io/Mooncake/deployment/integrations/sglang/index.html&quot;&gt;Guide&lt;/a&gt;)&lt;/h3&gt; 
&lt;p&gt;Mooncake is deeply integrated into &lt;a href=&quot;https://github.com/sgl-project/sglang/&quot;&gt;SGLang&lt;/a&gt; as a high-performance communication and storage backend. These integrations enable efficient KV cache transfer in PD-disaggregated serving, scalable multi-level KV caching through HiCache, fault-tolerant expert-parallel inference, high-performance multimodal pipeline data movement, and fast RDMA-based weight synchronization for large-scale RL training. Together, Mooncake and SGLang provide a production-oriented foundation for building elastic, high-throughput, and resource-efficient LLM and multimodal serving systems.&lt;/p&gt; 
&lt;details&gt; 
 &lt;summary&gt;Details&lt;/summary&gt; 
 &lt;ul&gt; 
  &lt;li&gt; &lt;p&gt;&lt;strong&gt;PD Disaggregated Serving:&lt;/strong&gt; SGLang officially supports Mooncake Transfer Engine as a backend for disaggregated serving and KV cache transfer, enabling prefill and decode workers to exchange KV cache data efficiently across devices and machines.&lt;/p&gt; &lt;/li&gt; 
  &lt;li&gt; &lt;p&gt;&lt;strong&gt;Hierarchical KV Caching&lt;/strong&gt;: Mooncake Store serves as an external storage backend in SGLang&#39;s HiCache system, extending RadixAttention with multi-level KV cache storage across device, host, and remote storage layers.&lt;/p&gt; &lt;/li&gt; 
  &lt;li&gt; &lt;p&gt;&lt;strong&gt;Elastic Expert Parallel&lt;/strong&gt;: Mooncake&#39;s collective communication backend and expert parallel kernels are integrated into SGLang to enable fault-tolerant expert parallel inference (&lt;a href=&quot;https://www.lmsys.org/blog/2026-03-25-eep-partial-failure-tolerance/&quot;&gt;Elastic EP&lt;/a&gt;).&lt;/p&gt; &lt;/li&gt; 
  &lt;li&gt; &lt;p&gt;&lt;strong&gt;Cloud-Native SGLang HiCache Deployment with RBG&lt;/strong&gt;: The &lt;a href=&quot;https://github.com/sgl-project/rbg&quot;&gt;RBG&lt;/a&gt; + SGLang HiCache + Mooncake integration provides a role-based, out-of-the-box cloud-native deployment solution that is elastic, scalable, and optimized for high-performance inference workloads.&lt;/p&gt; &lt;/li&gt; 
  &lt;li&gt; &lt;p&gt;&lt;strong&gt;Encode-Prefill-Decode Disaggregation for Multimodal Serving&lt;/strong&gt;: SGLang introduces Encode-Prefill-Decode disaggregation with Mooncake as a transfer backend. This enables compute-intensive multimodal encoders, such as Vision Transformers, to be decoupled from language model workers while transferring large embeddings efficiently through Mooncake’s RDMA-based engine.&lt;/p&gt; &lt;/li&gt; 
  &lt;li&gt; &lt;p&gt;&lt;strong&gt;SGLang-Omni Multi-Stage Pipeline Data Transfer&lt;/strong&gt;: &lt;a href=&quot;https://github.com/sgl-project/sglang-omni&quot;&gt;SGLang-Omni&lt;/a&gt; integrates Mooncake as a relay backend for efficient cross-stage tensor and blob transfer in multimodal serving pipelines. This enables high-performance data movement between heterogeneous components such as thinker, talker, codec, and vocoder stages.&lt;/p&gt; &lt;/li&gt; 
  &lt;li&gt; &lt;p&gt;&lt;strong&gt;RDMA-Based P2P Weight Transfer for Distributed RL&lt;/strong&gt;: SGLang adopts Mooncake TransferEngine for RDMA-based peer-to-peer weight transfer in large-scale distributed reinforcement learning. This enables zero-copy weight updates across thousands of GPUs and significantly accelerates synchronization for trillion-parameter models.&lt;/p&gt; &lt;/li&gt; 
 &lt;/ul&gt; 
&lt;/details&gt; 
&lt;h3&gt;vLLM Integration (&lt;a href=&quot;https://kvcache-ai.github.io/Mooncake/deployment/integrations/vllm/index.html&quot;&gt;Guide&lt;/a&gt;)&lt;/h3&gt; 
&lt;p&gt;Mooncake integrates with &lt;a href=&quot;https://github.com/vllm-project/vllm&quot;&gt;vLLM&lt;/a&gt; to accelerate large language model serving through high-performance KV cache transfer and distributed KV cache storage. The integration supports both disaggregated prefill-decode serving and cross-instance KV cache sharing, helping vLLM deployments reduce TTFT, improve cache reuse, and scale more efficiently across multi-node inference clusters.&lt;/p&gt; 
&lt;details&gt; 
 &lt;summary&gt;Details&lt;/summary&gt; 
 &lt;ul&gt; 
  &lt;li&gt; &lt;p&gt;&lt;strong&gt;Disaggregated prefill-decode serving&lt;/strong&gt;: Mooncake enables vLLM to split prefill and decode workloads across different nodes. Through MooncakeConnector, vLLM transfers KV cache blocks from prefill workers to decode workers using Mooncake’s high-performance transfer engine, allowing prefill and decode resources to scale independently while keeping cross-node KV transfer overhead low.&lt;/p&gt; &lt;/li&gt; 
  &lt;li&gt; &lt;p&gt;&lt;strong&gt;Distributed KV cache pooling and sharing&lt;/strong&gt;: &lt;a href=&quot;https://vllm.ai/blog/2026-05-06-mooncake-store&quot;&gt;Mooncake Store extends vLLM&lt;/a&gt; from isolated per-instance KV caches to a shared, cluster-level KV cache pool. Through MooncakeStoreConnector, multiple vLLM instances can store, retrieve, and reuse KV cache blocks based on hash-based prefix caching, reducing redundant prefill computation and improving cache efficiency for workloads with repeated prefixes, especially agentic and multi-turn serving scenarios.&lt;/p&gt; &lt;/li&gt; 
  &lt;li&gt; &lt;p&gt;&lt;strong&gt;vLLM-Omni stage communication&lt;/strong&gt;: Mooncake also integrates with &lt;a href=&quot;https://github.com/vllm-project/vllm-omni&quot;&gt;vLLM-Omni&lt;/a&gt; through &lt;code&gt;MooncakeTransferEngineConnector&lt;/code&gt; and &lt;code&gt;MooncakeStoreConnector&lt;/code&gt;, enabling efficient cross-node data exchange between vLLM-Omni stages.&lt;/p&gt; &lt;/li&gt; 
 &lt;/ul&gt; 
&lt;/details&gt; 
&lt;h2 id=&quot;supported-hardware&quot;&gt;🖥️ Supported Hardware&lt;/h2&gt; 
&lt;p&gt;Mooncake supports hardware backends across accelerator vendors, cloud fabrics, and standard datacenter interconnects, as listed below. See the &lt;a href=&quot;https://kvcache-ai.github.io/Mooncake/getting_started/supported-protocols.html&quot;&gt;supported protocols&lt;/a&gt; and &lt;a href=&quot;https://kvcache-ai.github.io/Mooncake/design/transfer-engine/index.html&quot;&gt;Transfer Engine design docs&lt;/a&gt; for details.&lt;/p&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;&lt;img src=&quot;https://raw.githubusercontent.com/kvcache-ai/Mooncake/main/image/partners/nvidia_logo.png&quot; width=&quot;120&quot; alt=&quot;NVIDIA&quot; /&gt;&lt;/th&gt; 
   &lt;th&gt;&lt;img src=&quot;https://raw.githubusercontent.com/kvcache-ai/Mooncake/main/image/partners/huawei_logo.png&quot; width=&quot;120&quot; alt=&quot;Huawei&quot; /&gt;&lt;/th&gt; 
   &lt;th&gt;&lt;img src=&quot;https://raw.githubusercontent.com/kvcache-ai/Mooncake/main/image/partners/amd_logo.png&quot; width=&quot;120&quot; alt=&quot;AMD&quot; /&gt;&lt;/th&gt; 
   &lt;th&gt;&lt;img src=&quot;https://raw.githubusercontent.com/kvcache-ai/Mooncake/main/image/hardwares/cambricon_logo.png&quot; width=&quot;120&quot; alt=&quot;Cambricon&quot; /&gt;&lt;/th&gt; 
   &lt;th&gt;&lt;img src=&quot;https://raw.githubusercontent.com/kvcache-ai/Mooncake/main/image/partners/moore_thread_logo.jpg&quot; width=&quot;120&quot; alt=&quot;Moore Threads&quot; /&gt;&lt;/th&gt; 
   &lt;th&gt;&lt;img src=&quot;https://raw.githubusercontent.com/kvcache-ai/Mooncake/main/image/partners/aws-logo.png&quot; width=&quot;120&quot; alt=&quot;AWS&quot; /&gt;&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;img src=&quot;https://raw.githubusercontent.com/kvcache-ai/Mooncake/main/image/hardwares/MetaX_logo.png&quot; width=&quot;120&quot; alt=&quot;MetaX&quot; /&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;img src=&quot;https://raw.githubusercontent.com/kvcache-ai/Mooncake/main/image/hardwares/T-Head_logo.png&quot; width=&quot;120&quot; alt=&quot;T-Head&quot; /&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;img src=&quot;https://raw.githubusercontent.com/kvcache-ai/Mooncake/main/image/partners/aliyun_logo.png&quot; width=&quot;120&quot; alt=&quot;Alibaba Cloud&quot; /&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;img src=&quot;https://raw.githubusercontent.com/kvcache-ai/Mooncake/main/image/partners/sunrise_logo.png&quot; width=&quot;120&quot; alt=&quot;Sunrise&quot; /&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;img src=&quot;https://raw.githubusercontent.com/kvcache-ai/Mooncake/main/image/partners/hygon_logo.png&quot; width=&quot;120&quot; alt=&quot;Hygon&quot; /&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;img src=&quot;https://raw.githubusercontent.com/kvcache-ai/Mooncake/main/image/hardwares/biren_logo.png&quot; width=&quot;120&quot; alt=&quot;Biren Technology&quot; /&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;h2 id=&quot;quick-start&quot;&gt;🚀 Getting Started&lt;/h2&gt; 
&lt;p&gt;Install Mooncake using &lt;code&gt;pip&lt;/code&gt;. The &lt;code&gt;mooncake-transfer-engine&lt;/code&gt; package includes Mooncake Transfer Engine, Mooncake Store, Mooncake EP and PG:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;CUDA &amp;lt; 13.0&lt;/li&gt; 
&lt;/ul&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;pip install mooncake-transfer-engine
&lt;/code&gt;&lt;/pre&gt; 
&lt;ul&gt; 
 &lt;li&gt;CUDA &amp;gt;= 13.0&lt;/li&gt; 
&lt;/ul&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;pip install mooncake-transfer-engine-cuda13
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;In addition to CUDA, Mooncake also supports other accelerator backends, along with flexible installation and deployment options. See the guides below for details:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://kvcache-ai.github.io/Mooncake/getting_started/quick-start.html&quot;&gt;Quick Start&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://kvcache-ai.github.io/Mooncake/getting_started/build.html&quot;&gt;Build from Source&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://kvcache-ai.github.io/Mooncake/deployment/mooncake-store-deployment-guide.html&quot;&gt;Deployment Guide&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Skills for AI Assistants&lt;/h3&gt; 
&lt;p&gt;Mooncake ships a set of &lt;strong&gt;built-in skills&lt;/strong&gt; under &lt;a href=&quot;https://raw.githubusercontent.com/kvcache-ai/Mooncake/main/.claude/skills&quot;&gt;&lt;code&gt;.claude/skills&lt;/code&gt;&lt;/a&gt; — reusable, task-focused playbooks that an AI coding assistant (such as Claude Code) invokes automatically when your request matches, or that you can run as a slash command.&lt;/p&gt; 
&lt;details&gt; 
 &lt;summary&gt;Details&lt;/summary&gt; 
 &lt;table&gt; 
  &lt;thead&gt; 
   &lt;tr&gt; 
    &lt;th&gt;Skill&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;/mooncake-troubleshoot&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Diagnose Mooncake deployment and runtime issues (services, RDMA, env vars, logs).&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;/mooncake-ci-local&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Run pre-PR local validation via &lt;code&gt;scripts/run_ci_test.sh&lt;/code&gt;.&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;/mooncake-api&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Work with the Mooncake Store, Transfer Engine, and EP/Backend Python APIs.&lt;/td&gt; 
   &lt;/tr&gt; 
  &lt;/tbody&gt; 
 &lt;/table&gt; 
 &lt;p&gt;Install them without cloning the repository via the &lt;a href=&quot;https://code.claude.com/docs/en/plugin-marketplaces&quot;&gt;Claude Code plugin marketplace&lt;/a&gt;:&lt;/p&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;/plugin marketplace add kvcache-ai/Mooncake --sparse .claude-plugin
/plugin install mooncake-troubleshoot@mooncake
/plugin install mooncake-ci-local@mooncake
/plugin install mooncake-api@mooncake
&lt;/code&gt;&lt;/pre&gt; 
 &lt;p&gt;The &lt;code&gt;--sparse .claude-plugin&lt;/code&gt; flag fetches only the marketplace catalog, and each plugin is published as a &lt;code&gt;git-subdir&lt;/code&gt; source, so installing one fetches only that single skill directory — never the whole repo. If you are already working inside a Mooncake checkout, the skills under &lt;code&gt;.claude/skills/&lt;/code&gt; load automatically with no setup.&lt;/p&gt; 
&lt;/details&gt; 
&lt;h2 id=&quot;trace&quot;&gt;📦 Open Source Traces and Tools &lt;/h2&gt; 
&lt;p&gt;We open-source anonymized request traces containing request arrival times, input and output token counts, and remapped block hashes. These traces are designed to support reproducible simulation and evaluation of caching behavior while preserving user privacy. The released traces and related details are available in &lt;a href=&quot;https://raw.githubusercontent.com/kvcache-ai/Mooncake/main/FAST25-release&quot;&gt;FAST25-release&lt;/a&gt;.&lt;/p&gt; 
&lt;p&gt;Together with the released traces, we also provide two KV cache analysis tools: a &lt;a href=&quot;https://kvcache.ai/tools/kv-cache-size-calculator/&quot;&gt;KV Cache Size Calculator&lt;/a&gt; for calculating cache capacity across popular LLM model families, and a &lt;a href=&quot;https://kvcache.ai/tools/kv-cache-hit-rate-simulator/&quot;&gt;KV Cache Hit Rate Simulator&lt;/a&gt; for analyzing KV cache hit rates and planning cache capacity under different workloads and models. These tools help users better understand KV cache storage costs and caching effectiveness when analyzing or reproducing serving workloads. The tools are open-sourced &lt;a href=&quot;https://github.com/kvcache-ai/kvcache-blog&quot;&gt;here&lt;/a&gt;.&lt;/p&gt; 
&lt;h2 id=&quot;citation&quot;&gt;📑 Citation&lt;/h2&gt; Please kindly cite our papers if you find the papers or the traces are useful: 
&lt;pre&gt;&lt;code class=&quot;language-bibtex&quot;&gt;@inproceedings{qin2025mooncake,
  author    = {Ruoyu Qin and Zheming Li and Weiran He and Jialei Cui and Feng Ren and Mingxing Zhang and Yongwei Wu and Weimin Zheng and Xinran Xu},
  title     = {Mooncake: Trading More Storage for Less Computation {\textemdash} A {KVCache-centric} Architecture for Serving {LLM} Chatbot},
  booktitle = {23rd USENIX Conference on File and Storage Technologies (FAST 25)},
  year      = {2025},
  isbn      = {978-1-939133-45-8},
  address   = {Santa Clara, CA},
  pages     = {155--170},
  url       = {https://www.usenix.org/conference/fast25/presentation/qin},
  publisher = {USENIX Association},
  month     = {feb},
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;details&gt; 
 &lt;summary&gt;More&lt;/summary&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-bibtex&quot;&gt;@misc{ren2026tentdeclarativeslicespraying,
  title     = {TENT: A Declarative Slice Spraying Engine for Performant and Resilient Data Movement in Disaggregated LLM Serving},
  author    = {Feng Ren and Ruoyu Qin and Teng Ma and Shangming Cai and Zheng Liu and Chao Lei and Dejiang Zhu and Ke Yang and Zheming Li and Jialei Cui and Weixiao Huang and Yikai Zhao and Yineng Zhang and Hao Wu and Xiang Gao and Yuhao Fu and Jinlei Jiang and Yongwei Wu and Mingxing Zhang},
  year      = {2026},
  eprint    = {2604.00368},
  archivePrefix = {arXiv},
  primaryClass  = {cs.DC},
  url       = {https://arxiv.org/abs/2604.00368},
}

@article{sun2026survivingpartialrankfailures,
  title     = {Surviving Partial Rank Failures in Wide Expert-Parallel MoE Inference},
  author    = {Xun Sun and Shaoyuan Chen and Pingchuan Ma and Yue Chen and Ziwei Yuan and Zhanhao Cao and Han Han and Shangming Cai and Teng Ma and Xuchun Shang and Xinpeng Zhao and Ke Yang and Junlin Wei and Lianzhi Lin and Yuji Liu and Feng Ren and Haoran Hu and Cheng Wan and Yingdi Shan and Yongwei Wu and Mingxing Zhang},
  year      = {2026},
  url       = {https://arxiv.org/abs/2605.10670},
}

@article{qin2025mooncake_tos,
  author    = {Qin Ruoyu and Li Zheming and He Weiran and Cui Jialei and Tang Heyi and Ren Feng and Ma Teng and Cai Shangming and Zhang Yineng and Zhang Mingxing and Wu Yongwei and Zheng Weimin and Xu Xinran},
  title     = {Mooncake: A KVCache-centric Disaggregated Architecture for LLM Serving},
  year      = {2025},
  publisher = {Association for Computing Machinery},
  address   = {New York, NY, USA},
  issn      = {1553-3077},
  url       = {https://doi.org/10.1145/3773772},
  doi       = {10.1145/3773772},
  journal   = {ACM Trans. Storage},
  month     = {nov},
  keywords  = {Machine learning system, LLM serving, KVCache},
}

@article{qin2024mooncake_arxiv,
  title  = {Mooncake: A KVCache-centric Disaggregated Architecture for LLM Serving},
  author = {Ruoyu Qin and Zheming Li and Weiran He and Mingxing Zhang and Yongwei Wu and Weimin Zheng and Xinran Xu},
  year   = {2024},
  url    = {https://arxiv.org/abs/2407.00079},
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;/details&gt;</description>
      
    </item>
    
    <item>
      <title>shadps4-emu/shadPS4</title>
      <link>https://github.com/shadps4-emu/shadPS4</link>
      <description>&lt;p&gt;PlayStation 4 emulator for Windows, Linux, macOS and FreeBSD written in C++&lt;/p&gt;&lt;hr&gt;&lt;h1 align=&quot;center&quot;&gt; &lt;br /&gt; &lt;a href=&quot;https://shadps4.net/&quot;&gt;&lt;img src=&quot;https://github.com/shadps4-emu/shadPS4/raw/main/.github/shadps4.png&quot; width=&quot;220&quot; /&gt;&lt;/a&gt; &lt;br /&gt; &lt;b&gt;shadPS4&lt;/b&gt; &lt;br /&gt; &lt;/h1&gt; 
&lt;h1 align=&quot;center&quot;&gt; &lt;a href=&quot;https://discord.gg/bFJxfftGW6&quot;&gt; &lt;img src=&quot;https://img.shields.io/discord/1080089157554155590?color=5865F2&amp;amp;label=shadPS4%20Discord&amp;amp;logo=Discord&amp;amp;logoColor=white&quot; width=&quot;275&quot; /&gt; &lt;/a&gt;&lt;a href=&quot;https://github.com/shadps4-emu/shadPS4/releases/latest&quot;&gt; &lt;img src=&quot;https://img.shields.io/github/downloads/shadps4-emu/shadPS4/total.svg?sanitize=true&quot; width=&quot;140&quot; /&gt; &lt;/a&gt;&lt;a href=&quot;https://shadps4.net/&quot;&gt; &lt;img src=&quot;https://img.shields.io/badge/shadPS4-website-8A2BE2&quot; width=&quot;150&quot; /&gt; &lt;/a&gt;&lt;a href=&quot;https://x.com/shadps4&quot;&gt; &lt;img src=&quot;https://img.shields.io/badge/-Join%20us-black?logo=X&amp;amp;logoColor=white&quot; width=&quot;100&quot; /&gt; &lt;/a&gt;&lt;a href=&quot;https://github.com/shadps4-emu/shadPS4/stargazers&quot;&gt; &lt;img src=&quot;https://img.shields.io/github/stars/shadps4-emu/shadPS4&quot; width=&quot;120&quot; /&gt; &lt;/a&gt;&lt;/h1&gt;
&lt;a href=&quot;https://github.com/shadps4-emu/shadPS4/stargazers&quot;&gt; 
 &lt;table&gt; 
  &lt;thead&gt; 
   &lt;tr&gt; 
    &lt;th style=&quot;text-align:center&quot;&gt;Bloodborne by From Software&lt;/th&gt; 
    &lt;th style=&quot;text-align:center&quot;&gt;Hatsune Miku Project DIVA Future Tone by SEGA&lt;/th&gt; 
   &lt;/tr&gt; 
  &lt;/thead&gt; 
  &lt;tbody&gt; 
   &lt;tr&gt; 
    &lt;td style=&quot;text-align:center&quot;&gt;&lt;img src=&quot;https://raw.githubusercontent.com/shadps4-emu/shadPS4/main/documents/Screenshots/1.png&quot; alt=&quot;Bloodborne screenshot&quot; /&gt;&lt;/td&gt; 
    &lt;td style=&quot;text-align:center&quot;&gt;&lt;img src=&quot;https://raw.githubusercontent.com/shadps4-emu/shadPS4/main/documents/Screenshots/2.png&quot; alt=&quot;Project DIVA screenshot&quot; /&gt;&lt;/td&gt; 
   &lt;/tr&gt; 
  &lt;/tbody&gt; 
 &lt;/table&gt; 
 &lt;table&gt; 
  &lt;thead&gt; 
   &lt;tr&gt; 
    &lt;th style=&quot;text-align:center&quot;&gt;Yakuza 0 by SEGA&lt;/th&gt; 
    &lt;th style=&quot;text-align:center&quot;&gt;DRIVECLUB™ by Evolution Studios&lt;/th&gt; 
   &lt;/tr&gt; 
  &lt;/thead&gt; 
  &lt;tbody&gt; 
   &lt;tr&gt; 
    &lt;td style=&quot;text-align:center&quot;&gt;&lt;img src=&quot;https://raw.githubusercontent.com/shadps4-emu/shadPS4/main/documents/Screenshots/3.png&quot; alt=&quot;Yakuza screenshot&quot; /&gt;&lt;/td&gt; 
    &lt;td style=&quot;text-align:center&quot;&gt;&lt;img src=&quot;https://raw.githubusercontent.com/shadps4-emu/shadPS4/main/documents/Screenshots/4.png&quot; alt=&quot;DRIVECLUB screenshot&quot; /&gt;&lt;/td&gt; 
   &lt;/tr&gt; 
  &lt;/tbody&gt; 
 &lt;/table&gt; &lt;h1&gt;General information&lt;/h1&gt; &lt;p&gt;&lt;strong&gt;shadPS4&lt;/strong&gt; is an early &lt;strong&gt;PlayStation 4&lt;/strong&gt; emulator for &lt;strong&gt;Windows&lt;/strong&gt;, &lt;strong&gt;Linux&lt;/strong&gt; and &lt;strong&gt;macOS&lt;/strong&gt; written in C++.&lt;/p&gt; &lt;/a&gt;
&lt;div class=&quot;markdown-alert markdown-alert-important&quot;&gt;
 &lt;a href=&quot;https://github.com/shadps4-emu/shadPS4/stargazers&quot;&gt;&lt;p class=&quot;markdown-alert-title&quot;&gt;
   &lt;svg class=&quot;octicon octicon-report mr-2&quot; viewbox=&quot;0 0 16 16&quot; version=&quot;1.1&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot;&gt;
    &lt;path d=&quot;M0 1.75C0 .784.784 0 1.75 0h12.5C15.216 0 16 .784 16 1.75v9.5A1.75 1.75 0 0 1 14.25 13H8.06l-2.573 2.573A1.458 1.458 0 0 1 3 14.543V13H1.75A1.75 1.75 0 0 1 0 11.25Zm1.75-.25a.25.25 0 0 0-.25.25v9.5c0 .138.112.25.25.25h2a.75.75 0 0 1 .75.75v2.19l2.72-2.72a.749.749 0 0 1 .53-.22h6.5a.25.25 0 0 0 .25-.25v-9.5a.25.25 0 0 0-.25-.25Zm7 2.25v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 9a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z&quot;&gt;&lt;/path&gt;
   &lt;/svg&gt;Important&lt;/p&gt;&lt;p&gt;This is the emulator core, which does not include a GUI. If you just want to use the emulator as an end user, download the &lt;a href=&quot;https://github.com/shadps4-emu/shadps4-qtlauncher/releases&quot;&gt;&lt;strong&gt;QtLauncher&lt;/strong&gt;&lt;/a&gt; instead.&lt;/p&gt;&lt;/a&gt; 
&lt;/div&gt; 
&lt;p&gt;If you encounter problems or have doubts, do not hesitate to look at the &lt;a href=&quot;https://github.com/shadps4-emu/shadPS4/wiki/I.-Quick-start-%5BUsers%5D&quot;&gt;&lt;strong&gt;Quickstart&lt;/strong&gt;&lt;/a&gt;.&lt;br /&gt; To verify that a game works, you can look at &lt;a href=&quot;https://github.com/shadps4-compatibility/shadps4-game-compatibility&quot;&gt;&lt;strong&gt;shadPS4 Game Compatibility&lt;/strong&gt;&lt;/a&gt;.&lt;br /&gt; To discuss shadPS4 development, suggest ideas or to ask for help, join our &lt;a href=&quot;https://discord.gg/bFJxfftGW6&quot;&gt;&lt;strong&gt;Discord server&lt;/strong&gt;&lt;/a&gt;.&lt;br /&gt; To get the latest news, go to our &lt;a href=&quot;https://x.com/shadps4&quot;&gt;&lt;strong&gt;X (Twitter)&lt;/strong&gt;&lt;/a&gt; or our &lt;a href=&quot;https://shadps4.net/&quot;&gt;&lt;strong&gt;website&lt;/strong&gt;&lt;/a&gt;.&lt;br /&gt; You can donate to the project via our &lt;a href=&quot;https://ko-fi.com/shadps4&quot;&gt;&lt;strong&gt;Kofi page&lt;/strong&gt;&lt;/a&gt;.&lt;/p&gt; 
&lt;h1&gt;Status&lt;/h1&gt; 
&lt;div class=&quot;markdown-alert markdown-alert-important&quot;&gt;
 &lt;p class=&quot;markdown-alert-title&quot;&gt;
  &lt;svg class=&quot;octicon octicon-report mr-2&quot; viewbox=&quot;0 0 16 16&quot; version=&quot;1.1&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot;&gt;
   &lt;path d=&quot;M0 1.75C0 .784.784 0 1.75 0h12.5C15.216 0 16 .784 16 1.75v9.5A1.75 1.75 0 0 1 14.25 13H8.06l-2.573 2.573A1.458 1.458 0 0 1 3 14.543V13H1.75A1.75 1.75 0 0 1 0 11.25Zm1.75-.25a.25.25 0 0 0-.25.25v9.5c0 .138.112.25.25.25h2a.75.75 0 0 1 .75.75v2.19l2.72-2.72a.749.749 0 0 1 .53-.22h6.5a.25.25 0 0 0 .25-.25v-9.5a.25.25 0 0 0-.25-.25Zm7 2.25v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 9a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z&quot;&gt;&lt;/path&gt;
  &lt;/svg&gt;Important&lt;/p&gt;
 &lt;p&gt;shadPS4 is early in development, don&#39;t expect a flawless experience.&lt;/p&gt; 
&lt;/div&gt; 
&lt;p&gt;Currently, the emulator can successfully run games like &lt;a href=&quot;https://www.youtube.com/watch?v=5sZgWyVflFM&quot;&gt;&lt;strong&gt;Bloodborne&lt;/strong&gt;&lt;/a&gt;, &lt;a href=&quot;https://www.youtube.com/watch?v=-3PA-Xwszts&quot;&gt;&lt;strong&gt;Dark Souls Remastered&lt;/strong&gt;&lt;/a&gt;, &lt;a href=&quot;https://www.youtube.com/watch?v=Al7yz_5nLag&quot;&gt;&lt;strong&gt;Red Dead Redemption&lt;/strong&gt;&lt;/a&gt;, and many other games.&lt;/p&gt; 
&lt;h1&gt;Why&lt;/h1&gt; 
&lt;p&gt;This project began for fun. Given our limited free time, it may take some time before shadPS4 can run more complex games, but we&#39;re committed to making small, regular updates.&lt;/p&gt; 
&lt;h1&gt;Building&lt;/h1&gt; 
&lt;h2&gt;Docker&lt;/h2&gt; 
&lt;p&gt;For building shadPS4 in a containerized environment using Docker and VSCode, check the instructions here:&lt;br /&gt; &lt;a href=&quot;https://github.com/shadps4-emu/shadPS4/raw/main/documents/building-docker.md&quot;&gt;&lt;strong&gt;Docker Build Instructions&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;h2&gt;Windows&lt;/h2&gt; 
&lt;p&gt;Check the build instructions for &lt;a href=&quot;https://github.com/shadps4-emu/shadPS4/raw/main/documents/building-windows.md&quot;&gt;&lt;strong&gt;Windows&lt;/strong&gt;&lt;/a&gt;.&lt;/p&gt; 
&lt;h2&gt;Linux&lt;/h2&gt; 
&lt;p&gt;Check the build instructions for &lt;a href=&quot;https://github.com/shadps4-emu/shadPS4/raw/main/documents/building-linux.md&quot;&gt;&lt;strong&gt;Linux&lt;/strong&gt;&lt;/a&gt;.&lt;/p&gt; 
&lt;h2&gt;macOS&lt;/h2&gt; 
&lt;p&gt;Check the build instructions for &lt;a href=&quot;https://github.com/shadps4-emu/shadPS4/raw/main/documents/building-macos.md&quot;&gt;&lt;strong&gt;macOS&lt;/strong&gt;&lt;/a&gt;.&lt;/p&gt; 
&lt;div class=&quot;markdown-alert markdown-alert-important&quot;&gt;
 &lt;p class=&quot;markdown-alert-title&quot;&gt;
  &lt;svg class=&quot;octicon octicon-report mr-2&quot; viewbox=&quot;0 0 16 16&quot; version=&quot;1.1&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot;&gt;
   &lt;path d=&quot;M0 1.75C0 .784.784 0 1.75 0h12.5C15.216 0 16 .784 16 1.75v9.5A1.75 1.75 0 0 1 14.25 13H8.06l-2.573 2.573A1.458 1.458 0 0 1 3 14.543V13H1.75A1.75 1.75 0 0 1 0 11.25Zm1.75-.25a.25.25 0 0 0-.25.25v9.5c0 .138.112.25.25.25h2a.75.75 0 0 1 .75.75v2.19l2.72-2.72a.749.749 0 0 1 .53-.22h6.5a.25.25 0 0 0 .25-.25v-9.5a.25.25 0 0 0-.25-.25Zm7 2.25v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 9a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z&quot;&gt;&lt;/path&gt;
  &lt;/svg&gt;Important&lt;/p&gt;
 &lt;p&gt;macOS users need at least macOS 26.0 to run shadPS4. Intel Macs are not supported.&lt;/p&gt; 
&lt;/div&gt; 
&lt;h1&gt;Usage examples&lt;/h1&gt; 
&lt;div class=&quot;markdown-alert markdown-alert-important&quot;&gt;
 &lt;p class=&quot;markdown-alert-title&quot;&gt;
  &lt;svg class=&quot;octicon octicon-report mr-2&quot; viewbox=&quot;0 0 16 16&quot; version=&quot;1.1&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot;&gt;
   &lt;path d=&quot;M0 1.75C0 .784.784 0 1.75 0h12.5C15.216 0 16 .784 16 1.75v9.5A1.75 1.75 0 0 1 14.25 13H8.06l-2.573 2.573A1.458 1.458 0 0 1 3 14.543V13H1.75A1.75 1.75 0 0 1 0 11.25Zm1.75-.25a.25.25 0 0 0-.25.25v9.5c0 .138.112.25.25.25h2a.75.75 0 0 1 .75.75v2.19l2.72-2.72a.749.749 0 0 1 .53-.22h6.5a.25.25 0 0 0 .25-.25v-9.5a.25.25 0 0 0-.25-.25Zm7 2.25v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 9a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z&quot;&gt;&lt;/path&gt;
  &lt;/svg&gt;Important&lt;/p&gt;
 &lt;p&gt;For a user-friendly GUI, download the &lt;a href=&quot;https://github.com/shadps4-emu/shadps4-qtlauncher/releases&quot;&gt;&lt;strong&gt;QtLauncher&lt;/strong&gt;&lt;/a&gt;.&lt;/p&gt; 
&lt;/div&gt; 
&lt;p&gt;To get the list of all available commands and also a more detailed description of what each command does, please refer to the &lt;code&gt;--help&lt;/code&gt; flag&#39;s output.&lt;/p&gt; 
&lt;p&gt;Below is a list of commonly used command patterns:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-sh&quot;&gt;shadPS4 CUSA00001 # Searches for a game folder called CUSA00001 in the list of game install folders, and boots it.
shadPS4 --fullscreen true --config-clean CUSA00001    # the game argument is always the last one,
shadPS4 -g CUSA00001 --fullscreen true --config-clean # ...unless manually specified otherwise.
shadPS4 /path/to/game.elf # Boots a PS4 ELF file directly. Useful if you want to boot an executable that is not named eboot.bin.
shadPS4 CUSA00001 -- -flag1 -flag2 # Passes &#39;-flag1&#39; and &#39;-flag2&#39; to the game executable in argv.
&lt;/code&gt;&lt;/pre&gt; 
&lt;h1&gt;Debugging and reporting issues&lt;/h1&gt; 
&lt;p&gt;For more information on how to test, debug and report issues with the emulator or games, read the &lt;a href=&quot;https://github.com/shadps4-emu/shadPS4/raw/main/documents/Debugging/Debugging.md&quot;&gt;&lt;strong&gt;Debugging documentation&lt;/strong&gt;&lt;/a&gt;.&lt;/p&gt; 
&lt;h1&gt;Keyboard and Mouse Mappings&lt;/h1&gt; 
&lt;div class=&quot;markdown-alert markdown-alert-note&quot;&gt;
 &lt;p class=&quot;markdown-alert-title&quot;&gt;
  &lt;svg class=&quot;octicon octicon-info mr-2&quot; viewbox=&quot;0 0 16 16&quot; version=&quot;1.1&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot;&gt;
   &lt;path d=&quot;M0 8a8 8 0 1 1 16 0A8 8 0 0 1 0 8Zm8-6.5a6.5 6.5 0 1 0 0 13 6.5 6.5 0 0 0 0-13ZM6.5 7.75A.75.75 0 0 1 7.25 7h1a.75.75 0 0 1 .75.75v2.75h.25a.75.75 0 0 1 0 1.5h-2a.75.75 0 0 1 0-1.5h.25v-2h-.25a.75.75 0 0 1-.75-.75ZM8 6a1 1 0 1 1 0-2 1 1 0 0 1 0 2Z&quot;&gt;&lt;/path&gt;
  &lt;/svg&gt;Note&lt;/p&gt;
 &lt;p&gt;Some keyboards may also require you to hold the Fn key to use the F* keys. Mac users should use the Command key instead of Control, and need to use Command+F11 for full screen to avoid conflicting with system key bindings.&lt;/p&gt; 
&lt;/div&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Button&lt;/th&gt; 
   &lt;th&gt;Function&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;F10&lt;/td&gt; 
   &lt;td&gt;FPS Counter&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Ctrl+F10&lt;/td&gt; 
   &lt;td&gt;Video Debug Info&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;F11&lt;/td&gt; 
   &lt;td&gt;Fullscreen&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;F12&lt;/td&gt; 
   &lt;td&gt;Trigger RenderDoc Capture (or game-only screenshot if RenderDoc is unavailable)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Alt+F12&lt;/td&gt; 
   &lt;td&gt;Capture screenshot including HUD/dialog overlays&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;div class=&quot;markdown-alert markdown-alert-note&quot;&gt;
 &lt;p class=&quot;markdown-alert-title&quot;&gt;
  &lt;svg class=&quot;octicon octicon-info mr-2&quot; viewbox=&quot;0 0 16 16&quot; version=&quot;1.1&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot;&gt;
   &lt;path d=&quot;M0 8a8 8 0 1 1 16 0A8 8 0 0 1 0 8Zm8-6.5a6.5 6.5 0 1 0 0 13 6.5 6.5 0 0 0 0-13ZM6.5 7.75A.75.75 0 0 1 7.25 7h1a.75.75 0 0 1 .75.75v2.75h.25a.75.75 0 0 1 0 1.5h-2a.75.75 0 0 1 0-1.5h.25v-2h-.25a.75.75 0 0 1-.75-.75ZM8 6a1 1 0 1 1 0-2 1 1 0 0 1 0 2Z&quot;&gt;&lt;/path&gt;
  &lt;/svg&gt;Note&lt;/p&gt;
 &lt;p&gt;Xbox and DualShock controllers work out of the box.&lt;/p&gt; 
&lt;/div&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Controller button&lt;/th&gt; 
   &lt;th&gt;Keyboard equivalent&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;LEFT AXIS UP&lt;/td&gt; 
   &lt;td&gt;W&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;LEFT AXIS DOWN&lt;/td&gt; 
   &lt;td&gt;S&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;LEFT AXIS LEFT&lt;/td&gt; 
   &lt;td&gt;A&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;LEFT AXIS RIGHT&lt;/td&gt; 
   &lt;td&gt;D&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;RIGHT AXIS UP&lt;/td&gt; 
   &lt;td&gt;I&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;RIGHT AXIS DOWN&lt;/td&gt; 
   &lt;td&gt;K&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;RIGHT AXIS LEFT&lt;/td&gt; 
   &lt;td&gt;J&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;RIGHT AXIS RIGHT&lt;/td&gt; 
   &lt;td&gt;L&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;TRIANGLE&lt;/td&gt; 
   &lt;td&gt;Numpad 8 or C&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;CIRCLE&lt;/td&gt; 
   &lt;td&gt;Numpad 6 or B&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;CROSS&lt;/td&gt; 
   &lt;td&gt;Numpad 2 or N&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;SQUARE&lt;/td&gt; 
   &lt;td&gt;Numpad 4 or V&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;PAD UP&lt;/td&gt; 
   &lt;td&gt;UP&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;PAD DOWN&lt;/td&gt; 
   &lt;td&gt;DOWN&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;PAD LEFT&lt;/td&gt; 
   &lt;td&gt;LEFT&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;PAD RIGHT&lt;/td&gt; 
   &lt;td&gt;RIGHT&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;OPTIONS&lt;/td&gt; 
   &lt;td&gt;RETURN&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;BACK BUTTON / TOUCH PAD&lt;/td&gt; 
   &lt;td&gt;SPACE&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;L1&lt;/td&gt; 
   &lt;td&gt;Q&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;R1&lt;/td&gt; 
   &lt;td&gt;U&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;L2&lt;/td&gt; 
   &lt;td&gt;E&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;R2&lt;/td&gt; 
   &lt;td&gt;O&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;L3&lt;/td&gt; 
   &lt;td&gt;X&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;R3&lt;/td&gt; 
   &lt;td&gt;M&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;p&gt;Keyboard and mouse inputs can be customized in the settings menu by clicking the Controller button, and further details and help on controls are also found there. Custom bindings are saved per-game. Inputs support up to three keys per binding, mouse buttons, mouse movement mapped to joystick input, and more.&lt;/p&gt; 
&lt;h1&gt;Firmware files&lt;/h1&gt; 
&lt;p&gt;shadPS4 can load some PlayStation 4 firmware files. The following firmware modules are supported and must be placed in shadPS4&#39;s &lt;code&gt;sys_modules&lt;/code&gt; folder.&lt;/p&gt; 
&lt;div align=&quot;center&quot;&gt; 
 &lt;table&gt; 
  &lt;thead&gt; 
   &lt;tr&gt; 
    &lt;th&gt;Modules&lt;/th&gt; 
    &lt;th&gt;Modules&lt;/th&gt; 
    &lt;th&gt;Modules&lt;/th&gt; 
    &lt;th&gt;Modules&lt;/th&gt; 
   &lt;/tr&gt; 
  &lt;/thead&gt; 
  &lt;tbody&gt; 
   &lt;tr&gt; 
    &lt;td&gt;libSceAudiodec.sprx&lt;/td&gt; 
    &lt;td&gt;libSceAudiodecCpu.sprx&lt;/td&gt; 
    &lt;td&gt;libSceAudiodecCpuDdp.sprx&lt;/td&gt; 
    &lt;td&gt;libSceAudiodecCpuDtsHdLbr.sprx&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;libSceAudiodecCpuHevag.sprx&lt;/td&gt; 
    &lt;td&gt;libSceAudiodecCpuM4aac.sprx&lt;/td&gt; 
    &lt;td&gt;libSceCesCs.sprx&lt;/td&gt; 
    &lt;td&gt;libSceFont.sprx&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;libSceFontFt.sprx&lt;/td&gt; 
    &lt;td&gt;libSceFreeTypeOl.sprx&lt;/td&gt; 
    &lt;td&gt;libSceFreeTypeOptOl.sprx&lt;/td&gt; 
    &lt;td&gt;libSceFreeTypeOt.sprx&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;libSceJpegDec.sprx&lt;/td&gt; 
    &lt;td&gt;libSceJpegEnc.sprx&lt;/td&gt; 
    &lt;td&gt;libSceJson.sprx&lt;/td&gt; 
    &lt;td&gt;libSceJson2.sprx&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;libSceLibcInternal.sprx&lt;/td&gt; 
    &lt;td&gt;libSceNgs2.sprx&lt;/td&gt; 
    &lt;td&gt;libScePngEnc.sprx&lt;/td&gt; 
    &lt;td&gt;libSceRtc.sprx&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;libSceRudp.sprx&lt;/td&gt; 
    &lt;td&gt;libSceSystemGesture.sprx&lt;/td&gt; 
    &lt;td&gt;libSceUlt.sprx&lt;/td&gt; 
    &lt;td&gt;libSceWkFontConfig.sprx&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;libSceXml.sprx&lt;/td&gt; 
    &lt;td&gt;libSceAt9Enc.sprx&lt;/td&gt; 
    &lt;td&gt;&lt;/td&gt; 
    &lt;td&gt;&lt;/td&gt; 
   &lt;/tr&gt; 
  &lt;/tbody&gt; 
 &lt;/table&gt; 
&lt;/div&gt; 
&lt;div class=&quot;markdown-alert markdown-alert-caution&quot;&gt;
 &lt;p class=&quot;markdown-alert-title&quot;&gt;
  &lt;svg class=&quot;octicon octicon-stop mr-2&quot; viewbox=&quot;0 0 16 16&quot; version=&quot;1.1&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot;&gt;
   &lt;path d=&quot;M4.47.22A.749.749 0 0 1 5 0h6c.199 0 .389.079.53.22l4.25 4.25c.141.14.22.331.22.53v6a.749.749 0 0 1-.22.53l-4.25 4.25A.749.749 0 0 1 11 16H5a.749.749 0 0 1-.53-.22L.22 11.53A.749.749 0 0 1 0 11V5c0-.199.079-.389.22-.53Zm.84 1.28L1.5 5.31v5.38l3.81 3.81h5.38l3.81-3.81V5.31L10.69 1.5ZM8 4a.75.75 0 0 1 .75.75v3.5a.75.75 0 0 1-1.5 0v-3.5A.75.75 0 0 1 8 4Zm0 8a1 1 0 1 1 0-2 1 1 0 0 1 0 2Z&quot;&gt;&lt;/path&gt;
  &lt;/svg&gt;Caution&lt;/p&gt;
 &lt;p&gt;The above modules are required to run the games properly and must be dumped from your legally owned PlayStation 4 console.&lt;/p&gt; 
&lt;/div&gt; 
&lt;h1&gt;Main team&lt;/h1&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/georgemoralis&quot;&gt;&lt;strong&gt;georgemoralis&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/psucien&quot;&gt;&lt;strong&gt;psucien&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/viniciuslrangel&quot;&gt;&lt;strong&gt;viniciuslrangel&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/roamic&quot;&gt;&lt;strong&gt;roamic&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/squidbus&quot;&gt;&lt;strong&gt;squidbus&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/baggins183&quot;&gt;&lt;strong&gt;frodo&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/StevenMiller123&quot;&gt;&lt;strong&gt;Stephen Miller&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/kalaposfos13&quot;&gt;&lt;strong&gt;kalaposfos13&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;Logo is done by &lt;a href=&quot;https://github.com/Xphalnos&quot;&gt;&lt;strong&gt;Xphalnos&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;a href=&quot;https://github.com/shadps4-emu/shadPS4/graphs/contributors&quot;&gt; &lt;img src=&quot;https://contrib.rocks/image?repo=shadps4-emu/shadPS4&amp;amp;max=24&quot; /&gt; &lt;/a&gt; 
&lt;h1&gt;Contributing&lt;/h1&gt; 
&lt;p&gt;If you want to contribute, please read the &lt;a href=&quot;https://github.com/shadps4-emu/shadPS4/raw/main/CONTRIBUTING.md&quot;&gt;&lt;strong&gt;CONTRIBUTING.md&lt;/strong&gt;&lt;/a&gt; file.&lt;br /&gt; Open a PR and we&#39;ll check it 😃&lt;/p&gt; 
&lt;h1&gt;Special Thanks&lt;/h1&gt; 
&lt;p&gt;A few noteworthy teams/projects who&#39;ve helped us along the way are:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt; &lt;p&gt;&lt;a href=&quot;https://github.com/wheremyfoodat/Panda3DS&quot;&gt;&lt;strong&gt;Panda3DS&lt;/strong&gt;&lt;/a&gt;: A multiplatform 3DS emulator from our co-author wheremyfoodat. They have been incredibly helpful in understanding and solving problems that came up from natively executing the x64 code of PS4 binaries&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;a href=&quot;https://github.com/red-prig/fpPS4&quot;&gt;&lt;strong&gt;fpPS4&lt;/strong&gt;&lt;/a&gt;: The fpPS4 team has assisted massively with understanding some of the more complex parts of the PS4 operating system and libraries, by helping with reverse engineering work and research.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;yuzu&lt;/strong&gt;: Our shader compiler has been designed with yuzu&#39;s Hades compiler as a blueprint. This allowed us to focus on the challenges of emulating a modern AMD GPU while having a high-quality optimizing shader compiler implementation as a base.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;a href=&quot;https://github.com/OFFTKP/felix86&quot;&gt;&lt;strong&gt;felix86&lt;/strong&gt;&lt;/a&gt;: A new x86-64 → RISC-V Linux userspace emulator&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;a href=&quot;https://emudev.org/&quot;&gt;&lt;strong&gt;emudev.org&lt;/strong&gt;&lt;/a&gt;: A network of people interested in the documentation, emulation, simulation and re-implementation of hardware near extinction . Belongs to my friend skmp and me (shadow) also a member of it&lt;/p&gt; &lt;/li&gt; 
&lt;/ul&gt; 
&lt;h1&gt;License&lt;/h1&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/shadps4-emu/shadPS4/raw/main/LICENSE&quot;&gt;&lt;strong&gt;GPL-2.0 license&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt;</description>
      
    </item>
    
    <item>
      <title>FreeCAD/FreeCAD</title>
      <link>https://github.com/FreeCAD/FreeCAD</link>
      <description>&lt;p&gt;Official source code of FreeCAD, a free and opensource multiplatform 3D parametric modeler.&lt;/p&gt;&lt;hr&gt;&lt;p&gt;&lt;a href=&quot;https://freecad.org&quot;&gt;&lt;img src=&quot;https://raw.githubusercontent.com/FreeCAD/FreeCAD/main/src/Gui/Icons/freecad.svg?sanitize=true&quot; height=&quot;100px&quot; width=&quot;100px&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;h3&gt;Your own 3D Parametric Modeler&lt;/h3&gt; 
&lt;p&gt;&lt;a href=&quot;https://www.freecad.org&quot;&gt;Website&lt;/a&gt; • &lt;a href=&quot;https://wiki.freecad.org&quot;&gt;Documentation&lt;/a&gt; • &lt;a href=&quot;https://forum.freecad.org/&quot;&gt;Forum&lt;/a&gt; • &lt;a href=&quot;https://github.com/FreeCAD/FreeCAD/issues&quot;&gt;Bug tracker&lt;/a&gt; • &lt;a href=&quot;https://github.com/FreeCAD/FreeCAD&quot;&gt;Git repository&lt;/a&gt; • &lt;a href=&quot;https://blog.freecad.org&quot;&gt;Blog&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://github.com/freecad/freecad/releases/latest&quot;&gt;&lt;img src=&quot;https://img.shields.io/github/release/freecad/freecad.svg?sanitize=true&quot; alt=&quot;Release&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://crowdin.com/project/freecad&quot;&gt;&lt;img src=&quot;https://d322cqt584bo4o.cloudfront.net/freecad/localized.svg?sanitize=true&quot; alt=&quot;Crowdin&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;img src=&quot;https://raw.githubusercontent.com/FreeCAD/FreeCAD/main/.github/images/partdesign.png&quot; width=&quot;800&quot; /&gt; 
&lt;h2&gt;Overview&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;Freedom to build what you want&lt;/strong&gt; FreeCAD is an open-source parametric 3D modeler made primarily to design real-life objects of any size. Parametric modeling allows you to easily modify your design by going back into your model history to change its parameters.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;Create 3D from 2D and back&lt;/strong&gt; FreeCAD lets you sketch geometry-constrained 2D shapes and use them as a base to build other objects. It contains many components to adjust dimensions or extract design details from 3D models to create high quality production-ready drawings.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;Designed for your needs&lt;/strong&gt; FreeCAD is designed to fit a wide range of uses including product design, mechanical engineering and architecture, whether you are a hobbyist, programmer, experienced CAD user, student or teacher.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;Cross platform&lt;/strong&gt; FreeCAD runs on Windows, macOS and Linux operating systems.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;Underlying technology&lt;/strong&gt;&lt;/p&gt; 
  &lt;ul&gt; 
   &lt;li&gt;&lt;strong&gt;OpenCASCADE&lt;/strong&gt; A powerful geometry kernel, the most important component of FreeCAD&lt;/li&gt; 
   &lt;li&gt;&lt;strong&gt;Coin3D library&lt;/strong&gt; Open Inventor-compliant 3D scene representation model&lt;/li&gt; 
   &lt;li&gt;&lt;strong&gt;Python&lt;/strong&gt; FreeCAD offers a broad Python API&lt;/li&gt; 
   &lt;li&gt;&lt;strong&gt;Qt&lt;/strong&gt; Graphical user interface built with Qt&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Installing&lt;/h2&gt; 
&lt;p&gt;Precompiled packages for stable releases are available for Windows, macOS and Linux on the &lt;a href=&quot;https://github.com/FreeCAD/FreeCAD/releases/latest&quot;&gt;latest releases page&lt;/a&gt;.&lt;/p&gt; 
&lt;p&gt;On most Linux distributions, FreeCAD is also directly installable from the software center application.&lt;/p&gt; 
&lt;p&gt;For weekly development releases visit the &lt;a href=&quot;https://github.com/FreeCAD/FreeCAD/releases/&quot;&gt;releases page&lt;/a&gt;.&lt;/p&gt; 
&lt;p&gt;Other options are described on the &lt;a href=&quot;https://wiki.freecad.org/Download&quot;&gt;wiki Download page&lt;/a&gt;.&lt;/p&gt; 
&lt;h2&gt;Compiling&lt;/h2&gt; 
&lt;p&gt;See the &lt;a href=&quot;https://freecad.github.io/DevelopersHandbook/gettingstarted/&quot;&gt;Developers Handbook – Getting Started&lt;/a&gt; for build instructions.&lt;/p&gt; 
&lt;h2&gt;Reporting Issues&lt;/h2&gt; 
&lt;p&gt;To report an issue please:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Consider posting to the &lt;a href=&quot;https://forum.freecad.org&quot;&gt;Forum&lt;/a&gt;, &lt;a href=&quot;https://discord.com/invite/w2cTKGzccC&quot;&gt;Discord&lt;/a&gt; channel, or &lt;a href=&quot;https://www.reddit.com/r/FreeCAD&quot;&gt;Reddit&lt;/a&gt; to verify the issue;&lt;/li&gt; 
 &lt;li&gt;Search the existing &lt;a href=&quot;https://github.com/FreeCAD/FreeCAD/issues&quot;&gt;issues&lt;/a&gt; for potential duplicates;&lt;/li&gt; 
 &lt;li&gt;Use the most updated stable or &lt;a href=&quot;https://github.com/FreeCAD/FreeCAD/releases/&quot;&gt;development versions&lt;/a&gt; of FreeCAD;&lt;/li&gt; 
 &lt;li&gt;Post version info from &lt;code&gt;Help &amp;gt; About FreeCAD &amp;gt; Copy to clipboard&lt;/code&gt;;&lt;/li&gt; 
 &lt;li&gt;Restart FreeCAD in safe mode &lt;code&gt;Help &amp;gt; Restart in safe mode&lt;/code&gt; and try to reproduce the issue again. If the issue is resolved it can be fixed by deleting the FreeCAD config files.&lt;/li&gt; 
 &lt;li&gt;Start recording a macro &lt;code&gt;Macro &amp;gt; Macro recording...&lt;/code&gt; and repeat all steps. Stop recording after the issue occurs and upload the saved macro or copy the macro code in the issue;&lt;/li&gt; 
 &lt;li&gt;Post a Step-By-Step explanation on how to recreate the issue;&lt;/li&gt; 
 &lt;li&gt;Upload an example file (FCStd as ZIP file) to demonstrate the problem;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;For more details see:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/FreeCAD/FreeCAD/issues&quot;&gt;Bug Tracker&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/FreeCAD/FreeCAD/issues/new/choose&quot;&gt;Reporting Issues and Requesting Features&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/FreeCAD/FreeCAD/raw/main/CONTRIBUTING.md&quot;&gt;Contributing&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://forum.freecad.org/viewforum.php?f=3&quot;&gt;Help Forum&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;div class=&quot;markdown-alert markdown-alert-note&quot;&gt;
 &lt;p class=&quot;markdown-alert-title&quot;&gt;
  &lt;svg class=&quot;octicon octicon-info mr-2&quot; viewbox=&quot;0 0 16 16&quot; version=&quot;1.1&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot;&gt;
   &lt;path d=&quot;M0 8a8 8 0 1 1 16 0A8 8 0 0 1 0 8Zm8-6.5a6.5 6.5 0 1 0 0 13 6.5 6.5 0 0 0 0-13ZM6.5 7.75A.75.75 0 0 1 7.25 7h1a.75.75 0 0 1 .75.75v2.75h.25a.75.75 0 0 1 0 1.5h-2a.75.75 0 0 1 0-1.5h.25v-2h-.25a.75.75 0 0 1-.75-.75ZM8 6a1 1 0 1 1 0-2 1 1 0 0 1 0 2Z&quot;&gt;&lt;/path&gt;
  &lt;/svg&gt;Note&lt;/p&gt;
 &lt;p&gt;The &lt;a href=&quot;https://fpa.freecad.org&quot;&gt;FPA&lt;/a&gt; offers developers the opportunity to apply for a grant to work on projects of their choosing. Check &lt;a href=&quot;https://blog.freecad.org/jobs/&quot;&gt;jobs and funding&lt;/a&gt; to know more.&lt;/p&gt; 
&lt;/div&gt; 
&lt;h2&gt;Usage &amp;amp; Getting Help&lt;/h2&gt; 
&lt;p&gt;The FreeCAD wiki contains documentation on general FreeCAD usage, Python scripting, and development. View these pages for more information:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://wiki.freecad.org/Getting_started&quot;&gt;Getting started&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://wiki.freecad.org/Feature_list&quot;&gt;Features list&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://wiki.freecad.org/FAQ/en&quot;&gt;Frequent questions&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://wiki.freecad.org/Workbenches&quot;&gt;Workbenches&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://wiki.freecad.org/Power_users_hub&quot;&gt;Scripting&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://freecad.github.io/DevelopersHandbook/&quot;&gt;Developers Handbook&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;The &lt;a href=&quot;https://forum.freecad.org&quot;&gt;FreeCAD forum&lt;/a&gt; is a great place to find help and solve specific problems when learning to use FreeCAD.&lt;/p&gt; 
&lt;hr /&gt; 
&lt;p&gt;This project receives generous infrastructure support from &lt;a href=&quot;https://www.digitalocean.com/&quot;&gt; &lt;img src=&quot;https://opensource.nyc3.cdn.digitaloceanspaces.com/attribution/assets/SVG/DO_Logo_horizontal_blue.svg?sanitize=true&quot; width=&quot;91px&quot; /&gt; &lt;/a&gt; and &lt;a href=&quot;https://www.kipro-pcb.com/&quot;&gt;KiCad Services Corp.&lt;/a&gt; &lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>ggml-org/whisper.cpp</title>
      <link>https://github.com/ggml-org/whisper.cpp</link>
      <description>&lt;p&gt;Port of OpenAI&#39;s Whisper model in C/C++&lt;/p&gt;&lt;hr&gt;&lt;h1&gt;whisper.cpp&lt;/h1&gt; 
&lt;p&gt;&lt;img src=&quot;https://user-images.githubusercontent.com/1991296/235238348-05d0f6a4-da44-4900-a1de-d0707e75b763.jpeg&quot; alt=&quot;whisper.cpp&quot; /&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://github.com/ggml-org/whisper.cpp/actions&quot;&gt;&lt;img src=&quot;https://github.com/ggml-org/whisper.cpp/workflows/CI/badge.svg?sanitize=true&quot; alt=&quot;Actions Status&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://opensource.org/licenses/MIT&quot;&gt;&lt;img src=&quot;https://img.shields.io/badge/license-MIT-blue.svg?sanitize=true&quot; alt=&quot;License: MIT&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://conan.io/center/whisper-cpp&quot;&gt;&lt;img src=&quot;https://shields.io/conan/v/whisper-cpp&quot; alt=&quot;Conan Center&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://www.npmjs.com/package/whisper.cpp/&quot;&gt;&lt;img src=&quot;https://img.shields.io/npm/v/whisper.cpp.svg?sanitize=true&quot; alt=&quot;npm&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;Stable: &lt;a href=&quot;https://github.com/ggml-org/whisper.cpp/releases/tag/v1.9.2&quot;&gt;v1.9.2&lt;/a&gt; / &lt;a href=&quot;https://github.com/orgs/ggml-org/projects/4/&quot;&gt;Roadmap&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;High-performance inference of &lt;a href=&quot;https://github.com/openai/whisper&quot;&gt;OpenAI&#39;s Whisper&lt;/a&gt; automatic speech recognition (ASR) model:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Plain C/C++ implementation without dependencies&lt;/li&gt; 
 &lt;li&gt;Apple Silicon first-class citizen - optimized via ARM NEON, Accelerate framework, Metal and &lt;a href=&quot;https://raw.githubusercontent.com/ggml-org/whisper.cpp/master/#core-ml-support&quot;&gt;Core ML&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;AVX intrinsics support for x86 architectures&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/ggml-org/whisper.cpp/master/#power-vsx-intrinsics&quot;&gt;VSX intrinsics support for POWER architectures&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;Mixed F16 / F32 precision&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/ggml-org/whisper.cpp/master/#quantization&quot;&gt;Integer quantization support&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;Zero memory allocations at runtime&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/ggml-org/whisper.cpp/master/#vulkan-gpu-support&quot;&gt;Vulkan support&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;Support for CPU-only inference&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/ggml-org/whisper.cpp/master/#nvidia-gpu-support&quot;&gt;Efficient GPU support for NVIDIA&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/ggml-org/whisper.cpp/master/#amd-rocm-gpu-support&quot;&gt;AMD ROCm GPU support&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/ggml-org/whisper.cpp/master/#openvino-support&quot;&gt;OpenVINO Support&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/ggml-org/whisper.cpp/master/#ascend-npu-support&quot;&gt;Ascend NPU Support&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/ggml-org/whisper.cpp/master/#moore-threads-gpu-support&quot;&gt;Moore Threads GPU Support&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/ggml-org/whisper.cpp/raw/master/include/whisper.h&quot;&gt;C-style API&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/ggml-org/whisper.cpp/master/#voice-activity-detection-vad&quot;&gt;Voice Activity Detection (VAD)&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;Supported platforms:&lt;/p&gt; 
&lt;ul class=&quot;task-list&quot;&gt; 
 &lt;li class=&quot;task-list-item&quot;&gt;&lt;input type=&quot;checkbox&quot; id=&quot;cbx_0&quot; checked=&quot;true&quot; disabled=&quot;true&quot; /&gt;&lt;label for=&quot;cbx_0&quot;&gt; Mac OS (Intel and Arm)&lt;/label&gt;&lt;/li&gt; 
 &lt;li class=&quot;task-list-item&quot;&gt;&lt;input type=&quot;checkbox&quot; id=&quot;cbx_1&quot; checked=&quot;true&quot; disabled=&quot;true&quot; /&gt;&lt;label for=&quot;cbx_1&quot;&gt; &lt;a href=&quot;https://raw.githubusercontent.com/ggml-org/whisper.cpp/master/examples/whisper.objc&quot;&gt;iOS&lt;/a&gt;&lt;/label&gt;&lt;/li&gt; 
 &lt;li class=&quot;task-list-item&quot;&gt;&lt;input type=&quot;checkbox&quot; id=&quot;cbx_2&quot; checked=&quot;true&quot; disabled=&quot;true&quot; /&gt;&lt;label for=&quot;cbx_2&quot;&gt; &lt;a href=&quot;https://raw.githubusercontent.com/ggml-org/whisper.cpp/master/examples/whisper.android&quot;&gt;Android&lt;/a&gt;&lt;/label&gt;&lt;/li&gt; 
 &lt;li class=&quot;task-list-item&quot;&gt;&lt;input type=&quot;checkbox&quot; id=&quot;cbx_3&quot; checked=&quot;true&quot; disabled=&quot;true&quot; /&gt;&lt;label for=&quot;cbx_3&quot;&gt; &lt;a href=&quot;https://raw.githubusercontent.com/ggml-org/whisper.cpp/master/bindings/java/README.md&quot;&gt;Java&lt;/a&gt;&lt;/label&gt;&lt;/li&gt; 
 &lt;li class=&quot;task-list-item&quot;&gt;&lt;input type=&quot;checkbox&quot; id=&quot;cbx_4&quot; checked=&quot;true&quot; disabled=&quot;true&quot; /&gt;&lt;label for=&quot;cbx_4&quot;&gt; Linux / &lt;a href=&quot;https://github.com/ggml-org/whisper.cpp/issues/56#issuecomment-1350920264&quot;&gt;FreeBSD&lt;/a&gt;&lt;/label&gt;&lt;/li&gt; 
 &lt;li class=&quot;task-list-item&quot;&gt;&lt;input type=&quot;checkbox&quot; id=&quot;cbx_5&quot; checked=&quot;true&quot; disabled=&quot;true&quot; /&gt;&lt;label for=&quot;cbx_5&quot;&gt; &lt;a href=&quot;https://raw.githubusercontent.com/ggml-org/whisper.cpp/master/examples/whisper.wasm&quot;&gt;WebAssembly&lt;/a&gt;&lt;/label&gt;&lt;/li&gt; 
 &lt;li class=&quot;task-list-item&quot;&gt;&lt;input type=&quot;checkbox&quot; id=&quot;cbx_6&quot; checked=&quot;true&quot; disabled=&quot;true&quot; /&gt;&lt;label for=&quot;cbx_6&quot;&gt; Windows (&lt;a href=&quot;https://github.com/ggml-org/whisper.cpp/raw/master/.github/workflows/build.yml#L117-L144&quot;&gt;MSVC&lt;/a&gt; and &lt;a href=&quot;https://github.com/ggml-org/whisper.cpp/issues/168&quot;&gt;MinGW&lt;/a&gt;)&lt;/label&gt;&lt;/li&gt; 
 &lt;li class=&quot;task-list-item&quot;&gt;&lt;input type=&quot;checkbox&quot; id=&quot;cbx_7&quot; checked=&quot;true&quot; disabled=&quot;true&quot; /&gt;&lt;label for=&quot;cbx_7&quot;&gt; &lt;a href=&quot;https://github.com/ggml-org/whisper.cpp/discussions/166&quot;&gt;Raspberry Pi&lt;/a&gt;&lt;/label&gt;&lt;/li&gt; 
 &lt;li class=&quot;task-list-item&quot;&gt;&lt;input type=&quot;checkbox&quot; id=&quot;cbx_8&quot; checked=&quot;true&quot; disabled=&quot;true&quot; /&gt;&lt;label for=&quot;cbx_8&quot;&gt; &lt;a href=&quot;https://github.com/ggml-org/whisper.cpp/pkgs/container/whisper.cpp&quot;&gt;Docker&lt;/a&gt;&lt;/label&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;The entire high-level implementation of the model is contained in &lt;a href=&quot;https://raw.githubusercontent.com/ggml-org/whisper.cpp/master/include/whisper.h&quot;&gt;whisper.h&lt;/a&gt; and &lt;a href=&quot;https://raw.githubusercontent.com/ggml-org/whisper.cpp/master/src/whisper.cpp&quot;&gt;whisper.cpp&lt;/a&gt;. The rest of the code is part of the &lt;a href=&quot;https://github.com/ggml-org/ggml&quot;&gt;&lt;code&gt;ggml&lt;/code&gt;&lt;/a&gt; machine learning library.&lt;/p&gt; 
&lt;p&gt;Having such a lightweight implementation of the model allows to easily integrate it in different platforms and applications. As an example, here is a video of running the model on an iPhone 13 device - fully offline, on-device: &lt;a href=&quot;https://raw.githubusercontent.com/ggml-org/whisper.cpp/master/examples/whisper.objc&quot;&gt;whisper.objc&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://user-images.githubusercontent.com/1991296/197385372-962a6dea-bca1-4d50-bf96-1d8c27b98c81.mp4&quot;&gt;https://user-images.githubusercontent.com/1991296/197385372-962a6dea-bca1-4d50-bf96-1d8c27b98c81.mp4&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;You can also easily make your own offline voice assistant application: &lt;a href=&quot;https://raw.githubusercontent.com/ggml-org/whisper.cpp/master/examples/command&quot;&gt;command&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://user-images.githubusercontent.com/1991296/204038393-2f846eae-c255-4099-a76d-5735c25c49da.mp4&quot;&gt;https://user-images.githubusercontent.com/1991296/204038393-2f846eae-c255-4099-a76d-5735c25c49da.mp4&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;On Apple Silicon, the inference runs fully on the GPU via Metal:&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://github.com/ggml-org/whisper.cpp/assets/1991296/c82e8f86-60dc-49f2-b048-d2fdbd6b5225&quot;&gt;https://github.com/ggml-org/whisper.cpp/assets/1991296/c82e8f86-60dc-49f2-b048-d2fdbd6b5225&lt;/a&gt;&lt;/p&gt; 
&lt;h2&gt;Quick start&lt;/h2&gt; 
&lt;p&gt;First clone the repository:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;git clone https://github.com/ggml-org/whisper.cpp.git
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Navigate into the directory:&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;cd whisper.cpp
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Then, download one of the Whisper &lt;a href=&quot;https://raw.githubusercontent.com/ggml-org/whisper.cpp/master/models/README.md&quot;&gt;models&lt;/a&gt; converted in &lt;a href=&quot;https://raw.githubusercontent.com/ggml-org/whisper.cpp/master/#ggml-format&quot;&gt;&lt;code&gt;ggml&lt;/code&gt; format&lt;/a&gt;. For example:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;sh ./models/download-ggml-model.sh base.en
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Now build the &lt;a href=&quot;https://raw.githubusercontent.com/ggml-org/whisper.cpp/master/examples/cli&quot;&gt;whisper-cli&lt;/a&gt; example and transcribe an audio file like this:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# build the project
cmake -B build
cmake --build build -j --config Release

# transcribe an audio file
./build/bin/whisper-cli -f samples/jfk.wav
&lt;/code&gt;&lt;/pre&gt; 
&lt;hr /&gt; 
&lt;p&gt;For a quick demo, simply run &lt;code&gt;make base.en&lt;/code&gt;.&lt;/p&gt; 
&lt;p&gt;The command downloads the &lt;code&gt;base.en&lt;/code&gt; model converted to custom &lt;code&gt;ggml&lt;/code&gt; format and runs the inference on all &lt;code&gt;.wav&lt;/code&gt; samples in the folder &lt;code&gt;samples&lt;/code&gt;.&lt;/p&gt; 
&lt;p&gt;For detailed usage instructions, run: &lt;code&gt;./build/bin/whisper-cli -h&lt;/code&gt;&lt;/p&gt; 
&lt;p&gt;Note that the &lt;a href=&quot;https://raw.githubusercontent.com/ggml-org/whisper.cpp/master/examples/cli&quot;&gt;whisper-cli&lt;/a&gt; example currently runs only with 16-bit WAV files, so make sure to convert your input before running the tool. For example, you can use &lt;code&gt;ffmpeg&lt;/code&gt; like this:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;ffmpeg -i input.mp3 -ar 16000 -ac 1 -c:a pcm_s16le output.wav
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2&gt;More audio samples&lt;/h2&gt; 
&lt;p&gt;If you want some extra audio samples to play with, simply run:&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;make -j samples
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;This will download a few more audio files from Wikipedia and convert them to 16-bit WAV format via &lt;code&gt;ffmpeg&lt;/code&gt;.&lt;/p&gt; 
&lt;p&gt;You can download and run the other models as follows:&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;make -j tiny.en
make -j tiny
make -j base.en
make -j base
make -j small.en
make -j small
make -j medium.en
make -j medium
make -j large-v1
make -j large-v2
make -j large-v3
make -j large-v3-turbo
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2&gt;Memory usage&lt;/h2&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Model&lt;/th&gt; 
   &lt;th&gt;Disk&lt;/th&gt; 
   &lt;th&gt;Mem&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;tiny&lt;/td&gt; 
   &lt;td&gt;75 MiB&lt;/td&gt; 
   &lt;td&gt;~273 MB&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;base&lt;/td&gt; 
   &lt;td&gt;142 MiB&lt;/td&gt; 
   &lt;td&gt;~388 MB&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;small&lt;/td&gt; 
   &lt;td&gt;466 MiB&lt;/td&gt; 
   &lt;td&gt;~852 MB&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;medium&lt;/td&gt; 
   &lt;td&gt;1.5 GiB&lt;/td&gt; 
   &lt;td&gt;~2.1 GB&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;large&lt;/td&gt; 
   &lt;td&gt;2.9 GiB&lt;/td&gt; 
   &lt;td&gt;~3.9 GB&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;h2&gt;POWER VSX Intrinsics&lt;/h2&gt; 
&lt;p&gt;&lt;code&gt;whisper.cpp&lt;/code&gt; supports POWER architectures and includes code which significantly speeds operation on Linux running on POWER9/10, making it capable of faster-than-realtime transcription on underclocked Raptor Talos II. Ensure you have a BLAS package installed, and replace the standard cmake setup with:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# build with GGML_BLAS defined
cmake -B build -DGGML_BLAS=1
cmake --build build -j --config Release
./build/bin/whisper-cli [ .. etc .. ]
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2&gt;Quantization&lt;/h2&gt; 
&lt;p&gt;&lt;code&gt;whisper.cpp&lt;/code&gt; supports integer quantization of the Whisper &lt;code&gt;ggml&lt;/code&gt; models. Quantized models require less memory and disk space and depending on the hardware can be processed more efficiently.&lt;/p&gt; 
&lt;p&gt;Here are the steps for creating and using a quantized model:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# quantize a model with Q5_0 method
cmake -B build
cmake --build build -j --config Release
./build/bin/quantize models/ggml-base.en.bin models/ggml-base.en-q5_0.bin q5_0

# run the examples as usual, specifying the quantized model file
./build/bin/whisper-cli -m models/ggml-base.en-q5_0.bin ./samples/gb0.wav
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2&gt;Core ML support&lt;/h2&gt; 
&lt;p&gt;On Apple Silicon devices, the Encoder inference can be executed on the Apple Neural Engine (ANE) via Core ML. This can result in significant speed-up - more than x3 faster compared with CPU-only execution. Here are the instructions for generating a Core ML model and using it with &lt;code&gt;whisper.cpp&lt;/code&gt;:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt; &lt;p&gt;Install Python dependencies needed for the creation of the Core ML model:&lt;/p&gt; &lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;pip install ane_transformers
pip install openai-whisper
pip install coremltools
&lt;/code&gt;&lt;/pre&gt; 
  &lt;ul&gt; 
   &lt;li&gt;To ensure &lt;code&gt;coremltools&lt;/code&gt; operates correctly, please confirm that &lt;a href=&quot;https://developer.apple.com/xcode/&quot;&gt;Xcode&lt;/a&gt; is installed and execute &lt;code&gt;xcode-select --install&lt;/code&gt; to install the command-line tools.&lt;/li&gt; 
   &lt;li&gt;Python 3.11 is recommended.&lt;/li&gt; 
   &lt;li&gt;MacOS Sonoma (version 14) or newer is recommended, as older versions of MacOS might experience issues with transcription hallucination.&lt;/li&gt; 
   &lt;li&gt;[OPTIONAL] It is recommended to utilize a Python version management system, such as &lt;a href=&quot;https://docs.conda.io/en/latest/miniconda.html&quot;&gt;Miniconda&lt;/a&gt; for this step: 
    &lt;ul&gt; 
     &lt;li&gt;To create an environment, use: &lt;code&gt;conda create -n py311-whisper python=3.11 -y&lt;/code&gt;&lt;/li&gt; 
     &lt;li&gt;To activate the environment, use: &lt;code&gt;conda activate py311-whisper&lt;/code&gt;&lt;/li&gt; 
    &lt;/ul&gt; &lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;Generate a Core ML model. For example, to generate a &lt;code&gt;base.en&lt;/code&gt; model, use:&lt;/p&gt; &lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;./models/generate-coreml-model.sh base.en
&lt;/code&gt;&lt;/pre&gt; &lt;p&gt;This will generate the folder &lt;code&gt;models/ggml-base.en-encoder.mlmodelc&lt;/code&gt;&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;Build &lt;code&gt;whisper.cpp&lt;/code&gt; with Core ML support:&lt;/p&gt; &lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# using CMake
cmake -B build -DWHISPER_COREML=1
cmake --build build -j --config Release
&lt;/code&gt;&lt;/pre&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;Run the examples as usual. For example:&lt;/p&gt; &lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;$ ./build/bin/whisper-cli -m models/ggml-base.en.bin -f samples/jfk.wav

...

whisper_init_state: loading Core ML model from &#39;models/ggml-base.en-encoder.mlmodelc&#39;
whisper_init_state: first run on a device may take a while ...
whisper_init_state: Core ML model loaded

system_info: n_threads = 4 / 10 | AVX = 0 | AVX2 = 0 | AVX512 = 0 | FMA = 0 | NEON = 1 | ARM_FMA = 1 | F16C = 0 | FP16_VA = 1 | WASM_SIMD = 0 | BLAS = 1 | SSE3 = 0 | VSX = 0 | COREML = 1 |

...
&lt;/code&gt;&lt;/pre&gt; &lt;p&gt;The first run on a device is slow, since the ANE service compiles the Core ML model to some device-specific format. Next runs are faster.&lt;/p&gt; &lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;For more information about the Core ML implementation please refer to PR &lt;a href=&quot;https://github.com/ggml-org/whisper.cpp/pull/566&quot;&gt;#566&lt;/a&gt;.&lt;/p&gt; 
&lt;h2&gt;OpenVINO support&lt;/h2&gt; 
&lt;p&gt;On platforms that support &lt;a href=&quot;https://github.com/openvinotoolkit/openvino&quot;&gt;OpenVINO&lt;/a&gt;, the Encoder inference can be executed on OpenVINO-supported devices including x86 CPUs and Intel GPUs (integrated &amp;amp; discrete).&lt;/p&gt; 
&lt;p&gt;This can result in significant speedup in encoder performance. Here are the instructions for generating the OpenVINO model and using it with &lt;code&gt;whisper.cpp&lt;/code&gt;:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt; &lt;p&gt;First, setup python virtual env. and install python dependencies. Python 3.10 is recommended.&lt;/p&gt; &lt;p&gt;Windows:&lt;/p&gt; &lt;pre&gt;&lt;code class=&quot;language-powershell&quot;&gt;cd models
python -m venv openvino_conv_env
openvino_conv_env\Scripts\activate
python -m pip install --upgrade pip
pip install -r requirements-openvino.txt
&lt;/code&gt;&lt;/pre&gt; &lt;p&gt;Linux and macOS:&lt;/p&gt; &lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;cd models
python3 -m venv openvino_conv_env
source openvino_conv_env/bin/activate
python -m pip install --upgrade pip
pip install -r requirements-openvino.txt
&lt;/code&gt;&lt;/pre&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;Generate an OpenVINO encoder model. For example, to generate a &lt;code&gt;base.en&lt;/code&gt; model, use:&lt;/p&gt; &lt;pre&gt;&lt;code&gt;python convert-whisper-to-openvino.py --model base.en
&lt;/code&gt;&lt;/pre&gt; &lt;p&gt;This will produce ggml-base.en-encoder-openvino.xml/.bin IR model files. It&#39;s recommended to relocate these to the same folder as &lt;code&gt;ggml&lt;/code&gt; models, as that is the default location that the OpenVINO extension will search at runtime.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;Build &lt;code&gt;whisper.cpp&lt;/code&gt; with OpenVINO support:&lt;/p&gt; &lt;p&gt;Download OpenVINO package from &lt;a href=&quot;https://github.com/openvinotoolkit/openvino/releases&quot;&gt;release page&lt;/a&gt;. The recommended version to use is &lt;a href=&quot;https://github.com/openvinotoolkit/openvino/releases/tag/2024.6.0&quot;&gt;2024.6.0&lt;/a&gt;. Ready to use Binaries of the required libraries can be found in the &lt;a href=&quot;https://storage.openvinotoolkit.org/repositories/openvino/packages/2024.6/&quot;&gt;OpenVino Archives&lt;/a&gt;&lt;/p&gt; &lt;p&gt;After downloading &amp;amp; extracting package onto your development system, set up required environment by sourcing setupvars script. For example:&lt;/p&gt; &lt;p&gt;Linux:&lt;/p&gt; &lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;source /path/to/l_openvino_toolkit_ubuntu22_2023.0.0.10926.b4452d56304_x86_64/setupvars.sh
&lt;/code&gt;&lt;/pre&gt; &lt;p&gt;Windows (cmd):&lt;/p&gt; &lt;pre&gt;&lt;code class=&quot;language-powershell&quot;&gt;C:\Path\To\w_openvino_toolkit_windows_2023.0.0.10926.b4452d56304_x86_64\setupvars.bat
&lt;/code&gt;&lt;/pre&gt; &lt;p&gt;And then build the project using cmake:&lt;/p&gt; &lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;cmake -B build -DWHISPER_OPENVINO=1
cmake --build build -j --config Release
&lt;/code&gt;&lt;/pre&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;Run the examples as usual. For example:&lt;/p&gt; &lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;$ ./build/bin/whisper-cli -m models/ggml-base.en.bin -f samples/jfk.wav

...

whisper_ctx_init_openvino_encoder: loading OpenVINO model from &#39;models/ggml-base.en-encoder-openvino.xml&#39;
whisper_ctx_init_openvino_encoder: first run on a device may take a while ...
whisper_openvino_init: path_model = models/ggml-base.en-encoder-openvino.xml, device = GPU, cache_dir = models/ggml-base.en-encoder-openvino-cache
whisper_ctx_init_openvino_encoder: OpenVINO model loaded

system_info: n_threads = 4 / 8 | AVX = 1 | AVX2 = 1 | AVX512 = 0 | FMA = 1 | NEON = 0 | ARM_FMA = 0 | F16C = 1 | FP16_VA = 0 | WASM_SIMD = 0 | BLAS = 0 | SSE3 = 1 | VSX = 0 | COREML = 0 | OPENVINO = 1 |

...
&lt;/code&gt;&lt;/pre&gt; &lt;p&gt;The first time run on an OpenVINO device is slow, since the OpenVINO framework will compile the IR (Intermediate Representation) model to a device-specific &#39;blob&#39;. This device-specific blob will get cached for the next run.&lt;/p&gt; &lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;For more information about the OpenVINO implementation please refer to PR &lt;a href=&quot;https://github.com/ggml-org/whisper.cpp/pull/1037&quot;&gt;#1037&lt;/a&gt;.&lt;/p&gt; 
&lt;h2&gt;NVIDIA GPU support&lt;/h2&gt; 
&lt;p&gt;With NVIDIA cards the processing of the models is done efficiently on the GPU via cuBLAS and custom CUDA kernels. First, make sure you have installed &lt;code&gt;cuda&lt;/code&gt;: &lt;a href=&quot;https://developer.nvidia.com/cuda-downloads&quot;&gt;https://developer.nvidia.com/cuda-downloads&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;Now build &lt;code&gt;whisper.cpp&lt;/code&gt; with CUDA support:&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;cmake -B build -DGGML_CUDA=1
cmake --build build -j --config Release
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;or for newer NVIDIA GPU&#39;s (RTX 5000 series):&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;cmake -B build -DGGML_CUDA=1 -DCMAKE_CUDA_ARCHITECTURES=&quot;86&quot;
cmake --build build -j --config Release
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2&gt;Vulkan GPU support&lt;/h2&gt; 
&lt;p&gt;Cross-vendor solution which allows you to accelerate workload on your GPU. First, make sure your graphics card driver provides support for Vulkan API.&lt;/p&gt; 
&lt;p&gt;Now build &lt;code&gt;whisper.cpp&lt;/code&gt; with Vulkan support:&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;cmake -B build -DGGML_VULKAN=1
cmake --build build -j --config Release
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2&gt;AMD ROCm GPU support&lt;/h2&gt; 
&lt;p&gt;With AMD GPUs the processing can be accelerated via HIP/ROCm. First, make sure you have installed &lt;a href=&quot;https://rocm.docs.amd.com/en/latest/&quot;&gt;ROCm&lt;/a&gt;.&lt;/p&gt; 
&lt;p&gt;Now build &lt;code&gt;whisper.cpp&lt;/code&gt; with HIP support:&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;cmake -B build -DGGML_HIP=1 -DAMDGPU_TARGETS=&quot;gfx1201&quot;
cmake --build build -j --config Release
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Replace &lt;code&gt;gfx1201&lt;/code&gt; with your GPU architecture. You can find it with:&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;rocminfo | grep &quot;gfx&quot;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Common architectures: &lt;code&gt;gfx1100&lt;/code&gt; (RX 7900 XTX), &lt;code&gt;gfx1101&lt;/code&gt; (RX 7800 XT), &lt;code&gt;gfx1201&lt;/code&gt; (RX 9070 XT). For multiple GPUs with different architectures: &lt;code&gt;-DAMDGPU_TARGETS=&quot;gfx1100;gfx1201&quot;&lt;/code&gt;.&lt;/p&gt; 
&lt;h2&gt;BLAS CPU support via OpenBLAS&lt;/h2&gt; 
&lt;p&gt;Encoder processing can be accelerated on the CPU via OpenBLAS. First, make sure you have installed &lt;code&gt;openblas&lt;/code&gt;: &lt;a href=&quot;https://www.openblas.net/&quot;&gt;https://www.openblas.net/&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;Now build &lt;code&gt;whisper.cpp&lt;/code&gt; with OpenBLAS support:&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;cmake -B build -DGGML_BLAS=1
cmake --build build -j --config Release
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2&gt;Ascend NPU support&lt;/h2&gt; 
&lt;p&gt;Ascend NPU provides inference acceleration via &lt;a href=&quot;https://www.hiascend.com/en/software/cann&quot;&gt;&lt;code&gt;CANN&lt;/code&gt;&lt;/a&gt; and AI cores.&lt;/p&gt; 
&lt;p&gt;First, check if your Ascend NPU device is supported:&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Verified devices&lt;/strong&gt;&lt;/p&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th style=&quot;text-align:center&quot;&gt;Ascend NPU&lt;/th&gt; 
   &lt;th style=&quot;text-align:center&quot;&gt;Status&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:center&quot;&gt;Atlas 300T A2&lt;/td&gt; 
   &lt;td style=&quot;text-align:center&quot;&gt;Support&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:center&quot;&gt;Atlas 300I Duo&lt;/td&gt; 
   &lt;td style=&quot;text-align:center&quot;&gt;Support&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;p&gt;Then, make sure you have installed &lt;a href=&quot;https://www.hiascend.com/en/software/cann/community&quot;&gt;&lt;code&gt;CANN toolkit&lt;/code&gt;&lt;/a&gt; . The lasted version of CANN is recommanded.&lt;/p&gt; 
&lt;p&gt;Now build &lt;code&gt;whisper.cpp&lt;/code&gt; with CANN support:&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;cmake -B build -DGGML_CANN=1
cmake --build build -j --config Release
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Run the inference examples as usual, for example:&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;./build/bin/whisper-cli -f samples/jfk.wav -m models/ggml-base.en.bin -t 8
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;em&gt;Notes:&lt;/em&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;If you have trouble with Ascend NPU device, please create a issue with &lt;strong&gt;[CANN]&lt;/strong&gt; prefix/tag.&lt;/li&gt; 
 &lt;li&gt;If you run successfully with your Ascend NPU device, please help update the table &lt;code&gt;Verified devices&lt;/code&gt;.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Moore Threads GPU support&lt;/h2&gt; 
&lt;p&gt;With Moore Threads cards the processing of the models is done efficiently on the GPU via muBLAS and custom MUSA kernels. First, make sure you have installed &lt;code&gt;MUSA SDK rc4.2.0&lt;/code&gt;: &lt;a href=&quot;https://developer.mthreads.com/sdk/download/musa?equipment=&amp;amp;os=&amp;amp;driverVersion=&amp;amp;version=4.2.0&quot;&gt;https://developer.mthreads.com/sdk/download/musa?equipment=&amp;amp;os=&amp;amp;driverVersion=&amp;amp;version=4.2.0&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;Now build &lt;code&gt;whisper.cpp&lt;/code&gt; with MUSA support:&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;cmake -B build -DGGML_MUSA=1
cmake --build build -j --config Release
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;or specify the architecture for your Moore Threads GPU. For example, if you have a MTT S80 GPU, you can specify the architecture as follows:&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;cmake -B build -DGGML_MUSA=1 -DMUSA_ARCHITECTURES=&quot;21&quot;
cmake --build build -j --config Release
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2&gt;FFmpeg support (examples only)&lt;/h2&gt; 
&lt;p&gt;By default, the examples in this repo use the &lt;a href=&quot;https://github.com/mackron/miniaudio&quot;&gt;miniaudio&lt;/a&gt; library to decode audio files. Some of the examples also can use FFmpeg for decoding and broader format support. To enable that, build with &lt;code&gt;WHISPER_COMMON_FFMPEG&lt;/code&gt;.&lt;/p&gt; 
&lt;p&gt;First, you need to install required libraries:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# Debian/Ubuntu
sudo apt install libavcodec-dev libavformat-dev libavutil-dev

# RHEL/Fedora
sudo dnf install libavcodec-free-devel libavformat-free-devel libavutil-free-devel
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Then you can build the project as follows:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;cmake -B build -D WHISPER_COMMON_FFMPEG=yes
cmake --build build
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Run the following example to confirm it&#39;s working:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# Convert an audio file to Opus format
ffmpeg -i samples/jfk.wav jfk.opus

# Transcribe the audio file
./build/bin/whisper-cli --model models/ggml-base.en.bin --file jfk.opus
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2&gt;Docker&lt;/h2&gt; 
&lt;h3&gt;Prerequisites&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;Docker must be installed and running on your system.&lt;/li&gt; 
 &lt;li&gt;Create a folder to store big models &amp;amp; intermediate files (ex. /whisper/models)&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Images&lt;/h3&gt; 
&lt;p&gt;We have multiple Docker images available for this project:&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;&lt;code&gt;ghcr.io/ggml-org/whisper.cpp:main&lt;/code&gt;: This image includes the main executable file as well as &lt;code&gt;curl&lt;/code&gt; and &lt;code&gt;ffmpeg&lt;/code&gt;. (platforms: &lt;code&gt;linux/amd64&lt;/code&gt;, &lt;code&gt;linux/arm64&lt;/code&gt;)&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;ghcr.io/ggml-org/whisper.cpp:main-cuda&lt;/code&gt;: Same as &lt;code&gt;main&lt;/code&gt; but compiled with CUDA support. (platforms: &lt;code&gt;linux/amd64&lt;/code&gt;)&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;ghcr.io/ggml-org/whisper.cpp:main-musa&lt;/code&gt;: Same as &lt;code&gt;main&lt;/code&gt; but compiled with MUSA support. (platforms: &lt;code&gt;linux/amd64&lt;/code&gt;)&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;ghcr.io/ggml-org/whisper.cpp:main-vulkan&lt;/code&gt;: Same as &lt;code&gt;main&lt;/code&gt; but compiled with Vulkan support. (platforms: &lt;code&gt;linux/amd64&lt;/code&gt;)&lt;/li&gt; 
&lt;/ol&gt; 
&lt;h3&gt;Usage&lt;/h3&gt; 
&lt;pre&gt;&lt;code class=&quot;language-shell&quot;&gt;# download model and persist it in a local folder
docker run -it --rm \
  -v path/to/models:/models \
  whisper.cpp:main &quot;./models/download-ggml-model.sh base /models&quot;

# transcribe an audio file
docker run -it --rm \
  -v path/to/models:/models \
  -v path/to/audios:/audios \
  whisper.cpp:main &quot;whisper-cli -m /models/ggml-base.bin -f /audios/jfk.wav&quot;

# transcribe an audio file in samples folder
docker run -it --rm \
  -v path/to/models:/models \
  whisper.cpp:main &quot;whisper-cli -m /models/ggml-base.bin -f ./samples/jfk.wav&quot;

# run the web server
docker run -it --rm -p &quot;8080:8080&quot; \
  -v path/to/models:/models \
  whisper.cpp:main &quot;whisper-server --host 127.0.0.1 -m /models/ggml-base.bin&quot;
  
# run the bench too on the small.en model using 4 threads
docker run -it --rm \
  -v path/to/models:/models \
  whisper.cpp:main &quot;whisper-bench -m /models/ggml-small.en.bin -t 4&quot;
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2&gt;Installing with Conan&lt;/h2&gt; 
&lt;p&gt;You can install pre-built binaries for whisper.cpp or build it from source using &lt;a href=&quot;https://conan.io/&quot;&gt;Conan&lt;/a&gt;. Use the following command:&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;conan install --requires=&quot;whisper-cpp/[*]&quot; --build=missing
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;For detailed instructions on how to use Conan, please refer to the &lt;a href=&quot;https://docs.conan.io/2/&quot;&gt;Conan documentation&lt;/a&gt;.&lt;/p&gt; 
&lt;h2&gt;Limitations&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;Inference only&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Real-time audio input example&lt;/h2&gt; 
&lt;p&gt;This is a naive example of performing real-time inference on audio from your microphone. The &lt;a href=&quot;https://raw.githubusercontent.com/ggml-org/whisper.cpp/master/examples/stream&quot;&gt;stream&lt;/a&gt; tool samples the audio every half a second and runs the transcription continuously. More info is available in &lt;a href=&quot;https://github.com/ggml-org/whisper.cpp/issues/10&quot;&gt;issue #10&lt;/a&gt;. You will need to have &lt;a href=&quot;https://wiki.libsdl.org/SDL2/Installation&quot;&gt;sdl2&lt;/a&gt; installed for it to work properly.&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;cmake -B build -DWHISPER_SDL2=ON
cmake --build build -j --config Release
./build/bin/whisper-stream -m ./models/ggml-base.en.bin -t 8 --step 500 --length 5000
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;a href=&quot;https://user-images.githubusercontent.com/1991296/194935793-76afede7-cfa8-48d8-a80f-28ba83be7d09.mp4&quot;&gt;https://user-images.githubusercontent.com/1991296/194935793-76afede7-cfa8-48d8-a80f-28ba83be7d09.mp4&lt;/a&gt;&lt;/p&gt; 
&lt;h2&gt;Confidence color-coding&lt;/h2&gt; 
&lt;p&gt;Adding the &lt;code&gt;--print-colors&lt;/code&gt; argument will print the transcribed text using an experimental color coding strategy to highlight words with high or low confidence:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;./build/bin/whisper-cli -m models/ggml-base.en.bin -f samples/gb0.wav --print-colors
&lt;/code&gt;&lt;/pre&gt; 
&lt;img width=&quot;965&quot; alt=&quot;image&quot; src=&quot;https://user-images.githubusercontent.com/1991296/197356445-311c8643-9397-4e5e-b46e-0b4b4daa2530.png&quot; /&gt; 
&lt;h2&gt;Controlling the length of the generated text segments (experimental)&lt;/h2&gt; 
&lt;p&gt;For example, to limit the line length to a maximum of 16 characters, simply add &lt;code&gt;-ml 16&lt;/code&gt;:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;$ ./build/bin/whisper-cli -m ./models/ggml-base.en.bin -f ./samples/jfk.wav -ml 16

whisper_model_load: loading model from &#39;./models/ggml-base.en.bin&#39;
...
system_info: n_threads = 4 / 10 | AVX2 = 0 | AVX512 = 0 | NEON = 1 | FP16_VA = 1 | WASM_SIMD = 0 | BLAS = 1 |

main: processing &#39;./samples/jfk.wav&#39; (176000 samples, 11.0 sec), 4 threads, 1 processors, lang = en, task = transcribe, timestamps = 1 ...

[00:00:00.000 --&amp;gt; 00:00:00.850]   And so my
[00:00:00.850 --&amp;gt; 00:00:01.590]   fellow
[00:00:01.590 --&amp;gt; 00:00:04.140]   Americans, ask
[00:00:04.140 --&amp;gt; 00:00:05.660]   not what your
[00:00:05.660 --&amp;gt; 00:00:06.840]   country can do
[00:00:06.840 --&amp;gt; 00:00:08.430]   for you, ask
[00:00:08.430 --&amp;gt; 00:00:09.440]   what you can do
[00:00:09.440 --&amp;gt; 00:00:10.020]   for your
[00:00:10.020 --&amp;gt; 00:00:11.000]   country.
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2&gt;Word-level timestamp (experimental)&lt;/h2&gt; 
&lt;p&gt;The &lt;code&gt;--max-len&lt;/code&gt; argument can be used to obtain word-level timestamps. Simply use &lt;code&gt;-ml 1&lt;/code&gt;:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;$ ./build/bin/whisper-cli -m ./models/ggml-base.en.bin -f ./samples/jfk.wav -ml 1

whisper_model_load: loading model from &#39;./models/ggml-base.en.bin&#39;
...
system_info: n_threads = 4 / 10 | AVX2 = 0 | AVX512 = 0 | NEON = 1 | FP16_VA = 1 | WASM_SIMD = 0 | BLAS = 1 |

main: processing &#39;./samples/jfk.wav&#39; (176000 samples, 11.0 sec), 4 threads, 1 processors, lang = en, task = transcribe, timestamps = 1 ...

[00:00:00.000 --&amp;gt; 00:00:00.320]
[00:00:00.320 --&amp;gt; 00:00:00.370]   And
[00:00:00.370 --&amp;gt; 00:00:00.690]   so
[00:00:00.690 --&amp;gt; 00:00:00.850]   my
[00:00:00.850 --&amp;gt; 00:00:01.590]   fellow
[00:00:01.590 --&amp;gt; 00:00:02.850]   Americans
[00:00:02.850 --&amp;gt; 00:00:03.300]  ,
[00:00:03.300 --&amp;gt; 00:00:04.140]   ask
[00:00:04.140 --&amp;gt; 00:00:04.990]   not
[00:00:04.990 --&amp;gt; 00:00:05.410]   what
[00:00:05.410 --&amp;gt; 00:00:05.660]   your
[00:00:05.660 --&amp;gt; 00:00:06.260]   country
[00:00:06.260 --&amp;gt; 00:00:06.600]   can
[00:00:06.600 --&amp;gt; 00:00:06.840]   do
[00:00:06.840 --&amp;gt; 00:00:07.010]   for
[00:00:07.010 --&amp;gt; 00:00:08.170]   you
[00:00:08.170 --&amp;gt; 00:00:08.190]  ,
[00:00:08.190 --&amp;gt; 00:00:08.430]   ask
[00:00:08.430 --&amp;gt; 00:00:08.910]   what
[00:00:08.910 --&amp;gt; 00:00:09.040]   you
[00:00:09.040 --&amp;gt; 00:00:09.320]   can
[00:00:09.320 --&amp;gt; 00:00:09.440]   do
[00:00:09.440 --&amp;gt; 00:00:09.760]   for
[00:00:09.760 --&amp;gt; 00:00:10.020]   your
[00:00:10.020 --&amp;gt; 00:00:10.510]   country
[00:00:10.510 --&amp;gt; 00:00:11.000]  .
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2&gt;Speaker segmentation via tinydiarize (experimental)&lt;/h2&gt; 
&lt;p&gt;More information about this approach is available here: &lt;a href=&quot;https://github.com/ggml-org/whisper.cpp/pull/1058&quot;&gt;https://github.com/ggml-org/whisper.cpp/pull/1058&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;Sample usage:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-py&quot;&gt;# download a tinydiarize compatible model
./models/download-ggml-model.sh small.en-tdrz

# run as usual, adding the &quot;-tdrz&quot; command-line argument
./build/bin/whisper-cli -f ./samples/a13.wav -m ./models/ggml-small.en-tdrz.bin -tdrz
...
main: processing &#39;./samples/a13.wav&#39; (480000 samples, 30.0 sec), 4 threads, 1 processors, lang = en, task = transcribe, tdrz = 1, timestamps = 1 ...
...
[00:00:00.000 --&amp;gt; 00:00:03.800]   Okay Houston, we&#39;ve had a problem here. [SPEAKER_TURN]
[00:00:03.800 --&amp;gt; 00:00:06.200]   This is Houston. Say again please. [SPEAKER_TURN]
[00:00:06.200 --&amp;gt; 00:00:08.260]   Uh Houston we&#39;ve had a problem.
[00:00:08.260 --&amp;gt; 00:00:11.320]   We&#39;ve had a main beam up on a volt. [SPEAKER_TURN]
[00:00:11.320 --&amp;gt; 00:00:13.820]   Roger main beam interval. [SPEAKER_TURN]
[00:00:13.820 --&amp;gt; 00:00:15.100]   Uh uh [SPEAKER_TURN]
[00:00:15.100 --&amp;gt; 00:00:18.020]   So okay stand, by thirteen we&#39;re looking at it. [SPEAKER_TURN]
[00:00:18.020 --&amp;gt; 00:00:25.740]   Okay uh right now uh Houston the uh voltage is uh is looking good um.
[00:00:27.620 --&amp;gt; 00:00:29.940]   And we had a a pretty large bank or so.
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2&gt;Karaoke-style movie generation (experimental)&lt;/h2&gt; 
&lt;p&gt;The &lt;a href=&quot;https://raw.githubusercontent.com/ggml-org/whisper.cpp/master/examples/cli&quot;&gt;whisper-cli&lt;/a&gt; example provides support for output of karaoke-style movies, where the currently pronounced word is highlighted. Use the &lt;code&gt;-owts&lt;/code&gt; argument and run the generated bash script. This requires to have &lt;code&gt;ffmpeg&lt;/code&gt; installed.&lt;/p&gt; 
&lt;p&gt;Here are a few &lt;em&gt;&quot;typical&quot;&lt;/em&gt; examples:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;./build/bin/whisper-cli -m ./models/ggml-base.en.bin -f ./samples/jfk.wav -owts
source ./samples/jfk.wav.wts
ffplay ./samples/jfk.wav.mp4
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;a href=&quot;https://user-images.githubusercontent.com/1991296/199337465-dbee4b5e-9aeb-48a3-b1c6-323ac4db5b2c.mp4&quot;&gt;https://user-images.githubusercontent.com/1991296/199337465-dbee4b5e-9aeb-48a3-b1c6-323ac4db5b2c.mp4&lt;/a&gt;&lt;/p&gt; 
&lt;hr /&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;./build/bin/whisper-cli -m ./models/ggml-base.en.bin -f ./samples/mm0.wav -owts
source ./samples/mm0.wav.wts
ffplay ./samples/mm0.wav.mp4
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;a href=&quot;https://user-images.githubusercontent.com/1991296/199337504-cc8fd233-0cb7-4920-95f9-4227de3570aa.mp4&quot;&gt;https://user-images.githubusercontent.com/1991296/199337504-cc8fd233-0cb7-4920-95f9-4227de3570aa.mp4&lt;/a&gt;&lt;/p&gt; 
&lt;hr /&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;./build/bin/whisper-cli -m ./models/ggml-base.en.bin -f ./samples/gb0.wav -owts
source ./samples/gb0.wav.wts
ffplay ./samples/gb0.wav.mp4
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;a href=&quot;https://user-images.githubusercontent.com/1991296/199337538-b7b0c7a3-2753-4a88-a0cd-f28a317987ba.mp4&quot;&gt;https://user-images.githubusercontent.com/1991296/199337538-b7b0c7a3-2753-4a88-a0cd-f28a317987ba.mp4&lt;/a&gt;&lt;/p&gt; 
&lt;hr /&gt; 
&lt;h2&gt;Video comparison of different models&lt;/h2&gt; 
&lt;p&gt;Use the &lt;a href=&quot;https://github.com/ggml-org/whisper.cpp/raw/master/scripts/bench-wts.sh&quot;&gt;scripts/bench-wts.sh&lt;/a&gt; script to generate a video in the following format:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;./scripts/bench-wts.sh samples/jfk.wav
ffplay ./samples/jfk.wav.all.mp4
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;a href=&quot;https://user-images.githubusercontent.com/1991296/223206245-2d36d903-cf8e-4f09-8c3b-eb9f9c39d6fc.mp4&quot;&gt;https://user-images.githubusercontent.com/1991296/223206245-2d36d903-cf8e-4f09-8c3b-eb9f9c39d6fc.mp4&lt;/a&gt;&lt;/p&gt; 
&lt;hr /&gt; 
&lt;h2&gt;Benchmarks&lt;/h2&gt; 
&lt;p&gt;In order to have an objective comparison of the performance of the inference across different system configurations, use the &lt;a href=&quot;https://raw.githubusercontent.com/ggml-org/whisper.cpp/master/examples/bench&quot;&gt;whisper-bench&lt;/a&gt; tool. The tool simply runs the Encoder part of the model and prints how much time it took to execute it. The results are summarized in the following Github issue:&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://github.com/ggml-org/whisper.cpp/issues/89&quot;&gt;Benchmark results&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;Additionally a script to run whisper.cpp with different models and audio files is provided &lt;a href=&quot;https://raw.githubusercontent.com/ggml-org/whisper.cpp/master/scripts/bench.py&quot;&gt;bench.py&lt;/a&gt;.&lt;/p&gt; 
&lt;p&gt;You can run it with the following command, by default it will run against any standard model in the models folder.&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;python3 scripts/bench.py -f samples/jfk.wav -t 2,4,8 -p 1,2
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;It is written in python with the intention of being easy to modify and extend for your benchmarking use case.&lt;/p&gt; 
&lt;p&gt;It outputs a csv file with the results of the benchmarking.&lt;/p&gt; 
&lt;h2&gt;&lt;code&gt;ggml&lt;/code&gt; format&lt;/h2&gt; 
&lt;p&gt;The original models are converted to a custom binary format. This allows to pack everything needed into a single file:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;model parameters&lt;/li&gt; 
 &lt;li&gt;mel filters&lt;/li&gt; 
 &lt;li&gt;vocabulary&lt;/li&gt; 
 &lt;li&gt;weights&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;You can download the converted models using the &lt;a href=&quot;https://raw.githubusercontent.com/ggml-org/whisper.cpp/master/models/download-ggml-model.sh&quot;&gt;models/download-ggml-model.sh&lt;/a&gt; script or manually from here:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://huggingface.co/ggerganov/whisper.cpp&quot;&gt;https://huggingface.co/ggerganov/whisper.cpp&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;For more details, see the conversion script &lt;a href=&quot;https://raw.githubusercontent.com/ggml-org/whisper.cpp/master/models/convert-pt-to-ggml.py&quot;&gt;models/convert-pt-to-ggml.py&lt;/a&gt; or &lt;a href=&quot;https://raw.githubusercontent.com/ggml-org/whisper.cpp/master/models/README.md&quot;&gt;models/README.md&lt;/a&gt;.&lt;/p&gt; 
&lt;h2&gt;&lt;a href=&quot;https://github.com/ggml-org/whisper.cpp/discussions/categories/bindings&quot;&gt;Bindings&lt;/a&gt;&lt;/h2&gt; 
&lt;ul class=&quot;task-list&quot;&gt; 
 &lt;li class=&quot;task-list-item&quot;&gt;&lt;input type=&quot;checkbox&quot; id=&quot;cbx_9&quot; checked=&quot;true&quot; disabled=&quot;true&quot; /&gt;&lt;label for=&quot;cbx_9&quot;&gt; Rust: &lt;a href=&quot;https://github.com/tazz4843/whisper-rs&quot;&gt;tazz4843/whisper-rs&lt;/a&gt; | &lt;a href=&quot;https://github.com/ggml-org/whisper.cpp/discussions/310&quot;&gt;#310&lt;/a&gt;&lt;/label&gt;&lt;/li&gt; 
 &lt;li class=&quot;task-list-item&quot;&gt;&lt;input type=&quot;checkbox&quot; id=&quot;cbx_10&quot; checked=&quot;true&quot; disabled=&quot;true&quot; /&gt;&lt;label for=&quot;cbx_10&quot;&gt; JavaScript: &lt;a href=&quot;https://raw.githubusercontent.com/ggml-org/whisper.cpp/master/bindings/javascript&quot;&gt;bindings/javascript&lt;/a&gt; | &lt;a href=&quot;https://github.com/ggml-org/whisper.cpp/discussions/309&quot;&gt;#309&lt;/a&gt;&lt;/label&gt; 
  &lt;ul&gt; 
   &lt;li&gt;React Native (iOS / Android): &lt;a href=&quot;https://github.com/mybigday/whisper.rn&quot;&gt;whisper.rn&lt;/a&gt;&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li class=&quot;task-list-item&quot;&gt;&lt;input type=&quot;checkbox&quot; id=&quot;cbx_11&quot; checked=&quot;true&quot; disabled=&quot;true&quot; /&gt;&lt;label for=&quot;cbx_11&quot;&gt; Go: &lt;a href=&quot;https://raw.githubusercontent.com/ggml-org/whisper.cpp/master/bindings/go&quot;&gt;bindings/go&lt;/a&gt; | &lt;a href=&quot;https://github.com/ggml-org/whisper.cpp/discussions/312&quot;&gt;#312&lt;/a&gt;&lt;/label&gt;&lt;/li&gt; 
 &lt;li class=&quot;task-list-item&quot;&gt;&lt;input type=&quot;checkbox&quot; id=&quot;cbx_12&quot; checked=&quot;true&quot; disabled=&quot;true&quot; /&gt;&lt;label for=&quot;cbx_12&quot;&gt; Java:&lt;/label&gt; 
  &lt;ul&gt; 
   &lt;li&gt;&lt;a href=&quot;https://github.com/GiviMAD/whisper-jni&quot;&gt;GiviMAD/whisper-jni&lt;/a&gt;&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li class=&quot;task-list-item&quot;&gt;&lt;input type=&quot;checkbox&quot; id=&quot;cbx_13&quot; checked=&quot;true&quot; disabled=&quot;true&quot; /&gt;&lt;label for=&quot;cbx_13&quot;&gt; Ruby: &lt;a href=&quot;https://raw.githubusercontent.com/ggml-org/whisper.cpp/master/bindings/ruby&quot;&gt;bindings/ruby&lt;/a&gt; | &lt;a href=&quot;https://github.com/ggml-org/whisper.cpp/discussions/507&quot;&gt;#507&lt;/a&gt;&lt;/label&gt;&lt;/li&gt; 
 &lt;li class=&quot;task-list-item&quot;&gt;&lt;input type=&quot;checkbox&quot; id=&quot;cbx_14&quot; checked=&quot;true&quot; disabled=&quot;true&quot; /&gt;&lt;label for=&quot;cbx_14&quot;&gt; Objective-C / Swift: &lt;a href=&quot;https://github.com/ggml-org/whisper.spm&quot;&gt;ggml-org/whisper.spm&lt;/a&gt; | &lt;a href=&quot;https://github.com/ggml-org/whisper.cpp/discussions/313&quot;&gt;#313&lt;/a&gt;&lt;/label&gt; 
  &lt;ul&gt; 
   &lt;li&gt;&lt;a href=&quot;https://github.com/exPHAT/SwiftWhisper&quot;&gt;exPHAT/SwiftWhisper&lt;/a&gt;&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li class=&quot;task-list-item&quot;&gt;&lt;input type=&quot;checkbox&quot; id=&quot;cbx_15&quot; checked=&quot;true&quot; disabled=&quot;true&quot; /&gt;&lt;label for=&quot;cbx_15&quot;&gt; .NET: | &lt;a href=&quot;https://github.com/ggml-org/whisper.cpp/discussions/422&quot;&gt;#422&lt;/a&gt;&lt;/label&gt; 
  &lt;ul&gt; 
   &lt;li&gt;&lt;a href=&quot;https://github.com/sandrohanea/whisper.net&quot;&gt;sandrohanea/whisper.net&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://github.com/NickDarvey/whisper&quot;&gt;NickDarvey/whisper&lt;/a&gt;&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li class=&quot;task-list-item&quot;&gt;&lt;input type=&quot;checkbox&quot; id=&quot;cbx_16&quot; checked=&quot;true&quot; disabled=&quot;true&quot; /&gt;&lt;label for=&quot;cbx_16&quot;&gt; Python: | &lt;a href=&quot;https://github.com/ggml-org/whisper.cpp/issues/9&quot;&gt;#9&lt;/a&gt;&lt;/label&gt; 
  &lt;ul&gt; 
   &lt;li&gt;&lt;a href=&quot;https://github.com/stlukey/whispercpp.py&quot;&gt;stlukey/whispercpp.py&lt;/a&gt; (Cython)&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://github.com/AIWintermuteAI/whispercpp&quot;&gt;AIWintermuteAI/whispercpp&lt;/a&gt; (Updated fork of aarnphm/whispercpp)&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://github.com/aarnphm/whispercpp&quot;&gt;aarnphm/whispercpp&lt;/a&gt; (Pybind11)&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://github.com/abdeladim-s/pywhispercpp&quot;&gt;abdeladim-s/pywhispercpp&lt;/a&gt; (Pybind11)&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li class=&quot;task-list-item&quot;&gt;&lt;input type=&quot;checkbox&quot; id=&quot;cbx_17&quot; checked=&quot;true&quot; disabled=&quot;true&quot; /&gt;&lt;label for=&quot;cbx_17&quot;&gt; R: &lt;a href=&quot;https://github.com/bnosac/audio.whisper&quot;&gt;bnosac/audio.whisper&lt;/a&gt;&lt;/label&gt;&lt;/li&gt; 
 &lt;li class=&quot;task-list-item&quot;&gt;&lt;input type=&quot;checkbox&quot; id=&quot;cbx_18&quot; checked=&quot;true&quot; disabled=&quot;true&quot; /&gt;&lt;label for=&quot;cbx_18&quot;&gt; Unity: &lt;a href=&quot;https://github.com/Macoron/whisper.unity&quot;&gt;macoron/whisper.unity&lt;/a&gt;&lt;/label&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;XCFramework&lt;/h2&gt; 
&lt;p&gt;The XCFramework is a precompiled version of the library for iOS, visionOS, tvOS, and macOS. It can be used in Swift projects without the need to compile the library from source. For example, the v1.7.5 version of the XCFramework can be used as follows:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-swift&quot;&gt;// swift-tools-version: 5.10
// The swift-tools-version declares the minimum version of Swift required to build this package.

import PackageDescription

let package = Package(
    name: &quot;Whisper&quot;,
    targets: [
        .executableTarget(
            name: &quot;Whisper&quot;,
            dependencies: [
                &quot;WhisperFramework&quot;
            ]),
        .binaryTarget(
            name: &quot;WhisperFramework&quot;,
            url: &quot;https://github.com/ggml-org/whisper.cpp/releases/download/v1.7.5/whisper-v1.7.5-xcframework.zip&quot;,
            checksum: &quot;c7faeb328620d6012e130f3d705c51a6ea6c995605f2df50f6e1ad68c59c6c4a&quot;
        )
    ]
)
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2&gt;Voice Activity Detection (VAD)&lt;/h2&gt; 
&lt;p&gt;Support for Voice Activity Detection (VAD) can be enabled using the &lt;code&gt;--vad&lt;/code&gt; argument to &lt;code&gt;whisper-cli&lt;/code&gt;. In addition to this option a VAD model is also required.&lt;/p&gt; 
&lt;p&gt;The way this works is that first the audio samples are passed through the VAD model which will detect speech segments. Using this information, only the speech segments that are detected are extracted from the original audio input and passed to whisper for processing. This reduces the amount of audio data that needs to be processed by whisper and can significantly speed up the transcription process.&lt;/p&gt; 
&lt;p&gt;The following VAD models are currently supported:&lt;/p&gt; 
&lt;h3&gt;Silero-VAD&lt;/h3&gt; 
&lt;p&gt;&lt;a href=&quot;https://github.com/snakers4/silero-vad&quot;&gt;Silero-vad&lt;/a&gt; is a lightweight VAD model written in Python that is fast and accurate.&lt;/p&gt; 
&lt;p&gt;Models can be downloaded by running the following command on Linux or MacOS:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-console&quot;&gt;$ ./models/download-vad-model.sh silero-v6.2.0
Downloading ggml model silero-v6.2.0 from &#39;https://huggingface.co/ggml-org/whisper-vad&#39; ...
ggml-silero-v6.2.0.bin        100%[==============================================&amp;gt;] 864.35K  --.-KB/s    in 0.04s
Done! Model &#39;silero-v6.2.0&#39; saved in &#39;/path/models/ggml-silero-v6.2.0.bin&#39;
You can now use it like this:

  $ ./build/bin/whisper-cli -vm /path/models/ggml-silero-v6.2.0.bin --vad -f samples/jfk.wav -m models/ggml-base.en.bin

&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;And the following command on Windows:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-console&quot;&gt;&amp;gt; .\models\download-vad-model.cmd silero-v6.2.0
Downloading vad model silero-v6.2.0...
Done! Model silero-v6.2.0 saved in C:\Users\danie\work\ai\whisper.cpp\ggml-silero-v6.2.0.bin
You can now use it like this:

C:\path\build\bin\Release\whisper-cli.exe -vm C:\path\ggml-silero-v6.2.0.bin --vad -m models/ggml-base.en.bin -f samples\jfk.wav

&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;To see a list of all available models, run the above commands without any arguments.&lt;/p&gt; 
&lt;p&gt;This model can be also be converted manually to ggml using the following command:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-console&quot;&gt;$ python3 -m venv venv &amp;amp;&amp;amp; source venv/bin/activate
$ (venv) pip install silero-vad
$ (venv) $ python models/convert-silero-vad-to-ggml.py --output models/silero.bin
Saving GGML Silero-VAD model to models/silero-v6.2.0-ggml.bin
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;And it can then be used with whisper as follows:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-console&quot;&gt;$ ./build/bin/whisper-cli \
   --file ./samples/jfk.wav \
   --model ./models/ggml-base.en.bin \
   --vad \
   --vad-model ./models/silero-v6.2.0-ggml.bin
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;VAD Options&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt; &lt;p&gt;--vad-threshold: Threshold probability for speech detection. A probability for a speech segment/frame above this threshold will be considered as speech.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;--vad-min-speech-duration-ms: Minimum speech duration in milliseconds. Speech segments shorter than this value will be discarded to filter out brief noise or false positives.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;--vad-min-silence-duration-ms: Minimum silence duration in milliseconds. Silence periods must be at least this long to end a speech segment. Shorter silence periods will be ignored and included as part of the speech.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;--vad-max-speech-duration-s: Maximum speech duration in seconds. Speech segments longer than this will be automatically split into multiple segments at silence points exceeding 98ms to prevent excessively long segments.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;--vad-speech-pad-ms: Speech padding in milliseconds. Adds this amount of padding before and after each detected speech segment to avoid cutting off speech edges.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;--vad-samples-overlap: Amount of audio to extend from each speech segment into the next one, in seconds (e.g., 0.10 = 100ms overlap). This ensures speech isn&#39;t cut off abruptly between segments when they&#39;re concatenated together.&lt;/p&gt; &lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Examples&lt;/h2&gt; 
&lt;p&gt;There are various examples of using the library for different projects in the &lt;a href=&quot;https://raw.githubusercontent.com/ggml-org/whisper.cpp/master/examples&quot;&gt;examples&lt;/a&gt; folder. Some of the examples are even ported to run in the browser using WebAssembly. Check them out!&lt;/p&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Example&lt;/th&gt; 
   &lt;th&gt;Web&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;a href=&quot;https://raw.githubusercontent.com/ggml-org/whisper.cpp/master/examples/cli&quot;&gt;whisper-cli&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://raw.githubusercontent.com/ggml-org/whisper.cpp/master/examples/whisper.wasm&quot;&gt;whisper.wasm&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;Tool for translating and transcribing audio using Whisper&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://raw.githubusercontent.com/ggml-org/whisper.cpp/master/examples/bench&quot;&gt;whisper-bench&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://raw.githubusercontent.com/ggml-org/whisper.cpp/master/examples/bench.wasm&quot;&gt;bench.wasm&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;Benchmark the performance of Whisper on your machine&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://raw.githubusercontent.com/ggml-org/whisper.cpp/master/examples/stream&quot;&gt;whisper-stream&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://raw.githubusercontent.com/ggml-org/whisper.cpp/master/examples/stream.wasm&quot;&gt;stream.wasm&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;Real-time transcription of raw microphone capture&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://raw.githubusercontent.com/ggml-org/whisper.cpp/master/examples/command&quot;&gt;whisper-command&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://raw.githubusercontent.com/ggml-org/whisper.cpp/master/examples/command.wasm&quot;&gt;command.wasm&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;Basic voice assistant example for receiving voice commands from the mic&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://raw.githubusercontent.com/ggml-org/whisper.cpp/master/examples/server&quot;&gt;whisper-server&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;HTTP transcription server with OAI-like API&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://raw.githubusercontent.com/ggml-org/whisper.cpp/master/examples/talk-llama&quot;&gt;whisper-talk-llama&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;Talk with a LLaMA bot&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://raw.githubusercontent.com/ggml-org/whisper.cpp/master/examples/whisper.objc&quot;&gt;whisper.objc&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;iOS mobile application using whisper.cpp&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://raw.githubusercontent.com/ggml-org/whisper.cpp/master/examples/whisper.swiftui&quot;&gt;whisper.swiftui&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;SwiftUI iOS / macOS application using whisper.cpp&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://raw.githubusercontent.com/ggml-org/whisper.cpp/master/examples/whisper.android&quot;&gt;whisper.android&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;Android mobile application using whisper.cpp&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://raw.githubusercontent.com/ggml-org/whisper.cpp/master/examples/whisper.nvim&quot;&gt;whisper.nvim&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;Speech-to-text plugin for Neovim&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://raw.githubusercontent.com/ggml-org/whisper.cpp/master/examples/generate-karaoke.sh&quot;&gt;generate-karaoke.sh&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;Helper script to easily &lt;a href=&quot;https://youtu.be/uj7hVta4blM&quot;&gt;generate a karaoke video&lt;/a&gt; of raw audio capture&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://raw.githubusercontent.com/ggml-org/whisper.cpp/master/examples/livestream.sh&quot;&gt;livestream.sh&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/ggml-org/whisper.cpp/issues/185&quot;&gt;Livestream audio transcription&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://raw.githubusercontent.com/ggml-org/whisper.cpp/master/examples/yt-wsp.sh&quot;&gt;yt-wsp.sh&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;Download + transcribe and/or translate any VOD &lt;a href=&quot;https://gist.github.com/DaniruKun/96f763ec1a037cc92fe1a059b643b818&quot;&gt;(original)&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://raw.githubusercontent.com/ggml-org/whisper.cpp/master/examples/wchess&quot;&gt;wchess&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://raw.githubusercontent.com/ggml-org/whisper.cpp/master/examples/wchess&quot;&gt;wchess.wasm&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;Voice-controlled chess&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;h2&gt;&lt;a href=&quot;https://github.com/ggml-org/whisper.cpp/discussions&quot;&gt;Discussions&lt;/a&gt;&lt;/h2&gt; 
&lt;p&gt;If you have any kind of feedback about this project feel free to use the Discussions section and open a new topic. You can use the &lt;a href=&quot;https://github.com/ggml-org/whisper.cpp/discussions/categories/show-and-tell&quot;&gt;Show and tell&lt;/a&gt; category to share your own projects that use &lt;code&gt;whisper.cpp&lt;/code&gt;. If you have a question, make sure to check the &lt;a href=&quot;https://github.com/ggml-org/whisper.cpp/discussions/126&quot;&gt;Frequently asked questions (#126)&lt;/a&gt; discussion.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>barry-ran/QtScrcpy</title>
      <link>https://github.com/barry-ran/QtScrcpy</link>
      <description>&lt;p&gt;Android real-time display control software&lt;/p&gt;&lt;hr&gt;&lt;h1&gt;QtScrcpy&lt;/h1&gt; 
&lt;p&gt;&lt;a href=&quot;https://opencollective.com/QtScrcpy&quot;&gt;&lt;img src=&quot;https://opencollective.com/QtScrcpy/all/badge.svg?label=financial+contributors&quot; alt=&quot;Financial Contributors to Open Collective&quot; /&gt;&lt;/a&gt; &lt;img src=&quot;https://github.com/barry-ran/QtScrcpy/workflows/Windows/badge.svg?sanitize=true&quot; alt=&quot;Windows&quot; /&gt; &lt;img src=&quot;https://github.com/barry-ran/QtScrcpy/workflows/MacOS/badge.svg?sanitize=true&quot; alt=&quot;MacOS&quot; /&gt; &lt;img src=&quot;https://github.com/barry-ran/QtScrcpy/workflows/Ubuntu/badge.svg?sanitize=true&quot; alt=&quot;Ubuntu&quot; /&gt;&lt;/p&gt; 
&lt;p&gt;&lt;img src=&quot;https://img.shields.io/badge/license-Apache2.0-blue.svg?sanitize=true&quot; alt=&quot;license&quot; /&gt; &lt;img src=&quot;https://img.shields.io/github/v/release/barry-ran/QtScrcpy.svg?sanitize=true&quot; alt=&quot;release&quot; /&gt; &lt;img src=&quot;https://img.shields.io/github/stars/barry-ran/QtScrcpy.svg?sanitize=true&quot; alt=&quot;star&quot; /&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://raw.githubusercontent.com/barry-ran/QtScrcpy/dev/README_zh.md&quot;&gt;中文用户？点我查看中文介绍&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;QtScrcpy supports displaying and controlling Android devices via USB or over network. It does NOT require root privileges.&lt;/p&gt; 
&lt;p&gt;It supports three major platforms: GNU/Linux, Windows and macOS.&lt;/p&gt; 
&lt;p&gt;It focuses on:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;lightness&lt;/strong&gt; (displays only the device screen)&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;performance&lt;/strong&gt; (30~60 fps)&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;quality&lt;/strong&gt; (1920×1080 or above)&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;low latency&lt;/strong&gt; (&lt;a href=&quot;https://github.com/Genymobile/scrcpy/pull/646&quot;&gt;35~70ms&lt;/a&gt;)&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;low startup time&lt;/strong&gt; (only about 1 second to display the first frame)&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;non-intrusiveness&lt;/strong&gt; (nothing will be installed on the device)&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;img src=&quot;https://raw.githubusercontent.com/barry-ran/QtScrcpy/dev/screenshot/win-en.png&quot; alt=&quot;win&quot; /&gt;&lt;/p&gt; 
&lt;p&gt;&lt;img src=&quot;https://raw.githubusercontent.com/barry-ran/QtScrcpy/dev/screenshot/mac-en.png&quot; alt=&quot;mac&quot; /&gt;&lt;/p&gt; 
&lt;p&gt;&lt;img src=&quot;https://raw.githubusercontent.com/barry-ran/QtScrcpy/dev/screenshot/linux-en.png&quot; alt=&quot;linux&quot; /&gt;&lt;/p&gt; 
&lt;h2&gt;The author has developed a more professional screen casting software called &lt;code&gt;QuickMirror&lt;/code&gt;&lt;/h2&gt; 
&lt;p&gt;QuickMirror function&amp;amp;features:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Equipment screen casting&amp;amp;control: batch screen casting, individual control, batch control&lt;/li&gt; 
 &lt;li&gt;Group management&lt;/li&gt; 
 &lt;li&gt;WiFi screen mirroring/OTG screen mirroring&lt;/li&gt; 
 &lt;li&gt;Adb shell shortcut command&lt;/li&gt; 
 &lt;li&gt;File transfer, apk installation&lt;/li&gt; 
 &lt;li&gt;Multiple screen mirroring: In OTG mirroring mode, with low resolution and smoothness settings, a single computer can manage 500+phones simultaneously&lt;/li&gt; 
 &lt;li&gt;Low latency: USB screen mirroring 1080p latency is within 30ms, which is lower than all screen mirroring software on the market in terms of latency at the same resolution and smoothness&lt;/li&gt; 
 &lt;li&gt;Low CPU usage: pure C++development, high-performance GPU video rendering&lt;/li&gt; 
 &lt;li&gt;High resolution: adjustable, maximum support for native resolution of Android terminals&lt;/li&gt; 
 &lt;li&gt;Perfect Chinese input: Supports Xianyu app, supports Samsung phones&lt;/li&gt; 
 &lt;li&gt;The free version can cast up to 10 screens, with unlimited functionality (except for automatic screen mirroring)&lt;/li&gt; 
 &lt;li&gt;QuickMirror tutorial: &lt;a href=&quot;https://lrbnfell4p.feishu.cn/docx/EMkvdfIvDowy3UxsXUCcpPV8nDh&quot;&gt;https://lrbnfell4p.feishu.cn/docx/EMkvdfIvDowy3UxsXUCcpPV8nDh&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;QuickMirror Telegram communication group: &lt;a href=&quot;https://t.me/+EnQNmb47C_liYmRl&quot;&gt;https://t.me/+EnQNmb47C_liYmRl&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;Preview of QuickMirror Interface: &lt;img src=&quot;https://raw.githubusercontent.com/barry-ran/QtScrcpy/dev/docs/image/quickmirror.png&quot; alt=&quot;quickmirror&quot; /&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Mapping Keys&lt;/h2&gt; 
&lt;p&gt;You can write your script to map keyboard and mouse actions to touches and clicks of the mobile phone according to your needs. &lt;a href=&quot;https://raw.githubusercontent.com/barry-ran/QtScrcpy/dev/docs/KeyMapDes.md&quot;&gt;Here&lt;/a&gt; are the script writing rules.&lt;/p&gt; 
&lt;p&gt;Script for TikTok and some other games are provided by default. Once enabled, you can play the game with your keyboard and mouse. The default key mapping for PUBG Mobile is as follows:&lt;/p&gt; 
&lt;p&gt;&lt;img src=&quot;https://raw.githubusercontent.com/barry-ran/QtScrcpy/dev/screenshot/game.png&quot; alt=&quot;game&quot; /&gt;&lt;/p&gt; 
&lt;p&gt;Instruction for adding new customized mapping files.&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Write a customized script and put it in the &lt;code&gt;keymap&lt;/code&gt; directory&lt;/li&gt; 
 &lt;li&gt;Click &lt;code&gt;refresh script&lt;/code&gt; to show it&lt;/li&gt; 
 &lt;li&gt;Select your script&lt;/li&gt; 
 &lt;li&gt;Connect to your phone, start service and click &lt;code&gt;apply&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;Press &lt;code&gt;~&lt;/code&gt; key (the SwitchKey in the key map script) to switch to custom mapping mode&lt;/li&gt; 
 &lt;li&gt;Press the ~ key again to switch back to normal mode&lt;/li&gt; 
 &lt;li&gt;(For games such as PUBG Mobile) If you want to move vehicles with the STEER_WHEEL keys, you need to set the move mode to &lt;code&gt;single rocker mode&lt;/code&gt;.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;If you don&#39;t know how to manually write mapping rules, you can also use the &lt;code&gt;QuickAssistant&lt;/code&gt; developed by the author QuickAssistant Features&amp;amp;Functions:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Play Android mobile games smoothly through keyboard and mouse&lt;/li&gt; 
 &lt;li&gt;Interface based editing of key mapping script&lt;/li&gt; 
 &lt;li&gt;Support pausing the computer screen and using only keyboard and mouse operations&lt;/li&gt; 
 &lt;li&gt;Screenshot&amp;amp;Recording of Mobile Screen&lt;/li&gt; 
 &lt;li&gt;Simple batch control&lt;/li&gt; 
 &lt;li&gt;Android 11+supports playing mobile audio on computers (under development...)&lt;/li&gt; 
 &lt;li&gt;Mobile app installation free&lt;/li&gt; 
 &lt;li&gt;Fast and instant connection&lt;/li&gt; 
 &lt;li&gt;Low latency: USB screen mirroring 1080p latency is within 30ms, which is lower than all screen mirroring software on the market in terms of latency at the same resolution and smoothness&lt;/li&gt; 
 &lt;li&gt;Low CPU usage: pure C++development, high-performance GPU video rendering&lt;/li&gt; 
 &lt;li&gt;High resolution: adjustable, maximum support for native resolution of Android terminals&lt;/li&gt; 
 &lt;li&gt;Telegram Group：&lt;a href=&quot;https://t.me/+Ylf_5V_rDCMyODQ1&quot;&gt;https://t.me/+Ylf_5V_rDCMyODQ1&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://lrbnfell4p.feishu.cn/drive/folder/Hqckfxj5el1Wjpd9uezcX71lnBh&quot;&gt;QuickAssistant&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Group control&lt;/h2&gt; 
&lt;p&gt;You can control all your phones at the same time.&lt;/p&gt; 
&lt;p&gt;&lt;img src=&quot;https://raw.githubusercontent.com/barry-ran/QtScrcpy/dev/docs/image/group-control.gif&quot; alt=&quot;group-control-demo&quot; /&gt;&lt;/p&gt; 
&lt;h2&gt;Star History&lt;/h2&gt; 
&lt;p&gt;&lt;a href=&quot;https://star-history.com/#barry-ran/QtScrcpy&amp;amp;Date&quot;&gt;&lt;img src=&quot;https://api.star-history.com/svg?repos=barry-ran/QtScrcpy&amp;amp;type=Date&quot; alt=&quot;Star History Chart&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;h2&gt;Thanks&lt;/h2&gt; 
&lt;p&gt;QtScrcpy is based on &lt;a href=&quot;https://github.com/Genymobile&quot;&gt;Genymobile&lt;/a&gt;&#39;s &lt;a href=&quot;https://github.com/Genymobile/scrcpy&quot;&gt;scrcpy&lt;/a&gt; project. Thanks a lot!&lt;/p&gt; 
&lt;p&gt;The difference between QtScrcpy and the original scrcpy is as follows:&lt;/p&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;key points&lt;/th&gt; 
   &lt;th style=&quot;text-align:center&quot;&gt;scrcpy&lt;/th&gt; 
   &lt;th style=&quot;text-align:center&quot;&gt;QtScrcpy&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;ui&lt;/td&gt; 
   &lt;td style=&quot;text-align:center&quot;&gt;sdl&lt;/td&gt; 
   &lt;td style=&quot;text-align:center&quot;&gt;qt&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;video encode&lt;/td&gt; 
   &lt;td style=&quot;text-align:center&quot;&gt;ffmpeg&lt;/td&gt; 
   &lt;td style=&quot;text-align:center&quot;&gt;ffmpeg&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;video render&lt;/td&gt; 
   &lt;td style=&quot;text-align:center&quot;&gt;sdl&lt;/td&gt; 
   &lt;td style=&quot;text-align:center&quot;&gt;opengl&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;cross-platform&lt;/td&gt; 
   &lt;td style=&quot;text-align:center&quot;&gt;self implemented&lt;/td&gt; 
   &lt;td style=&quot;text-align:center&quot;&gt;provided by Qt&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;language&lt;/td&gt; 
   &lt;td style=&quot;text-align:center&quot;&gt;C&lt;/td&gt; 
   &lt;td style=&quot;text-align:center&quot;&gt;C++&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;style&lt;/td&gt; 
   &lt;td style=&quot;text-align:center&quot;&gt;sync&lt;/td&gt; 
   &lt;td style=&quot;text-align:center&quot;&gt;async&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;keymap&lt;/td&gt; 
   &lt;td style=&quot;text-align:center&quot;&gt;no custom keymap&lt;/td&gt; 
   &lt;td style=&quot;text-align:center&quot;&gt;support custom keymap&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;build&lt;/td&gt; 
   &lt;td style=&quot;text-align:center&quot;&gt;meson+gradle&lt;/td&gt; 
   &lt;td style=&quot;text-align:center&quot;&gt;qmake or CMake&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;ul&gt; 
 &lt;li&gt;It&#39;s very easy to customize your GUI with Qt&lt;/li&gt; 
 &lt;li&gt;Asynchronous programming of Qt-based signal slot mechanism improves performance&lt;/li&gt; 
 &lt;li&gt;Easy to learn&lt;/li&gt; 
 &lt;li&gt;Add support for multi-touch&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Learn&lt;/h2&gt; 
&lt;p&gt;If you are interested in it and want to learn how it works but do not know how to get started, you can choose to purchase my recorded video lessons. It details the development architecture and the development process of the entire software and helps you develop QtScrcpy from scratch.&lt;/p&gt; 
&lt;p&gt;Course introduction：&lt;a href=&quot;https://blog.csdn.net/rankun1/article/details/87970523&quot;&gt;https://blog.csdn.net/rankun1/article/details/87970523&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;You can join Telegram Group for QtScrcpy and exchange ideas with like-minded friends.：&lt;/p&gt; 
&lt;p&gt;Telegram Group：&lt;a href=&quot;https://t.me/+EnQNmb47C_liYmRl&quot;&gt;https://t.me/+EnQNmb47C_liYmRl&lt;/a&gt;&lt;/p&gt; 
&lt;h2&gt;Requirements&lt;/h2&gt; 
&lt;p&gt;Android API &amp;gt;= 21 (Android 5.0).&lt;/p&gt; 
&lt;p&gt;Make sure you have enabled &lt;a href=&quot;https://developer.android.com/studio/command-line/adb.html#Enabling&quot;&gt;ADB debugging&lt;/a&gt; on your device(s).&lt;/p&gt; 
&lt;h2&gt;Download&lt;/h2&gt; 
&lt;h3&gt;Windows&lt;/h3&gt; 
&lt;p&gt;On Windows, for simplicity, prebuilt archives with all the dependencies (including ADB) are available at Releases:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/barry-ran/QtScrcpy/releases&quot;&gt;&lt;code&gt;QtScrcpy&lt;/code&gt;&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;or you can &lt;a href=&quot;https://raw.githubusercontent.com/barry-ran/QtScrcpy/dev/#Build&quot;&gt;build it yourself&lt;/a&gt;&lt;/p&gt; 
&lt;h3&gt;Mac OS&lt;/h3&gt; 
&lt;p&gt;On Mac OS, for simplicity, prebuilt archives with all the dependencies (including ADB) are available at Releases:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/barry-ran/QtScrcpy/releases&quot;&gt;&lt;code&gt;QtScrcpy&lt;/code&gt;&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;or you can &lt;a href=&quot;https://raw.githubusercontent.com/barry-ran/QtScrcpy/dev/#Build&quot;&gt;build it yourself&lt;/a&gt;&lt;/p&gt; 
&lt;h3&gt;Linux&lt;/h3&gt; 
&lt;p&gt;For Arch Linux Users, you can use AUR to install: &lt;code&gt;yay -Syu qtscrcpy&lt;/code&gt; (may be outdated; maintainer: &lt;a href=&quot;https://aur.archlinux.org/account/yochananmarqos&quot;&gt;yochananmarqos&lt;/a&gt;)&lt;/p&gt; 
&lt;p&gt;For users in other distros, you can use the prebuilt archives from Releases:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/barry-ran/QtScrcpy/releases&quot;&gt;&lt;code&gt;QtScrcpy&lt;/code&gt;&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;or you can get it at &lt;a href=&quot;https://github.com/barry-ran/QtScrcpy/actions/workflows/ubuntu.yml&quot;&gt;GitHub Actions&lt;/a&gt;, in branch &lt;code&gt;dev&lt;/code&gt; and download the latest artifact.&lt;/p&gt; 
&lt;p&gt;or you can &lt;a href=&quot;https://raw.githubusercontent.com/barry-ran/QtScrcpy/dev/#Build&quot;&gt;build it yourself&lt;/a&gt; (not recommended, get it in Actions if you can)&lt;/p&gt; 
&lt;h2&gt;Run&lt;/h2&gt; 
&lt;p&gt;Connect to your Android device on your computer, then run the program and click &lt;code&gt;USB connect&lt;/code&gt; or &lt;code&gt;WiFi connect&lt;/code&gt;&lt;/p&gt; 
&lt;h3&gt;Wireless connection steps (ensure that the mobile phone and PC are on the same LAN):&lt;/h3&gt; 
&lt;ol&gt; 
 &lt;li&gt;Enable USB debugging in developer options on the Android device&lt;/li&gt; 
 &lt;li&gt;Connect the Android device to the computer via USB&lt;/li&gt; 
 &lt;li&gt;Click update device, and you will see that the device number is updated&lt;/li&gt; 
 &lt;li&gt;Click get device IP&lt;/li&gt; 
 &lt;li&gt;Click start adbd&lt;/li&gt; 
 &lt;li&gt;Click wireless connect&lt;/li&gt; 
 &lt;li&gt;Click update device again, and another device with an IP address will be found. Select this device.&lt;/li&gt; 
 &lt;li&gt;Click start service&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;Note: it is not necessary to keep your Android device connected via USB after you start adbd.&lt;/p&gt; 
&lt;h2&gt;Interface button introduction：&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt; &lt;p&gt;Start config: function parameter settings before starting the service&lt;/p&gt; &lt;p&gt;You can set the bit rate, resolution, recording format, and video save path of the locally recorded video.&lt;/p&gt; 
  &lt;ul&gt; 
   &lt;li&gt;Background record: the Android device screen is not displayed after starting the service. It is recorded in the background.&lt;/li&gt; 
   &lt;li&gt;Always on top: the video window for Android devices will be kept on the top&lt;/li&gt; 
   &lt;li&gt;Close screen: automatically turn off the Android device screen to save power after starting the service&lt;/li&gt; 
   &lt;li&gt;Reverse connection: service startup mode. You can uncheck it if you experience connection failure with a message &lt;code&gt;more than one device&lt;/code&gt;&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;Refresh devices: Refresh the currently connected device&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;Start service: connect to the Android device&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;Stop service: disconnect from the Android device&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;Stop all services: disconnect all connected Android devices&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;Get device IP: Get the IP address of the Android device and update it to the &quot;Wireless&quot; area for the ease of wireless connection setting.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;Start adbd: Start the adbd service of the Android device. You must start it before the wireless connection.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;Wireless connect: Connect to Android devices wirelessly&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;Wireless disconnect: Disconnect wirelessly connected Android devices&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;adb command: execute customized ADB commands (blocking commands are not supported now, such as a shell)&lt;/p&gt; &lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;The main function&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt; &lt;p&gt;Display Android device screens in real-time&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;Real-time mouse and keyboard control of Android devices&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;Screen recording&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;Screenshot to png&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;Wireless connection&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;Supports multiple device connections&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;Full-screen display&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;Display on the top&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;Install apk: drag and drop apk to the video window to install&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;Transfer files: Drag files to the video window to send files to Android devices&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;Background recording: record only, no display interface&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;Copy-paste&lt;/p&gt; &lt;p&gt;It is possible to synchronize clipboards between the computer and the device, in both directions:&lt;/p&gt; 
  &lt;ul&gt; 
   &lt;li&gt;&lt;code&gt;Ctrl + c&lt;/code&gt; copies the device clipboard to the computer clipboard;&lt;/li&gt; 
   &lt;li&gt;&lt;code&gt;Ctrl + Shift + v&lt;/code&gt; copies the computer clipboard to the device clipboard;&lt;/li&gt; 
   &lt;li&gt;&lt;code&gt;Ctrl + v&lt;/code&gt; &lt;em&gt;pastes&lt;/em&gt; the computer clipboard as a sequence of text events (non-ASCII characters does not yet work).&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;Group control&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;Sync device speaker sound to the computer (based on &lt;a href=&quot;https://github.com/rom1v/sndcpy&quot;&gt;sndcpy&lt;/a&gt;, Android 10+ only)&lt;/p&gt; &lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Shortcuts&lt;/h2&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Action&lt;/th&gt; 
   &lt;th style=&quot;text-align:left&quot;&gt;Shortcut (Windows)&lt;/th&gt; 
   &lt;th style=&quot;text-align:left&quot;&gt;Shortcut (macOS)&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Switch fullscreen mode&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;code&gt;Ctrl&lt;/code&gt;+&lt;code&gt;f&lt;/code&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;code&gt;Cmd&lt;/code&gt;+&lt;code&gt;f&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Resize window to 1:1 (pixel-perfect)&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;code&gt;Ctrl&lt;/code&gt;+&lt;code&gt;g&lt;/code&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;code&gt;Cmd&lt;/code&gt;+&lt;code&gt;g&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Resize window to remove black borders&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;code&gt;Ctrl&lt;/code&gt;+&lt;code&gt;w&lt;/code&gt; | &lt;em&gt;Double-click¹&lt;/em&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;code&gt;Cmd&lt;/code&gt;+&lt;code&gt;w&lt;/code&gt; | &lt;em&gt;Double-click¹&lt;/em&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Click on &lt;code&gt;HOME&lt;/code&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;code&gt;Ctrl&lt;/code&gt;+&lt;code&gt;h&lt;/code&gt; | &lt;em&gt;Middle-click&lt;/em&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;code&gt;Ctrl&lt;/code&gt;+&lt;code&gt;h&lt;/code&gt; | &lt;em&gt;Middle-click&lt;/em&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Click on &lt;code&gt;BACK&lt;/code&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;code&gt;Ctrl&lt;/code&gt;+&lt;code&gt;b&lt;/code&gt; | &lt;em&gt;Right-click²&lt;/em&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;code&gt;Cmd&lt;/code&gt;+&lt;code&gt;b&lt;/code&gt; | &lt;em&gt;Right-click²&lt;/em&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Click on &lt;code&gt;APP_SWITCH&lt;/code&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;code&gt;Ctrl&lt;/code&gt;+&lt;code&gt;s&lt;/code&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;code&gt;Cmd&lt;/code&gt;+&lt;code&gt;s&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Click on &lt;code&gt;MENU&lt;/code&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;code&gt;Ctrl&lt;/code&gt;+&lt;code&gt;m&lt;/code&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;code&gt;Ctrl&lt;/code&gt;+&lt;code&gt;m&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Click on &lt;code&gt;VOLUME_UP&lt;/code&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;code&gt;Ctrl&lt;/code&gt;+&lt;code&gt;↑&lt;/code&gt; &lt;em&gt;(up)&lt;/em&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;code&gt;Cmd&lt;/code&gt;+&lt;code&gt;↑&lt;/code&gt; &lt;em&gt;(up)&lt;/em&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Click on &lt;code&gt;VOLUME_DOWN&lt;/code&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;code&gt;Ctrl&lt;/code&gt;+&lt;code&gt;↓&lt;/code&gt; &lt;em&gt;(down)&lt;/em&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;code&gt;Cmd&lt;/code&gt;+&lt;code&gt;↓&lt;/code&gt; &lt;em&gt;(down)&lt;/em&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Click on &lt;code&gt;POWER&lt;/code&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;code&gt;Ctrl&lt;/code&gt;+&lt;code&gt;p&lt;/code&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;code&gt;Cmd&lt;/code&gt;+&lt;code&gt;p&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Power on&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;em&gt;Right-click²&lt;/em&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;em&gt;Right-click²&lt;/em&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Turn device screen off (keep mirroring)&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;code&gt;Ctrl&lt;/code&gt;+&lt;code&gt;o&lt;/code&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;code&gt;Cmd&lt;/code&gt;+&lt;code&gt;o&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Expand notification panel&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;code&gt;Ctrl&lt;/code&gt;+&lt;code&gt;n&lt;/code&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;code&gt;Cmd&lt;/code&gt;+&lt;code&gt;n&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Collapse notification panel&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;code&gt;Ctrl&lt;/code&gt;+&lt;code&gt;Shift&lt;/code&gt;+&lt;code&gt;n&lt;/code&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;code&gt;Cmd&lt;/code&gt;+&lt;code&gt;Shift&lt;/code&gt;+&lt;code&gt;n&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Copy to clipboard³&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;code&gt;Ctrl&lt;/code&gt;+&lt;code&gt;c&lt;/code&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;code&gt;Cmd&lt;/code&gt;+&lt;code&gt;c&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Cut to clipboard³&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;code&gt;Ctrl&lt;/code&gt;+&lt;code&gt;x&lt;/code&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;code&gt;Cmd&lt;/code&gt;+&lt;code&gt;x&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Synchronize clipboards and paste³&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;code&gt;Ctrl&lt;/code&gt;+&lt;code&gt;v&lt;/code&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;code&gt;Cmd&lt;/code&gt;+&lt;code&gt;v&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Inject computer clipboard text&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;code&gt;Ctrl&lt;/code&gt;+&lt;code&gt;Shift&lt;/code&gt;+&lt;code&gt;v&lt;/code&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;code&gt;Cmd&lt;/code&gt;+&lt;code&gt;Shift&lt;/code&gt;+&lt;code&gt;v&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;p&gt;&lt;em&gt;¹Double-click on black borders to remove them.&lt;/em&gt;&lt;/p&gt; 
&lt;p&gt;&lt;em&gt;²Right-click turns the screen on if it was off, presses BACK otherwise.&lt;/em&gt;&lt;/p&gt; 
&lt;p&gt;&lt;em&gt;³Only on Android &amp;gt;= 7.&lt;/em&gt;&lt;/p&gt; 
&lt;h2&gt;TODO&lt;/h2&gt; 
&lt;p&gt;&lt;a href=&quot;https://raw.githubusercontent.com/barry-ran/QtScrcpy/dev/docs/TODO.md&quot;&gt;TODO&lt;/a&gt;&lt;/p&gt; 
&lt;h2&gt;FAQ&lt;/h2&gt; 
&lt;p&gt;&lt;a href=&quot;https://raw.githubusercontent.com/barry-ran/QtScrcpy/dev/docs/FAQ.md&quot;&gt;FAQ&lt;/a&gt;&lt;/p&gt; 
&lt;h2&gt;DEVELOP&lt;/h2&gt; 
&lt;p&gt;&lt;a href=&quot;https://raw.githubusercontent.com/barry-ran/QtScrcpy/dev/docs/DEVELOP.md&quot;&gt;DEVELOP&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;Everyone is welcome to maintain this project and contribute your own code, but please follow these requirements:&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;Please open PRs to the dev branch instead of the master branch&lt;/li&gt; 
 &lt;li&gt;Please rebase the original project before opening PRs&lt;/li&gt; 
 &lt;li&gt;Please submit PRs on the principle of &quot;small amounts, many times&quot; (one PR for a change is recommended)&lt;/li&gt; 
 &lt;li&gt;Please keep the code style consistent with the existing style.&lt;/li&gt; 
&lt;/ol&gt; 
&lt;h2&gt;Why develop QtScrcpy?&lt;/h2&gt; 
&lt;p&gt;There are several reasons listed below according to importance (high to low).&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;In the process of learning Qt, I need a real project to try.&lt;/li&gt; 
 &lt;li&gt;I have some background skills in audio and video and I am interested in them.&lt;/li&gt; 
 &lt;li&gt;I have some Android development skills. But I have used it for a long time. I want to consolidate it.&lt;/li&gt; 
 &lt;li&gt;I found scrcpy and decided to re-make it with the new technology stack (C++ + Qt + Opengl + FFmpeg).&lt;/li&gt; 
&lt;/ol&gt; 
&lt;h2&gt;Build&lt;/h2&gt; 
&lt;p&gt;All the dependencies are provided and it is easy to compile.&lt;/p&gt; 
&lt;h3&gt;QtScrcpy&lt;/h3&gt; 
&lt;h4&gt;Non-Arch Linux Users&lt;/h4&gt; 
&lt;ol&gt; 
 &lt;li&gt;Set up the Qt development environment with the official Qt installer or third-party tools such as &lt;a href=&quot;https://github.com/miurahr/aqtinstall&quot;&gt;aqt&lt;/a&gt; on the target platform. Qt version bigger than 5.12 is required. (use MSVC 2019 on Windows)&lt;/li&gt; 
 &lt;li&gt;Clone the project with &lt;code&gt;git clone --recurse-submodules git@github.com:barry-ran/QtScrcpy.git&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;For Windows, open CMakeLists.txt with QtCreator and compile Release&lt;/li&gt; 
 &lt;li&gt;For Linux, directly run &lt;code&gt;./ci/linux/build_for_linux.sh &quot;Release&quot;&lt;/code&gt; Note: compiled artifacts are located at &lt;code&gt;output/x64/Release&lt;/code&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;h4&gt;Arch Linux Users&lt;/h4&gt; 
&lt;ol&gt; 
 &lt;li&gt;Install packages: &lt;code&gt;base-devel cmake qt5-base qt5-multimedia qt5-x11extras&lt;/code&gt; (&lt;code&gt;qtcreator&lt;/code&gt; is recommended)&lt;/li&gt; 
 &lt;li&gt;Clone the project with &lt;code&gt;git clone --recurse-submodules git@github.com:barry-ran/QtScrcpy.git&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;Run &lt;code&gt;./ci/linux/build_for_linux.sh &quot;Release&quot;&lt;/code&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;h3&gt;Scrcpy-Server&lt;/h3&gt; 
&lt;ol&gt; 
 &lt;li&gt;Set up Android development environment on the target platform&lt;/li&gt; 
 &lt;li&gt;Open server project in project root with Android Studio&lt;/li&gt; 
 &lt;li&gt;The first time you open it, if you do not have the corresponding version of Gradle, you will be prompted to find Gradle, whether to upgrade Gradle or create it. Select Cancel. After cancelling, you will be prompted to select the location of existing Gradle. Cancel it too and it will download automatically.&lt;/li&gt; 
 &lt;li&gt;After compiling the apk, rename it to scrcpy-server and replace QtScrcpy/QtScrcpyCore/src/third_party/scrcpy-server.&lt;/li&gt; 
&lt;/ol&gt; 
&lt;h2&gt;Licence&lt;/h2&gt; 
&lt;p&gt;Since it is based on scrcpy, it uses the same license as scrcpy&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Copyright (C) 2025 Rankun

Licensed under the Apache License, Version 2.0 (the &quot;License&quot;);
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an &quot;AS IS&quot; BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2&gt;About the author&lt;/h2&gt; 
&lt;p&gt;&lt;a href=&quot;https://blog.csdn.net/rankun1&quot;&gt;Barry CSDN&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;An ordinary programmer, working mainly in C++ for desktop client development, graduated from Shandong for more than a year of steel simulation education software, and later moved to Shanghai to work in security, online education-related fields, familiar with audio and video. I have an understanding of audio and video fields such as voice calls, live education, video conferencing and other related solutions. I also have experience in Android, Linux servers and other kinds of development.&lt;/p&gt; 
&lt;h2&gt;Contributors&lt;/h2&gt; 
&lt;h3&gt;Code Contributors&lt;/h3&gt; 
&lt;p&gt;This project exists thanks to all the people who contribute. [&lt;a href=&quot;https://raw.githubusercontent.com/barry-ran/QtScrcpy/dev/CONTRIBUTING.md&quot;&gt;Contribute&lt;/a&gt;]. &lt;a href=&quot;https://github.com/barry-ran/QtScrcpy/graphs/contributors&quot;&gt;&lt;img src=&quot;https://opencollective.com/QtScrcpy/contributors.svg?width=890&amp;amp;button=false&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;h3&gt;Financial Contributors&lt;/h3&gt; 
&lt;p&gt;Become a financial contributor and help us sustain our community. [&lt;a href=&quot;https://opencollective.com/QtScrcpy/contribute&quot;&gt;Contribute&lt;/a&gt;]&lt;/p&gt; 
&lt;h4&gt;Individuals&lt;/h4&gt; 
&lt;p&gt;&lt;a href=&quot;https://opencollective.com/QtScrcpy&quot;&gt;&lt;img src=&quot;https://opencollective.com/QtScrcpy/individuals.svg?width=890&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;h4&gt;Organizations&lt;/h4&gt; 
&lt;p&gt;Support this project with your organization. Your logo will show up here with a link to your website. [&lt;a href=&quot;https://opencollective.com/QtScrcpy/contribute&quot;&gt;Contribute&lt;/a&gt;]&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://opencollective.com/QtScrcpy/organization/0/website&quot;&gt;&lt;img src=&quot;https://opencollective.com/QtScrcpy/organization/0/avatar.svg?sanitize=true&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://opencollective.com/QtScrcpy/organization/1/website&quot;&gt;&lt;img src=&quot;https://opencollective.com/QtScrcpy/organization/1/avatar.svg?sanitize=true&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://opencollective.com/QtScrcpy/organization/2/website&quot;&gt;&lt;img src=&quot;https://opencollective.com/QtScrcpy/organization/2/avatar.svg?sanitize=true&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://opencollective.com/QtScrcpy/organization/3/website&quot;&gt;&lt;img src=&quot;https://opencollective.com/QtScrcpy/organization/3/avatar.svg?sanitize=true&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://opencollective.com/QtScrcpy/organization/4/website&quot;&gt;&lt;img src=&quot;https://opencollective.com/QtScrcpy/organization/4/avatar.svg?sanitize=true&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://opencollective.com/QtScrcpy/organization/5/website&quot;&gt;&lt;img src=&quot;https://opencollective.com/QtScrcpy/organization/5/avatar.svg?sanitize=true&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://opencollective.com/QtScrcpy/organization/6/website&quot;&gt;&lt;img src=&quot;https://opencollective.com/QtScrcpy/organization/6/avatar.svg?sanitize=true&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://opencollective.com/QtScrcpy/organization/7/website&quot;&gt;&lt;img src=&quot;https://opencollective.com/QtScrcpy/organization/7/avatar.svg?sanitize=true&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://opencollective.com/QtScrcpy/organization/8/website&quot;&gt;&lt;img src=&quot;https://opencollective.com/QtScrcpy/organization/8/avatar.svg?sanitize=true&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://opencollective.com/QtScrcpy/organization/9/website&quot;&gt;&lt;img src=&quot;https://opencollective.com/QtScrcpy/organization/9/avatar.svg?sanitize=true&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>ArduPilot/ardupilot</title>
      <link>https://github.com/ArduPilot/ardupilot</link>
      <description>&lt;p&gt;ArduPlane, ArduCopter, ArduRover, ArduSub source&lt;/p&gt;&lt;hr&gt;&lt;h1&gt;ArduPilot Project&lt;/h1&gt; 
&lt;p&gt;&lt;a href=&quot;https://ardupilot.org/discord&quot;&gt;&lt;img src=&quot;https://img.shields.io/discord/674039678562861068.svg?sanitize=true&quot; alt=&quot;Discord&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://github.com/ArduPilot/ardupilot/actions/workflows/test_sitl_copter.yml&quot;&gt;&lt;img src=&quot;https://github.com/ArduPilot/ardupilot/workflows/test%20copter/badge.svg?branch=master&quot; alt=&quot;Test Copter&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://github.com/ArduPilot/ardupilot/actions/workflows/test_sitl_plane.yml&quot;&gt;&lt;img src=&quot;https://github.com/ArduPilot/ardupilot/workflows/test%20plane/badge.svg?branch=master&quot; alt=&quot;Test Plane&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://github.com/ArduPilot/ardupilot/actions/workflows/test_sitl_rover.yml&quot;&gt;&lt;img src=&quot;https://github.com/ArduPilot/ardupilot/workflows/test%20rover/badge.svg?branch=master&quot; alt=&quot;Test Rover&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://github.com/ArduPilot/ardupilot/actions/workflows/test_sitl_sub.yml&quot;&gt;&lt;img src=&quot;https://github.com/ArduPilot/ardupilot/workflows/test%20sub/badge.svg?branch=master&quot; alt=&quot;Test Sub&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://github.com/ArduPilot/ardupilot/actions/workflows/test_sitl_tracker.yml&quot;&gt;&lt;img src=&quot;https://github.com/ArduPilot/ardupilot/workflows/test%20tracker/badge.svg?branch=master&quot; alt=&quot;Test Tracker&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://github.com/ArduPilot/ardupilot/actions/workflows/test_sitl_periph.yml&quot;&gt;&lt;img src=&quot;https://github.com/ArduPilot/ardupilot/workflows/test%20ap_periph/badge.svg?branch=master&quot; alt=&quot;Test AP_Periph&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://github.com/ArduPilot/ardupilot/actions/workflows/test_chibios.yml&quot;&gt;&lt;img src=&quot;https://github.com/ArduPilot/ardupilot/workflows/test%20chibios/badge.svg?branch=master&quot; alt=&quot;Test Chibios&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://github.com/ArduPilot/ardupilot/actions/workflows/test_linux_sbc.yml&quot;&gt;&lt;img src=&quot;https://github.com/ArduPilot/ardupilot/workflows/test%20Linux%20SBC/badge.svg?branch=master&quot; alt=&quot;Test Linux SBC&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://github.com/ArduPilot/ardupilot/actions/workflows/test_replay.yml&quot;&gt;&lt;img src=&quot;https://github.com/ArduPilot/ardupilot/workflows/test%20replay/badge.svg?branch=master&quot; alt=&quot;Test Replay&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://github.com/ArduPilot/ardupilot/actions/workflows/test_unit_tests.yml&quot;&gt;&lt;img src=&quot;https://github.com/ArduPilot/ardupilot/workflows/test%20unit%20tests%20and%20sitl%20building/badge.svg?branch=master&quot; alt=&quot;Test Unit Tests&quot; /&gt;&lt;/a&gt;&lt;a href=&quot;https://github.com/ArduPilot/ardupilot/actions/workflows/test_size.yml&quot;&gt;&lt;img src=&quot;https://github.com/ArduPilot/ardupilot/actions/workflows/test_size.yml/badge.svg?sanitize=true&quot; alt=&quot;test size&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://github.com/ArduPilot/ardupilot/actions/workflows/test_environment.yml&quot;&gt;&lt;img src=&quot;https://github.com/ArduPilot/ardupilot/actions/workflows/test_environment.yml/badge.svg?branch=master&quot; alt=&quot;Test Environment Setup&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://github.com/ArduPilot/ardupilot/actions/workflows/cygwin_build.yml&quot;&gt;&lt;img src=&quot;https://github.com/ArduPilot/ardupilot/actions/workflows/cygwin_build.yml/badge.svg?sanitize=true&quot; alt=&quot;Cygwin Build&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://github.com/ArduPilot/ardupilot/actions/workflows/macos_build.yml&quot;&gt;&lt;img src=&quot;https://github.com/ArduPilot/ardupilot/actions/workflows/macos_build.yml/badge.svg?sanitize=true&quot; alt=&quot;Macos Build&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://scan.coverity.com/projects/ardupilot-ardupilot&quot;&gt;&lt;img src=&quot;https://scan.coverity.com/projects/5331/badge.svg?sanitize=true&quot; alt=&quot;Coverity Scan Build Status&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://github.com/ArduPilot/ardupilot/actions/workflows/test_coverage.yml&quot;&gt;&lt;img src=&quot;https://github.com/ArduPilot/ardupilot/actions/workflows/test_coverage.yml/badge.svg?branch=master&quot; alt=&quot;Test Coverage&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://autotest.ardupilot.org/&quot;&gt;&lt;img src=&quot;https://autotest.ardupilot.org/autotest-badge.svg?sanitize=true&quot; alt=&quot;Autotest Status&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://www.bestpractices.dev/projects/10598&quot;&gt;&lt;img src=&quot;https://www.bestpractices.dev/projects/10598/badge&quot; alt=&quot;OpenSSF Best Practices&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;ArduPilot is the most advanced, full-featured, and reliable open source autopilot software available. It has been under development since 2010 by a diverse team of professional engineers, computer scientists, and community contributors. Our autopilot software is capable of controlling almost any vehicle system imaginable, from conventional airplanes, quad planes, multi-rotors, and helicopters to rovers, boats, balance bots, and even submarines. It is continually being expanded to provide support for new emerging vehicle types.&lt;/p&gt; 
&lt;h2&gt;The ArduPilot project is made up of&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt; &lt;p&gt;ArduCopter: &lt;a href=&quot;https://github.com/ArduPilot/ardupilot/tree/master/ArduCopter&quot;&gt;code&lt;/a&gt;, &lt;a href=&quot;https://ardupilot.org/copter/index.html&quot;&gt;wiki&lt;/a&gt;&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;ArduPlane: &lt;a href=&quot;https://github.com/ArduPilot/ardupilot/tree/master/ArduPlane&quot;&gt;code&lt;/a&gt;, &lt;a href=&quot;https://ardupilot.org/plane/index.html&quot;&gt;wiki&lt;/a&gt;&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;Rover: &lt;a href=&quot;https://github.com/ArduPilot/ardupilot/tree/master/Rover&quot;&gt;code&lt;/a&gt;, &lt;a href=&quot;https://ardupilot.org/rover/index.html&quot;&gt;wiki&lt;/a&gt;&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;ArduSub : &lt;a href=&quot;https://github.com/ArduPilot/ardupilot/tree/master/ArduSub&quot;&gt;code&lt;/a&gt;, &lt;a href=&quot;http://ardusub.com/&quot;&gt;wiki&lt;/a&gt;&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;Antenna Tracker : &lt;a href=&quot;https://github.com/ArduPilot/ardupilot/tree/master/AntennaTracker&quot;&gt;code&lt;/a&gt;, &lt;a href=&quot;https://ardupilot.org/antennatracker/index.html&quot;&gt;wiki&lt;/a&gt;&lt;/p&gt; &lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;User Support &amp;amp; Discussion Forums&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt; &lt;p&gt;Support Forum: &lt;a href=&quot;https://discuss.ardupilot.org/&quot;&gt;https://discuss.ardupilot.org/&lt;/a&gt;&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;Community Site: &lt;a href=&quot;https://ardupilot.org&quot;&gt;https://ardupilot.org&lt;/a&gt;&lt;/p&gt; &lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Developer Information&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt; &lt;p&gt;Github repository: &lt;a href=&quot;https://github.com/ArduPilot/ardupilot&quot;&gt;https://github.com/ArduPilot/ardupilot&lt;/a&gt;&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;Main developer wiki: &lt;a href=&quot;https://ardupilot.org/dev/&quot;&gt;https://ardupilot.org/dev/&lt;/a&gt;&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;Developer discussion: &lt;a href=&quot;https://discuss.ardupilot.org&quot;&gt;https://discuss.ardupilot.org&lt;/a&gt;&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;Developer chat: &lt;a href=&quot;https://discord.com/channels/ardupilot&quot;&gt;https://discord.com/channels/ardupilot&lt;/a&gt;&lt;/p&gt; &lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Top Contributors&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/ArduPilot/ardupilot/graphs/contributors&quot;&gt;Flight code contributors&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/ArduPilot/ardupilot_wiki/graphs/contributors&quot;&gt;Wiki contributors&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://discuss.ardupilot.org/u?order=post_count&amp;amp;period=quarterly&quot;&gt;Most active support forum users&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://ardupilot.org/about/Partners&quot;&gt;Partners who contribute financially&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;How To Get Involved&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt; &lt;p&gt;The ArduPilot project is open source and we encourage participation and code contributions: &lt;a href=&quot;https://ardupilot.org/dev/docs/contributing.html&quot;&gt;guidelines for contributors to the ardupilot codebase&lt;/a&gt;&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;We have an active group of Beta Testers to help us improve our code: &lt;a href=&quot;https://ardupilot.org/dev/docs/release-procedures.html&quot;&gt;release procedures&lt;/a&gt;&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;Desired Enhancements and Bugs can be posted to the &lt;a href=&quot;https://github.com/ArduPilot/ardupilot/issues&quot;&gt;issues list&lt;/a&gt;.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;Help other users with log analysis in the &lt;a href=&quot;https://discuss.ardupilot.org/&quot;&gt;support forums&lt;/a&gt;&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;Improve the wiki and chat with other &lt;a href=&quot;https://discord.com/channels/ardupilot&quot;&gt;wiki editors on Discord #documentation&lt;/a&gt;&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;Contact the developers on one of the &lt;a href=&quot;https://ardupilot.org/copter/docs/common-contact-us.html&quot;&gt;communication channels&lt;/a&gt;&lt;/p&gt; &lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;License&lt;/h2&gt; 
&lt;p&gt;The ArduPilot project is licensed under the GNU General Public License, version 3.&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt; &lt;p&gt;&lt;a href=&quot;https://ardupilot.org/dev/docs/license-gplv3.html&quot;&gt;Overview of license&lt;/a&gt;&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;a href=&quot;https://github.com/ArduPilot/ardupilot/raw/master/COPYING.txt&quot;&gt;Full Text&lt;/a&gt;&lt;/p&gt; &lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Maintainers&lt;/h2&gt; 
&lt;p&gt;ArduPilot is comprised of several parts, vehicles and boards. The list below contains the people that regularly contribute to the project and are responsible for reviewing patches on their specific area.&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/tridge&quot;&gt;Andrew Tridgell&lt;/a&gt;: 
  &lt;ul&gt; 
   &lt;li&gt;&lt;em&gt;&lt;strong&gt;Vehicle&lt;/strong&gt;&lt;/em&gt;: Plane, AntennaTracker&lt;/li&gt; 
   &lt;li&gt;&lt;em&gt;&lt;strong&gt;Board&lt;/strong&gt;&lt;/em&gt;: Pixhawk, Pixhawk2, PixRacer&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/oxinarf&quot;&gt;Francisco Ferreira&lt;/a&gt;: 
  &lt;ul&gt; 
   &lt;li&gt;&lt;em&gt;&lt;strong&gt;Bug Master&lt;/strong&gt;&lt;/em&gt;&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/gmorph&quot;&gt;Grant Morphett&lt;/a&gt;: 
  &lt;ul&gt; 
   &lt;li&gt;&lt;em&gt;&lt;strong&gt;Vehicle&lt;/strong&gt;&lt;/em&gt;: Rover&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/williangalvani&quot;&gt;Willian Galvani&lt;/a&gt;: 
  &lt;ul&gt; 
   &lt;li&gt;&lt;em&gt;&lt;strong&gt;Vehicle&lt;/strong&gt;&lt;/em&gt;: Sub&lt;/li&gt; 
   &lt;li&gt;&lt;em&gt;&lt;strong&gt;Board&lt;/strong&gt;&lt;/em&gt;: Navigator&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/WickedShell&quot;&gt;Michael du Breuil&lt;/a&gt;: 
  &lt;ul&gt; 
   &lt;li&gt;&lt;em&gt;&lt;strong&gt;Subsystem&lt;/strong&gt;&lt;/em&gt;: Batteries&lt;/li&gt; 
   &lt;li&gt;&lt;em&gt;&lt;strong&gt;Subsystem&lt;/strong&gt;&lt;/em&gt;: GPS&lt;/li&gt; 
   &lt;li&gt;&lt;em&gt;&lt;strong&gt;Subsystem&lt;/strong&gt;&lt;/em&gt;: Scripting&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/peterbarker&quot;&gt;Peter Barker&lt;/a&gt;: 
  &lt;ul&gt; 
   &lt;li&gt;&lt;em&gt;&lt;strong&gt;Subsystem&lt;/strong&gt;&lt;/em&gt;: DataFlash, Tools&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/rmackay9&quot;&gt;Randy Mackay&lt;/a&gt;: 
  &lt;ul&gt; 
   &lt;li&gt;&lt;em&gt;&lt;strong&gt;Vehicle&lt;/strong&gt;&lt;/em&gt;: Copter, Rover, AntennaTracker&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/bugobliterator&quot;&gt;Siddharth Purohit&lt;/a&gt;: 
  &lt;ul&gt; 
   &lt;li&gt;&lt;em&gt;&lt;strong&gt;Subsystem&lt;/strong&gt;&lt;/em&gt;: CAN, Compass&lt;/li&gt; 
   &lt;li&gt;&lt;em&gt;&lt;strong&gt;Board&lt;/strong&gt;&lt;/em&gt;: Cube*&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/magicrub&quot;&gt;Tom Pittenger&lt;/a&gt;: 
  &lt;ul&gt; 
   &lt;li&gt;&lt;em&gt;&lt;strong&gt;Vehicle&lt;/strong&gt;&lt;/em&gt;: Plane&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/bnsgeyer&quot;&gt;Bill Geyer&lt;/a&gt;: 
  &lt;ul&gt; 
   &lt;li&gt;&lt;em&gt;&lt;strong&gt;Vehicle&lt;/strong&gt;&lt;/em&gt;: TradHeli&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/emilecastelnuovo&quot;&gt;Emile Castelnuovo&lt;/a&gt;: 
  &lt;ul&gt; 
   &lt;li&gt;&lt;em&gt;&lt;strong&gt;Board&lt;/strong&gt;&lt;/em&gt;: VRBrain&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/staroselskii&quot;&gt;Georgii Staroselskii&lt;/a&gt;: 
  &lt;ul&gt; 
   &lt;li&gt;&lt;em&gt;&lt;strong&gt;Board&lt;/strong&gt;&lt;/em&gt;: NavIO&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/guludo&quot;&gt;Gustavo José de Sousa&lt;/a&gt;: 
  &lt;ul&gt; 
   &lt;li&gt;&lt;em&gt;&lt;strong&gt;Subsystem&lt;/strong&gt;&lt;/em&gt;: Build system&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/jberaud&quot;&gt;Julien Beraud&lt;/a&gt;: 
  &lt;ul&gt; 
   &lt;li&gt;&lt;em&gt;&lt;strong&gt;Board&lt;/strong&gt;&lt;/em&gt;: Bebop &amp;amp; Bebop 2&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/lthall&quot;&gt;Leonard Hall&lt;/a&gt;: 
  &lt;ul&gt; 
   &lt;li&gt;&lt;em&gt;&lt;strong&gt;Subsystem&lt;/strong&gt;&lt;/em&gt;: Copter attitude control and navigation&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/Pedals2Paddles&quot;&gt;Matt Lawrence&lt;/a&gt;: 
  &lt;ul&gt; 
   &lt;li&gt;&lt;em&gt;&lt;strong&gt;Vehicle&lt;/strong&gt;&lt;/em&gt;: 3DR Solo &amp;amp; Solo based vehicles&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/badzz&quot;&gt;Matthias Badaire&lt;/a&gt;: 
  &lt;ul&gt; 
   &lt;li&gt;&lt;em&gt;&lt;strong&gt;Subsystem&lt;/strong&gt;&lt;/em&gt;: FRSky&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/mirkix&quot;&gt;Mirko Denecke&lt;/a&gt;: 
  &lt;ul&gt; 
   &lt;li&gt;&lt;em&gt;&lt;strong&gt;Board&lt;/strong&gt;&lt;/em&gt;: BBBmini, BeagleBone Blue, PocketPilot&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/priseborough&quot;&gt;Paul Riseborough&lt;/a&gt;: 
  &lt;ul&gt; 
   &lt;li&gt;&lt;em&gt;&lt;strong&gt;Subsystem&lt;/strong&gt;&lt;/em&gt;: AP_NavEKF2&lt;/li&gt; 
   &lt;li&gt;&lt;em&gt;&lt;strong&gt;Subsystem&lt;/strong&gt;&lt;/em&gt;: AP_NavEKF3&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/vmayoral&quot;&gt;Víctor Mayoral Vilches&lt;/a&gt;: 
  &lt;ul&gt; 
   &lt;li&gt;&lt;em&gt;&lt;strong&gt;Board&lt;/strong&gt;&lt;/em&gt;: PXF, Erle-Brain 2, PXFmini&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/amilcarlucas&quot;&gt;Amilcar Lucas&lt;/a&gt;: 
  &lt;ul&gt; 
   &lt;li&gt;&lt;em&gt;&lt;strong&gt;Subsystem&lt;/strong&gt;&lt;/em&gt;: Marvelmind&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/samuelctabor&quot;&gt;Samuel Tabor&lt;/a&gt;: 
  &lt;ul&gt; 
   &lt;li&gt;&lt;em&gt;&lt;strong&gt;Subsystem&lt;/strong&gt;&lt;/em&gt;: Soaring/Gliding&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/Hwurzburg&quot;&gt;Henry Wurzburg&lt;/a&gt;: 
  &lt;ul&gt; 
   &lt;li&gt;&lt;em&gt;&lt;strong&gt;Subsystem&lt;/strong&gt;&lt;/em&gt;: OSD&lt;/li&gt; 
   &lt;li&gt;&lt;em&gt;&lt;strong&gt;Site&lt;/strong&gt;&lt;/em&gt;: Wiki&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/IamPete1&quot;&gt;Peter Hall&lt;/a&gt;: 
  &lt;ul&gt; 
   &lt;li&gt;&lt;em&gt;&lt;strong&gt;Vehicle&lt;/strong&gt;&lt;/em&gt;: Tailsitters&lt;/li&gt; 
   &lt;li&gt;&lt;em&gt;&lt;strong&gt;Vehicle&lt;/strong&gt;&lt;/em&gt;: Sailboat&lt;/li&gt; 
   &lt;li&gt;&lt;em&gt;&lt;strong&gt;Subsystem&lt;/strong&gt;&lt;/em&gt;: Scripting&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/andyp1per&quot;&gt;Andy Piper&lt;/a&gt;: 
  &lt;ul&gt; 
   &lt;li&gt;&lt;em&gt;&lt;strong&gt;Subsystem&lt;/strong&gt;&lt;/em&gt;: Crossfire&lt;/li&gt; 
   &lt;li&gt;&lt;em&gt;&lt;strong&gt;Subsystem&lt;/strong&gt;&lt;/em&gt;: ESC&lt;/li&gt; 
   &lt;li&gt;&lt;em&gt;&lt;strong&gt;Subsystem&lt;/strong&gt;&lt;/em&gt;: OSD&lt;/li&gt; 
   &lt;li&gt;&lt;em&gt;&lt;strong&gt;Subsystem&lt;/strong&gt;&lt;/em&gt;: SmartAudio&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/yaapu&quot;&gt;Alessandro Apostoli&lt;/a&gt;: 
  &lt;ul&gt; 
   &lt;li&gt;&lt;em&gt;&lt;strong&gt;Subsystem&lt;/strong&gt;&lt;/em&gt;: Telemetry&lt;/li&gt; 
   &lt;li&gt;&lt;em&gt;&lt;strong&gt;Subsystem&lt;/strong&gt;&lt;/em&gt;: OSD&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/rishabsingh3003&quot;&gt;Rishabh Singh&lt;/a&gt;: 
  &lt;ul&gt; 
   &lt;li&gt;&lt;em&gt;&lt;strong&gt;Subsystem&lt;/strong&gt;&lt;/em&gt;: Avoidance/Proximity&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/davidbuzz&quot;&gt;David Bussenschutt&lt;/a&gt;: 
  &lt;ul&gt; 
   &lt;li&gt;&lt;em&gt;&lt;strong&gt;Subsystem&lt;/strong&gt;&lt;/em&gt;: ESP32,AP_HAL_ESP32&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/Silvanosky&quot;&gt;Charles Villard&lt;/a&gt;: 
  &lt;ul&gt; 
   &lt;li&gt;&lt;em&gt;&lt;strong&gt;Subsystem&lt;/strong&gt;&lt;/em&gt;: ESP32,AP_HAL_ESP32&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
&lt;/ul&gt;</description>
      
    </item>
    
    <item>
      <title>jrouwe/JoltPhysics</title>
      <link>https://github.com/jrouwe/JoltPhysics</link>
      <description>&lt;p&gt;A multi core friendly rigid body physics and collision detection library. Written in C++. Suitable for games and VR applications. Used by Horizon Forbidden West and Death Stranding 2.&lt;/p&gt;&lt;hr&gt;&lt;p&gt;&lt;a href=&quot;https://cla-assistant.io/jrouwe/JoltPhysics&quot;&gt;&lt;img src=&quot;https://cla-assistant.io/readme/badge/jrouwe/JoltPhysics&quot; alt=&quot;CLA assistant&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://github.com/jrouwe/JoltPhysics/actions/&quot;&gt;&lt;img src=&quot;https://github.com/jrouwe/JoltPhysics/actions/workflows/build.yml/badge.svg?sanitize=true&quot; alt=&quot;Build Status&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://sonarcloud.io/dashboard?id=jrouwe_JoltPhysics&quot;&gt;&lt;img src=&quot;https://sonarcloud.io/api/project_badges/measure?project=jrouwe_JoltPhysics&amp;amp;metric=alert_status&quot; alt=&quot;Quality Gate Status&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://sonarcloud.io/dashboard?id=jrouwe_JoltPhysics&quot;&gt;&lt;img src=&quot;https://sonarcloud.io/api/project_badges/measure?project=jrouwe_JoltPhysics&amp;amp;metric=bugs&quot; alt=&quot;Bugs&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://sonarcloud.io/dashboard?id=jrouwe_JoltPhysics&quot;&gt;&lt;img src=&quot;https://sonarcloud.io/api/project_badges/measure?project=jrouwe_JoltPhysics&amp;amp;metric=code_smells&quot; alt=&quot;Code Smells&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://sonarcloud.io/dashboard?id=jrouwe_JoltPhysics&quot;&gt;&lt;img src=&quot;https://sonarcloud.io/api/project_badges/measure?project=jrouwe_JoltPhysics&amp;amp;metric=coverage&quot; alt=&quot;Coverage&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;h1&gt;Jolt Physics&lt;/h1&gt; 
&lt;p&gt;A multi core friendly rigid body physics and collision detection library. Suitable for games and VR applications. Used by Horizon Forbidden West and Death Stranding 2: On the Beach.&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://www.playstation.com/en-us/games/horizon-forbidden-west/&quot;&gt;&lt;img src=&quot;https://jrouwe.nl/jolt/Horizon_Forbidden_West.png&quot; alt=&quot;Horizon Forbidden West Cover Art&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://www.playstation.com/en-us/games/death-stranding-2-on-the-beach/&quot;&gt;&lt;img src=&quot;https://jrouwe.nl/jolt/Death_Stranding_2.png&quot; alt=&quot;Death Stranding 2 Cover Art&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th style=&quot;text-align:left&quot;&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=pwyCW0yNKMA&quot;&gt;&lt;img src=&quot;https://img.youtube.com/vi/pwyCW0yNKMA/hqdefault.jpg&quot; alt=&quot;Ragdoll Pile&quot; /&gt;&lt;/a&gt;&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;em&gt;A YouTube video showing a ragdoll pile simulated with Jolt Physics.&lt;/em&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;p&gt;For more demos and &lt;a href=&quot;https://www.youtube.com/watch?v=pwyCW0yNKMA&amp;amp;list=PLYXVwtOr1CBxbA50jVg2dKUQvHW_5OOom&quot;&gt;videos&lt;/a&gt; go to the &lt;a href=&quot;https://raw.githubusercontent.com/jrouwe/JoltPhysics/master/Docs/Samples.md&quot;&gt;Samples&lt;/a&gt; section.&lt;/p&gt; 
&lt;h2&gt;Design considerations&lt;/h2&gt; 
&lt;p&gt;Why create yet another physics engine? Firstly, it has been a personal learning project. Secondly, I wanted to address some issues that I had with existing physics engines:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Games do more than simulating physics. These things happen across multiple threads. We emphasize on concurrently accessing physics data outside of the main simulation update: 
  &lt;ul&gt; 
   &lt;li&gt;Sections of the simulation can be loaded / unloaded in the background. We prepare a batch of physics bodies on a background thread without locking or affecting the simulation. We insert the batch into the simulation with a minimal impact on performance.&lt;/li&gt; 
   &lt;li&gt;Collision queries can run parallel to adding / removing or updating a body. If a change to a body happened on the same thread, the change will be immediately visible. If the change happened on another thread, the query will see a consistent before or after state. An alternative would be to have a read and write version of the world. This prevents changes from being visible immediately, so we avoid this.&lt;/li&gt; 
   &lt;li&gt;Collision queries can run parallel to the main physics simulation. We do a coarse check (broad phase query) before the simulation step and do fine checks (narrow phase query) in the background. This way, long running processes (like navigation mesh generation) can be spread out across multiple frames.&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;Accidental wake up of bodies cause performance problems when loading / unloading content. Therefore, bodies will not automatically wake up when created. Neighboring bodies will not be woken up when bodies are removed. This can be triggered manually if desired.&lt;/li&gt; 
 &lt;li&gt;The simulation runs deterministically. You can replicate a simulation to a remote client by merely replicating the inputs to the simulation. Read the &lt;a href=&quot;https://jrouwe.github.io/JoltPhysics/#deterministic-simulation&quot;&gt;Deterministic Simulation&lt;/a&gt; section to understand the limits.&lt;/li&gt; 
 &lt;li&gt;We try to simulate behavior of rigid bodies in the real world but make approximations. Therefore, this library should mainly be used for games or VR simulations.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Features&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;Simulation of rigid bodies of various shapes using continuous collision detection: 
  &lt;ul&gt; 
   &lt;li&gt;Sphere&lt;/li&gt; 
   &lt;li&gt;Box&lt;/li&gt; 
   &lt;li&gt;Capsule&lt;/li&gt; 
   &lt;li&gt;Tapered-capsule&lt;/li&gt; 
   &lt;li&gt;Cylinder&lt;/li&gt; 
   &lt;li&gt;Tapered-cylinder&lt;/li&gt; 
   &lt;li&gt;Convex hull&lt;/li&gt; 
   &lt;li&gt;Plane&lt;/li&gt; 
   &lt;li&gt;Compound&lt;/li&gt; 
   &lt;li&gt;Mesh (triangle)&lt;/li&gt; 
   &lt;li&gt;Terrain (height field)&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;Simulation of constraints between bodies: 
  &lt;ul&gt; 
   &lt;li&gt;Fixed&lt;/li&gt; 
   &lt;li&gt;Point&lt;/li&gt; 
   &lt;li&gt;Distance (including springs)&lt;/li&gt; 
   &lt;li&gt;Hinge&lt;/li&gt; 
   &lt;li&gt;Slider (also called prismatic)&lt;/li&gt; 
   &lt;li&gt;Cone&lt;/li&gt; 
   &lt;li&gt;Rack and pinion&lt;/li&gt; 
   &lt;li&gt;Gear&lt;/li&gt; 
   &lt;li&gt;Pulley&lt;/li&gt; 
   &lt;li&gt;Smooth spline paths&lt;/li&gt; 
   &lt;li&gt;Swing-twist (for humanoid shoulders)&lt;/li&gt; 
   &lt;li&gt;6 DOF&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;Motors to drive the constraints.&lt;/li&gt; 
 &lt;li&gt;Collision detection: 
  &lt;ul&gt; 
   &lt;li&gt;Casting rays.&lt;/li&gt; 
   &lt;li&gt;Testing shapes vs shapes.&lt;/li&gt; 
   &lt;li&gt;Casting a shape vs another shape.&lt;/li&gt; 
   &lt;li&gt;Broadphase only tests to quickly determine which objects may intersect.&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;Sensors (trigger volumes).&lt;/li&gt; 
 &lt;li&gt;Animated ragdolls: 
  &lt;ul&gt; 
   &lt;li&gt;Hard keying (kinematic only rigid bodies).&lt;/li&gt; 
   &lt;li&gt;Soft keying (setting velocities on dynamic rigid bodies).&lt;/li&gt; 
   &lt;li&gt;Driving constraint motors to an animated pose.&lt;/li&gt; 
   &lt;li&gt;Mapping a high detail (animation) skeleton onto a low detail (ragdoll) skeleton and vice versa.&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;Game character simulation (capsule) 
  &lt;ul&gt; 
   &lt;li&gt;Rigid body character. Moves during the physics simulation. Cheapest option and most accurate collision response between character and dynamic bodies.&lt;/li&gt; 
   &lt;li&gt;Virtual character. Does not have a rigid body in the simulation but simulates one using collision checks. Updated outside of the physics update for more control. Less accurate interaction with dynamic bodies.&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;Vehicles 
  &lt;ul&gt; 
   &lt;li&gt;Wheeled vehicles.&lt;/li&gt; 
   &lt;li&gt;Tracked vehicles.&lt;/li&gt; 
   &lt;li&gt;Motorcycles.&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;Soft body simulation (e.g. a soft ball or piece of cloth). 
  &lt;ul&gt; 
   &lt;li&gt;Edge constraints.&lt;/li&gt; 
   &lt;li&gt;Dihedral bend constraints.&lt;/li&gt; 
   &lt;li&gt;Cosserat rod constraints (an edge with an orientation that can be used to orient geometry, e.g. a plant leaf).&lt;/li&gt; 
   &lt;li&gt;Tetrahedron volume constraints.&lt;/li&gt; 
   &lt;li&gt;Long range attachment constraints (also called tethers).&lt;/li&gt; 
   &lt;li&gt;Limiting the simulation to stay within a certain range of a skinned vertex.&lt;/li&gt; 
   &lt;li&gt;Internal pressure.&lt;/li&gt; 
   &lt;li&gt;Collision with simulated rigid bodies.&lt;/li&gt; 
   &lt;li&gt;Collision tests against soft bodies.&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;A strand based hair simulation running on GPU 
  &lt;ul&gt; 
   &lt;li&gt;System is based on Cosserad rods.&lt;/li&gt; 
   &lt;li&gt;Can use long range attachment constraints to limit the stretch of hairs.&lt;/li&gt; 
   &lt;li&gt;Supports simulation (guide) and render (follow) hairs.&lt;/li&gt; 
   &lt;li&gt;Hair vs hair collision is handled by accumulating the average velocity in a grid and using those velocities to drive hairs.&lt;/li&gt; 
   &lt;li&gt;Supports collision with the environment, although it only supports ConvexHull and CompoundShapes at the moment.&lt;/li&gt; 
   &lt;li&gt;The roots of the hairs can be skinned to the scalp mesh.&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;Water buoyancy calculations.&lt;/li&gt; 
 &lt;li&gt;An optional double precision mode that allows large worlds.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Supported platforms&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;Windows x86/x64/ARM64&lt;/li&gt; 
 &lt;li&gt;Linux (tested on Ubuntu) x86/x64/ARM32/ARM64/RISC-V64/LoongArch64/PowerPC64LE&lt;/li&gt; 
 &lt;li&gt;FreeBSD&lt;/li&gt; 
 &lt;li&gt;Android x86/x64/ARM32/ARM64&lt;/li&gt; 
 &lt;li&gt;Platform Blue (a popular game console) x64&lt;/li&gt; 
 &lt;li&gt;macOS x64/ARM64&lt;/li&gt; 
 &lt;li&gt;iOS x64/ARM64&lt;/li&gt; 
 &lt;li&gt;MSYS2 MinGW64&lt;/li&gt; 
 &lt;li&gt;WebAssembly, see &lt;a href=&quot;https://github.com/jrouwe/JoltPhysics.js&quot;&gt;this&lt;/a&gt; separate project.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Required CPU features&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;On x86/x64 the minimal requirements are SSE2. The library can be compiled using SSE4.1, SSE4.2, AVX, AVX2, or AVX512.&lt;/li&gt; 
 &lt;li&gt;On ARM64 (AArch64) the library uses NEON and is compatible with Armv8-A. On ARM32 (AArch32) it doesn&#39;t use any special CPU instructions.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Documentation&lt;/h2&gt; 
&lt;p&gt;To get started, look at the &lt;a href=&quot;https://raw.githubusercontent.com/jrouwe/JoltPhysics/master/HelloWorld/HelloWorld.cpp&quot;&gt;HelloWorld&lt;/a&gt; example. A &lt;a href=&quot;https://github.com/jrouwe/JoltPhysicsHelloWorld&quot;&gt;HelloWorld example using CMake FetchContent&lt;/a&gt; is also available to show how you can integrate Jolt Physics in a CMake project.&lt;/p&gt; 
&lt;p&gt;Every feature in Jolt has its own sample. &lt;a href=&quot;https://raw.githubusercontent.com/jrouwe/JoltPhysics/master/Docs/Samples.md&quot;&gt;Running the Samples application&lt;/a&gt; and browsing through the &lt;a href=&quot;https://github.com/jrouwe/JoltPhysics/tree/master/Samples/Tests&quot;&gt;code&lt;/a&gt; is a great way to learn about the library!&lt;/p&gt; 
&lt;p&gt;To learn more about Jolt go to the latest &lt;a href=&quot;https://jrouwe.github.io/JoltPhysics/&quot;&gt;Architecture and API documentation&lt;/a&gt;. Documentation for &lt;a href=&quot;https://jrouwe.github.io/JoltPhysicsDocs/&quot;&gt;a specific release is also available&lt;/a&gt;.&lt;/p&gt; 
&lt;p&gt;Some algorithms used by Jolt are described in detail in my GDC 2022 talk: Architecting Jolt Physics for &#39;Horizon Forbidden West&#39; (&lt;a href=&quot;https://gdcvault.com/play/1027560/Architecting-Jolt-Physics-for-Horizon&quot;&gt;slides&lt;/a&gt;, &lt;a href=&quot;https://jrouwe.nl/architectingjolt/ArchitectingJoltPhysics_Rouwe_Jorrit_Notes.pdf&quot;&gt;slides with speaker notes&lt;/a&gt;, &lt;a href=&quot;https://gdcvault.com/play/1027891/Architecting-Jolt-Physics-for-Horizon&quot;&gt;video&lt;/a&gt;).&lt;/p&gt; 
&lt;h2&gt;Compiling&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;Compiles with Visual Studio 2022+, Clang 16+ or GCC 12+.&lt;/li&gt; 
 &lt;li&gt;Uses C++ 17.&lt;/li&gt; 
 &lt;li&gt;Depends only on the standard template library.&lt;/li&gt; 
 &lt;li&gt;Doesn&#39;t use RTTI.&lt;/li&gt; 
 &lt;li&gt;Doesn&#39;t use exceptions.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;If you want to run on Platform Blue you&#39;ll need to provide your own build environment and PlatformBlue.h due to NDA requirements. This file is available on the Platform Blue developer forum.&lt;/p&gt; 
&lt;p&gt;For build instructions go to the &lt;a href=&quot;https://raw.githubusercontent.com/jrouwe/JoltPhysics/master/Build/README.md&quot;&gt;Build&lt;/a&gt; section. When upgrading from an older version of the library go to the &lt;a href=&quot;https://raw.githubusercontent.com/jrouwe/JoltPhysics/master/Docs/ReleaseNotes.md&quot;&gt;Release Notes&lt;/a&gt; or &lt;a href=&quot;https://raw.githubusercontent.com/jrouwe/JoltPhysics/master/Docs/APIChanges.md&quot;&gt;API Changes&lt;/a&gt; sections.&lt;/p&gt; 
&lt;h2&gt;Performance&lt;/h2&gt; 
&lt;p&gt;If you&#39;re interested in how Jolt scales with multiple CPUs and compares to other physics engines, take a look at &lt;a href=&quot;https://jrouwe.nl/jolt/JoltPhysicsMulticoreScaling.pdf&quot;&gt;this document&lt;/a&gt;.&lt;/p&gt; 
&lt;h2&gt;Folder structure&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;Assets - This folder contains assets used by the TestFramework, Samples and JoltViewer.&lt;/li&gt; 
 &lt;li&gt;Build - Contains everything needed to build the library, see the &lt;a href=&quot;https://raw.githubusercontent.com/jrouwe/JoltPhysics/master/Build/README.md&quot;&gt;Build&lt;/a&gt; section.&lt;/li&gt; 
 &lt;li&gt;Docs - Contains documentation for the library.&lt;/li&gt; 
 &lt;li&gt;HelloWorld - A simple application demonstrating how to use the Jolt Physics library.&lt;/li&gt; 
 &lt;li&gt;Jolt - All source code for the library is in this folder.&lt;/li&gt; 
 &lt;li&gt;JoltViewer - It is possible to record the output of the physics engine using the DebugRendererRecorder class (a .jor file), this folder contains the source code to an application that can visualize a recording. This is useful for e.g. visualizing the output of the PerformanceTest from different platforms. Currently available on Windows, macOS and Linux.&lt;/li&gt; 
 &lt;li&gt;PerformanceTest - Contains a simple application that runs a &lt;a href=&quot;https://raw.githubusercontent.com/jrouwe/JoltPhysics/master/Docs/PerformanceTest.md&quot;&gt;performance test&lt;/a&gt; and collects timing information.&lt;/li&gt; 
 &lt;li&gt;Samples - This contains the sample application, see the &lt;a href=&quot;https://raw.githubusercontent.com/jrouwe/JoltPhysics/master/Docs/Samples.md&quot;&gt;Samples&lt;/a&gt; section. Currently available on Windows, macOS and Linux.&lt;/li&gt; 
 &lt;li&gt;TestFramework - A rendering framework to visualize the results of the physics engine. Used by Samples and JoltViewer. Currently available on Windows, macOS and Linux.&lt;/li&gt; 
 &lt;li&gt;UnitTests - A set of unit tests to validate the behavior of the physics engine.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Bindings for other languages&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;C &lt;a href=&quot;https://github.com/amerkoleci/joltc&quot;&gt;here&lt;/a&gt;, &lt;a href=&quot;https://github.com/zig-gamedev/zphysics/tree/main/libs/JoltC&quot;&gt;here&lt;/a&gt;, &lt;a href=&quot;https://github.com/SecondHalfGames/JoltC/&quot;&gt;here&lt;/a&gt; and &lt;a href=&quot;https://github.com/ostef/JoltC/&quot;&gt;here&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/amerkoleci/JoltPhysicsSharp&quot;&gt;C#&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;Java or Kotlin &lt;a href=&quot;https://stephengold.github.io/jolt-jni-docs&quot;&gt;here&lt;/a&gt; and &lt;a href=&quot;https://github.com/Morgoth398/JoltPhysics-JavaFFM&quot;&gt;here&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/jrouwe/JoltPhysics.js&quot;&gt;JavaScript&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/SecondHalfGames/jolt-rust&quot;&gt;Rust&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/Evilpasture/Culverin&quot;&gt;Python&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/zig-gamedev/zphysics&quot;&gt;Zig&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/ostef/Jolt-Jai&quot;&gt;Jai&lt;/a&gt;, based on this &lt;a href=&quot;https://github.com/ostef/JoltC-BindGen&quot;&gt;bindings generator&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Integrations in other engines&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/godotengine/godot&quot;&gt;Godot&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/Joshua-Ashton/VPhysics-Jolt&quot;&gt;Source Engine&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;Unreal Plugin &lt;a href=&quot;https://github.com/OversizedSunCoreDev/ArtilleryEco&quot;&gt;here&lt;/a&gt; and &lt;a href=&quot;https://github.com/Yadhu-S/UnrealJolt&quot;&gt;here&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;See &lt;a href=&quot;https://raw.githubusercontent.com/jrouwe/JoltPhysics/master/Docs/ProjectsUsingJolt.md&quot;&gt;a list of projects that use Jolt Physics here&lt;/a&gt;.&lt;/p&gt; 
&lt;h2&gt;License&lt;/h2&gt; 
&lt;p&gt;The project is distributed under the &lt;a href=&quot;https://raw.githubusercontent.com/jrouwe/JoltPhysics/master/LICENSE&quot;&gt;MIT license&lt;/a&gt;.&lt;/p&gt; 
&lt;h2&gt;Contributions&lt;/h2&gt; 
&lt;p&gt;All contributions are welcome! If you intend to make larger changes, please discuss first in the GitHub Discussion section. For non-trivial changes, we require that you agree to a &lt;a href=&quot;https://raw.githubusercontent.com/jrouwe/JoltPhysics/master/ContributorAgreement.md&quot;&gt;Contributor Agreement&lt;/a&gt;. When you create a PR, &lt;a href=&quot;https://cla-assistant.io/&quot;&gt;CLA assistant&lt;/a&gt; will prompt you to sign it.&lt;/p&gt; 
&lt;p&gt;Note that all PRs will be squashed before merging, so there&#39;s no need to force-push to git to keep the history clean.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>meshtastic/firmware</title>
      <link>https://github.com/meshtastic/firmware</link>
      <description>&lt;p&gt;The official firmware for Meshtastic, an open-source, off-grid mesh communication system.&lt;/p&gt;&lt;hr&gt;&lt;div align=&quot;center&quot; markdown=&quot;1&quot;&gt; 
 &lt;img src=&quot;https://raw.githubusercontent.com/meshtastic/firmware/develop/.github/meshtastic_logo.png&quot; alt=&quot;Meshtastic Logo&quot; width=&quot;80&quot; /&gt; 
 &lt;h1&gt;Meshtastic Firmware&lt;/h1&gt; 
 &lt;p&gt;&lt;img src=&quot;https://img.shields.io/github/downloads/meshtastic/firmware/total&quot; alt=&quot;GitHub release downloads&quot; /&gt; &lt;a href=&quot;https://github.com/meshtastic/firmware/actions/workflows/ci.yml&quot;&gt;&lt;img src=&quot;https://img.shields.io/github/actions/workflow/status/meshtastic/firmware/main_matrix.yml?branch=master&amp;amp;label=actions&amp;amp;logo=github&amp;amp;color=yellow&quot; alt=&quot;CI&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://cla-assistant.io/meshtastic/firmware&quot;&gt;&lt;img src=&quot;https://cla-assistant.io/readme/badge/meshtastic/firmware&quot; alt=&quot;CLA assistant&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://opencollective.com/meshtastic/&quot;&gt;&lt;img src=&quot;https://opencollective.com/meshtastic/tiers/badge.svg?label=Fiscal%20Contributors&amp;amp;color=deeppink&quot; alt=&quot;Fiscal Contributors&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://vercel.com?utm_source=meshtastic&amp;amp;utm_campaign=oss&quot;&gt;&lt;img src=&quot;https://img.shields.io/static/v1?label=Powered%20by&amp;amp;message=Vercel&amp;amp;style=flat&amp;amp;logo=vercel&amp;amp;color=000000&quot; alt=&quot;Vercel&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
 &lt;p&gt;&lt;a href=&quot;https://trendshift.io/repositories/5524&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;https://trendshift.io/api/badge/repositories/5524&quot; alt=&quot;meshtastic%2Ffirmware | Trendshift&quot; style=&quot;width: 250px; height: 55px;&quot; width=&quot;250&quot; height=&quot;55&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;/div&gt;  
&lt;div align=&quot;center&quot;&gt; 
 &lt;a href=&quot;https://meshtastic.org&quot;&gt;Website&lt;/a&gt; - 
 &lt;a href=&quot;https://meshtastic.org/docs/&quot;&gt;Documentation&lt;/a&gt; 
&lt;/div&gt; 
&lt;h2&gt;Overview&lt;/h2&gt; 
&lt;p&gt;This repository contains the official device firmware for Meshtastic, an open-source LoRa mesh networking project designed for long-range, low-power communication without relying on internet or cellular infrastructure. The firmware supports various hardware platforms, including ESP32, nRF52, RP2040/RP2350, and Linux-based devices.&lt;/p&gt; 
&lt;p&gt;Meshtastic enables text messaging, location sharing, and telemetry over a decentralized mesh network, making it ideal for outdoor adventures, emergency preparedness, and remote operations.&lt;/p&gt; 
&lt;h3&gt;Get Started&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;🔧 &lt;strong&gt;&lt;a href=&quot;https://meshtastic.org/docs/development/firmware/build&quot;&gt;Building Instructions&lt;/a&gt;&lt;/strong&gt; - Learn how to compile the firmware from source.&lt;/li&gt; 
 &lt;li&gt;⚡ &lt;strong&gt;&lt;a href=&quot;https://meshtastic.org/docs/getting-started/flashing-firmware/&quot;&gt;Flashing Instructions&lt;/a&gt;&lt;/strong&gt; - Install or update the firmware on your device.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;Join our community and help improve Meshtastic! 🚀&lt;/p&gt; 
&lt;h2&gt;Stats&lt;/h2&gt; 
&lt;p&gt;&lt;img src=&quot;https://repobeats.axiom.co/api/embed/8025e56c482ec63541593cc5bd322c19d5c0bdcf.svg?sanitize=true&quot; alt=&quot;Alt&quot; title=&quot;Repobeats analytics image&quot; /&gt;&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>electron/electron</title>
      <link>https://github.com/electron/electron</link>
      <description>&lt;p&gt;Build cross-platform desktop apps with JavaScript, HTML, and CSS&lt;/p&gt;&lt;hr&gt;&lt;p&gt;&lt;a href=&quot;https://electronjs.org&quot;&gt;&lt;img src=&quot;https://electronjs.org/images/electron-logo.svg?sanitize=true&quot; alt=&quot;Electron Logo&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://github.com/electron/electron/actions/workflows/build.yml&quot;&gt;&lt;img src=&quot;https://github.com/electron/electron/actions/workflows/build.yml/badge.svg?sanitize=true&quot; alt=&quot;GitHub Actions Build Status&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://discord.gg/electronjs&quot;&gt;&lt;img src=&quot;https://img.shields.io/discord/745037351163527189?color=%237289DA&amp;amp;label=chat&amp;amp;logo=discord&amp;amp;logoColor=white&quot; alt=&quot;Electron Discord Invite&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;📝 Available Translations: 🇨🇳 🇧🇷 🇪🇸 🇯🇵 🇷🇺 🇫🇷 🇺🇸 🇩🇪. View these docs in other languages on our &lt;a href=&quot;https://crowdin.com/project/electron&quot;&gt;Crowdin&lt;/a&gt; project.&lt;/p&gt; 
&lt;p&gt;The Electron framework lets you write cross-platform desktop applications using JavaScript, HTML and CSS. It is based on &lt;a href=&quot;https://nodejs.org/&quot;&gt;Node.js&lt;/a&gt; and &lt;a href=&quot;https://www.chromium.org&quot;&gt;Chromium&lt;/a&gt; and is used by the &lt;a href=&quot;https://github.com/Microsoft/vscode/&quot;&gt;Visual Studio Code&lt;/a&gt; and many other &lt;a href=&quot;https://electronjs.org/apps&quot;&gt;apps&lt;/a&gt;.&lt;/p&gt; 
&lt;p&gt;Follow &lt;a href=&quot;https://twitter.com/electronjs&quot;&gt;@electronjs&lt;/a&gt; on Twitter for important announcements.&lt;/p&gt; 
&lt;p&gt;This project adheres to the Contributor Covenant &lt;a href=&quot;https://github.com/electron/electron/tree/main/CODE_OF_CONDUCT.md&quot;&gt;code of conduct&lt;/a&gt;. By participating, you are expected to uphold this code. Please report unacceptable behavior to &lt;a href=&quot;mailto:coc@electronjs.org&quot;&gt;coc@electronjs.org&lt;/a&gt;.&lt;/p&gt; 
&lt;h2&gt;Installation&lt;/h2&gt; 
&lt;p&gt;To install prebuilt Electron binaries, use &lt;a href=&quot;https://docs.npmjs.com/&quot;&gt;&lt;code&gt;npm&lt;/code&gt;&lt;/a&gt;. The preferred method is to install Electron as a development dependency in your app:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-sh&quot;&gt;npm install electron --save-dev
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;For more installation options and troubleshooting tips, see &lt;a href=&quot;https://raw.githubusercontent.com/electron/electron/main/docs/tutorial/installation.md&quot;&gt;installation&lt;/a&gt;. For info on how to manage Electron versions in your apps, see &lt;a href=&quot;https://raw.githubusercontent.com/electron/electron/main/docs/tutorial/electron-versioning.md&quot;&gt;Electron versioning&lt;/a&gt;.&lt;/p&gt; 
&lt;h2&gt;Platform support&lt;/h2&gt; 
&lt;p&gt;Each Electron release provides binaries for macOS, Windows, and Linux.&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;macOS (Ventura and up): Electron provides 64-bit Intel and Apple Silicon / ARM binaries for macOS.&lt;/li&gt; 
 &lt;li&gt;Windows (Windows 10 and up): Electron provides &lt;code&gt;x64&lt;/code&gt; (&lt;code&gt;amd64&lt;/code&gt;) and &lt;code&gt;arm64&lt;/code&gt; binaries for Windows.&lt;/li&gt; 
 &lt;li&gt;Linux: Electron provides &lt;code&gt;x64&lt;/code&gt; (&lt;code&gt;amd64&lt;/code&gt;) and &lt;code&gt;arm64&lt;/code&gt; binaries for Linux. Electron supports major Linux distributions (e.g., Ubuntu, Fedora, Debian) in versions that are still supported by both Chromium and the distro maker (without requiring a paid subscription). The prebuilt binaries are built on Ubuntu.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;In general, Electron tries to &lt;a href=&quot;https://support.google.com/chrome/answer/95346&quot;&gt;align with Chromium on platform support&lt;/a&gt;.&lt;/p&gt; 
&lt;h2&gt;Electron Fiddle&lt;/h2&gt; 
&lt;p&gt;Use &lt;a href=&quot;https://github.com/electron/fiddle&quot;&gt;&lt;code&gt;Electron Fiddle&lt;/code&gt;&lt;/a&gt; to build, run, and package small Electron experiments, to see code examples for all of Electron&#39;s APIs, and to try out different versions of Electron. It&#39;s designed to make the start of your journey with Electron easier.&lt;/p&gt; 
&lt;h2&gt;Resources for learning Electron&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://electronjs.org/docs&quot;&gt;electronjs.org/docs&lt;/a&gt; - All of Electron&#39;s documentation&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/electron/fiddle&quot;&gt;electron/fiddle&lt;/a&gt; - A tool to build, run, and package small Electron experiments&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://electronjs.org/community#boilerplates&quot;&gt;electronjs.org/community#boilerplates&lt;/a&gt; - Sample starter apps created by the community&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Programmatic usage&lt;/h2&gt; 
&lt;p&gt;Most people use Electron from the command line, but if you require &lt;code&gt;electron&lt;/code&gt; inside your &lt;strong&gt;Node app&lt;/strong&gt; (not your Electron app) it will return the file path to the binary. Use this to spawn Electron from Node scripts:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-javascript&quot;&gt;const electron = require(&#39;electron&#39;)
const proc = require(&#39;node:child_process&#39;)

// will print something similar to /Users/maf/.../Electron
console.log(electron)

// spawn Electron
const child = proc.spawn(electron)
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;Mirrors&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://npmmirror.com/mirrors/electron/&quot;&gt;China&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;See the &lt;a href=&quot;https://www.electronjs.org/docs/latest/tutorial/installation#mirror&quot;&gt;Advanced Installation Instructions&lt;/a&gt; to learn how to use a custom mirror.&lt;/p&gt; 
&lt;h2&gt;Documentation translations&lt;/h2&gt; 
&lt;p&gt;We crowdsource translations for our documentation via &lt;a href=&quot;https://crowdin.com/project/electron&quot;&gt;Crowdin&lt;/a&gt;. We currently accept translations for Chinese (Simplified), French, German, Japanese, Portuguese, Russian, and Spanish.&lt;/p&gt; 
&lt;h2&gt;Contributing&lt;/h2&gt; 
&lt;p&gt;If you are interested in reporting/fixing issues and contributing directly to the code base, please see &lt;a href=&quot;https://raw.githubusercontent.com/electron/electron/main/CONTRIBUTING.md&quot;&gt;CONTRIBUTING.md&lt;/a&gt; for more information on what we&#39;re looking for and how to get started.&lt;/p&gt; 
&lt;h2&gt;Community&lt;/h2&gt; 
&lt;p&gt;Info on reporting bugs, getting help, finding third-party tools and sample apps, and more can be found on the &lt;a href=&quot;https://www.electronjs.org/community&quot;&gt;Community page&lt;/a&gt;.&lt;/p&gt; 
&lt;h2&gt;License&lt;/h2&gt; 
&lt;p&gt;&lt;a href=&quot;https://github.com/electron/electron/raw/main/LICENSE&quot;&gt;MIT&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;When using Electron logos, make sure to follow &lt;a href=&quot;https://trademark-policy.openjsf.org/&quot;&gt;OpenJS Foundation Trademark Policy&lt;/a&gt;.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>lemonade-sdk/lemonade</title>
      <link>https://github.com/lemonade-sdk/lemonade</link>
      <description>&lt;p&gt;Lemonade helps users discover and run local AI apps by serving optimized LLMs right from their own GPUs and NPUs. Join our discord: https://discord.gg/5xXzkMu8Zk&lt;/p&gt;&lt;hr&gt;&lt;h2&gt;🍋 Lemonade: Refreshingly fast local AI&lt;/h2&gt; 
&lt;p align=&quot;center&quot;&gt; &lt;a href=&quot;https://discord.gg/5xXzkMu8Zk&quot;&gt; &lt;img src=&quot;https://img.shields.io/badge/Discord-7289DA?logo=discord&amp;amp;logoColor=white&quot; alt=&quot;Discord&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://github.com/lemonade-sdk/lemonade/raw/main/docs/dev/contribute.md&quot; title=&quot;Contribution Guide&quot;&gt; &lt;img src=&quot;https://img.shields.io/badge/PRs-welcome-brightgreen.svg?sanitize=true&quot; alt=&quot;PRs Welcome&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://github.com/lemonade-sdk/lemonade/releases/latest&quot; title=&quot;Download the latest release&quot;&gt; &lt;img src=&quot;https://img.shields.io/github/v/release/lemonade-sdk/lemonade?include_prereleases&quot; alt=&quot;Latest Release&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://tooomm.github.io/github-release-stats/?username=lemonade-sdk&amp;amp;repository=lemonade&quot;&gt; &lt;img src=&quot;https://img.shields.io/github/downloads/lemonade-sdk/lemonade/total.svg?sanitize=true&quot; alt=&quot;GitHub downloads&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://github.com/lemonade-sdk/lemonade/issues&quot;&gt; &lt;img src=&quot;https://img.shields.io/github/issues/lemonade-sdk/lemonade&quot; alt=&quot;GitHub issues&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://github.com/lemonade-sdk/lemonade/raw/main/LICENSE&quot;&gt; &lt;img src=&quot;https://img.shields.io/badge/License-Apache-yellow.svg?sanitize=true&quot; alt=&quot;License: Apache&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://star-history.com/#lemonade-sdk/lemonade&quot;&gt; &lt;img src=&quot;https://img.shields.io/badge/Star%20History-View-brightgreen&quot; alt=&quot;Star History Chart&quot; /&gt;&lt;/a&gt; &lt;/p&gt; 
&lt;p align=&quot;center&quot;&gt; &lt;img src=&quot;https://github.com/lemonade-sdk/assets/raw/main/docs/banner_02.png?raw=true&quot; alt=&quot;Lemonade Banner&quot; /&gt; &lt;/p&gt; 
&lt;h3 align=&quot;center&quot;&gt; &lt;a href=&quot;https://lemonade-server.ai/docs/guide/install/&quot;&gt;Download&lt;/a&gt; | &lt;a href=&quot;https://lemonade-server.ai/docs/&quot;&gt;Documentation&lt;/a&gt; | &lt;a href=&quot;https://discord.gg/5xXzkMu8Zk&quot;&gt;Discord&lt;/a&gt; &lt;/h3&gt; 
&lt;p&gt;Lemonade is the local AI server that gives you the same capabilities as cloud APIs, except 100% free and private. Use the latest models for chat, coding, speech, and image generation on your own NPU and GPU.&lt;/p&gt; 
&lt;p&gt;Lemonade comes in two flavors:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;Lemonade Server&lt;/strong&gt; installs a service you can connect to hundreds of great apps using standard OpenAI, Anthropic, and Ollama APIs.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Embeddable Lemonade&lt;/strong&gt; is a portable binary you can package into your own application to give it multi-modal local AI that auto-optimizes for your user’s PC.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;em&gt;This project is built by the community for every PC, with optimizations by AMD engineers to get the most from Ryzen AI, Radeon, and Strix Halo PCs.&lt;/em&gt;&lt;/p&gt; 
&lt;h2&gt;Getting Started&lt;/h2&gt; 
&lt;ol&gt; 
 &lt;li&gt;&lt;strong&gt;Install&lt;/strong&gt;: &lt;a href=&quot;https://github.com/lemonade-sdk/lemonade/releases/latest/download/lemonade.msi&quot;&gt;Windows&lt;/a&gt; · &lt;a href=&quot;https://raw.githubusercontent.com/lemonade-sdk/lemonade/main/#supported-platforms&quot;&gt;Linux&lt;/a&gt; · &lt;a href=&quot;https://github.com/lemonade-sdk/lemonade/releases&quot;&gt;macOS&lt;/a&gt; · &lt;a href=&quot;https://lemonade-server.ai/docs/guide/install/docker&quot;&gt;Docker&lt;/a&gt; · &lt;a href=&quot;https://raw.githubusercontent.com/lemonade-sdk/lemonade/main/docs/dev/getting-started.md&quot;&gt;Source&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Get Models&lt;/strong&gt;: Browse and download with the &lt;a href=&quot;https://raw.githubusercontent.com/lemonade-sdk/lemonade/main/#model-library&quot;&gt;Model Manager&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Generate&lt;/strong&gt;: Try models with the built-in interfaces for chat, image gen, speech gen, and more&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Mobile&lt;/strong&gt;: Take your lemonade to go: &lt;a href=&quot;https://apps.apple.com/us/app/lemonade-mobile/id6757372210&quot;&gt;iOS&lt;/a&gt; · &lt;a href=&quot;https://play.google.com/store/apps/details?id=com.lemonade.mobile.chat.ai&amp;amp;pli=1&quot;&gt;Android&lt;/a&gt; · &lt;a href=&quot;https://github.com/lemonade-sdk/lemonade-mobile&quot;&gt;Source&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Connect&lt;/strong&gt;: Use Lemonade with your &lt;a href=&quot;https://lemonade-server.ai/marketplace&quot;&gt;favorite apps&lt;/a&gt;:&lt;/li&gt; 
&lt;/ol&gt; 
&lt;!-- MARKETPLACE_START --&gt; 
&lt;p align=&quot;center&quot;&gt; &lt;a href=&quot;https://lemonade-server.ai/docs/server/apps/claude-code/&quot; title=&quot;Claude Code&quot;&gt;&lt;img src=&quot;https://raw.githubusercontent.com/lemonade-sdk/marketplace/main/apps/claude-code/logo.png&quot; alt=&quot;Claude Code&quot; width=&quot;60&quot; /&gt;&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;https://quickthoughts.ca/posts/firefox-chatback-lemonade-sdk/&quot; title=&quot;Firefox Chatbot&quot;&gt;&lt;img src=&quot;https://raw.githubusercontent.com/lemonade-sdk/marketplace/main/apps/fx-chatbot/logo.png&quot; alt=&quot;Firefox Chatbot&quot; width=&quot;60&quot; /&gt;&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;https://lemonade-server.ai/docs/server/apps/anythingLLM/&quot; title=&quot;AnythingLLM&quot;&gt;&lt;img src=&quot;https://raw.githubusercontent.com/lemonade-sdk/marketplace/main/apps/anythingllm/logo.png&quot; alt=&quot;AnythingLLM&quot; width=&quot;60&quot; /&gt;&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;https://marketplace.dify.ai/plugins/langgenius/lemonade&quot; title=&quot;Dify&quot;&gt;&lt;img src=&quot;https://raw.githubusercontent.com/lemonade-sdk/marketplace/main/apps/dify/logo.png&quot; alt=&quot;Dify&quot; width=&quot;60&quot; /&gt;&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;https://github.com/amd/gaia?tab=readme-ov-file#getting-started-guide&quot; title=&quot;GAIA&quot;&gt;&lt;img src=&quot;https://raw.githubusercontent.com/lemonade-sdk/marketplace/main/apps/gaia/logo.png&quot; alt=&quot;GAIA&quot; width=&quot;60&quot; /&gt;&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;https://admcpr.com/local-github-copilot-with-lemonade-server-on-windows&quot; title=&quot;GitHub Copilot&quot;&gt;&lt;img src=&quot;https://raw.githubusercontent.com/lemonade-sdk/marketplace/main/apps/github-copilot/logo.png&quot; alt=&quot;GitHub Copilot&quot; width=&quot;60&quot; /&gt;&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;https://github.com/lemonade-sdk/infinity-arcade&quot; title=&quot;Infinity Arcade&quot;&gt;&lt;img src=&quot;https://raw.githubusercontent.com/lemonade-sdk/marketplace/main/apps/infinity-arcade/logo.png&quot; alt=&quot;Infinity Arcade&quot; width=&quot;60&quot; /&gt;&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;https://n8n.io/integrations/lemonade-model/&quot; title=&quot;n8n&quot;&gt;&lt;img src=&quot;https://raw.githubusercontent.com/lemonade-sdk/marketplace/main/apps/n8n/logo.png&quot; alt=&quot;n8n&quot; width=&quot;60&quot; /&gt;&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;https://lemonade-server.ai/docs/server/apps/open-webui/&quot; title=&quot;Open WebUI&quot;&gt;&lt;img src=&quot;https://raw.githubusercontent.com/lemonade-sdk/marketplace/main/apps/open-webui/logo.png&quot; alt=&quot;Open WebUI&quot; width=&quot;60&quot; /&gt;&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;https://lemonade-server.ai/docs/server/apps/open-hands/&quot; title=&quot;OpenHands&quot;&gt;&lt;img src=&quot;https://raw.githubusercontent.com/lemonade-sdk/marketplace/main/apps/openhands/logo.png&quot; alt=&quot;OpenHands&quot; width=&quot;60&quot; /&gt;&lt;/a&gt; &lt;/p&gt; 
&lt;p align=&quot;center&quot;&gt;&lt;em&gt;Want your app featured here? &lt;a href=&quot;https://github.com/lemonade-sdk/marketplace&quot;&gt;Just submit a marketplace PR!&lt;/a&gt;&lt;/em&gt;&lt;/p&gt; 
&lt;!-- MARKETPLACE_END --&gt; 
&lt;h2&gt;Supported Platforms&lt;/h2&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Platform&lt;/th&gt; 
   &lt;th&gt;Build&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://lemonade-server.ai/docs/guide/install/arch/&quot;&gt;&lt;img src=&quot;https://img.shields.io/badge/Arch%20Linux-supported-1793D1?logo=arch-linux&amp;amp;logoColor=white&quot; alt=&quot;Arch Linux&quot; /&gt;&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/lemonade-sdk/lemonade/actions/workflows/linux_distro_builds.yml&quot;&gt;&lt;img src=&quot;https://img.shields.io/github/actions/workflow/status/lemonade-sdk/lemonade/linux_distro_builds.yml?branch=main&amp;amp;label=Build%20on%20Arch&quot; alt=&quot;Build on Arch&quot; /&gt;&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://lemonade-server.ai/docs/guide/install/debian/&quot;&gt;&lt;img src=&quot;https://img.shields.io/badge/Debian-Trixie%2B-A81D33?logo=debian&amp;amp;logoColor=white&quot; alt=&quot;Debian Trixie+&quot; /&gt;&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/lemonade-sdk/lemonade/actions/workflows/linux_distro_builds.yml&quot;&gt;&lt;img src=&quot;https://img.shields.io/github/actions/workflow/status/lemonade-sdk/lemonade/linux_distro_builds.yml?branch=main&amp;amp;label=Build%20on%20Debian&quot; alt=&quot;Build on Debian&quot; /&gt;&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://lemonade-server.ai/docs/guide/install/docker/&quot;&gt;&lt;img src=&quot;https://img.shields.io/badge/Docker-supported-2496ED?logo=docker&amp;amp;logoColor=white&quot; alt=&quot;Docker&quot; /&gt;&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/lemonade-sdk/lemonade/actions/workflows/build-and-push-container.yml&quot;&gt;&lt;img src=&quot;https://img.shields.io/github/actions/workflow/status/lemonade-sdk/lemonade/build-and-push-container.yml?branch=main&amp;amp;label=Build%20Container%20Image&quot; alt=&quot;Build Container Image&quot; /&gt;&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://lemonade-server.ai/docs/guide/install/fedora/&quot;&gt;&lt;img src=&quot;https://img.shields.io/badge/Fedora-43%2B-294172?logo=fedora&amp;amp;logoColor=white&quot; alt=&quot;Fedora 43+&quot; /&gt;&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/lemonade-sdk/lemonade/actions/workflows/cpp_server_build_test_release.yml&quot;&gt;&lt;img src=&quot;https://img.shields.io/github/actions/workflow/status/lemonade-sdk/lemonade/cpp_server_build_test_release.yml?branch=main&amp;amp;label=Build%20.rpm&quot; alt=&quot;Build .rpm&quot; /&gt;&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/lemonade-sdk/lemonade/releases&quot;&gt;&lt;img src=&quot;https://img.shields.io/badge/macOS-supported-999999?logo=apple&amp;amp;logoColor=white&quot; alt=&quot;macOS&quot; /&gt;&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/lemonade-sdk/lemonade/actions/workflows/cpp_server_build_test_release.yml&quot;&gt;&lt;img src=&quot;https://img.shields.io/github/actions/workflow/status/lemonade-sdk/lemonade/cpp_server_build_test_release.yml?branch=main&amp;amp;label=Build%20.pkg&quot; alt=&quot;Build .pkg&quot; /&gt;&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://snapcraft.io/lemonade-server&quot;&gt;&lt;img src=&quot;https://img.shields.io/badge/Snap-supported-82BEA0?logo=snapcraft&amp;amp;logoColor=white&quot; alt=&quot;Snap&quot; /&gt;&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/lemonade-sdk/lemonade-server-snap/actions/workflows/snap-build.yaml&quot;&gt;&lt;img src=&quot;https://img.shields.io/github/actions/workflow/status/lemonade-sdk/lemonade-server-snap/snap-build.yaml?branch=main&amp;amp;label=Build%20Snap&quot; alt=&quot;Build Snap&quot; /&gt;&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://lemonade-server.ai/docs/guide/install/ubuntu/&quot;&gt;&lt;img src=&quot;https://img.shields.io/badge/Ubuntu-24.04%2B-E95420?logo=ubuntu&amp;amp;logoColor=white&quot; alt=&quot;Ubuntu 24.04+&quot; /&gt;&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/lemonade-sdk/lemonade/actions/workflows/launchpad-ppa.yml&quot;&gt;&lt;img src=&quot;https://img.shields.io/github/actions/workflow/status/lemonade-sdk/lemonade/launchpad-ppa.yml?branch=main&amp;amp;label=Build%20Launchpad%20PPA&quot; alt=&quot;Build Launchpad PPA&quot; /&gt;&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/lemonade-sdk/lemonade/releases/latest/download/lemonade.msi&quot;&gt;&lt;img src=&quot;https://img.shields.io/badge/Windows-11-0078D6?logo=windows&amp;amp;logoColor=white&quot; alt=&quot;Windows 11&quot; /&gt;&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/lemonade-sdk/lemonade/actions/workflows/cpp_server_build_test_release.yml&quot;&gt;&lt;img src=&quot;https://img.shields.io/github/actions/workflow/status/lemonade-sdk/lemonade/cpp_server_build_test_release.yml?branch=main&amp;amp;label=Build%20.msi&quot; alt=&quot;Build .msi&quot; /&gt;&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;h2&gt;Using the CLI&lt;/h2&gt; 
&lt;p&gt;To run and chat with Gemma:&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;lemonade run Gemma-4-E2B-it-GGUF
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;To code with Lemonade models:&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;lemonade launch claude
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Multi-modality:&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;# image gen
lemonade run SDXL-Turbo

# speech gen
lemonade run kokoro-v1

# transcription
lemonade run Whisper-Large-v3-Turbo
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;To see available models and download them:&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;lemonade list

lemonade pull Gemma-4-E2B-it-GGUF
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;To manage model aliases for environment-independent naming and active-standby failover:&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;lemonade alias add production-llm Gemma-4-E2B-it-GGUF
lemonade alias list

# Instant active-standby failover to a different model target
lemonade alias add production-llm Qwen3-0.6B-GGUF
lemonade alias remove production-llm
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;To see the backends available on your PC:&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;lemonade backends
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;For hybrid setups, Lemonade can also route to any OpenAI-compatible cloud provider (Fireworks, OpenAI, OpenRouter, Together, …) alongside local models — see &lt;a href=&quot;https://raw.githubusercontent.com/lemonade-sdk/lemonade/main/docs/guide/configuration/cloud.md&quot;&gt;Cloud Offload&lt;/a&gt;. &lt;em&gt;(Experimental.)&lt;/em&gt;&lt;/p&gt; 
&lt;h2&gt;Model Library&lt;/h2&gt; 
&lt;img align=&quot;right&quot; src=&quot;https://github.com/lemonade-sdk/assets/raw/main/docs/model_manager_02.png?raw=true&quot; alt=&quot;Model Manager&quot; width=&quot;280&quot; /&gt; 
&lt;p&gt;Lemonade supports a wide variety of LLMs (&lt;strong&gt;GGUF&lt;/strong&gt;, &lt;strong&gt;FLM&lt;/strong&gt;, and &lt;strong&gt;ONNX&lt;/strong&gt;), whisper, stable diffusion, etc. models across CPU, GPU, and NPU.&lt;/p&gt; 
&lt;p&gt;Use &lt;code&gt;lemonade pull&lt;/code&gt; or the built-in &lt;strong&gt;Model Manager&lt;/strong&gt; to download models. Custom GGUF/ONNX models can be pulled from Hugging Face or ModelScope, with their source retained for future updates.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://lemonade-server.ai/models.html&quot;&gt;Browse all built-in models →&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;br clear=&quot;right&quot; /&gt; 
&lt;h2&gt;Supported Configurations&lt;/h2&gt; 
&lt;p&gt;Lemonade supports multiple inference engines for LLM, speech, TTS, and image generation, and each has its own backend and hardware requirements.&lt;/p&gt; 
&lt;!-- BEGIN GENERATED: backends-matrix --&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Modality&lt;/th&gt; 
   &lt;th&gt;Engine&lt;/th&gt; 
   &lt;th&gt;Backend&lt;/th&gt; 
   &lt;th&gt;Device&lt;/th&gt; 
   &lt;th&gt;OS&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td rowspan=&quot;9&quot;&gt;&lt;strong&gt;Text generation&lt;/strong&gt;&lt;/td&gt; 
   &lt;td rowspan=&quot;6&quot;&gt;&lt;code&gt;llamacpp&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;system&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;x86_64&lt;/code&gt;/ARM64 CPU, GPU&lt;/td&gt; 
   &lt;td&gt;Linux&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;metal&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Apple Silicon GPU&lt;/td&gt; 
   &lt;td&gt;macOS&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;cuda&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;NVIDIA GPUs (Turing or newer)**&lt;/td&gt; 
   &lt;td&gt;Windows, Linux&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;vulkan&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;x86_64&lt;/code&gt; CPU, AMD iGPU, AMD dGPU; ARM64 CPU/GPU (Linux)&lt;/td&gt; 
   &lt;td&gt;Windows, Linux&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;rocm&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;AMD GPUs supported by ROCm&lt;/td&gt; 
   &lt;td&gt;Windows, Linux&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;cpu&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;x86_64&lt;/code&gt; CPU; ARM64 CPU (Linux)&lt;/td&gt; 
   &lt;td&gt;Windows, Linux&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td rowspan=&quot;1&quot;&gt;&lt;code&gt;flm&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;npu&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;XDNA2 NPU&lt;/td&gt; 
   &lt;td&gt;Windows, Linux&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td rowspan=&quot;1&quot;&gt;&lt;code&gt;ryzenai-llm&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;npu&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;XDNA2 NPU&lt;/td&gt; 
   &lt;td&gt;Windows&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td rowspan=&quot;1&quot;&gt;&lt;code&gt;vllm&lt;/code&gt; (experimental)&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;rocm&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Strix Halo iGPU (gfx1151)&lt;/td&gt; 
   &lt;td&gt;Linux&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td rowspan=&quot;6&quot;&gt;&lt;strong&gt;Speech-to-text&lt;/strong&gt;&lt;/td&gt; 
   &lt;td rowspan=&quot;5&quot;&gt;&lt;code&gt;whispercpp&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;npu&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;XDNA2 NPU&lt;/td&gt; 
   &lt;td&gt;Windows&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;metal&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Apple Silicon GPU&lt;/td&gt; 
   &lt;td&gt;macOS&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;vulkan&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;x86_64&lt;/code&gt; CPU&lt;/td&gt; 
   &lt;td&gt;Windows, Linux&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;rocm&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Supported AMD ROCm iGPU/dGPU families*&lt;/td&gt; 
   &lt;td&gt;Windows, Linux&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;cpu&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;x86_64&lt;/code&gt; CPU&lt;/td&gt; 
   &lt;td&gt;Windows, Linux&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td rowspan=&quot;1&quot;&gt;&lt;code&gt;moonshine&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;cpu&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;x86_64&lt;/code&gt;/&lt;code&gt;arm64&lt;/code&gt; CPU&lt;/td&gt; 
   &lt;td&gt;Windows, Linux, macOS&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td rowspan=&quot;5&quot;&gt;&lt;strong&gt;Text-to-speech&lt;/strong&gt;&lt;/td&gt; 
   &lt;td rowspan=&quot;2&quot;&gt;&lt;code&gt;kokoro&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;metal&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Apple Silicon GPU&lt;/td&gt; 
   &lt;td&gt;macOS&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;cpu&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;x86_64&lt;/code&gt; CPU&lt;/td&gt; 
   &lt;td&gt;Windows, Linux&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td rowspan=&quot;3&quot;&gt;&lt;code&gt;openmoss&lt;/code&gt; (experimental)&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;cuda&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;NVIDIA GPUs&lt;/td&gt; 
   &lt;td&gt;Windows, Linux&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;vulkan&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Vulkan-capable GPUs&lt;/td&gt; 
   &lt;td&gt;Windows, Linux&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;rocm&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;AMD GPUs (ROCm via TheRock)&lt;/td&gt; 
   &lt;td&gt;Windows, Linux&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td rowspan=&quot;6&quot;&gt;&lt;strong&gt;Audio generation&lt;/strong&gt;&lt;/td&gt; 
   &lt;td rowspan=&quot;3&quot;&gt;&lt;code&gt;thinksound&lt;/code&gt; (experimental)&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;cuda&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;NVIDIA GPUs&lt;/td&gt; 
   &lt;td&gt;Windows, Linux&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;vulkan&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Vulkan-capable GPUs&lt;/td&gt; 
   &lt;td&gt;Windows, Linux&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;rocm&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Supported AMD ROCm iGPU/dGPU families (ROCm via TheRock)&lt;/td&gt; 
   &lt;td&gt;Windows, Linux&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td rowspan=&quot;3&quot;&gt;&lt;code&gt;acestep&lt;/code&gt; (experimental)&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;cuda&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;NVIDIA GPUs&lt;/td&gt; 
   &lt;td&gt;Windows, Linux&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;vulkan&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Vulkan-capable GPUs&lt;/td&gt; 
   &lt;td&gt;Windows, Linux&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;rocm&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Supported AMD ROCm iGPU/dGPU families (ROCm via TheRock)&lt;/td&gt; 
   &lt;td&gt;Windows, Linux&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td rowspan=&quot;6&quot;&gt;&lt;strong&gt;Image generation&lt;/strong&gt;&lt;/td&gt; 
   &lt;td rowspan=&quot;5&quot;&gt;&lt;code&gt;sd-cpp&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;metal&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Apple Silicon GPU&lt;/td&gt; 
   &lt;td&gt;macOS&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;cuda&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;NVIDIA GPUs (Turing or newer)**&lt;/td&gt; 
   &lt;td&gt;Windows, Linux&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;vulkan&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Vulkan-capable GPUs&lt;/td&gt; 
   &lt;td&gt;Windows, Linux&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;rocm&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Supported AMD ROCm iGPU/dGPU families*&lt;/td&gt; 
   &lt;td&gt;Windows, Linux&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;cpu&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;x86_64&lt;/code&gt; CPU&lt;/td&gt; 
   &lt;td&gt;Windows, Linux&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td rowspan=&quot;1&quot;&gt;&lt;code&gt;thenoise&lt;/code&gt; (experimental)&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;rocm&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Supported AMD ROCm iGPU families&lt;/td&gt; 
   &lt;td&gt;Linux&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td rowspan=&quot;3&quot;&gt;&lt;strong&gt;3D generation&lt;/strong&gt;&lt;/td&gt; 
   &lt;td rowspan=&quot;3&quot;&gt;&lt;code&gt;trellis&lt;/code&gt; (experimental)&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;cuda&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;NVIDIA GPUs&lt;/td&gt; 
   &lt;td&gt;Windows, Linux&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;vulkan&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Vulkan-capable GPUs&lt;/td&gt; 
   &lt;td&gt;Windows, Linux&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;rocm&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Supported AMD ROCm iGPU/dGPU families (ROCm via TheRock)&lt;/td&gt; 
   &lt;td&gt;Windows, Linux&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td rowspan=&quot;3&quot;&gt;&lt;strong&gt;Text classification&lt;/strong&gt;&lt;/td&gt; 
   &lt;td rowspan=&quot;3&quot;&gt;&lt;code&gt;onnxruntime&lt;/code&gt; (experimental)&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;cpu&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;x86_64&lt;/code&gt; CPU&lt;/td&gt; 
   &lt;td&gt;Windows&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;cpu&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;x86_64&lt;/code&gt;/&lt;code&gt;arm64&lt;/code&gt; CPU&lt;/td&gt; 
   &lt;td&gt;Linux&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;cpu&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;arm64&lt;/code&gt; CPU&lt;/td&gt; 
   &lt;td&gt;macOS&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;!-- END GENERATED: backends-matrix --&gt; 
&lt;p&gt;To check exactly which recipes/backends are supported on your own machine, run:&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;lemonade backends
&lt;/code&gt;&lt;/pre&gt; 
&lt;details&gt; 
 &lt;summary&gt;&lt;small&gt;&lt;i&gt;* See supported AMD ROCm platforms&lt;/i&gt;&lt;/small&gt;&lt;/summary&gt; 
 &lt;br /&gt; 
 &lt;table&gt; 
  &lt;thead&gt; 
   &lt;tr&gt; 
    &lt;th&gt;Architecture&lt;/th&gt; 
    &lt;th&gt;Platform Support&lt;/th&gt; 
    &lt;th&gt;GPU Models&lt;/th&gt; 
   &lt;/tr&gt; 
  &lt;/thead&gt; 
  &lt;tbody&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;b&gt;gfx1151&lt;/b&gt; (STX Halo)&lt;/td&gt; 
    &lt;td&gt;Windows, Ubuntu&lt;/td&gt; 
    &lt;td&gt;Ryzen AI MAX+ Pro 395&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;b&gt;gfx120X&lt;/b&gt; (RDNA4)&lt;/td&gt; 
    &lt;td&gt;Windows, Ubuntu&lt;/td&gt; 
    &lt;td&gt;Radeon AI PRO R9700, RX 9070 XT/GRE/9070, RX 9060 XT&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;b&gt;gfx110X&lt;/b&gt; (RDNA3)&lt;/td&gt; 
    &lt;td&gt;Windows, Ubuntu&lt;/td&gt; 
    &lt;td&gt;Radeon PRO W7900/W7800/W7700/V710, RX 7900 XTX/XT/GRE, RX 7800 XT, RX 7700 XT&lt;/td&gt; 
   &lt;/tr&gt; 
  &lt;/tbody&gt; 
 &lt;/table&gt; 
&lt;/details&gt; 
&lt;details&gt; 
 &lt;summary&gt;&lt;small&gt;&lt;i&gt;** See supported NVIDIA CUDA platforms&lt;/i&gt;&lt;/small&gt;&lt;/summary&gt; 
 &lt;br /&gt; 
 &lt;table&gt; 
  &lt;thead&gt; 
   &lt;tr&gt; 
    &lt;th&gt;Compute Capability&lt;/th&gt; 
    &lt;th&gt;Architecture&lt;/th&gt; 
    &lt;th&gt;GPU Models&lt;/th&gt; 
   &lt;/tr&gt; 
  &lt;/thead&gt; 
  &lt;tbody&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;b&gt;sm_75&lt;/b&gt;&lt;/td&gt; 
    &lt;td&gt;Turing&lt;/td&gt; 
    &lt;td&gt;RTX 20-series, GTX 16-series, T4&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;b&gt;sm_80&lt;/b&gt; / &lt;b&gt;sm_86&lt;/b&gt;&lt;/td&gt; 
    &lt;td&gt;Ampere&lt;/td&gt; 
    &lt;td&gt;RTX 30-series, A100, A40&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;b&gt;sm_89&lt;/b&gt;&lt;/td&gt; 
    &lt;td&gt;Ada Lovelace&lt;/td&gt; 
    &lt;td&gt;RTX 40-series, L40, L4&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;b&gt;sm_90&lt;/b&gt;&lt;/td&gt; 
    &lt;td&gt;Hopper&lt;/td&gt; 
    &lt;td&gt;H100, H200&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;b&gt;sm_100&lt;/b&gt; / &lt;b&gt;sm_120&lt;/b&gt;&lt;/td&gt; 
    &lt;td&gt;Blackwell&lt;/td&gt; 
    &lt;td&gt;RTX 50-series, B100, B200&lt;/td&gt; 
   &lt;/tr&gt; 
  &lt;/tbody&gt; 
 &lt;/table&gt; 
&lt;/details&gt; 
&lt;h2&gt;Project Roadmap&lt;/h2&gt; 
&lt;p&gt;Lemonade&#39;s roadmap is defined by a set of working groups. Visit the landing page &lt;a href=&quot;https://raw.githubusercontent.com/lemonade-sdk/lemonade/main/docs/dev/working-groups/README.md&quot;&gt;here&lt;/a&gt; to learn each group&#39;s goal and roadmap.&lt;/p&gt; 
&lt;h2&gt;Integrate Embeddable Lemonade in Your Application&lt;/h2&gt; 
&lt;p&gt;Embeddable Lemonade is a binary version of Lemonade that you can bundle into your own app to give it a portable, auto-optimizing, multi-modal local AI stack. This lets users focus on your app, with zero Lemonade installers, branding, or telemetry.&lt;/p&gt; 
&lt;p&gt;Check out the &lt;a href=&quot;https://raw.githubusercontent.com/lemonade-sdk/lemonade/main/docs/embeddable/README.md&quot;&gt;Embeddable Lemonade guide&lt;/a&gt;.&lt;/p&gt; 
&lt;h2&gt;Connect Lemonade Server to Your Application&lt;/h2&gt; 
&lt;p&gt;You can use any OpenAI-compatible client library by configuring it to use &lt;code&gt;http://localhost:13305/v1&lt;/code&gt; as the base URL. A table containing official and popular OpenAI clients on different languages is shown below.&lt;/p&gt; 
&lt;p&gt;Feel free to pick and choose your preferred language.&lt;/p&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Python&lt;/th&gt; 
   &lt;th&gt;C++&lt;/th&gt; 
   &lt;th&gt;Java&lt;/th&gt; 
   &lt;th&gt;C#&lt;/th&gt; 
   &lt;th&gt;Node.js&lt;/th&gt; 
   &lt;th&gt;Go&lt;/th&gt; 
   &lt;th&gt;Ruby&lt;/th&gt; 
   &lt;th&gt;Rust&lt;/th&gt; 
   &lt;th&gt;PHP&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/openai/openai-python&quot;&gt;openai-python&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/olrea/openai-cpp&quot;&gt;openai-cpp&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/openai/openai-java&quot;&gt;openai-java&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/openai/openai-dotnet&quot;&gt;openai-dotnet&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/openai/openai-node&quot;&gt;openai-node&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/sashabaranov/go-openai&quot;&gt;go-openai&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/alexrudall/ruby-openai&quot;&gt;ruby-openai&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/64bit/async-openai&quot;&gt;async-openai&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/openai-php/client&quot;&gt;openai-php&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;h3&gt;Python Client Example&lt;/h3&gt; 
&lt;pre&gt;&lt;code class=&quot;language-python&quot;&gt;from openai import OpenAI

# Initialize the client to use Lemonade Server
client = OpenAI(
    base_url=&quot;http://localhost:13305/api/v1&quot;,
    api_key=&quot;lemonade&quot;  # required but unused
)

# Create a chat completion
completion = client.chat.completions.create(
    model=&quot;Gemma-4-E2B-it-GGUF&quot;,  # or any other available model
    messages=[
        {&quot;role&quot;: &quot;user&quot;, &quot;content&quot;: &quot;What is the capital of France?&quot;}
    ]
)

# Print the response
print(completion.choices[0].message.content)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Click to learn more about the &lt;a href=&quot;https://raw.githubusercontent.com/lemonade-sdk/lemonade/main/docs/api/README.md&quot;&gt;available APIs&lt;/a&gt; and how to &lt;a href=&quot;https://raw.githubusercontent.com/lemonade-sdk/lemonade/main/docs/embeddable/README.md&quot;&gt;embed Lemonade&lt;/a&gt; in your own application.&lt;/p&gt; 
&lt;h2&gt;FAQ&lt;/h2&gt; 
&lt;p&gt;To read our frequently asked questions, see our &lt;a href=&quot;https://raw.githubusercontent.com/lemonade-sdk/lemonade/main/docs/guide/faq.md&quot;&gt;FAQ Guide&lt;/a&gt;&lt;/p&gt; 
&lt;h2&gt;Contributing&lt;/h2&gt; 
&lt;p&gt;Lemonade is built by the local AI community! If you would like to contribute to this project, please check out our &lt;a href=&quot;https://raw.githubusercontent.com/lemonade-sdk/lemonade/main/docs/dev/contribute.md&quot;&gt;contribution guide&lt;/a&gt;.&lt;/p&gt; 
&lt;h2&gt;Maintainers&lt;/h2&gt; 
&lt;p&gt;This is a community project maintained by @amd-pworfolk @bitgamma @danielholanda @jeremyfowers @kenvandine @Geramy @ramkrishna2910 @sawansri @siavashhub @sofiageo @superm1 @vgodsoe, and sponsored by AMD. You can reach us by filing an &lt;a href=&quot;https://github.com/lemonade-sdk/lemonade/issues&quot;&gt;issue&lt;/a&gt;, emailing &lt;a href=&quot;mailto:lemonade@amd.com&quot;&gt;lemonade@amd.com&lt;/a&gt;, or joining our &lt;a href=&quot;https://discord.gg/5xXzkMu8Zk&quot;&gt;Discord&lt;/a&gt;.&lt;/p&gt; 
&lt;h2&gt;Code Signing Policy&lt;/h2&gt; 
&lt;p&gt;Free code signing provided by &lt;a href=&quot;https://signpath.io&quot;&gt;SignPath.io&lt;/a&gt;, certificate by &lt;a href=&quot;https://signpath.org&quot;&gt;SignPath Foundation&lt;/a&gt;.&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;Committers and reviewers&lt;/strong&gt;: &lt;a href=&quot;https://raw.githubusercontent.com/lemonade-sdk/lemonade/main/#maintainers&quot;&gt;Maintainers&lt;/a&gt; of this repo&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Approvers&lt;/strong&gt;: &lt;a href=&quot;https://github.com/orgs/lemonade-sdk/people?query=role%3Aowner&quot;&gt;Owners&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;strong&gt;Privacy policy&lt;/strong&gt;: This program will not transfer any information to other networked systems unless specifically requested by the user or the person installing or operating it. When the user requests a model download or registry lookup, Lemonade may contact &lt;a href=&quot;https://huggingface.co/&quot;&gt;Hugging Face Hub&lt;/a&gt; (see their &lt;a href=&quot;https://huggingface.co/privacy&quot;&gt;privacy policy&lt;/a&gt;) or &lt;a href=&quot;https://modelscope.cn/&quot;&gt;ModelScope&lt;/a&gt;, according to the model source selected by the user or packager.&lt;/p&gt; 
&lt;h2&gt;License and Attribution&lt;/h2&gt; 
&lt;p&gt;This project is:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Built with C++ (server) and React (app) with ❤️ for the open source community,&lt;/li&gt; 
 &lt;li&gt;Standing on the shoulders of great tools from: 
  &lt;ul&gt; 
   &lt;li&gt;&lt;a href=&quot;https://github.com/ggml-org/llama.cpp&quot;&gt;ggml/llama.cpp&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://github.com/ggerganov/whisper.cpp&quot;&gt;ggml/whisper.cpp&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://github.com/leejet/stable-diffusion.cpp&quot;&gt;ggml/stable-diffusion.cpp&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://github.com/lucasjinreal/Kokoros&quot;&gt;kokoros&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://github.com/microsoft/onnxruntime-genai&quot;&gt;OnnxRuntime GenAI&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://github.com/huggingface/huggingface_hub&quot;&gt;Hugging Face Hub&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://github.com/modelscope/modelscope&quot;&gt;ModelScope&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://github.com/openai/openai-python&quot;&gt;OpenAI API&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://github.com/Xilinx/mlir-aie&quot;&gt;IRON/MLIR-AIE&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;and more...&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;Licensed under the &lt;a href=&quot;https://github.com/lemonade-sdk/lemonade/raw/main/LICENSE&quot;&gt;Apache 2.0 License&lt;/a&gt;. 
  &lt;ul&gt; 
   &lt;li&gt;Portions of the project are licensed as described in &lt;a href=&quot;https://raw.githubusercontent.com/lemonade-sdk/lemonade/main/LICENSE&quot;&gt;LICENSE&lt;/a&gt;.&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
&lt;/ul&gt; 
&lt;!--This file was originally licensed under Apache 2.0. It has been modified.
Modifications Copyright (c) 2025 AMD--&gt;</description>
      
    </item>
    
  </channel>
</rss>
