<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:media="http://search.yahoo.com/mrss/">
  <channel>
    <title>GitHub C Daily Trending</title>
    <description>Daily Trending of C in GitHub</description>
    <pubDate>Thu, 23 Apr 2026 01:34:22 GMT</pubDate>
    <link>http://mshibanami.github.io/GitHubTrendingRSS</link>
    
    <item>
      <title>lvgl/lvgl</title>
      <link>https://github.com/lvgl/lvgl</link>
      <description>&lt;p&gt;Embedded graphics library to create beautiful UIs for any MCU, MPU and display type.&lt;/p&gt;&lt;hr&gt;&lt;p align=&quot;right&quot;&gt; &lt;b&gt;English&lt;/b&gt; | &lt;a href=&quot;https://raw.githubusercontent.com/lvgl/lvgl/master/docs/README_zh.md&quot;&gt;中文&lt;/a&gt; | &lt;a href=&quot;https://raw.githubusercontent.com/lvgl/lvgl/master/docs/README_pt_BR.md&quot;&gt;Português do Brasil&lt;/a&gt; | &lt;a href=&quot;https://raw.githubusercontent.com/lvgl/lvgl/master/docs/README_jp.md&quot;&gt;日本語&lt;/a&gt; | &lt;a href=&quot;https://raw.githubusercontent.com/lvgl/lvgl/master/docs/README_he.md&quot;&gt;עברית&lt;/a&gt; &lt;/p&gt; 
&lt;br /&gt; 
&lt;p align=&quot;center&quot;&gt; &amp;nbsp; &lt;img src=&quot;https://lvgl.io/github-assets/logo-colored.png&quot; width=&quot;300px&quot; /&gt; &lt;/p&gt; 
&lt;h1 align=&quot;center&quot;&gt;Light and Versatile Graphics Library&lt;/h1&gt; 
&lt;br /&gt; 
&lt;div align=&quot;center&quot;&gt; 
 &lt;img src=&quot;https://lvgl.io/github-assets/smartwatch-demo.gif&quot; /&gt; &amp;nbsp; &amp;nbsp; 
 &lt;img border=&quot;1px&quot; src=&quot;https://lvgl.io/github-assets/widgets-demo.gif&quot; /&gt; 
&lt;/div&gt; 
&lt;br /&gt; 
&lt;p align=&quot;center&quot;&gt; &lt;a href=&quot;https://lvgl.io&quot; title=&quot;Homepage of LVGL&quot;&gt;Website&lt;/a&gt; | &lt;a href=&quot;https://pro.lvgl.io&quot; title=&quot;LVGL Pro XML based UI Editor&quot;&gt;LVGL Pro Editor&lt;/a&gt; | &lt;a href=&quot;https://docs.lvgl.io/&quot; title=&quot;Detailed documentation with 100+ examples&quot;&gt;Docs&lt;/a&gt; | &lt;a href=&quot;https://forum.lvgl.io&quot; title=&quot;Get help and help others&quot;&gt;Forum&lt;/a&gt; | &lt;a href=&quot;https://lvgl.io/demos&quot; title=&quot;Demos running in your browser&quot;&gt;Demos&lt;/a&gt; | &lt;a href=&quot;https://lvgl.io/services&quot; title=&quot;Graphics design, UI implementation and consulting&quot;&gt;Services&lt;/a&gt; &lt;/p&gt; 
&lt;br /&gt; 
&lt;h3&gt;Table of Contents&lt;/h3&gt; 
&lt;p&gt; &lt;a href=&quot;https://raw.githubusercontent.com/lvgl/lvgl/master/#ledger-overview&quot;&gt;Overview&lt;/a&gt; &lt;br /&gt; &lt;a href=&quot;https://raw.githubusercontent.com/lvgl/lvgl/master/#-features&quot;&gt;Features&lt;/a&gt; &lt;br /&gt; &lt;a href=&quot;https://raw.githubusercontent.com/lvgl/lvgl/master/#%EF%B8%8F-platform-support&quot;&gt;Platform Support&lt;/a&gt; &lt;br /&gt; &lt;a href=&quot;https://raw.githubusercontent.com/lvgl/lvgl/master/#-lvgl-pro-editor&quot;&gt;LVGL Pro Editor&lt;/a&gt; &lt;br /&gt; &lt;a href=&quot;https://raw.githubusercontent.com/lvgl/lvgl/master/#-commercial-services&quot;&gt;Commercial Services&lt;/a&gt; &lt;br /&gt; &lt;a href=&quot;https://raw.githubusercontent.com/lvgl/lvgl/master/#%E2%80%8D-integrating-lvgl&quot;&gt;Integrating LVGL&lt;/a&gt; &lt;br /&gt; &lt;a href=&quot;https://raw.githubusercontent.com/lvgl/lvgl/master/#-examples&quot;&gt;Examples&lt;/a&gt; &lt;br /&gt; &lt;a href=&quot;https://raw.githubusercontent.com/lvgl/lvgl/master/#-contributing&quot;&gt;Contributing&lt;/a&gt; &lt;/p&gt; 
&lt;br /&gt; 
&lt;h2&gt;📒 Overview&lt;/h2&gt; 
&lt;p&gt;&lt;strong&gt;LVGL&lt;/strong&gt; is a free and open-source UI library that enables you to create graphical user interfaces for any MCUs and MPUs from any vendor on any platform.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Requirements&lt;/strong&gt;: LVGL has no external dependencies, which makes it easy to compile for any modern target, from small MCUs to multi-core Linux-based MPUs with 3D support. For a simple UI, you need only ~100kB RAM, ~200–300kB flash, and a buffer size of 1/10 of the screen for rendering.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;To get started&lt;/strong&gt;, pick a ready-to-use VSCode, Eclipse, or any other project and try out LVGL on your PC. The LVGL UI code is fully platform-independent, so you can use the same UI code on embedded targets too.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;LVGL Pro&lt;/strong&gt; is a complete toolkit to help you build, test, share, and ship UIs faster. It comes with an XML Editor where you can quickly create and test reusable components, export C code, or load the XMLs at runtime. Learn more here.&lt;/p&gt; 
&lt;h2&gt;💡 Features&lt;/h2&gt; 
&lt;p&gt;&lt;strong&gt;Free and Portable&lt;/strong&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;A fully portable C (C++ compatible) library with no external dependencies.&lt;/li&gt; 
 &lt;li&gt;Can be compiled for any MCU or MPU, with any (RT)OS. Make, CMake, and simple globbing are all supported.&lt;/li&gt; 
 &lt;li&gt;Supports monochrome, ePaper, OLED, or TFT displays, or even monitors. &lt;a href=&quot;https://docs.lvgl.io/master/main-modules/display/index.html&quot;&gt;Displays&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;Distributed under the MIT license, so you can easily use it in commercial projects too.&lt;/li&gt; 
 &lt;li&gt;Needs only 32kB RAM and 128kB Flash, a frame buffer, and at least a 1/10 screen-sized buffer for rendering.&lt;/li&gt; 
 &lt;li&gt;OS, external memory, and GPU are supported but not required.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;strong&gt;Widgets, Styles, Layouts, and More&lt;/strong&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;30+ built-in &lt;a href=&quot;https://docs.lvgl.io/master/widgets/index.html&quot;&gt;Widgets&lt;/a&gt;: Button, Label, Slider, Chart, Keyboard, Meter, Arc, Table, and many more.&lt;/li&gt; 
 &lt;li&gt;Flexible &lt;a href=&quot;https://docs.lvgl.io/master/common-widget-features/styles/index.html&quot;&gt;Style system&lt;/a&gt; with ~100 style properties to customize any part of the widgets in any state.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://docs.lvgl.io/master/common-widget-features/layouts/flex.html&quot;&gt;Flexbox&lt;/a&gt; and &lt;a href=&quot;https://docs.lvgl.io/master/common-widget-features/layouts/grid.html&quot;&gt;Grid&lt;/a&gt;-like layout engines to automatically size and position the widgets responsively.&lt;/li&gt; 
 &lt;li&gt;Text is rendered with UTF-8 encoding, supporting CJK, Thai, Hindi, Arabic, and Persian writing systems.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://docs.lvgl.io/master/main-modules/observer/index.html&quot;&gt;Data bindings&lt;/a&gt; to easily connect the UI with the application.&lt;/li&gt; 
 &lt;li&gt;Rendering engine supports animations, anti-aliasing, opacity, smooth scrolling, shadows, image transformation, etc.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://docs.lvgl.io/master/libs/gltf.html&quot;&gt;Powerful 3D rendering engine&lt;/a&gt; to show &lt;a href=&quot;https://sketchfab.com/&quot;&gt;glTF models&lt;/a&gt; with OpenGL.&lt;/li&gt; 
 &lt;li&gt;Supports Mouse, Touchpad, Keypad, Keyboard, External buttons, Encoder &lt;a href=&quot;https://docs.lvgl.io/master/main-modules/indev.html&quot;&gt;Input devices&lt;/a&gt;.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://docs.lvgl.io/master/main-modules/display/overview.html#how-many-displays-can-lvgl-use&quot;&gt;Multiple display&lt;/a&gt; support.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;📦️ Platform Support&lt;/h2&gt; 
&lt;p&gt;LVGL has no external dependencies, so it can be easily compiled for any devices and it&#39;s also available in many package managers and RTOSes:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://docs.lvgl.io/master/integration/framework/arduino.html&quot;&gt;Arduino library&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://registry.platformio.org/libraries/lvgl/lvgl&quot;&gt;PlatformIO package&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://docs.lvgl.io/master/integration/os/zephyr.html&quot;&gt;Zephyr library&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://components.espressif.com/components/lvgl/lvgl&quot;&gt;ESP-IDF(ESP32) component&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.nxp.com/design/software/embedded-software/lvgl-open-source-graphics-library:LITTLEVGL-OPEN-SOURCE-GRAPHICS-LIBRARY&quot;&gt;NXP MCUXpresso component&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://docs.lvgl.io/master/integration/os/nuttx.html&quot;&gt;NuttX library&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://docs.lvgl.io/master/integration/os/rt-thread.html&quot;&gt;RT-Thread RTOS&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;CMSIS-Pack&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://doc.riot-os.org/group__pkg__lvgl.html#details&quot;&gt;RIOT OS package&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;🚀 LVGL Pro Editor&lt;/h2&gt; 
&lt;p&gt;LVGL Pro is a complete toolkit to build, test, share, and ship embedded UIs efficiently.&lt;/p&gt; 
&lt;p&gt;It consists of four tightly related tools:&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;&lt;strong&gt;XML Editor&lt;/strong&gt;: The heart of LVGL Pro. A desktop app to build components and screens in XML, manage data bindings, translations, animations, tests, and more. Learn more about the &lt;a href=&quot;https://docs.lvgl.io/master/xml/xml/index.html&quot;&gt;XML Format&lt;/a&gt; and the &lt;a href=&quot;https://docs.lvgl.io/master/xml/editor/index.html&quot;&gt;Editor&lt;/a&gt;.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Online Viewer&lt;/strong&gt;: Run the Editor in your browser, open GitHub projects, and share easily without setting up a developer environment. Visit &lt;a href=&quot;https://viewer.lvgl.io&quot;&gt;https://viewer.lvgl.io&lt;/a&gt;.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;CLI Tool&lt;/strong&gt;: Generate C code and run tests in CI/CD. See the details &lt;a href=&quot;https://docs.lvgl.io/master/xml/tools/cli.html&quot;&gt;here&lt;/a&gt;.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Figma Plugin&lt;/strong&gt;: Sync and extract styles directly from Figma. See how it works &lt;a href=&quot;https://docs.lvgl.io/master/xml/tools/figma.html&quot;&gt;here&lt;/a&gt;.&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;Together, these tools let developers build UIs efficiently, test them reliably, and collaborate with team members and customers.&lt;/p&gt; 
&lt;p&gt;Learn more at &lt;a href=&quot;https://pro.lvgl.io&quot;&gt;https://pro.lvgl.io&lt;/a&gt;&lt;/p&gt; 
&lt;h2&gt;🤝 Commercial Services&lt;/h2&gt; 
&lt;p&gt;LVGL LLC provides several types of commercial services to help you with UI development. With 15+ years of experience in the user interface and graphics industry, we can help bring your UI to the next level.&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;Graphics design&lt;/strong&gt;: Our in-house graphic designers are experts in creating beautiful modern designs that fit your product and the capabilities of your hardware.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;UI implementation&lt;/strong&gt;: We can implement your UI based on the design you or we have created. You can be sure that we will make the most of your hardware and LVGL. If a feature or widget is missing from LVGL, don&#39;t worry, we will implement it for you.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Consulting and Support&lt;/strong&gt;: We also offer consulting to help you avoid costly and time-consuming mistakes during UI development.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Board certification&lt;/strong&gt;: For companies offering development boards or production-ready kits, we provide board certification to show how the board can run LVGL.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;Check out our &lt;a href=&quot;https://lvgl.io/demos&quot;&gt;Demos&lt;/a&gt; as references. For more information, take a look at the &lt;a href=&quot;https://lvgl.io/services&quot;&gt;Services page&lt;/a&gt;.&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://lvgl.io/#contact&quot;&gt;Contact us&lt;/a&gt; and tell us how we can help.&lt;/p&gt; 
&lt;h2&gt;🧑‍💻 Integrating LVGL&lt;/h2&gt; 
&lt;p&gt;Integrating LVGL is very simple. Just drop it into any project and compile it as you would compile other files. To configure LVGL, copy &lt;code&gt;lv_conf_template.h&lt;/code&gt; as &lt;code&gt;lv_conf.h&lt;/code&gt;, enable the first &lt;code&gt;#if 0&lt;/code&gt;, and adjust the configs as needed. (The default config is usually fine.) If available, LVGL can also be used with Kconfig.&lt;/p&gt; 
&lt;p&gt;Once in the project, you can initialize LVGL and create display and input devices as follows:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-c&quot;&gt;#include &quot;lvgl/lvgl.h&quot; /*Define LV_LVGL_H_INCLUDE_SIMPLE to include as &quot;lvgl.h&quot;*/

#define TFT_HOR_RES 320
#define TFT_VER_RES 240

static uint32_t my_tick_cb(void)
{
    return my_get_millisec();
}

static void my_flush_cb(lv_display_t * disp, const lv_area_t * area, uint8_t * px_map)
{
    /*Write px_map to the area-&amp;gt;x1, area-&amp;gt;x2, area-&amp;gt;y1, area-&amp;gt;y2 area of the
     *frame buffer or external display controller. */

    /* signal LVGL that we&#39;re done */
    lv_display_flush_ready(disp);
}

static void my_touch_read_cb(lv_indev_t * indev, lv_indev_data_t * data)
{
   if(my_touch_is_pressed()) {
       data-&amp;gt;point.x = touchpad_x;
       data-&amp;gt;point.y = touchpad_y;
       data-&amp;gt;state = LV_INDEV_STATE_PRESSED;
   } else {
       data-&amp;gt;state = LV_INDEV_STATE_RELEASED;
   }
}

void main(void)
{
    my_hardware_init();

    /*Initialize LVGL*/
    lv_init();

    /*Set millisecond-based tick source for LVGL so that it can track time.*/
    lv_tick_set_cb(my_tick_cb);

    /*Create a display where screens and widgets can be added*/
    lv_display_t * display = lv_display_create(TFT_HOR_RES, TFT_VER_RES);

    /*Add rendering buffers to the screen.
     *Here adding a smaller partial buffer assuming 16-bit (RGB565 color format)*/
    static uint8_t buf[TFT_HOR_RES * TFT_VER_RES / 10 * 2]; /* x2 because of 16-bit color depth */
    lv_display_set_buffers(display, buf, NULL, sizeof(buf), LV_DISPLAY_RENDER_MODE_PARTIAL);

    /*Add a callback that can flush the content from `buf` when it has been rendered*/
    lv_display_set_flush_cb(display, my_flush_cb);

    /*Create an input device for touch handling*/
    lv_indev_t * indev = lv_indev_create();
    lv_indev_set_type(indev, LV_INDEV_TYPE_POINTER);
    lv_indev_set_read_cb(indev, my_touch_read_cb);

    /*The drivers are in place; now we can create the UI*/
    lv_obj_t * label = lv_label_create(lv_screen_active());
    lv_label_set_text(label, &quot;Hello world&quot;);
    lv_obj_center(label);

    /*Execute the LVGL-related tasks in a loop*/
    while(1) {
        lv_timer_handler();
        my_sleep_ms(5);         /*Wait a little to let the system breathe*/
    }
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2&gt;🤖 Examples&lt;/h2&gt; 
&lt;p&gt;You can check out more than 100 examples at &lt;a href=&quot;https://docs.lvgl.io/master/examples.html&quot;&gt;https://docs.lvgl.io/master/examples.html&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;The Online Viewer also contains tutorials to easily learn XML: &lt;a href=&quot;https://viewer.lvgl.io/&quot;&gt;https://viewer.lvgl.io/&lt;/a&gt;&lt;/p&gt; 
&lt;h3&gt;Hello World Button with an Event&lt;/h3&gt; 
&lt;img width=&quot;311&quot; height=&quot;232&quot; alt=&quot;image&quot; src=&quot;https://github.com/user-attachments/assets/5948b485-e3f7-4a63-bb21-984381417c4a&quot; /&gt; 
&lt;details&gt; 
 &lt;summary&gt;C code&lt;/summary&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-c&quot;&gt;static void button_clicked_cb(lv_event_t * e)
{
  printf(&quot;Clicked\n&quot;);
}

[...]

lv_obj_t * button = lv_button_create(lv_screen_active());
lv_obj_center(button);
lv_obj_add_event_cb(button, button_clicked_cb, LV_EVENT_CLICKED, NULL);

lv_obj_t * label = lv_label_create(button);
lv_label_set_text(label, &quot;Hello from LVGL!&quot;);
&lt;/code&gt;&lt;/pre&gt; 
&lt;/details&gt; 
&lt;details&gt; 
 &lt;summary&gt;In XML with LVGL Pro&lt;/summary&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-xml&quot;&gt;&amp;lt;screen&amp;gt;
	&amp;lt;view&amp;gt;
		&amp;lt;lv_button align=&quot;center&quot;&amp;gt;
			&amp;lt;event_cb callback=&quot;button_clicked_cb&quot; /&amp;gt;
			&amp;lt;lv_label text=&quot;Hello from LVGL!&quot; /&amp;gt;
		&amp;lt;/lv_button&amp;gt;
	&amp;lt;/view&amp;gt;
&amp;lt;/screen&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;/details&gt; 
&lt;h3&gt;Styled Slider with Data-binding&lt;/h3&gt; 
&lt;img width=&quot;314&quot; height=&quot;233&quot; alt=&quot;image&quot; src=&quot;https://github.com/user-attachments/assets/268db1a0-946c-42e2-aee4-9550bdf5f4f9&quot; /&gt; 
&lt;details&gt; 
 &lt;summary&gt;C code&lt;/summary&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-c&quot;&gt;static void my_observer_cb(lv_observer_t * observer, lv_subject_t * subject)
{
	printf(&quot;Slider value: %d\n&quot;, lv_subject_get_int(subject));
}

[...]

static lv_subject_t subject_value;
lv_subject_init_int(&amp;amp;subject_value, 35);
lv_subject_add_observer(&amp;amp;subject_value, my_observer_cb, NULL);

lv_style_t style_base;
lv_style_init(&amp;amp;style_base);
lv_style_set_bg_color(&amp;amp;style_base, lv_color_hex(0xff8800));
lv_style_set_bg_opa(&amp;amp;style_base, 255);
lv_style_set_radius(&amp;amp;style_base, 4);

lv_obj_t * slider = lv_slider_create(lv_screen_active());
lv_obj_center(slider);
lv_obj_set_size(slider, lv_pct(80), 16);
lv_obj_add_style(slider, &amp;amp;style_base, LV_PART_INDICATOR);
lv_obj_add_style(slider, &amp;amp;style_base, LV_PART_KNOB);
lv_obj_add_style(slider, &amp;amp;style_base, 0);
lv_obj_set_style_bg_opa(slider, LV_OPA_50, 0);
lv_obj_set_style_border_width(slider, 3, LV_PART_KNOB);
lv_obj_set_style_border_color(slider, lv_color_hex3(0xfff), LV_PART_KNOB);
lv_slider_bind_value(slider, &amp;amp;subject_value);

lv_obj_t * label = lv_label_create(lv_screen_active());
lv_obj_align(label, LV_ALIGN_CENTER, 0, -30);
lv_label_bind_text(label, &amp;amp;subject_value, &quot;Temperature: %d °C&quot;);
&lt;/code&gt;&lt;/pre&gt; 
&lt;/details&gt; 
&lt;details&gt; 
 &lt;summary&gt;In XML with LVGL Pro&lt;/summary&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-xml&quot;&gt;&amp;lt;screen&amp;gt;
	&amp;lt;styles&amp;gt;
		&amp;lt;style name=&quot;style_base&quot; bg_opa=&quot;100%&quot; bg_color=&quot;0xff8800&quot; radius=&quot;4&quot; /&amp;gt;
		&amp;lt;style name=&quot;style_border&quot; border_color=&quot;0xfff&quot; border_width=&quot;3&quot; /&amp;gt;
	&amp;lt;/styles&amp;gt;

	&amp;lt;view&amp;gt;
		&amp;lt;lv_label bind_text=&quot;value&quot; bind_text-fmt=&quot;Temperature: %d °C&quot; align=&quot;center&quot; y=&quot;-30&quot; /&amp;gt;
		&amp;lt;lv_slider align=&quot;center&quot; bind_value=&quot;value&quot; style_bg_opa=&quot;30%&quot;&amp;gt;
			&amp;lt;style name=&quot;style_base&quot; /&amp;gt;
			&amp;lt;style name=&quot;style_base&quot; selector=&quot;knob&quot; /&amp;gt;
			&amp;lt;style name=&quot;style_base&quot; selector=&quot;indicator&quot; /&amp;gt;
			&amp;lt;style name=&quot;style_border&quot; selector=&quot;knob&quot; /&amp;gt;
		&amp;lt;/lv_slider&amp;gt;
	&amp;lt;/view&amp;gt;
&amp;lt;/screen&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;/details&gt; 
&lt;h3&gt;Checkboxes in a Layout&lt;/h3&gt; 
&lt;img width=&quot;311&quot; height=&quot;231&quot; alt=&quot;image&quot; src=&quot;https://github.com/user-attachments/assets/ba9af647-2ea1-4bc8-b53d-c7b43ce24b6e&quot; /&gt; 
&lt;details&gt; 
 &lt;summary&gt;C code&lt;/summary&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-c&quot;&gt;/*Create a new screen and load it*/
lv_obj_t * scr = lv_obj_create(NULL);
lv_screen_load(scr);

/*Set a column layout*/
lv_obj_set_flex_flow(scr, LV_FLEX_FLOW_COLUMN);
lv_obj_set_flex_align(scr, LV_FLEX_ALIGN_SPACE_EVENLY, /*Vertical alignment*/
  					   LV_FLEX_ALIGN_START,	       /*Horizontal alignment in the track*/
  					   LV_FLEX_ALIGN_CENTER);      /*Horizontal alignment of the track*/

/*Create 5 checkboxes*/
const char * texts[5] = {&quot;Input 1&quot;, &quot;Input 2&quot;, &quot;Input 3&quot;, &quot;Output 1&quot;, &quot;Output 2&quot;};
for(int i = 0; i &amp;lt; 5; i++) {
  lv_obj_t * cb = lv_checkbox_create(scr);
  lv_checkbox_set_text(cb, texts[i]);
}

/*Change some states*/
lv_obj_add_state(lv_obj_get_child(scr, 1), LV_STATE_CHECKED);
lv_obj_add_state(lv_obj_get_child(scr, 3), LV_STATE_DISABLED);
&lt;/code&gt;&lt;/pre&gt; 
&lt;/details&gt; 
&lt;details&gt; 
 &lt;summary&gt;In XML with LVGL Pro&lt;/summary&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-xml&quot;&gt;&amp;lt;screen&amp;gt;
	&amp;lt;view
		flex_flow=&quot;column&quot;
		style_flex_main_place=&quot;space_evenly&quot;
		style_flex_cross_place=&quot;start&quot;
		style_flex_track_place=&quot;center&quot;
	&amp;gt;
		&amp;lt;lv_checkbox text=&quot;Input 1&quot;/&amp;gt;
		&amp;lt;lv_checkbox text=&quot;Input 2&quot;/&amp;gt;
		&amp;lt;lv_checkbox text=&quot;Input 3&quot; checked=&quot;true&quot;/&amp;gt;
		&amp;lt;lv_checkbox text=&quot;Output 1&quot;/&amp;gt;
		&amp;lt;lv_checkbox text=&quot;Output 2&quot; disabled=&quot;true&quot;/&amp;gt;
   &amp;lt;/view&amp;gt;
&amp;lt;/screen&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;/details&gt; 
&lt;h2&gt;🌟 Contributing&lt;/h2&gt; 
&lt;p&gt;LVGL is an open project, and contributions are very welcome. There are many ways to contribute, from simply speaking about your project, writing examples, improving the documentation, fixing bugs, or even hosting your own project under the LVGL organization.&lt;/p&gt; 
&lt;p&gt;For a detailed description of contribution opportunities, visit the &lt;a href=&quot;https://docs.lvgl.io/master/contributing/index.html&quot;&gt;Contributing&lt;/a&gt; section of the documentation.&lt;/p&gt; 
&lt;p&gt;More than 600 people have already left their fingerprint on LVGL. Be one of them! See you here! 🙂&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://github.com/lvgl/lvgl/graphs/contributors&quot;&gt; &lt;img src=&quot;https://contrib.rocks/image?repo=lvgl/lvgl&amp;amp;max=48&quot; /&gt; &lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;... and many more.&lt;/p&gt;</description>
      
      <media:content url="https://opengraph.githubassets.com/bc076bc8f58550627c066caf5e0677df8fa051498b9d5bf21ba3f525ed8aee2b/lvgl/lvgl" medium="image" />
      
    </item>
    
    <item>
      <title>pbatard/rufus</title>
      <link>https://github.com/pbatard/rufus</link>
      <description>&lt;p&gt;The Reliable USB Formatting Utility&lt;/p&gt;&lt;hr&gt;&lt;h1&gt;Rufus: The Reliable USB Formatting Utility&lt;/h1&gt; 
&lt;p&gt;&lt;a href=&quot;https://github.com/pbatard/rufus/actions/workflows/vs2022.yml&quot;&gt;&lt;img src=&quot;https://img.shields.io/github/actions/workflow/status/pbatard/rufus/vs2022.yml?branch=master&amp;amp;style=flat-square&amp;amp;label=VS2022%20Build&quot; alt=&quot;VS2022 Build Status&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://github.com/pbatard/rufus/actions/workflows/mingw.yml&quot;&gt;&lt;img src=&quot;https://img.shields.io/github/actions/workflow/status/pbatard/rufus/mingw.yml?branch=master&amp;amp;style=flat-square&amp;amp;label=MinGW%20Build&quot; alt=&quot;MinGW Build Status&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://scan.coverity.com/projects/pbatard-rufus&quot;&gt;&lt;img src=&quot;https://img.shields.io/coverity/scan/2172.svg?style=flat-square&amp;amp;label=Coverity%20Analysis&quot; alt=&quot;Coverity Scan Status&quot; /&gt;&lt;/a&gt;&lt;br /&gt; &lt;a href=&quot;https://github.com/pbatard/rufus/releases&quot;&gt;&lt;img src=&quot;https://img.shields.io/github/release-pre/pbatard/rufus.svg?style=flat-square&amp;amp;label=Latest%20Release&quot; alt=&quot;Latest Release&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://www.gnu.org/licenses/gpl-3.0.en.html&quot;&gt;&lt;img src=&quot;https://img.shields.io/badge/license-GPLv3-blue.svg?style=flat-square&amp;amp;label=License&quot; alt=&quot;Licence&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://github.com/pbatard/rufus/releases&quot;&gt;&lt;img src=&quot;https://img.shields.io/github/downloads/pbatard/rufus/total.svg?label=Downloads&amp;amp;style=flat-square&quot; alt=&quot;Download Stats&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://github.com/pbatard/rufus/graphs/contributors&quot;&gt;&lt;img src=&quot;https://img.shields.io/github/contributors/pbatard/rufus.svg?style=flat-square&amp;amp;label=Contributors&quot; alt=&quot;Contributors&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;&lt;img src=&quot;https://raw.githubusercontent.com/pbatard/rufus/master/res/icons/rufus-128.png&quot; alt=&quot;Rufus logo&quot; /&gt;&lt;/p&gt; 
&lt;p&gt;Rufus is a utility that helps format and create bootable USB flash drives.&lt;/p&gt; 
&lt;h2&gt;Features&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;Format USB, flash card and virtual drives to FAT/FAT32/NTFS/UDF/exFAT/ReFS/ext2/ext3&lt;/li&gt; 
 &lt;li&gt;Create DOS bootable USB drives using &lt;a href=&quot;https://www.freedos.org&quot;&gt;FreeDOS&lt;/a&gt; or MS-DOS&lt;/li&gt; 
 &lt;li&gt;Create BIOS or UEFI bootable drives, including &lt;a href=&quot;https://github.com/pbatard/uefi-ntfs&quot;&gt;UEFI bootable NTFS&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;Create bootable drives from bootable ISOs (Windows, Linux, etc.)&lt;/li&gt; 
 &lt;li&gt;Create bootable drives from bootable disk images, including compressed ones&lt;/li&gt; 
 &lt;li&gt;Create Windows 11 installation drives for PCs that don&#39;t have TPM or Secure Boot&lt;/li&gt; 
 &lt;li&gt;Create &lt;a href=&quot;https://en.wikipedia.org/wiki/Windows_To_Go&quot;&gt;Windows To Go&lt;/a&gt; drives&lt;/li&gt; 
 &lt;li&gt;Create VHD/DD, VHDX and FFU images of an existing drive&lt;/li&gt; 
 &lt;li&gt;Create persistent Linux partitions&lt;/li&gt; 
 &lt;li&gt;Compute MD5, SHA-1, SHA-256 and SHA-512 checksums of the selected image&lt;/li&gt; 
 &lt;li&gt;Perform runtime validation of UEFI bootable media&lt;/li&gt; 
 &lt;li&gt;Improve Windows installation experience by automatically setting up OOBE parameters (local account, privacy options, etc.)&lt;/li&gt; 
 &lt;li&gt;Perform bad blocks checks, including detection of &quot;fake&quot; flash drives&lt;/li&gt; 
 &lt;li&gt;Download official Microsoft Windows 8, Windows 10 or Windows 11 retail ISOs&lt;/li&gt; 
 &lt;li&gt;Download &lt;a href=&quot;https://github.com/pbatard/UEFI-Shell&quot;&gt;UEFI Shell&lt;/a&gt; ISOs&lt;/li&gt; 
 &lt;li&gt;Modern and familiar UI, with &lt;a href=&quot;https://github.com/pbatard/rufus/wiki/FAQ#What_languages_are_natively_supported_by_Rufus&quot;&gt;38 languages natively supported&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;Small footprint. No installation required.&lt;/li&gt; 
 &lt;li&gt;Portable. Secure Boot compatible.&lt;/li&gt; 
 &lt;li&gt;100% &lt;a href=&quot;https://www.gnu.org/philosophy/free-sw&quot;&gt;Free Software&lt;/a&gt; (&lt;a href=&quot;https://www.gnu.org/licenses/gpl-3.0&quot;&gt;GPL v3&lt;/a&gt;)&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Compilation&lt;/h2&gt; 
&lt;p&gt;Use either Visual Studio 2022 or MinGW and then invoke the &lt;code&gt;.sln&lt;/code&gt; or &lt;code&gt;configure&lt;/code&gt;/&lt;code&gt;make&lt;/code&gt; respectively.&lt;/p&gt; 
&lt;h4&gt;Visual Studio&lt;/h4&gt; 
&lt;p&gt;Rufus is an OSI compliant Open Source project. You are entitled to download and use the &lt;em&gt;freely available&lt;/em&gt; &lt;a href=&quot;https://www.visualstudio.com/vs/community/&quot;&gt;Visual Studio Community Edition&lt;/a&gt; to build, run or develop for Rufus. As per the Visual Studio Community Edition license, this applies regardless of whether you are an individual or a corporate user.&lt;/p&gt; 
&lt;h2&gt;Additional information&lt;/h2&gt; 
&lt;p&gt;Rufus provides extensive information about what it is doing, either through its easily accessible log, or through the &lt;a href=&quot;https://docs.microsoft.com/en-us/sysinternals/downloads/debugview&quot;&gt;Windows debug facility&lt;/a&gt;.&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://rufus.ie&quot;&gt;&lt;strong&gt;Official Website&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/pbatard/rufus/wiki/FAQ&quot;&gt;FAQ&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/pbatard/rufus/wiki/Security&quot;&gt;Security and safety measures&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Enhancements/Bugs&lt;/h2&gt; 
&lt;p&gt;Please use the &lt;a href=&quot;https://github.com/pbatard/rufus/issues&quot;&gt;GitHub issue tracker&lt;/a&gt; for reporting problems or suggesting new features.&lt;/p&gt;</description>
      
      <media:content url="https://opengraph.githubassets.com/1c072fb8ba8f8a22b3027bf17057716ce960d2c587227cddac8897778cae552a/pbatard/rufus" medium="image" />
      
    </item>
    
    <item>
      <title>espressif/esp-idf</title>
      <link>https://github.com/espressif/esp-idf</link>
      <description>&lt;p&gt;Espressif IoT Development Framework. Official development framework for Espressif SoCs.&lt;/p&gt;&lt;hr&gt;&lt;h1&gt;Espressif IoT Development Framework&lt;/h1&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/espressif/esp-idf/master/README_CN.md&quot;&gt;中文版&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;ESP-IDF is the development framework for Espressif SoCs supported on Windows, Linux and macOS.&lt;/p&gt; 
&lt;h1&gt;ESP-IDF Release Support Schedule&lt;/h1&gt; 
&lt;p&gt;&lt;img src=&quot;https://dl.espressif.com/dl/esp-idf/support-periods.svg?v=1&quot; alt=&quot;Support Schedule&quot; /&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Please read &lt;a href=&quot;https://raw.githubusercontent.com/espressif/esp-idf/master/SUPPORT_POLICY.md&quot;&gt;the support policy&lt;/a&gt; and &lt;a href=&quot;https://docs.espressif.com/projects/esp-idf/en/latest/esp32/versions.html&quot;&gt;the documentation&lt;/a&gt; for more information about ESP-IDF versions.&lt;/li&gt; 
 &lt;li&gt;Please see the &lt;a href=&quot;https://www.espressif.com/en/support/documents/advisories?keys=&amp;amp;field_type_of_advisory_tid%5B%5D=817&quot;&gt;End-of-Life Advisories&lt;/a&gt; for information about ESP-IDF releases with discontinued support.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h1&gt;ESP-IDF Release and SoC Compatibility&lt;/h1&gt; 
&lt;p&gt;&lt;img src=&quot;https://dl.espressif.com/dl/esp-idf/chip-support.svg?v=1&quot; alt=&quot;Chip support&quot; /&gt;&lt;/p&gt; 
&lt;p&gt;See &lt;a href=&quot;https://github.com/espressif/esp-idf/raw/master/COMPATIBILITY.md&quot;&gt;Compatibility Between ESP-IDF Releases and Revisions of Espressif SoCs&lt;/a&gt; for the details of the compatibility between ESP-IDF and chip revisions.&lt;/p&gt; 
&lt;p&gt;Espressif SoCs released before 2016 (ESP8266 and ESP8285) are supported by &lt;a href=&quot;https://github.com/espressif/ESP8266_RTOS_SDK&quot;&gt;RTOS SDK&lt;/a&gt; instead.&lt;/p&gt; 
&lt;h1&gt;Developing With ESP-IDF&lt;/h1&gt; 
&lt;h2&gt;Setting Up ESP-IDF&lt;/h2&gt; 
&lt;p&gt;See &lt;a href=&quot;https://idf.espressif.com/&quot;&gt;https://idf.espressif.com/&lt;/a&gt; for links to detailed instructions on how to set up the ESP-IDF depending on chip you use.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; Each SoC series and each ESP-IDF release has its own documentation. Please see Section &lt;a href=&quot;https://docs.espressif.com/projects/esp-idf/en/latest/esp32/versions.html&quot;&gt;Versions&lt;/a&gt; on how to find documentation and how to checkout specific release of ESP-IDF.&lt;/p&gt; 
&lt;h3&gt;Non-GitHub forks&lt;/h3&gt; 
&lt;p&gt;ESP-IDF uses relative locations as its submodules URLs (&lt;a href=&quot;https://raw.githubusercontent.com/espressif/esp-idf/master/.gitmodules&quot;&gt;.gitmodules&lt;/a&gt;). So they link to GitHub. If ESP-IDF is forked to a Git repository which is not on GitHub, you will need to run the script &lt;a href=&quot;https://raw.githubusercontent.com/espressif/esp-idf/master/tools/set-submodules-to-github.sh&quot;&gt;tools/set-submodules-to-github.sh&lt;/a&gt; after git clone.&lt;/p&gt; 
&lt;p&gt;The script sets absolute URLs for all submodules, allowing &lt;code&gt;git submodule update --init --recursive&lt;/code&gt; to complete. If cloning ESP-IDF from GitHub, this step is not needed.&lt;/p&gt; 
&lt;h2&gt;Finding a Project&lt;/h2&gt; 
&lt;p&gt;As well as the &lt;a href=&quot;https://github.com/espressif/esp-idf-template&quot;&gt;esp-idf-template&lt;/a&gt; project mentioned in Getting Started, ESP-IDF comes with some example projects in the &lt;a href=&quot;https://raw.githubusercontent.com/espressif/esp-idf/master/examples&quot;&gt;examples&lt;/a&gt; directory.&lt;/p&gt; 
&lt;p&gt;Once you&#39;ve found the project you want to work with, change to its directory and you can configure and build it.&lt;/p&gt; 
&lt;p&gt;To start your own project based on an example, copy the example project directory outside of the ESP-IDF directory.&lt;/p&gt; 
&lt;h1&gt;Quick Reference&lt;/h1&gt; 
&lt;p&gt;See the Getting Started guide links above for a detailed setup guide. This is a quick reference for common commands when working with ESP-IDF projects:&lt;/p&gt; 
&lt;h2&gt;Setup Build Environment&lt;/h2&gt; 
&lt;p&gt;(See the Getting Started guide listed above for a full list of required steps with more details.)&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Install host build dependencies mentioned in the Getting Started guide.&lt;/li&gt; 
 &lt;li&gt;Run the install script to set up the build environment. The options include &lt;code&gt;install.bat&lt;/code&gt; or &lt;code&gt;install.ps1&lt;/code&gt; for Windows, and &lt;code&gt;install.sh&lt;/code&gt; or &lt;code&gt;install.fish&lt;/code&gt; for Unix shells.&lt;/li&gt; 
 &lt;li&gt;Run the export script on Windows (&lt;code&gt;export.bat&lt;/code&gt;) or source it on Unix (&lt;code&gt;source export.sh&lt;/code&gt;) in every shell environment before using ESP-IDF.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Configuring the Project&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;code&gt;idf.py set-target &amp;lt;chip_name&amp;gt;&lt;/code&gt; sets the target of the project to &lt;code&gt;&amp;lt;chip_name&amp;gt;&lt;/code&gt;. Run &lt;code&gt;idf.py set-target&lt;/code&gt; without any arguments to see a list of supported targets.&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;idf.py menuconfig&lt;/code&gt; opens a text-based configuration menu where you can configure the project.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Compiling the Project&lt;/h2&gt; 
&lt;p&gt;&lt;code&gt;idf.py build&lt;/code&gt;&lt;/p&gt; 
&lt;p&gt;... will compile app, bootloader and generate a partition table based on the config.&lt;/p&gt; 
&lt;h2&gt;Flashing the Project&lt;/h2&gt; 
&lt;p&gt;When the build finishes, it will print a command line to use &lt;code&gt;esptool&lt;/code&gt; to flash the chip. However you can also do this automatically by running:&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;idf.py -p PORT flash&lt;/code&gt;&lt;/p&gt; 
&lt;p&gt;Replace PORT with the name of your serial port (like &lt;code&gt;COM3&lt;/code&gt; on Windows, &lt;code&gt;/dev/ttyUSB0&lt;/code&gt; on Linux, or &lt;code&gt;/dev/cu.usbserial-X&lt;/code&gt; on MacOS. If the &lt;code&gt;-p&lt;/code&gt; option is left out, &lt;code&gt;idf.py flash&lt;/code&gt; will try to flash the first available serial port.&lt;/p&gt; 
&lt;p&gt;This will flash the entire project (app, bootloader and partition table) to a new chip. The settings for serial port flashing can be configured with &lt;code&gt;idf.py menuconfig&lt;/code&gt;.&lt;/p&gt; 
&lt;p&gt;You don&#39;t need to run &lt;code&gt;idf.py build&lt;/code&gt; before running &lt;code&gt;idf.py flash&lt;/code&gt;, &lt;code&gt;idf.py flash&lt;/code&gt; will automatically rebuild anything which needs it.&lt;/p&gt; 
&lt;h2&gt;Viewing Serial Output&lt;/h2&gt; 
&lt;p&gt;The &lt;code&gt;idf.py monitor&lt;/code&gt; target uses the &lt;a href=&quot;https://github.com/espressif/esp-idf-monitor&quot;&gt;esp-idf-monitor tool&lt;/a&gt; to display serial output from Espressif SoCs. esp-idf-monitor also has a range of features to decode crash output and interact with the device. &lt;a href=&quot;https://docs.espressif.com/projects/esp-idf/en/latest/get-started/idf-monitor.html&quot;&gt;Check the documentation page for details&lt;/a&gt;.&lt;/p&gt; 
&lt;p&gt;Exit the monitor by typing Ctrl-].&lt;/p&gt; 
&lt;p&gt;To build, flash and monitor output in one pass, you can run:&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;idf.py flash monitor&lt;/code&gt;&lt;/p&gt; 
&lt;h2&gt;Compiling &amp;amp; Flashing Only the App&lt;/h2&gt; 
&lt;p&gt;After the initial flash, you may just want to build and flash just your app, not the bootloader and partition table:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;code&gt;idf.py app&lt;/code&gt; - build just the app.&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;idf.py app-flash&lt;/code&gt; - flash just the app.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;code&gt;idf.py app-flash&lt;/code&gt; will automatically rebuild the app if any source files have changed.&lt;/p&gt; 
&lt;p&gt;(In normal development there&#39;s no downside to reflashing the bootloader and partition table each time, if they haven&#39;t changed.)&lt;/p&gt; 
&lt;h2&gt;Erasing Flash&lt;/h2&gt; 
&lt;p&gt;The &lt;code&gt;idf.py flash&lt;/code&gt; target does not erase the entire flash contents. However it is sometimes useful to set the device back to a totally erased state, particularly when making partition table changes or OTA app updates. To erase the entire flash, run &lt;code&gt;idf.py erase-flash&lt;/code&gt;.&lt;/p&gt; 
&lt;p&gt;This can be combined with other targets, ie &lt;code&gt;idf.py -p PORT erase-flash flash&lt;/code&gt; will erase everything and then re-flash the new app, bootloader and partition table.&lt;/p&gt; 
&lt;h1&gt;Resources&lt;/h1&gt; 
&lt;ul&gt; 
 &lt;li&gt; &lt;p&gt;Documentation for the latest version: &lt;a href=&quot;https://docs.espressif.com/projects/esp-idf/&quot;&gt;https://docs.espressif.com/projects/esp-idf/&lt;/a&gt;. This documentation is built from the &lt;a href=&quot;https://raw.githubusercontent.com/espressif/esp-idf/master/docs&quot;&gt;docs directory&lt;/a&gt; of this repository.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;a href=&quot;https://youtu.be/J8zc8mMNKtc?feature=shared&quot;&gt;Beginner&#39;s Guide to Key Concepts and Resources of ESP-IDF&lt;/a&gt;&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;The &lt;a href=&quot;https://esp32.com/&quot;&gt;esp32.com forum&lt;/a&gt; is a place to ask questions and find community resources.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;a href=&quot;https://github.com/espressif/esp-idf/issues&quot;&gt;Check the Issues section on github&lt;/a&gt; if you find a bug or have a feature request. Please check existing Issues before opening a new one.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;If you&#39;re interested in contributing to ESP-IDF, please check the &lt;a href=&quot;https://docs.espressif.com/projects/esp-idf/en/latest/contribute/index.html&quot;&gt;Contributions Guide&lt;/a&gt;.&lt;/p&gt; &lt;/li&gt; 
&lt;/ul&gt;</description>
      
      <media:content url="https://opengraph.githubassets.com/7741955a700ca47afd1d1b6671bc11b04ee9c62abd5c4e7ebe579a61c969858c/espressif/esp-idf" medium="image" />
      
    </item>
    
    <item>
      <title>lightpanda-io/browser</title>
      <link>https://github.com/lightpanda-io/browser</link>
      <description>&lt;p&gt;Lightpanda: the headless browser designed for AI and automation&lt;/p&gt;&lt;hr&gt;&lt;p align=&quot;center&quot;&gt; &lt;a href=&quot;https://lightpanda.io&quot;&gt;&lt;img src=&quot;https://cdn.lightpanda.io/assets/images/logo/lpd-logo.png&quot; alt=&quot;Logo&quot; height=&quot;170&quot; /&gt;&lt;/a&gt; &lt;/p&gt; 
&lt;h1 align=&quot;center&quot;&gt;Lightpanda Browser&lt;/h1&gt; 
&lt;p align=&quot;center&quot;&gt; &lt;strong&gt;The headless browser built from scratch for AI agents and automation.&lt;/strong&gt;&lt;br /&gt; Not a Chromium fork. Not a WebKit patch. A new browser, written in Zig. &lt;/p&gt;  
&lt;div align=&quot;center&quot;&gt; 
 &lt;p&gt;&lt;a href=&quot;https://github.com/lightpanda-io/browser/raw/main/LICENSE&quot;&gt;&lt;img src=&quot;https://img.shields.io/github/license/lightpanda-io/browser&quot; alt=&quot;License&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://twitter.com/lightpanda_io&quot;&gt;&lt;img src=&quot;https://img.shields.io/twitter/follow/lightpanda_io&quot; alt=&quot;Twitter Follow&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://github.com/lightpanda-io/browser&quot;&gt;&lt;img src=&quot;https://img.shields.io/github/stars/lightpanda-io/browser&quot; alt=&quot;GitHub stars&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://discord.gg/K63XeymfB5&quot;&gt;&lt;img src=&quot;https://img.shields.io/discord/1391984864894521354?style=flat-square&amp;amp;label=discord&quot; alt=&quot;Discord&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;/div&gt; 
&lt;div align=&quot;center&quot;&gt; 
 &lt;p&gt;&lt;a href=&quot;https://github.com/lightpanda-io/demo&quot;&gt;&lt;img width=&quot;350px&quot; src=&quot;https://cdn.lightpanda.io/assets/images/github/execution-time-v2.svg?sanitize=true&quot; /&gt; &lt;/a&gt;   &lt;a href=&quot;https://github.com/lightpanda-io/demo&quot;&gt;&lt;img width=&quot;350px&quot; src=&quot;https://cdn.lightpanda.io/assets/images/github/memory-frame-v2.svg?sanitize=true&quot; /&gt; &lt;/a&gt;&lt;/p&gt; 
&lt;/div&gt; 
&lt;h2&gt;Benchmarks&lt;/h2&gt; 
&lt;p&gt;Requesting 933 real web pages over the network on a AWS EC2 m5.large instance. See &lt;a href=&quot;https://github.com/lightpanda-io/demo/raw/main/BENCHMARKS.md#crawler-benchmark&quot;&gt;benchmark details&lt;/a&gt;.&lt;/p&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th style=&quot;text-align:left&quot;&gt;Metric&lt;/th&gt; 
   &lt;th style=&quot;text-align:left&quot;&gt;Lightpanda&lt;/th&gt; 
   &lt;th style=&quot;text-align:left&quot;&gt;Headless Chrome&lt;/th&gt; 
   &lt;th style=&quot;text-align:left&quot;&gt;Difference&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;Memory (peak, 100 pages)&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;123MB&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;2GB&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;~16 less&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;Execution time (100 pages)&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;5s&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;46s&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;~9x faster&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;h2&gt;Quick start&lt;/h2&gt; 
&lt;h3&gt;Install&lt;/h3&gt; 
&lt;p&gt;&lt;strong&gt;Install from the nightly builds&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;You can download the last binary from the &lt;a href=&quot;https://github.com/lightpanda-io/browser/releases/tag/nightly&quot;&gt;nightly builds&lt;/a&gt; for Linux x86_64 and MacOS aarch64.&lt;/p&gt; 
&lt;p&gt;&lt;em&gt;For Linux&lt;/em&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-console&quot;&gt;curl -L -o lightpanda https://github.com/lightpanda-io/browser/releases/download/nightly/lightpanda-x86_64-linux &amp;amp;&amp;amp; \
chmod a+x ./lightpanda
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Verify the binary before running anything:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-console&quot;&gt;./lightpanda version
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;a href=&quot;https://github.com/lightpanda-io/browser/releases/tag/nightly&quot;&gt;Linux aarch64 is also available&lt;/a&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; The Linux release binaries are linked against glibc. On musl-based distros (Alpine, etc.) the binary fails with &lt;code&gt;cannot execute: required file not found&lt;/code&gt; because the glibc dynamic linker is missing. Use a glibc-based base image (e.g., &lt;code&gt;FROM debian:bookworm-slim&lt;/code&gt; or &lt;code&gt;FROM ubuntu:24.04&lt;/code&gt;) or &lt;a href=&quot;https://raw.githubusercontent.com/lightpanda-io/browser/main/#build-from-sources&quot;&gt;build from sources&lt;/a&gt;.&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;&lt;em&gt;For MacOS&lt;/em&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-console&quot;&gt;curl -L -o lightpanda https://github.com/lightpanda-io/browser/releases/download/nightly/lightpanda-aarch64-macos &amp;amp;&amp;amp; \
chmod a+x ./lightpanda
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;a href=&quot;https://github.com/lightpanda-io/browser/releases/tag/nightly&quot;&gt;MacOS x86_64 is also available&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;&lt;em&gt;For Windows + WSL2&lt;/em&gt;&lt;/p&gt; 
&lt;p&gt;Lightpanda has no native Windows binary. Install it inside WSL following the Linux steps above.&lt;/p&gt; 
&lt;p&gt;WSL not installed? Run &lt;code&gt;wsl --install&lt;/code&gt; from an administrator shell, restart, then open &lt;code&gt;wsl&lt;/code&gt;. See &lt;a href=&quot;https://learn.microsoft.com/en-us/windows/wsl/install&quot;&gt;Microsoft&#39;s WSL install guide&lt;/a&gt; for details.&lt;/p&gt; 
&lt;p&gt;Your automation client (Puppeteer, Playwright, etc.) can run either inside WSL or on the Windows host. WSL forwards &lt;code&gt;localhost:9222&lt;/code&gt; automatically.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Install from Docker&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;Lightpanda provides &lt;a href=&quot;https://hub.docker.com/r/lightpanda/browser&quot;&gt;official Docker images&lt;/a&gt; for both Linux amd64 and arm64 architectures. The following command fetches the Docker image and starts a new container exposing Lightpanda&#39;s CDP server on port &lt;code&gt;9222&lt;/code&gt;.&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-console&quot;&gt;docker run -d --name lightpanda -p 127.0.0.1:9222:9222 lightpanda/browser:nightly
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;Dump a URL&lt;/h3&gt; 
&lt;pre&gt;&lt;code class=&quot;language-console&quot;&gt;./lightpanda fetch --obey-robots --dump html --log-format pretty  --log-level info https://demo-browser.lightpanda.io/campfire-commerce/
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;You can use &lt;code&gt;--dump markdown&lt;/code&gt; to convert directly into markdown. &lt;code&gt;--wait-until&lt;/code&gt;, &lt;code&gt;--wait-ms&lt;/code&gt;, &lt;code&gt;--wait-selector&lt;/code&gt; and &lt;code&gt;--wait-script&lt;/code&gt; are available to adjust waiting time before dump.&lt;/p&gt; 
&lt;h3&gt;Start a CDP server&lt;/h3&gt; 
&lt;pre&gt;&lt;code class=&quot;language-console&quot;&gt;./lightpanda serve --obey-robots --log-format pretty  --log-level info --host 127.0.0.1 --port 9222
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Once the CDP server started, you can run a Puppeteer script by configuring the &lt;code&gt;browserWSEndpoint&lt;/code&gt;.&lt;/p&gt; 
&lt;details&gt; 
 &lt;summary&gt;Example Puppeteer script&lt;/summary&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-js&quot;&gt;import puppeteer from &#39;puppeteer-core&#39;;

// use browserWSEndpoint to pass the Lightpanda&#39;s CDP server address.
const browser = await puppeteer.connect({
  browserWSEndpoint: &quot;ws://127.0.0.1:9222&quot;,
});

// The rest of your script remains the same.
const context = await browser.createBrowserContext();
const frame = await context.newPage();

// Dump all the links from the frame.
await frame.goto(&#39;https://demo-browser.lightpanda.io/amiibo/&#39;, {waitUntil: &quot;networkidle0&quot;});

const links = await frame.evaluate(() =&amp;gt; {
  return Array.from(document.querySelectorAll(&#39;a&#39;)).map(row =&amp;gt; {
    return row.getAttribute(&#39;href&#39;);
  });
});

console.log(links);

await frame.close();
await context.close();
await browser.disconnect();
&lt;/code&gt;&lt;/pre&gt; 
&lt;/details&gt; 
&lt;h3&gt;Native MCP and skill&lt;/h3&gt; 
&lt;p&gt;The MCP server communicates via MCP JSON-RPC 2.0 over stdio.&lt;/p&gt; 
&lt;p&gt;Add to your MCP configuration:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-json&quot;&gt;{
  &quot;mcpServers&quot;: {
    &quot;lightpanda&quot;: {
      &quot;command&quot;: &quot;/path/to/lightpanda&quot;,
      &quot;args&quot;: [&quot;mcp&quot;]
    }
  }
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;a href=&quot;https://lightpanda.io/docs/open-source/guides/mcp-server&quot;&gt;Read full documentation&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;A skill is available in &lt;a href=&quot;https://github.com/lightpanda-io/agent-skill&quot;&gt;lightpanda-io/agent-skill&lt;/a&gt;.&lt;/p&gt; 
&lt;h3&gt;Telemetry&lt;/h3&gt; 
&lt;p&gt;By default, Lightpanda collects and sends usage telemetry. This can be disabled by setting an environment variable &lt;code&gt;LIGHTPANDA_DISABLE_TELEMETRY=true&lt;/code&gt;. You can read Lightpanda&#39;s privacy policy at: &lt;a href=&quot;https://lightpanda.io/privacy-policy&quot;&gt;https://lightpanda.io/privacy-policy&lt;/a&gt;.&lt;/p&gt; 
&lt;h2&gt;Status&lt;/h2&gt; 
&lt;p&gt;Lightpanda is in Beta and currently a work in progress. Stability and coverage are improving and many websites now work. You may still encounter errors or crashes. Please open an issue with specifics if so.&lt;/p&gt; 
&lt;p&gt;Here are the key features we have implemented:&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; disabled=&quot;true&quot; /&gt;&lt;label for=&quot;cbx_0&quot;&gt; CORS &lt;a href=&quot;https://github.com/lightpanda-io/browser/issues/2015&quot;&gt;#2015&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_1&quot; checked=&quot;true&quot; disabled=&quot;true&quot; /&gt;&lt;label for=&quot;cbx_1&quot;&gt; HTTP loader (&lt;a href=&quot;https://curl.se/libcurl/&quot;&gt;Libcurl&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; HTML parser (&lt;a href=&quot;https://github.com/servo/html5ever&quot;&gt;html5ever&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; DOM tree&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; Javascript support (&lt;a href=&quot;https://v8.dev/&quot;&gt;v8&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; DOM APIs&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; Ajax&lt;/label&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_7&quot; checked=&quot;true&quot; disabled=&quot;true&quot; /&gt;&lt;label for=&quot;cbx_7&quot;&gt; XHR API&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; Fetch API&lt;/label&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_9&quot; checked=&quot;true&quot; disabled=&quot;true&quot; /&gt;&lt;label for=&quot;cbx_9&quot;&gt; DOM dump&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; CDP/websockets server&lt;/label&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; Click&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; Input form&lt;/label&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; Cookies&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; Custom HTTP headers&lt;/label&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; Proxy support&lt;/label&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; Network interception&lt;/label&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; Respect &lt;code&gt;robots.txt&lt;/code&gt; with option &lt;code&gt;--obey-robots&lt;/code&gt;&lt;/label&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;NOTE: There are hundreds of Web APIs. Developing a browser (even just for headless mode) is a huge task. Coverage will increase over time.&lt;/p&gt; 
&lt;h2&gt;Build from sources&lt;/h2&gt; 
&lt;h3&gt;Prerequisites&lt;/h3&gt; 
&lt;p&gt;Lightpanda is written with &lt;a href=&quot;https://ziglang.org/&quot;&gt;Zig&lt;/a&gt; &lt;code&gt;0.15.2&lt;/code&gt;. You have to install it with the right version in order to build the project.&lt;/p&gt; 
&lt;p&gt;Lightpanda also depends on &lt;a href=&quot;https://chromium.googlesource.com/v8/v8.git&quot;&gt;v8&lt;/a&gt;, &lt;a href=&quot;https://curl.se/libcurl/&quot;&gt;Libcurl&lt;/a&gt; and &lt;a href=&quot;https://github.com/servo/html5ever&quot;&gt;html5ever&lt;/a&gt;.&lt;/p&gt; 
&lt;p&gt;To be able to build the v8 engine, you have to install some libs:&lt;/p&gt; 
&lt;p&gt;For &lt;strong&gt;Debian/Ubuntu based Linux&lt;/strong&gt;:&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;sudo apt install xz-utils ca-certificates \
    pkg-config libglib2.0-dev \
    clang make curl git
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;You also need to &lt;a href=&quot;https://rust-lang.org/tools/install/&quot;&gt;install Rust&lt;/a&gt;.&lt;/p&gt; 
&lt;p&gt;For systems with &lt;a href=&quot;https://nixos.org/download/&quot;&gt;&lt;strong&gt;Nix&lt;/strong&gt;&lt;/a&gt;, you can use the devShell:&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;nix develop
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;For &lt;strong&gt;MacOS&lt;/strong&gt;, you need cmake and &lt;a href=&quot;https://rust-lang.org/tools/install/&quot;&gt;Rust&lt;/a&gt;.&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;brew install cmake
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;Build and run&lt;/h3&gt; 
&lt;p&gt;You an build the entire browser with &lt;code&gt;make build&lt;/code&gt; or &lt;code&gt;make build-dev&lt;/code&gt; for debug env.&lt;/p&gt; 
&lt;p&gt;But you can directly use the zig command: &lt;code&gt;zig build run&lt;/code&gt;.&lt;/p&gt; 
&lt;h4&gt;Embed v8 snapshot&lt;/h4&gt; 
&lt;p&gt;Lighpanda uses v8 snapshot. By default, it is created on startup but you can embed it by using the following commands:&lt;/p&gt; 
&lt;p&gt;Generate the snapshot.&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;zig build snapshot_creator -- src/snapshot.bin
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Build using the snapshot binary.&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;zig build -Dsnapshot_path=../../snapshot.bin
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;See &lt;a href=&quot;https://github.com/lightpanda-io/browser/pull/1279&quot;&gt;#1279&lt;/a&gt; for more details.&lt;/p&gt; 
&lt;h2&gt;Test&lt;/h2&gt; 
&lt;h3&gt;Unit Tests&lt;/h3&gt; 
&lt;p&gt;You can test Lightpanda by running &lt;code&gt;make test&lt;/code&gt;.&lt;/p&gt; 
&lt;h3&gt;End to end tests&lt;/h3&gt; 
&lt;p&gt;To run end to end tests, you need to clone the &lt;a href=&quot;https://github.com/lightpanda-io/demo&quot;&gt;demo repository&lt;/a&gt; into &lt;code&gt;../demo&lt;/code&gt; dir.&lt;/p&gt; 
&lt;p&gt;You have to install the &lt;a href=&quot;https://github.com/lightpanda-io/demo?tab=readme-ov-file#dependencies-1&quot;&gt;demo&#39;s node requirements&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;You also need to install &lt;a href=&quot;https://go.dev&quot;&gt;Go&lt;/a&gt; &amp;gt; v1.24.&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;make end2end
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;Web Platform Tests&lt;/h3&gt; 
&lt;p&gt;Lightpanda is tested against the standardized &lt;a href=&quot;https://web-platform-tests.org/&quot;&gt;Web Platform Tests&lt;/a&gt;.&lt;/p&gt; 
&lt;p&gt;We use &lt;a href=&quot;https://github.com/lightpanda-io/wpt/tree/fork&quot;&gt;a fork&lt;/a&gt; including a custom &lt;a href=&quot;https://github.com/lightpanda-io/wpt/commit/01a3115c076a3ad0c84849dbbf77a6e3d199c56f&quot;&gt;&lt;code&gt;testharnessreport.js&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt; 
&lt;p&gt;For reference, you can easily execute a WPT test case with your browser via &lt;a href=&quot;https://wpt.live&quot;&gt;wpt.live&lt;/a&gt;.&lt;/p&gt; 
&lt;h4&gt;Configure WPT HTTP server&lt;/h4&gt; 
&lt;p&gt;To run the test, you must clone the repository, configure the custom hosts and generate the &lt;code&gt;MANIFEST.json&lt;/code&gt; file.&lt;/p&gt; 
&lt;p&gt;Clone the repository with the &lt;code&gt;fork&lt;/code&gt; branch.&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;git clone -b fork --depth=1 git@github.com:lightpanda-io/wpt.git
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Enter into the &lt;code&gt;wpt/&lt;/code&gt; dir.&lt;/p&gt; 
&lt;p&gt;Install custom domains in your &lt;code&gt;/etc/hosts&lt;/code&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;./wpt make-hosts-file | sudo tee -a /etc/hosts
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Generate &lt;code&gt;MANIFEST.json&lt;/code&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;./wpt manifest
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Use the &lt;a href=&quot;https://web-platform-tests.org/running-tests/from-local-system.html&quot;&gt;WPT&#39;s setup guide&lt;/a&gt; for details.&lt;/p&gt; 
&lt;h4&gt;Run WPT test suite&lt;/h4&gt; 
&lt;p&gt;An external &lt;a href=&quot;https://go.dev&quot;&gt;Go&lt;/a&gt; runner is provided by &lt;a href=&quot;https://github.com/lightpanda-io/demo/&quot;&gt;github.com/lightpanda-io/demo/&lt;/a&gt; repository, located into &lt;code&gt;wptrunner/&lt;/code&gt; dir. You need to clone the project first.&lt;/p&gt; 
&lt;p&gt;First start the WPT&#39;s HTTP server from your &lt;code&gt;wpt/&lt;/code&gt; clone dir.&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;./wpt serve
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Run a Lightpanda browser&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;zig build run -- --insecure-disable-tls-host-verification
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Then you can start the wptrunner from the Demo&#39;s clone dir:&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;cd wptrunner &amp;amp;&amp;amp; go run .
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Or one specific test:&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;cd wptrunner &amp;amp;&amp;amp; go run . Node-childNodes.html
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;code&gt;wptrunner&lt;/code&gt; command accepts &lt;code&gt;--summary&lt;/code&gt; and &lt;code&gt;--json&lt;/code&gt; options modifying output. Also &lt;code&gt;--concurrency&lt;/code&gt; define the concurrency limit.&lt;/p&gt; 
&lt;p&gt;⚠️ Running the whole test suite will take a long time. In this case, it&#39;s useful to build in &lt;code&gt;releaseFast&lt;/code&gt; mode to make tests faster.&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;zig build -Doptimize=ReleaseFast run
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2&gt;Contributing&lt;/h2&gt; 
&lt;p&gt;See &lt;a href=&quot;https://github.com/lightpanda-io/browser/raw/main/CONTRIBUTING.md&quot;&gt;CONTRIBUTING.md&lt;/a&gt; for guidelines. You must sign our &lt;a href=&quot;https://raw.githubusercontent.com/lightpanda-io/browser/main/CLA.md&quot;&gt;CLA&lt;/a&gt; during the pull request process.&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://discord.gg/K63XeymfB5&quot;&gt;Discord&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Why Lightpanda?&lt;/h2&gt; 
&lt;h3&gt;Javascript execution is mandatory for the modern web&lt;/h3&gt; 
&lt;p&gt;Simple HTTP requests used to be enough for web automation. That&#39;s no longer the case. Javascript now drives most of the web:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Ajax, Single Page Apps, infinite loading, instant search&lt;/li&gt; 
 &lt;li&gt;JS frameworks: React, Vue, Angular, and others&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Chrome is not the right tool&lt;/h3&gt; 
&lt;p&gt;Running a full desktop browser on a server works, but it does not scale well. Chrome at hundreds or thousands of instances is expensive:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Heavy on RAM and CPU&lt;/li&gt; 
 &lt;li&gt;Hard to package, deploy, and maintain at scale&lt;/li&gt; 
 &lt;li&gt;Many features are not necessary in headless made&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Lightpanda is built for performance&lt;/h3&gt; 
&lt;p&gt;Supporting Javascript with real performance meant building from scratch rather than forking Chromium:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Not based on Chromium, Blink, or WebKit&lt;/li&gt; 
 &lt;li&gt;Written in Zig, a low-level language with explicit memory control&lt;/li&gt; 
 &lt;li&gt;No graphical rendering engine&lt;/li&gt; 
&lt;/ul&gt;</description>
      
      <media:content url="https://opengraph.githubassets.com/636ca283945134f9864aa3923489162878b4a67f8e0036c97522ca20ec0bff8c/lightpanda-io/browser" medium="image" />
      
    </item>
    
    <item>
      <title>qmk/qmk_firmware</title>
      <link>https://github.com/qmk/qmk_firmware</link>
      <description>&lt;p&gt;Open-source keyboard firmware for Atmel AVR and Arm USB families&lt;/p&gt;&lt;hr&gt;&lt;h1&gt;Quantum Mechanical Keyboard Firmware&lt;/h1&gt; 
&lt;p&gt;&lt;a href=&quot;https://github.com/qmk/qmk_firmware/tags&quot;&gt;&lt;img src=&quot;https://img.shields.io/github/tag/qmk/qmk_firmware.svg?sanitize=true&quot; alt=&quot;Current Version&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://discord.gg/qmk&quot;&gt;&lt;img src=&quot;https://img.shields.io/discord/440868230475677696.svg?sanitize=true&quot; alt=&quot;Discord&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://docs.qmk.fm&quot;&gt;&lt;img src=&quot;https://img.shields.io/badge/docs-ready-orange.svg?sanitize=true&quot; alt=&quot;Docs Status&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://github.com/qmk/qmk_firmware/pulse/monthly&quot;&gt;&lt;img src=&quot;https://img.shields.io/github/contributors/qmk/qmk_firmware.svg?sanitize=true&quot; alt=&quot;GitHub contributors&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://github.com/qmk/qmk_firmware/&quot;&gt;&lt;img src=&quot;https://img.shields.io/github/forks/qmk/qmk_firmware.svg?style=social&amp;amp;label=Fork&quot; alt=&quot;GitHub forks&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;This is a keyboard firmware based on the &lt;a href=&quot;https://github.com/tmk/tmk_keyboard&quot;&gt;tmk_keyboard firmware&lt;/a&gt; with some useful features for Atmel AVR and ARM controllers, and more specifically, the &lt;a href=&quot;https://olkb.com&quot;&gt;OLKB product line&lt;/a&gt;, the &lt;a href=&quot;https://ergodox-ez.com&quot;&gt;ErgoDox EZ&lt;/a&gt; keyboard, and the Clueboard product line.&lt;/p&gt; 
&lt;h2&gt;Documentation&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://docs.qmk.fm&quot;&gt;See the official documentation on docs.qmk.fm&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;The docs are powered by &lt;a href=&quot;https://vitepress.dev/&quot;&gt;VitePress&lt;/a&gt;. They are also viewable offline; see &lt;a href=&quot;https://docs.qmk.fm/#/contributing?id=previewing-the-documentation&quot;&gt;Previewing the Documentation&lt;/a&gt; for more details.&lt;/p&gt; 
&lt;p&gt;You can request changes by making a fork and opening a &lt;a href=&quot;https://github.com/qmk/qmk_firmware/pulls&quot;&gt;pull request&lt;/a&gt;.&lt;/p&gt; 
&lt;h2&gt;Supported Keyboards&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/qmk/qmk_firmware/master/keyboards/planck/&quot;&gt;Planck&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/qmk/qmk_firmware/master/keyboards/preonic/&quot;&gt;Preonic&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/qmk/qmk_firmware/master/keyboards/ergodox_ez/&quot;&gt;ErgoDox EZ&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/qmk/qmk_firmware/master/keyboards/clueboard/&quot;&gt;Clueboard&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/qmk/qmk_firmware/master/keyboards/clueboard/17/&quot;&gt;Cluepad&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/qmk/qmk_firmware/master/keyboards/atreus/&quot;&gt;Atreus&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;The project also includes community support for &lt;a href=&quot;https://raw.githubusercontent.com/qmk/qmk_firmware/master/keyboards/&quot;&gt;lots of other keyboards&lt;/a&gt;.&lt;/p&gt; 
&lt;h2&gt;Maintainers&lt;/h2&gt; 
&lt;p&gt;QMK is developed and maintained by Jack Humbert of OLKB with contributions from the community, and of course, &lt;a href=&quot;https://github.com/tmk&quot;&gt;Hasu&lt;/a&gt;. The OLKB product firmwares are maintained by &lt;a href=&quot;https://github.com/jackhumbert&quot;&gt;Jack Humbert&lt;/a&gt;, the Ergodox EZ by &lt;a href=&quot;https://github.com/zsa&quot;&gt;ZSA Technology Labs&lt;/a&gt;, the Clueboard by &lt;a href=&quot;https://github.com/skullydazed&quot;&gt;Zach White&lt;/a&gt;, and the Atreus by &lt;a href=&quot;https://github.com/technomancy&quot;&gt;Phil Hagelberg&lt;/a&gt;.&lt;/p&gt; 
&lt;h2&gt;Official Website&lt;/h2&gt; 
&lt;p&gt;&lt;a href=&quot;https://qmk.fm&quot;&gt;qmk.fm&lt;/a&gt; is the official website of QMK, where you can find links to this page, the documentation, and the keyboards supported by QMK.&lt;/p&gt;</description>
      
      <media:content url="https://opengraph.githubassets.com/9c2554362eed321742c7c14749610ca95439fe455bc4ca9067d99e0afd0ea5e1/qmk/qmk_firmware" medium="image" />
      
    </item>
    
    <item>
      <title>timescale/timescaledb</title>
      <link>https://github.com/timescale/timescaledb</link>
      <description>&lt;p&gt;A time-series database for high-performance real-time analytics packaged as a Postgres extension&lt;/p&gt;&lt;hr&gt;&lt;div align=&quot;center&quot;&gt; 
 &lt;picture align=&quot;center&quot;&gt; 
  &lt;source srcset=&quot;https://assets.timescale.com/timescale-web/brand/show/horizontal-black.svg&quot; /&gt; 
  &lt;img alt=&quot;Tiger Data logo&quot; /&gt; 
 &lt;/picture&gt; 
&lt;/div&gt; 
&lt;div align=&quot;center&quot;&gt; 
 &lt;h3&gt;TimescaleDB is a PostgreSQL extension for high-performance real-time analytics on time-series and event data&lt;/h3&gt; 
 &lt;p&gt;&lt;a href=&quot;https://docs.tigerdata.com/&quot;&gt;&lt;img src=&quot;https://img.shields.io/badge/Read_the_docs-black?style=for-the-badge&amp;amp;logo=readthedocs&amp;amp;logoColor=white&quot; alt=&quot;Docs&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://timescaledb.slack.com/archives/C4GT3N90X&quot;&gt;&lt;img src=&quot;https://img.shields.io/badge/Ask_the_community-black?style=for-the-badge&amp;amp;logo=slack&amp;amp;logoColor=white&quot; alt=&quot;SLACK&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://console.cloud.timescale.com/signup&quot;&gt;&lt;img src=&quot;https://img.shields.io/badge/Try_Tiger_Cloud_for_free-black?style=for-the-badge&amp;amp;logo=timescale&amp;amp;logoColor=white&quot; alt=&quot;Try TimescaleDB for free&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;/div&gt; 
&lt;h2&gt;Quick Start with TimescaleDB&lt;/h2&gt; 
&lt;p&gt;Get started with TimescaleDB in under 10 minutes. This guide will help you run TimescaleDB locally, create your first hypertable with columnstore enabled, write data to the columnstore, and see instant analytical query performance.&lt;/p&gt; 
&lt;h3&gt;What You&#39;ll Learn&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;How to run TimescaleDB with a one-line install or Docker command&lt;/li&gt; 
 &lt;li&gt;How to create a hypertable with columnstore enabled&lt;/li&gt; 
 &lt;li&gt;How to insert data directly to the columnstore&lt;/li&gt; 
 &lt;li&gt;How to execute analytical queries&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Prerequisites&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;Docker installed on your machine&lt;/li&gt; 
 &lt;li&gt;8GB RAM recommended&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;psql&lt;/code&gt; client (included with PostgreSQL) or any PostgreSQL client like &lt;a href=&quot;https://www.pgadmin.org/download/&quot;&gt;pgAdmin&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Step 1: Start TimescaleDB&lt;/h3&gt; 
&lt;p&gt;You have two options to start TimescaleDB:&lt;/p&gt; 
&lt;h4&gt;Option 1: One-line install (Recommended)&lt;/h4&gt; 
&lt;p&gt;The easiest way to get started:&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;strong&gt;Important:&lt;/strong&gt; This script is intended for local development and testing only. Do &lt;strong&gt;not&lt;/strong&gt; use it for production deployments. For production-ready installation options, see the &lt;a href=&quot;https://docs.timescale.com/self-hosted/latest/install/&quot;&gt;TimescaleDB installation guide&lt;/a&gt;.&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;&lt;strong&gt;Linux/Mac:&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-sh&quot;&gt;curl -sL https://tsdb.co/start-local | sh
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;This command:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Downloads and starts TimescaleDB (if not already downloaded)&lt;/li&gt; 
 &lt;li&gt;Exposes PostgreSQL on port &lt;strong&gt;6543&lt;/strong&gt; (a non-standard port to avoid conflicts with other PostgreSQL instances on port 5432)&lt;/li&gt; 
 &lt;li&gt;Automatically tunes settings for your environment using timescaledb-tune&lt;/li&gt; 
 &lt;li&gt;Sets up a persistent data volume&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h4&gt;Option 2: Manual Docker command also used for Windows&lt;/h4&gt; 
&lt;p&gt;Alternatively, you can run TimescaleDB directly with Docker:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;docker run -d --name timescaledb \
    -p 6543:5432 \
    -e POSTGRES_PASSWORD=password \
    timescale/timescaledb-ha:pg18
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; We use port &lt;strong&gt;6543&lt;/strong&gt; (mapped to container port 5432) to avoid conflicts if you have other PostgreSQL instances running on the standard port 5432.&lt;/p&gt; 
&lt;p&gt;Wait about 1-2 minutes for TimescaleDB to download &amp;amp; initialize.&lt;/p&gt; 
&lt;h3&gt;Step 2: Connect to TimescaleDB&lt;/h3&gt; 
&lt;p&gt;Connect using &lt;code&gt;psql&lt;/code&gt;:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;psql -h localhost -p 6543 -U postgres
# When prompted, enter password: password
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;You should see the PostgreSQL prompt. Verify TimescaleDB is installed:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-sql&quot;&gt;SELECT extname, extversion FROM pg_extension WHERE extname = &#39;timescaledb&#39;;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Expected output:&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;   extname   | extversion
-------------+------------
 timescaledb | 2.x.x
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong&gt;Prefer a GUI?&lt;/strong&gt; If you&#39;d rather use a graphical tool instead of the command line, you can download &lt;a href=&quot;https://www.pgadmin.org/download/&quot;&gt;pgAdmin&lt;/a&gt; and connect to TimescaleDB using the same connection details (host: &lt;code&gt;localhost&lt;/code&gt;, port: &lt;code&gt;6543&lt;/code&gt;, user: &lt;code&gt;postgres&lt;/code&gt;, password: &lt;code&gt;password&lt;/code&gt;).&lt;/p&gt; 
&lt;h3&gt;Step 3: Create Your First Hypertable&lt;/h3&gt; 
&lt;p&gt;Let&#39;s create a hypertable for IoT sensor data with columnstore enabled:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-sql&quot;&gt;-- Create a hypertable with automatic columnstore
CREATE TABLE sensor_data (
    time TIMESTAMPTZ NOT NULL,
    sensor_id TEXT NOT NULL,
    temperature DOUBLE PRECISION,
    humidity DOUBLE PRECISION,
    pressure DOUBLE PRECISION
) WITH (
    tsdb.hypertable
);
-- create index
CREATE INDEX idx_sensor_id_time ON sensor_data(sensor_id, time DESC);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;code&gt;tsdb.hypertable&lt;/code&gt; - Converts this into a TimescaleDB hypertable&lt;/p&gt; 
&lt;p&gt;See more:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://docs.tigerdata.com/use-timescale/latest/hypertables/&quot;&gt;About hypertables&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://docs.tigerdata.com/api/latest/hypertable/&quot;&gt;API reference&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://docs.tigerdata.com/use-timescale/latest/compression/about-compression/&quot;&gt;About columnstore&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://docs.tigerdata.com/use-timescale/latest/compression/manual-compression/&quot;&gt;Enable columnstore manually&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://docs.tigerdata.com/api/latest/compression/&quot;&gt;API reference&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Step 4: Insert Sample Data&lt;/h3&gt; 
&lt;p&gt;Let&#39;s add some sample sensor readings:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-sql&quot;&gt;-- Enable timing to see time to execute queries
\timing on

-- Insert sample data for multiple sensors
-- SET timescaledb.enable_direct_compress_insert = on to insert data directly to the columnstore (columnnar format for performance)
SET timescaledb.enable_direct_compress_insert = on;
INSERT INTO sensor_data (time, sensor_id, temperature, humidity, pressure)
SELECT
    time,
    &#39;sensor_&#39; || ((random() * 9)::int + 1),
    20 + (random() * 15),
    40 + (random() * 30),
    1000 + (random() * 50)
FROM generate_series(
    NOW() - INTERVAL &#39;90 days&#39;,
    NOW(),
    INTERVAL &#39;1 seconds&#39;
) AS time;

-- Once data is inserted into the columnstore we optimize the order and structure 
-- this compacts and orders the data in the chunks for optimal query performance and compression
DO $$
DECLARE ch TEXT;
BEGIN
    FOR ch IN SELECT show_chunks(&#39;sensor_data&#39;) LOOP
        CALL convert_to_columnstore(ch, recompress := true);
    END LOOP;
END $$;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;This generates ~7,776,001 readings across 10 sensors over the past 90 days.&lt;/p&gt; 
&lt;p&gt;Verify the data was inserted:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-sql&quot;&gt;SELECT COUNT(*) FROM sensor_data;
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;Step 5: Run Your First Analytical Queries&lt;/h3&gt; 
&lt;p&gt;Now let&#39;s run some analytical queries that showcase TimescaleDB&#39;s performance:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-sql&quot;&gt;-- Enable query timing to see performance
\timing on

-- Query 1: Average readings per sensor over the last 7 days
SELECT
    sensor_id,
    COUNT(*) as readings,
    ROUND(AVG(temperature)::numeric, 2) as avg_temp,
    ROUND(AVG(humidity)::numeric, 2) as avg_humidity,
    ROUND(AVG(pressure)::numeric, 2) as avg_pressure
FROM sensor_data
WHERE time &amp;gt; NOW() - INTERVAL &#39;7 days&#39;
GROUP BY sensor_id
ORDER BY sensor_id;

-- Query 2: Hourly averages using time_bucket 
-- Time buckets enable you to aggregate data in hypertables by time interval and calculate summary values.
SELECT
    time_bucket(&#39;1 hour&#39;, time) AS hour,
    sensor_id,
    ROUND(AVG(temperature)::numeric, 2) as avg_temp,
    ROUND(AVG(humidity)::numeric, 2) as avg_humidity
FROM sensor_data
WHERE time &amp;gt; NOW() - INTERVAL &#39;24 hours&#39;
GROUP BY hour, sensor_id
ORDER BY hour DESC, sensor_id
LIMIT 20;

-- Query 3: Daily statistics across all sensors
SELECT
    time_bucket(&#39;1 day&#39;, time) AS day,
    COUNT(*) as total_readings,
    ROUND(AVG(temperature)::numeric, 2) as avg_temp,
    ROUND(MIN(temperature)::numeric, 2) as min_temp,
    ROUND(MAX(temperature)::numeric, 2) as max_temp
FROM sensor_data
GROUP BY day
ORDER BY day DESC
LIMIT 10;

-- Query 4: Latest reading for each sensor
-- Highlights the value of Skipscan executing in under 100ms without skipscan it takes over 5sec
SELECT DISTINCT ON (sensor_id)
    sensor_id,
    time,
    ROUND(temperature::numeric, 2) as temperature,
    ROUND(humidity::numeric, 2) as humidity,
    ROUND(pressure::numeric, 2) as pressure
FROM sensor_data
ORDER BY sensor_id, time DESC;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Notice how fast these analytical queries run, even with aggregations across millions of rows. This is the power of TimescaleDB&#39;s columnstore.&lt;/p&gt; 
&lt;h3&gt;What&#39;s Happening Behind the Scenes?&lt;/h3&gt; 
&lt;p&gt;TimescaleDB automatically:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;Partitions your data&lt;/strong&gt; into time-based chunks for efficient querying&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Write directly to columnstore&lt;/strong&gt; using columnar storage (90%+ compression typical) and faster vectorized queries&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Optimizes queries&lt;/strong&gt; by only scanning relevant time ranges and columns&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Enables time_bucket()&lt;/strong&gt; - a powerful function for time-series aggregation&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;See more:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://docs.tigerdata.com/use-timescale/latest/query-data/&quot;&gt;Query data&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://docs.tigerdata.com/use-timescale/latest/write-data/&quot;&gt;Write data&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://docs.tigerdata.com/use-timescale/latest/time-buckets/about-time-buckets/&quot;&gt;About time buckets&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://docs.tigerdata.com/api/latest/hyperfunctions/time_bucket/&quot;&gt;API reference&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://docs.tigerdata.com/use-timescale/latest/&quot;&gt;All TimescaleDB features&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Next Steps&lt;/h3&gt; 
&lt;p&gt;Now that you&#39;ve got the basics, explore more:&lt;/p&gt; 
&lt;h3&gt;Create Continuous Aggregates&lt;/h3&gt; 
&lt;p&gt;Continuous aggregates make real-time analytics run faster on very large datasets. They continuously and incrementally refresh a query in the background, so that when you run such query, only the data that has changed needs to be computed, not the entire dataset. This is what makes them different from regular PostgreSQL &lt;a href=&quot;https://www.postgresql.org/docs/current/rules-materializedviews.html&quot;&gt;materialized views&lt;/a&gt;, which cannot be incrementally materialized and have to be rebuilt from scratch every time you want to refresh them.&lt;/p&gt; 
&lt;p&gt;Let&#39;s create a continuous aggregate for hourly sensor statistics:&lt;/p&gt; 
&lt;h4&gt;Step 1: Create the Continuous Aggregate&lt;/h4&gt; 
&lt;pre&gt;&lt;code class=&quot;language-sql&quot;&gt;CREATE MATERIALIZED VIEW sensor_data_hourly
WITH (timescaledb.continuous) AS
SELECT
    time_bucket(&#39;1 hour&#39;, time) AS hour,
    sensor_id,
    AVG(temperature) AS avg_temp,
    AVG(humidity) AS avg_humidity,
    AVG(pressure) AS avg_pressure,
    MIN(temperature) AS min_temp,
    MAX(temperature) AS max_temp,
    COUNT(*) AS reading_count
FROM sensor_data
GROUP BY hour, sensor_id;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;This creates a materialized view that pre-aggregates your sensor data into hourly buckets. The view is automatically populated with existing data.&lt;/p&gt; 
&lt;h4&gt;Step 2: Add a Refresh Policy&lt;/h4&gt; 
&lt;p&gt;To keep the continuous aggregate up-to-date as new data arrives, add a refresh policy:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-sql&quot;&gt;SELECT add_continuous_aggregate_policy(
    &#39;sensor_data_hourly&#39;,
    start_offset =&amp;gt; INTERVAL &#39;3 hours&#39;,
    end_offset =&amp;gt; INTERVAL &#39;1 hour&#39;,
    schedule_interval =&amp;gt; INTERVAL &#39;1 hour&#39;
);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;This policy:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Refreshes the continuous aggregate every hour&lt;/li&gt; 
 &lt;li&gt;Processes data from 3 hours ago up to 1 hour ago (leaving the most recent hour for real-time queries)&lt;/li&gt; 
 &lt;li&gt;Only processes new or changed data incrementally&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h4&gt;Step 3: Query the Continuous Aggregate&lt;/h4&gt; 
&lt;p&gt;Now you can query the pre-aggregated data for much faster results:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-sql&quot;&gt;-- Get hourly averages for the last 24 hours
SELECT
    hour,
    sensor_id,
    ROUND(avg_temp::numeric, 2) AS avg_temp,
    ROUND(avg_humidity::numeric, 2) AS avg_humidity,
    reading_count
FROM sensor_data_hourly
WHERE hour &amp;gt; NOW() - INTERVAL &#39;24 hours&#39;
ORDER BY hour DESC, sensor_id
LIMIT 50;
&lt;/code&gt;&lt;/pre&gt; 
&lt;h4&gt;Benefits of Continuous Aggregates&lt;/h4&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;Faster queries&lt;/strong&gt;: Pre-aggregated data means queries run in milliseconds instead of seconds&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Incremental refresh&lt;/strong&gt;: Only new/changed data is processed, not the entire dataset&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Automatic updates&lt;/strong&gt;: The refresh policy keeps your aggregates current without manual intervention&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Real-time option&lt;/strong&gt;: You can enable real-time aggregation to combine materialized and raw data&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h4&gt;Try It Yourself&lt;/h4&gt; 
&lt;p&gt;Compare the performance difference:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-sql&quot;&gt;-- Query the raw hypertable (slower on large datasets)
\timing on
SELECT
    time_bucket(&#39;1 hour&#39;, time) AS hour,
    AVG(temperature) AS avg_temp
FROM sensor_data
WHERE time &amp;gt; NOW() - INTERVAL &#39;60 days&#39;
GROUP BY hour
ORDER BY hour DESC
LIMIT 24;

-- Query the continuous aggregate (much faster)
SELECT
    hour,
    avg_temp
FROM sensor_data_hourly
WHERE hour &amp;gt; NOW() - INTERVAL &#39;60 days&#39;
ORDER BY hour DESC
LIMIT 24;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Notice how the continuous aggregate query is significantly faster, especially as your dataset grows!&lt;/p&gt; 
&lt;p&gt;See more:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://docs.tigerdata.com/use-timescale/latest/continuous-aggregates/&quot;&gt;About continuous aggregates&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://docs.tigerdata.com/api/latest/continuous-aggregates/create_materialized_view/&quot;&gt;API reference&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://docs.timescale.com&quot;&gt;TimescaleDB Documentation&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://docs.timescale.com/use-timescale/latest/schema-management/&quot;&gt;Time-series Best Practices&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://docs.timescale.com/use-timescale/latest/continuous-aggregates/&quot;&gt;Continuous Aggregates&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Examples&lt;/h2&gt; 
&lt;p&gt;Learn TimescaleDB with complete, standalone examples using real-world datasets. Each example includes sample data and analytical queries.&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://raw.githubusercontent.com/timescale/timescaledb/main/docs/getting-started/nyc-taxi/&quot;&gt;NYC Taxi Data&lt;/a&gt;&lt;/strong&gt; - Transportation and location-based analytics&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://raw.githubusercontent.com/timescale/timescaledb/main/docs/getting-started/financial-ticks/&quot;&gt;Financial Market Data&lt;/a&gt;&lt;/strong&gt; - Trading and market data analysis&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://raw.githubusercontent.com/timescale/timescaledb/main/docs/getting-started/events-uuidv7/&quot;&gt;Application Events&lt;/a&gt;&lt;/strong&gt; - Event logging with UUIDv7&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;Or try some of our workshops&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://github.com/timescale/TigerData-Workshops/tree/main/AI-Workshop&quot;&gt;AI Workshop: EV Charging Station Analysis&lt;/a&gt;&lt;/strong&gt; - Integrate PostgreSQL with AI capabilities for managing and analyzing EV charging station data&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://github.com/timescale/TigerData-Workshops/tree/main/TimeSeries-Workshop-Finance/&quot;&gt;Time-Series Workshop: Financial Data Analysis&lt;/a&gt;&lt;/strong&gt; - Work with cryptocurrency tick data, create candlestick charts&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Want TimescaleDB hosted and managed for you? Try Tiger Cloud&lt;/h2&gt; 
&lt;p&gt;&lt;a href=&quot;https://docs.tigerdata.com/getting-started/latest/&quot;&gt;Tiger Cloud&lt;/a&gt; is the modern PostgreSQL data platform for all your applications. It enhances PostgreSQL to handle time series, events, real-time analytics, and vector search—all in a single database alongside transactional workloads. You get one system that handles live data ingestion, late and out-of-order updates, and low latency queries, with the performance, reliability, and scalability your app needs. Ideal for IoT, crypto, finance, SaaS, and a myriad other domains, Tiger Cloud allows you to build data-heavy, mission-critical apps while retaining the familiarity and reliability of PostgreSQL. See &lt;a href=&quot;https://docs.tigerdata.com/about/latest/whitepaper/&quot;&gt;our whitepaper&lt;/a&gt; for a deep dive into Tiger Cloud&#39;s architecture and how it meets the needs of even the most demanding applications.&lt;/p&gt; 
&lt;p&gt;A Tiger Cloud service is a single optimized 100% PostgreSQL database instance that you use as is, or extend with capabilities specific to your business needs. The available capabilities are:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;Time-series and analytics&lt;/strong&gt;: PostgreSQL with TimescaleDB. The PostgreSQL you know and love, supercharged with functionality for storing and querying time-series data at scale for real-time analytics and other use cases. Get faster time-based queries with hypertables, continuous aggregates, and columnar storage. Save on storage with native compression, data retention policies, and bottomless data tiering to Amazon S3.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;AI and vector&lt;/strong&gt;: PostgreSQL with vector extensions. Use PostgreSQL as a vector database with purpose built extensions for building AI applications from start to scale. Get fast and accurate similarity search with the pgvector and pgvectorscale extensions. Create vector embeddings and perform LLM reasoning on your data with the pgai extension.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;PostgreSQL&lt;/strong&gt;: the trusted industry-standard RDBMS. Ideal for applications requiring strong data consistency, complex relationships, and advanced querying capabilities. Get ACID compliance, extensive SQL support, JSON handling, and extensibility through custom functions, data types, and extensions. All services include all the cloud tooling you&#39;d expect for production use: &lt;a href=&quot;https://docs.tigerdata.com/use-timescale/latest/backup-restore/backup-restore-cloud/&quot;&gt;automatic backups&lt;/a&gt;, &lt;a href=&quot;https://docs.tigerdata.com/use-timescale/latest/ha-replicas/&quot;&gt;high availability&lt;/a&gt;, &lt;a href=&quot;https://docs.tigerdata.com/use-timescale/latest/ha-replicas/read-scaling/&quot;&gt;read replicas&lt;/a&gt;, &lt;a href=&quot;https://docs.tigerdata.com/use-timescale/latest/services/service-management/#fork-a-service&quot;&gt;data forking&lt;/a&gt;, &lt;a href=&quot;https://docs.tigerdata.com/use-timescale/latest/services/connection-pooling/&quot;&gt;connection pooling&lt;/a&gt;, &lt;a href=&quot;https://docs.tigerdata.com/use-timescale/latest/data-tiering/&quot;&gt;tiered storage&lt;/a&gt;, &lt;a href=&quot;https://docs.tigerdata.com/about/latest/pricing-and-account-management/&quot;&gt;usage-based storage&lt;/a&gt;, and much more.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Check build status&lt;/h2&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th style=&quot;text-align:center&quot;&gt;Linux/macOS&lt;/th&gt; 
   &lt;th style=&quot;text-align:center&quot;&gt;Linux i386&lt;/th&gt; 
   &lt;th style=&quot;text-align:center&quot;&gt;Windows&lt;/th&gt; 
   &lt;th style=&quot;text-align:center&quot;&gt;Coverity&lt;/th&gt; 
   &lt;th style=&quot;text-align:center&quot;&gt;Code Coverage&lt;/th&gt; 
   &lt;th style=&quot;text-align:center&quot;&gt;OpenSSF&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;a href=&quot;https://github.com/timescale/timescaledb/actions/workflows/linux-build-and-test.yaml?query=workflow%3ARegression+branch%3Amain+event%3Aschedule&quot;&gt;&lt;img src=&quot;https://github.com/timescale/timescaledb/actions/workflows/linux-build-and-test.yaml/badge.svg?branch=main&amp;amp;event=schedule&quot; alt=&quot;Build Status Linux/macOS&quot; /&gt;&lt;/a&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:center&quot;&gt;&lt;a href=&quot;https://github.com/timescale/timescaledb/actions/workflows/linux-32bit-build-and-test.yaml?query=workflow%3ARegression+branch%3Amain+event%3Aschedule&quot;&gt;&lt;img src=&quot;https://github.com/timescale/timescaledb/actions/workflows/linux-32bit-build-and-test.yaml/badge.svg?branch=main&amp;amp;event=schedule&quot; alt=&quot;Build Status Linux i386&quot; /&gt;&lt;/a&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:center&quot;&gt;&lt;a href=&quot;https://github.com/timescale/timescaledb/actions/workflows/windows-build-and-test.yaml?query=workflow%3ARegression+branch%3Amain+event%3Aschedule&quot;&gt;&lt;img src=&quot;https://github.com/timescale/timescaledb/actions/workflows/windows-build-and-test.yaml/badge.svg?branch=main&amp;amp;event=schedule&quot; alt=&quot;Windows build status&quot; /&gt;&lt;/a&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:center&quot;&gt;&lt;a href=&quot;https://scan.coverity.com/projects/timescale-timescaledb&quot;&gt;&lt;img src=&quot;https://scan.coverity.com/projects/timescale-timescaledb/badge.svg?sanitize=true&quot; alt=&quot;Coverity Scan Build Status&quot; /&gt;&lt;/a&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:center&quot;&gt;&lt;a href=&quot;https://codecov.io/gh/timescale/timescaledb&quot;&gt;&lt;img src=&quot;https://codecov.io/gh/timescale/timescaledb/branch/main/graphs/badge.svg?branch=main&quot; alt=&quot;Code Coverage&quot; /&gt;&lt;/a&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:center&quot;&gt;&lt;a href=&quot;https://www.bestpractices.dev/projects/8012&quot;&gt;&lt;img src=&quot;https://www.bestpractices.dev/projects/8012/badge&quot; alt=&quot;OpenSSF Best Practices&quot; /&gt;&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;h2&gt;Get involved&lt;/h2&gt; 
&lt;p&gt;We welcome contributions to TimescaleDB! See &lt;a href=&quot;https://github.com/timescale/timescaledb/raw/main/CONTRIBUTING.md&quot;&gt;Contributing&lt;/a&gt; and &lt;a href=&quot;https://github.com/timescale/timescaledb/raw/main/docs/StyleGuide.md&quot;&gt;Code style guide&lt;/a&gt; for details.&lt;/p&gt; 
&lt;h2&gt;Learn about Tiger Data&lt;/h2&gt; 
&lt;p&gt;Tiger Data is the fastest PostgreSQL for transactional, analytical and agentic workloads. To learn more about the company and its products, visit &lt;a href=&quot;https://www.tigerdata.com&quot;&gt;tigerdata.com&lt;/a&gt;.&lt;/p&gt; 
&lt;h2&gt;Troubleshooting&lt;/h2&gt; 
&lt;h4&gt;Docker container won&#39;t start&lt;/h4&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# Check if container is running
docker ps -a

# View container logs (use the appropriate container name)
# For one-line install:
docker logs timescaledb-ha-pg18-quickstart
# For manual Docker command:
docker logs timescaledb

# Stop and remove existing container
# For one-line install:
docker stop timescaledb-ha-pg18-quickstart &amp;amp;&amp;amp; docker rm timescaledb-ha-pg18-quickstart
# For manual Docker command:
docker stop timescaledb &amp;amp;&amp;amp; docker rm timescaledb

# Start fresh
# Option 1: Use the one-line install
curl -sL https://tsdb.co/start-local | sh
# Option 2: Use manual Docker command
docker run -d --name timescaledb -p 6543:5432 -e POSTGRES_PASSWORD=password timescale/timescaledb-ha:pg18
&lt;/code&gt;&lt;/pre&gt; 
&lt;h4&gt;Can&#39;t connect with psql&lt;/h4&gt; 
&lt;ul&gt; 
 &lt;li&gt;Verify Docker container is running: &lt;code&gt;docker ps&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;Check port 6543 isn&#39;t already in use: &lt;code&gt;lsof -i :6543&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;Try using explicit host: &lt;code&gt;psql -h 127.0.0.1 -p 6543 -U postgres&lt;/code&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h4&gt;TimescaleDB extension not found&lt;/h4&gt; 
&lt;p&gt;The &lt;code&gt;timescale/timescaledb-ha:pg18&lt;/code&gt; image has TimescaleDB pre-installed and pre-loaded. If you see errors, ensure you&#39;re using the correct image.&lt;/p&gt; 
&lt;h2&gt;Clean Up&lt;/h2&gt; 
&lt;p&gt;When you&#39;re done experimenting:&lt;/p&gt; 
&lt;h4&gt;If you used the one-line install:&lt;/h4&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# Stop the container
docker stop timescaledb-ha-pg18-quickstart

# Remove the container
docker rm timescaledb-ha-pg18-quickstart

# Remove the persistent data volume
docker volume rm timescaledb_data

# (Optional) Remove the Docker image
docker rmi timescale/timescaledb-ha:pg18
&lt;/code&gt;&lt;/pre&gt; 
&lt;h4&gt;If you used the manual Docker command:&lt;/h4&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# Stop the container
docker stop timescaledb

# Remove the container
docker rm timescaledb

# (Optional) Remove the Docker image
docker rmi timescale/timescaledb-ha:pg18
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; If you created a named volume with the manual Docker command, you can remove it with &lt;code&gt;docker volume rm &amp;lt;volume_name&amp;gt;&lt;/code&gt;.&lt;/p&gt;</description>
      
      <media:content url="https://opengraph.githubassets.com/f504bc8c5d79fc680e2bef7c25b2eec62fe5d5b82e1fbf649b98166f1d56673d/timescale/timescaledb" medium="image" />
      
    </item>
    
    <item>
      <title>vedderb/bldc</title>
      <link>https://github.com/vedderb/bldc</link>
      <description>&lt;p&gt;The VESC motor control firmware&lt;/p&gt;&lt;hr&gt;&lt;h1&gt;VESC firmware&lt;/h1&gt; 
&lt;p&gt;&lt;a href=&quot;https://www.gnu.org/licenses/gpl-3.0&quot;&gt;&lt;img src=&quot;https://img.shields.io/badge/License-GPLv3-blue.svg?sanitize=true&quot; alt=&quot;License: GPL v3&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://travis-ci.com/vedderb/bldc&quot;&gt;&lt;img src=&quot;https://travis-ci.com/vedderb/bldc.svg?branch=master&quot; alt=&quot;Travis CI Status&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://www.codacy.com/app/vedderb/bldc?utm_source=github.com&amp;amp;utm_medium=referral&amp;amp;utm_content=vedderb/bldc&amp;amp;utm_campaign=Badge_Grade&quot;&gt;&lt;img src=&quot;https://api.codacy.com/project/badge/Grade/75e90ffbd46841a3a7be2a9f7a94c242&quot; alt=&quot;Codacy Badge&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://github.com/vedderb/bldc/graphs/contributors&quot;&gt;&lt;img src=&quot;https://img.shields.io/github/contributors/vedderb/bldc.svg?sanitize=true&quot; alt=&quot;Contributors&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://github.com/vedderb/bldc/watchers&quot;&gt;&lt;img src=&quot;https://img.shields.io/github/watchers/vedderb/bldc.svg?sanitize=true&quot; alt=&quot;Watchers&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://github.com/vedderb/bldc/stargazers&quot;&gt;&lt;img src=&quot;https://img.shields.io/github/stars/vedderb/bldc.svg?sanitize=true&quot; alt=&quot;Stars&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://github.com/vedderb/bldc/network/members&quot;&gt;&lt;img src=&quot;https://img.shields.io/github/forks/vedderb/bldc.svg?sanitize=true&quot; alt=&quot;Forks&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;An open source motor controller firmware.&lt;/p&gt; 
&lt;p&gt;This is the source code for the VESC DC/BLDC/FOC controller. Read more at &lt;a href=&quot;https://vesc-project.com/&quot;&gt;https://vesc-project.com/&lt;/a&gt;&lt;/p&gt; 
&lt;h2&gt;Supported boards&lt;/h2&gt; 
&lt;p&gt;All of them!&lt;/p&gt; 
&lt;p&gt;Check the supported boards by typing &lt;code&gt;make&lt;/code&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;[Firmware]
     fw   - Build firmware for default target
                            supported boards are: 100_250 100_250_no_limits 100_500...
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;There are also many other options that can be changed in &lt;a href=&quot;https://raw.githubusercontent.com/vedderb/bldc/master/conf_general.h&quot;&gt;conf_general.h&lt;/a&gt;.&lt;/p&gt; 
&lt;h2&gt;Prerequisites&lt;/h2&gt; 
&lt;h3&gt;On Ubuntu (Linux)/macOS&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;Tools: &lt;code&gt;git&lt;/code&gt;, &lt;code&gt;wget&lt;/code&gt;, and &lt;code&gt;make&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;Additional Linux requirements: &lt;code&gt;libgl-dev&lt;/code&gt; and &lt;code&gt;libxcb-xinerama0&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;Helpful Ubuntu commands:&lt;/li&gt; 
&lt;/ul&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;sudo apt install git build-essential libgl-dev libxcb-xinerama0 wget git-gui
&lt;/code&gt;&lt;/pre&gt; 
&lt;ul&gt; 
 &lt;li&gt;Helpful macOS tools:&lt;/li&gt; 
&lt;/ul&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;brew install stlink
brew install openocd
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;On Windows&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;Chocolately: &lt;a href=&quot;https://chocolatey.org/install&quot;&gt;https://chocolatey.org/install&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;Git: &lt;a href=&quot;https://git-scm.com/download/win&quot;&gt;https://git-scm.com/download/win&lt;/a&gt;. Make sure to click any boxes to add Git to your Environment (aka PATH)&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Install Dev environment and build&lt;/h2&gt; 
&lt;h3&gt;On Ubuntu (Linux)/MacOS&lt;/h3&gt; 
&lt;p&gt;Open up a terminal&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;&lt;code&gt;git clone http://github.com/vedderb/bldc.git&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;cd bldc&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;Continue with &lt;a href=&quot;https://raw.githubusercontent.com/vedderb/bldc/master/#on-all-platforms&quot;&gt;On all platforms&lt;/a&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;h3&gt;On Windows&lt;/h3&gt; 
&lt;ol&gt; 
 &lt;li&gt;Open up a Windows Powershell terminal (Resist the urge to run Powershell as administrator, that will break things)&lt;/li&gt; 
 &lt;li&gt;Type &lt;code&gt;choco install make&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;git clone http://github.com/vedderb/bldc&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;cd bldc&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;Continue with &lt;a href=&quot;https://raw.githubusercontent.com/vedderb/bldc/master/#on-all-platforms&quot;&gt;On all platforms&lt;/a&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;h3&gt;On all platforms&lt;/h3&gt; 
&lt;ol&gt; 
 &lt;li&gt;&lt;code&gt;git checkout origin/master&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;make arm_sdk_install&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;make&lt;/code&gt; &amp;lt;-- Pick out the name of your target device from the supported boards list. For instance, I have a Trampa &lt;strong&gt;VESC 100/250&lt;/strong&gt;, so my target is &lt;code&gt;100_250&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;make 100_250&lt;/code&gt; &amp;lt;-- This will build the &lt;strong&gt;VESC 100/250&lt;/strong&gt; firmware and place it into the &lt;code&gt;bldc/builds/100_250/&lt;/code&gt; directory&lt;/li&gt; 
&lt;/ol&gt; 
&lt;h2&gt;Other tools&lt;/h2&gt; 
&lt;p&gt;&lt;strong&gt;Linux Optional - Add udev rules to use the stlink v2 programmer without being root&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;wget vedder.se/Temp/49-stlinkv2.rules
sudo mv 49-stlinkv2.rules /etc/udev/rules.d/
sudo udevadm trigger
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2&gt;IDE&lt;/h2&gt; 
&lt;h3&gt;Prerequisites&lt;/h3&gt; 
&lt;h4&gt;On macOS/Linux&lt;/h4&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;code&gt;python3&lt;/code&gt;, and &lt;code&gt;pip&lt;/code&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h4&gt;On Windows&lt;/h4&gt; 
&lt;ul&gt; 
 &lt;li&gt;Python 3: &lt;a href=&quot;https://www.python.org/downloads/&quot;&gt;https://www.python.org/downloads/&lt;/a&gt;. Make sure to click the box to add Python3 to your Environment.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;All platforms&lt;/h3&gt; 
&lt;ol&gt; 
 &lt;li&gt;&lt;code&gt;pip install aqtinstall&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;make qt_install&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;Open Qt Creator IDE installed in &lt;code&gt;tools/Qt/Tools/QtCreator/bin/qtcreator&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;With Qt Creator, open the vesc firmware Qt Creator project, named &lt;a href=&quot;http://vesc.pro&quot;&gt;vesc.pro&lt;/a&gt;. You will find it in &lt;code&gt;Project/Qt Creator/vesc.pro&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;The IDE is configured by default to build 100_250 firmware, this can be changed in the bottom of the left panel, there you will find all hardware variants supported by VESC&lt;/li&gt; 
&lt;/ol&gt; 
&lt;h2&gt;Upload to VESC&lt;/h2&gt; 
&lt;h3&gt;Method 1 - Flash it using an STLink SWD debugger&lt;/h3&gt; 
&lt;ol&gt; 
 &lt;li&gt;Build and flash the &lt;a href=&quot;https://github.com/vedderb/bldc-bootloader&quot;&gt;bootloader&lt;/a&gt; first&lt;/li&gt; 
 &lt;li&gt;Then &lt;code&gt;_flash&lt;/code&gt; to the target of your choice. So for instance, for the VESC 100/250:&lt;/li&gt; 
&lt;/ol&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;make 100_250_flash
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;Method 2 - Upload Firmware via VESC tool through USB&lt;/h3&gt; 
&lt;ol&gt; 
 &lt;li&gt;Clone and build the firmware in &lt;strong&gt;.bin&lt;/strong&gt; format as in the above Build instructions&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;In VESC tool&lt;/p&gt; 
&lt;ol start=&quot;2&quot;&gt; 
 &lt;li&gt;Connect to the VESC&lt;/li&gt; 
 &lt;li&gt;Navigate to the Firmware tab on the left side menu&lt;/li&gt; 
 &lt;li&gt;Click on Custom file tab&lt;/li&gt; 
 &lt;li&gt;Click on the folder icon to select the built firmware in .bin format (e.g. &lt;code&gt;build/100_250/100_250.bin&lt;/code&gt;)&lt;/li&gt; 
&lt;/ol&gt; 
&lt;h5&gt;[ Reminder : It is normal to see VESC disconnects during the firmware upload process ]&lt;/h5&gt; 
&lt;h5&gt;&lt;strong&gt;[ Warning : DO NOT DISCONNECT POWER/USB to VESC during the upload process, or you will risk bricking your VESC ]&lt;/strong&gt;&lt;/h5&gt; 
&lt;h5&gt;&lt;strong&gt;[ Warning : ONLY DISCONNECT your VESC 10s after the upload loading bar completed and &quot;FW Upload DONE&quot; ]&lt;/strong&gt;&lt;/h5&gt; 
&lt;ol start=&quot;6&quot;&gt; 
 &lt;li&gt;Press the upload firmware button (downward arrow) on the bottom right to start upload the selected firmware.&lt;/li&gt; 
 &lt;li&gt;Wait for &lt;strong&gt;10s&lt;/strong&gt; after the loading bar completed (Warning: unplug sooner will risk bricking your VESC)&lt;/li&gt; 
 &lt;li&gt;The VESC will disconnect itself after new firmware is uploaded.&lt;/li&gt; 
&lt;/ol&gt; 
&lt;h2&gt;In case you bricked your VESC&lt;/h2&gt; 
&lt;p&gt;you will need to upload a new working firmware to the VESC.&lt;br /&gt; However, to upload a firmware to a bricked VESC, you have to use a SWD Debugger.&lt;/p&gt; 
&lt;h2&gt;Contribute&lt;/h2&gt; 
&lt;p&gt;Head to the &lt;a href=&quot;https://vesc-project.com/forum&quot;&gt;forums&lt;/a&gt; to get involved and improve this project. Join the &lt;a href=&quot;https://discord.gg/JgvV5NwYts&quot;&gt;Discord&lt;/a&gt; for real-time support and chat&lt;/p&gt; 
&lt;h2&gt;Tags&lt;/h2&gt; 
&lt;p&gt;Every firmware release has a tag. They are created as follows:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;git tag -a [version] [commit] -m &quot;VESC Firmware Version [version]&quot;
git push --tags
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2&gt;License&lt;/h2&gt; 
&lt;p&gt;The software is released under the GNU General Public License version 3.0&lt;/p&gt;</description>
      
      <media:content url="https://opengraph.githubassets.com/975d6bce66d6228188bc596ee6fa6e2bbae20002a53aebbae25622c1952c84c9/vedderb/bldc" medium="image" />
      
    </item>
    
    <item>
      <title>DarkFlippers/unleashed-firmware</title>
      <link>https://github.com/DarkFlippers/unleashed-firmware</link>
      <description>&lt;p&gt;Flipper Zero Unleashed Firmware&lt;/p&gt;&lt;hr&gt;&lt;h3 align=&quot;center&quot;&gt; &lt;a href=&quot;https://github.com/DarkFlippers/unleashed-firmware&quot;&gt; &lt;img src=&quot;https://github.com/user-attachments/assets/466c40d5-f6a1-444d-a235-d9026f7cd0ff&quot; align=&quot;center&quot; alt=&quot;Unleashed Firmware Logo&quot; border=&quot;0&quot; /&gt; &lt;/a&gt; &lt;/h3&gt; 
&lt;p&gt;&lt;a href=&quot;https://t.me/flipperzero_unofficial&quot;&gt;&lt;img src=&quot;https://img.shields.io/endpoint?color=neon&amp;amp;style=flat&amp;amp;url=https%3A%2F%2Ftg.sumanjay.workers.dev%2Fflipperzero_unofficial&quot; alt=&quot;English Telegram Chat&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://t.me/flipperzero_unofficial_ru&quot;&gt;&lt;img src=&quot;https://img.shields.io/endpoint?color=neon&amp;amp;style=flat&amp;amp;url=https%3A%2F%2Ftg.sumanjay.workers.dev%2Fflipperzero_unofficial_ru&quot; alt=&quot;Russian Telegram Chat&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://t.me/flipperzero_unofficial_ua&quot;&gt;&lt;img src=&quot;https://img.shields.io/endpoint?color=neon&amp;amp;style=flat&amp;amp;url=https%3A%2F%2Ftg.sumanjay.workers.dev%2Fflipperzero_unofficial_ua&quot; alt=&quot;Ukraine Telegram Chat&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://discord.unleashedflip.com&quot;&gt;&lt;img src=&quot;https://img.shields.io/discord/937479784148115456?style=flat&amp;amp;logo=discord&amp;amp;label=Discord&amp;amp;color=%237289DA&amp;amp;link=https%3A%2F%2Fdiscord.unleashedflip.com%2F&quot; alt=&quot;Discord Server&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;h1&gt;Flipper Zero Unleashed Firmware&lt;/h1&gt; 
&lt;p&gt;This firmware is a fork of the original (OFW) version of &lt;a href=&quot;https://github.com/flipperdevices/flipperzero-firmware&quot;&gt;flipperdevices/flipperzero-firmware&lt;/a&gt; and represents the &lt;strong&gt;most stable&lt;/strong&gt; custom build, incorporating &lt;strong&gt;new features&lt;/strong&gt; and &lt;strong&gt;improvements&lt;/strong&gt; to the original components while remaining &lt;strong&gt;fully compatible&lt;/strong&gt; with the API and applications of the original firmware.&lt;/p&gt; 
&lt;div class=&quot;markdown-alert markdown-alert-warning&quot;&gt;
 &lt;p class=&quot;markdown-alert-title&quot;&gt;
  &lt;svg class=&quot;octicon octicon-alert 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;M6.457 1.047c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0 1 14.082 15H1.918a1.75 1.75 0 0 1-1.543-2.575Zm1.763.707a.25.25 0 0 0-.44 0L1.698 13.132a.25.25 0 0 0 .22.368h12.164a.25.25 0 0 0 .22-.368Zm.53 3.996v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 11a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z&quot;&gt;&lt;/path&gt;
  &lt;/svg&gt;Warning&lt;/p&gt;
 &lt;p&gt;This software is intended solely for experimental purposes and is not meant for any illegal activities. We do not condone unlawful behavior and strongly encourage you to use it only within the bounds of the law.&lt;/p&gt; 
 &lt;p&gt;This project is developed independently and is not affiliated with Flipper Devices.&lt;/p&gt; 
 &lt;p&gt;Also be aware, DarkFlippers/unleashed-firmware is the only official page of the project, there is no paid, premium or closed source versions and if someone contacts you and say they are from our team and try to offer something like that - they are scammers, block that user ASAP&lt;/p&gt; 
&lt;/div&gt; 
&lt;br /&gt; 
&lt;h2&gt;🚀 Usage&lt;/h2&gt; 
&lt;p&gt;Before getting started:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;Review the Official Documentation:&lt;/strong&gt; &lt;a href=&quot;https://docs.flipper.net&quot;&gt;docs.flipper.net&lt;/a&gt;&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;Installation Guide &amp;amp; Version Info:&lt;/strong&gt;&lt;br /&gt; How to install the firmware by following the &lt;a href=&quot;https://raw.githubusercontent.com/DarkFlippers/unleashed-firmware/dev/documentation/HowToInstall.md&quot;&gt;Installation Guide&lt;/a&gt; and check the &lt;a href=&quot;https://raw.githubusercontent.com/DarkFlippers/unleashed-firmware/dev/CHANGELOG.md#recommended-update-option---web-updater&quot;&gt;version information&lt;/a&gt; (&lt;code&gt;e&lt;/code&gt;, &lt;code&gt; &lt;/code&gt;, &lt;code&gt;c&lt;/code&gt;)&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;FAQ:&lt;/strong&gt;&lt;br /&gt; Find answers to common questions in the &lt;a href=&quot;https://raw.githubusercontent.com/DarkFlippers/unleashed-firmware/dev/documentation/FAQ.md&quot;&gt;FAQ&lt;/a&gt;&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;Web Installer:&lt;/strong&gt; -&amp;gt; &lt;a href=&quot;https://web.unleashedflip.com&quot;&gt;Unleashed FW Web Installer&lt;/a&gt;&lt;/p&gt; &lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;📦 Releases&lt;/h2&gt; 
&lt;h3&gt;Release builds (stable)&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;img src=&quot;https://github.com/badges/shields/assets/10694593/c5c5acc3-f434-4a8d-a834-6d94a7ffb45a&quot; alt=&quot;Telegram&quot; title=&quot;Telegram&quot; width=&quot;14&quot; height=&quot;14&quot; /&gt; Telegram: &lt;a href=&quot;https://t.me/unleashed_fw&quot;&gt;t.me/unleashed_fw&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/DarkFlippers/unleashed-firmware/releases&quot;&gt; &lt;img src=&quot;https://cdn.simpleicons.org/github/black/white&quot; alt=&quot;GitHub&quot; title=&quot;&quot; width=&quot;14&quot; height=&quot;14&quot; /&gt; GitHub Releases&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Dev builds (unstable)&lt;/h3&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;Built automatically from dev branch&lt;/p&gt; 
&lt;/div&gt; 
&lt;ul&gt; 
 &lt;li&gt;Web site: &lt;a href=&quot;https://dev.unleashedflip.com&quot;&gt;dev.unleashedflip.com&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;img src=&quot;https://github.com/badges/shields/assets/10694593/c5c5acc3-f434-4a8d-a834-6d94a7ffb45a&quot; alt=&quot;Telegram&quot; title=&quot;Telegram&quot; width=&quot;14&quot; height=&quot;14&quot; /&gt; Telegram: &lt;a href=&quot;https://t.me/kotnehleb&quot;&gt;t.me/kotnehleb&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;🆕 What&#39;s New&lt;/h2&gt; 
&lt;blockquote&gt; 
 &lt;details&gt; 
  &lt;summary&gt;&lt;strong&gt;Sub‑GHz Library &amp;amp; HAL&lt;/strong&gt;&lt;/summary&gt; 
  &lt;br /&gt; 
  &lt;ul&gt; 
   &lt;li&gt;Many new protocols added&lt;/li&gt; 
   &lt;li&gt;Regional TX restrictions removed&lt;/li&gt; 
   &lt;li&gt;Extra Sub-GHz frequencies added&lt;/li&gt; 
   &lt;li&gt;Frequency range can be extended in settings file &lt;em&gt;(warning: It can damage Flipper&#39;s hardware)&lt;/em&gt;&lt;/li&gt; 
   &lt;li&gt;Many rolling code &lt;a href=&quot;https://raw.githubusercontent.com/DarkFlippers/unleashed-firmware/dev/#current-modified-and-new-sub-ghz-protocols-list&quot;&gt;protocols&lt;/a&gt; now have the ability to save &amp;amp; send captured signals&lt;/li&gt; 
   &lt;li&gt;FAAC SLH (Spa) &amp;amp; BFT Mitto (keeloq secure with seed) manual creation&lt;/li&gt; 
   &lt;li&gt;External CC1101 module support &lt;a href=&quot;https://github.com/DarkFlippers/unleashed-firmware/pull/307&quot;&gt;(by quen0n)&lt;/a&gt;&lt;/li&gt; 
  &lt;/ul&gt; 
 &lt;/details&gt; 
&lt;/blockquote&gt; 
&lt;blockquote&gt; 
 &lt;details&gt; 
  &lt;summary&gt;&lt;strong&gt;Sub‑GHz Main App&lt;/strong&gt;&lt;/summary&gt; 
  &lt;br /&gt; 
  &lt;ul&gt; 
   &lt;li&gt;Save last used settings &lt;a href=&quot;https://github.com/DarkFlippers/unleashed-firmware/pull/77&quot;&gt;(by derskythe)&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;New frequency analyzer &lt;a href=&quot;https://github.com/DarkFlippers/unleashed-firmware/pull/43&quot;&gt;(by ClusterM)&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;Press OK in frequency analyzer to use detected frequency in Read modes &lt;a href=&quot;https://github.com/DarkFlippers/unleashed-firmware/pull/77&quot;&gt;(by derskythe)&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;Long press OK button in Sub-GHz Frequency analyzer to switch to Read menu &lt;a href=&quot;https://github.com/DarkFlippers/unleashed-firmware/pull/79&quot;&gt;(by derskythe)&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;New option to use timestamps + protocol name when you saving file, instead of random name or timestamp only - Enable in &lt;code&gt;Radio Settings -&amp;gt; Protocol Names = ON&lt;/code&gt;&lt;/li&gt; 
   &lt;li&gt;Read mode UI improvements (shows time when signal was received) (by @wosk)&lt;/li&gt; 
   &lt;li&gt;External CC1101 module support (Hardware SPI used)&lt;/li&gt; 
   &lt;li&gt;External CC1101 module amplifier control (or LED control) support (enabled by default)&lt;/li&gt; 
   &lt;li&gt;&lt;strong&gt;Hold right in received signal list to delete selected signal&lt;/strong&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;strong&gt;Custom buttons for Keeloq / Alutech AT4N / Nice Flor S / Somfy Telis / Security+ 2.0 / CAME Atomo&lt;/strong&gt; - now you can use arrow buttons to send signal with different button code&lt;/li&gt; 
   &lt;li&gt;&lt;code&gt;Add manually&lt;/code&gt; menu extended with new protocols&lt;/li&gt; 
   &lt;li&gt;FAAC SLH, BFT Mitto / Somfy Telis / Nice Flor S / CAME Atomo, etc. manual creation with programming new remote into receiver (use button 0xF for BFT Mitto, 0x8 (Prog) on Somfy Telis, (right arrow button for other protocols))&lt;/li&gt; 
   &lt;li&gt;Debug mode counter increase settings (+1 → +5, +10, default: +1)&lt;/li&gt; 
   &lt;li&gt;Debug PIN output settings for protocol development&lt;/li&gt; 
   &lt;li&gt;Ignore options - Alarms: Hollarm, GangQi | ReversRB2: Revers RB-2(M) protocol | Sensors: Magellan, Honeywell Sec, Honeywell WDB (doorbells), Legrand (doorbells), Feron (RGB lights) | NiceFlorS: Nice Flor-S protocol&lt;/li&gt; 
  &lt;/ul&gt; 
 &lt;/details&gt; 
&lt;/blockquote&gt; 
&lt;blockquote&gt; 
 &lt;details&gt; 
  &lt;summary&gt;&lt;strong&gt;Sub‑GHz Apps (by Unleashed Team)&lt;/strong&gt;&lt;/summary&gt; 
  &lt;br /&gt; 
  &lt;ul&gt; 
   &lt;li&gt;Sub-GHz Bruteforce - static code brute-force plugin&lt;/li&gt; 
   &lt;li&gt;Time delay (between signals) setting (hold Up in main screen (says Up to Save)) + configure repeats in protocols list by pressing right button on selected protocol&lt;/li&gt; 
   &lt;li&gt;Load your own file and select bytes you want to bruteforce or use preconfigured options in protocols list&lt;/li&gt; 
   &lt;li&gt;Sub-GHz Remote - remote control for 5 sub-ghz files | bind one file for each button&lt;/li&gt; 
   &lt;li&gt;use the built-in constructor or make config file by following this &lt;a href=&quot;https://raw.githubusercontent.com/DarkFlippers/unleashed-firmware/dev/documentation/SubGHzRemotePlugin.md&quot;&gt;instruction&lt;/a&gt;&lt;/li&gt; 
  &lt;/ul&gt; 
 &lt;/details&gt; 
&lt;/blockquote&gt; 
&lt;blockquote&gt; 
 &lt;details&gt; 
  &lt;summary&gt;&lt;strong&gt;Infrared (IR)&lt;/strong&gt;&lt;/summary&gt; 
  &lt;br /&gt; 
  &lt;ul&gt; 
   &lt;li&gt;Recompiled IR TV Universal Remote for ALL buttons&lt;/li&gt; 
   &lt;li&gt;Universal remotes for Projectors, Fans, A/Cs and Audio(soundbars, etc.) → Also always updated and verified by our team&lt;/li&gt; 
   &lt;li&gt;Infrared → &lt;code&gt;RCA&lt;/code&gt; Protocol&lt;/li&gt; 
   &lt;li&gt;Infrared → External IR modules support (with autodetect by OFW)&lt;/li&gt; 
  &lt;/ul&gt; 
 &lt;/details&gt; 
&lt;/blockquote&gt; 
&lt;blockquote&gt; 
 &lt;details&gt; 
  &lt;summary&gt;&lt;strong&gt;NFC/RFID/iButton&lt;/strong&gt;&lt;/summary&gt; 
  &lt;br /&gt; 
  &lt;ul&gt; 
   &lt;li&gt;LFRFID and iButton Fuzzer plugins&lt;/li&gt; 
   &lt;li&gt;Add DEZ 8 display form for EM4100 (by @korden32)&lt;/li&gt; 
   &lt;li&gt;Extra Mifare Classic keys in system dict&lt;/li&gt; 
   &lt;li&gt;EMV Protocol + Public data parser (by @Leptopt1los and @wosk)&lt;/li&gt; 
   &lt;li&gt;NFC &lt;code&gt;Add manually&lt;/code&gt; → Mifare Classic with custom UID&lt;/li&gt; 
   &lt;li&gt;NFC parsers: Umarsh, Zolotaya Korona, Kazan, Metromoney, Moscow Social Card, Troika (reworked) and &lt;a href=&quot;https://github.com/DarkFlippers/unleashed-firmware/tree/dev/applications/main/nfc/plugins/supported_cards&quot;&gt;many others&lt;/a&gt; (by @Leptopt1los and @assasinfil)&lt;/li&gt; 
  &lt;/ul&gt; 
 &lt;/details&gt; 
&lt;/blockquote&gt; 
&lt;blockquote&gt; 
 &lt;details&gt; 
  &lt;summary&gt;&lt;strong&gt;Quality of Life &amp;amp; Other Features&lt;/strong&gt;&lt;/summary&gt; 
  &lt;br /&gt; 
  &lt;ul&gt; 
   &lt;li&gt;Customizable Flipper name &lt;strong&gt;Update! Now can be changed in Settings → Desktop&lt;/strong&gt; (by @xMasterX and @Willy-JL)&lt;/li&gt; 
   &lt;li&gt;Text Input UI element → Cursor feature (by @Willy-JL)&lt;/li&gt; 
   &lt;li&gt;Byte Input Mini editor → &lt;strong&gt;Press UP&lt;/strong&gt; multiple times until the nibble editor appears (by @gid9798)&lt;/li&gt; 
   &lt;li&gt;Clock on Desktop &lt;code&gt;Settings -&amp;gt; Desktop -&amp;gt; Show Clock&lt;/code&gt; (by @gid9798)&lt;/li&gt; 
   &lt;li&gt;Battery percentage display with different styles &lt;code&gt;Settings -&amp;gt; Desktop -&amp;gt; Battery View&lt;/code&gt;&lt;/li&gt; 
   &lt;li&gt;More games in Dummy Mode → click or hold any of arrow buttons&lt;/li&gt; 
   &lt;li&gt;Lock device with pin (or regular lock if pin not set) by holding UP button on main screen &lt;a href=&quot;https://github.com/DarkFlippers/unleashed-firmware/pull/107&quot;&gt;(by an4tur0r)&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;strong&gt;BadKB&lt;/strong&gt; (BadUSB) &lt;a href=&quot;https://github.com/Flipper-XFW/Xtreme-Firmware/tree/dev/applications/main/bad_kb&quot;&gt;(by Willy-JL, ClaraCrazy, XFW contributors)&lt;/a&gt; - (Integrated into BadUSB app now!) - (aka BadUSB via Bluetooth)&lt;/li&gt; 
   &lt;li&gt;BadUSB → Keyboard layouts &lt;a href=&quot;https://github.com/dummy-decoy/flipperzero-firmware/tree/dummy_decoy/bad_usb_keyboard_layout&quot;&gt;(by rien &amp;gt; dummy-decoy)&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;Custom community plugins and games added + all known working apps can be downloaded in extra pack in every release&lt;/li&gt; 
   &lt;li&gt;Other small fixes and changes throughout&lt;/li&gt; 
   &lt;li&gt;See other changes in readme below&lt;/li&gt; 
  &lt;/ul&gt; 
 &lt;/details&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;Also check the &lt;a href=&quot;https://github.com/DarkFlippers/unleashed-firmware/releases&quot;&gt;changelog in releases&lt;/a&gt; for latest updates!&lt;/p&gt; 
&lt;h3&gt;Current modified and new Sub-GHz protocols list:&lt;/h3&gt; 
&lt;p&gt;&lt;a href=&quot;https://raw.githubusercontent.com/DarkFlippers/unleashed-firmware/dev/documentation/SubGHzSupportedSystems.md&quot;&gt;Full list of supported protocols and their frequencies/modulations (to use in Read mode)&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;Thanks to Official team (to their SubGHz Developer, Skorp) for implementing support (decoder + encoder / or decode only) for most protocols in OFW.&lt;/p&gt; 
&lt;p&gt;And thanks to our contributors who took part in SubGHz improvements and making of new features:&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;@RocketGod-git, @zero-mega, @ashphx, @pkooiman, Vitaly, Carlos, @li0ard, @mishamyte, d82k, Steffen (bastelbudenbuben de), @assasinfil, @gid9798&lt;/code&gt;&lt;/p&gt; 
&lt;h2&gt;❤️ Please support development of the project&lt;/h2&gt; 
&lt;p&gt;The majority of this project is developed and maintained by me, @xMasterX. Our team is small and the guys are working on this project as much as they can solely based on the enthusiasm they have for this project and the community.&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;code&gt;@mishamyte&lt;/code&gt; - NFC, RFID, SubGHz and chats moderation&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;@quen0n&lt;/code&gt; - Hardware, SubGHz and chats moderation&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;@Drone1950&lt;/code&gt; - Reverse Engineering, telegram bot and chats moderation&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;@HackcatDev&lt;/code&gt; - Support and chats moderation&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;@Leptopt1los&lt;/code&gt; - NFC, RFID, Plugins, chat moderation and many other things&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;@gid9798&lt;/code&gt; - SubGHz, Plugins, many other things - currently offline 😦&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;@assasinfil&lt;/code&gt; - SubGHz protocols, NFC parsers, chat moderation&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;@Svaarich&lt;/code&gt; - UI design and animations&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;@amec0e&lt;/code&gt; - Infrared assets&lt;/li&gt; 
 &lt;li&gt;Community moderators in Telegram, Discord, and Reddit&lt;/li&gt; 
 &lt;li&gt;And of course our GitHub community. Your PRs are a very important part of this firmware and open-source development.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;The amount of work done on this project is huge and we need your support, no matter how large or small. Even if you just say, &quot;Thank you Unleashed firmware developers!&quot; somewhere. Doing so will help us continue our work and will help drive us to make the firmware better every time. Also, regarding our releases, every build has and always will be free and open-source. There will be no paywall releases or closed-source apps within the firmware. As long as I am working on this project it will never happen.&lt;br /&gt; You can support us by using links or addresses below:&lt;/p&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Service&lt;/th&gt; 
   &lt;th&gt;Remark&lt;/th&gt; 
   &lt;th&gt;QR Code&lt;/th&gt; 
   &lt;th&gt;Link/Wallet&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;img src=&quot;https://cdn.simpleicons.org/patreon/dark/white&quot; alt=&quot;Patreon&quot; width=&quot;14&quot; /&gt; &lt;strong&gt;Patreon&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;
    &lt;div align=&quot;center&quot;&gt;
     &lt;a href=&quot;https://github.com/user-attachments/assets/a88a90a5-28c3-40b4-864a-0c0b79494a42&quot;&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/da3a864d-d1c7-42cc-8a86-6fcaf26663ec&quot; alt=&quot;QR image&quot; /&gt;&lt;/a&gt;
    &lt;/div&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://patreon.com/mmxdev&quot;&gt;patreon.com/mmxdev&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;img src=&quot;https://cdn.simpleicons.org/boosty&quot; alt=&quot;Boosty&quot; width=&quot;14&quot; /&gt; &lt;strong&gt;Boosty&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;patreon alternative&lt;/td&gt; 
   &lt;td&gt;
    &lt;div align=&quot;center&quot;&gt;
     &lt;a href=&quot;https://github.com/user-attachments/assets/893c0760-f738-42c1-acaa-916019a7bdf8&quot;&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/da3a864d-d1c7-42cc-8a86-6fcaf26663ec&quot; alt=&quot;QR image&quot; /&gt;&lt;/a&gt;
    &lt;/div&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://boosty.to/mmxdev&quot;&gt;boosty.to/mmxdev&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;img src=&quot;https://gist.githubusercontent.com/m-xim/255a3ef36c886dec144a58864608084c/raw/71da807b4abbd1582e511c9ea30fad27f78d642a/cloudtips_icon.svg?sanitize=true&quot; alt=&quot;Cloudtips&quot; width=&quot;14&quot; /&gt; CloudTips&lt;/td&gt; 
   &lt;td&gt;only RU payments accepted&lt;/td&gt; 
   &lt;td&gt;
    &lt;div align=&quot;center&quot;&gt;
     &lt;a href=&quot;https://github.com/user-attachments/assets/5de31d6a-ef24-4d30-bd8e-c06af815332a&quot;&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/da3a864d-d1c7-42cc-8a86-6fcaf26663ec&quot; alt=&quot;QR image&quot; /&gt;&lt;/a&gt;
    &lt;/div&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://pay.cloudtips.ru/p/7b3e9d65&quot;&gt;pay.cloudtips.ru/p/7b3e9d65&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;img src=&quot;https://raw.githubusercontent.com/gist/PonomareVlad/55c8708f11702b4df629ae61129a9895/raw/1657350724dab66f2ad68ea034c480a2df2a1dfd/YooMoney.svg?sanitize=true&quot; alt=&quot;YooMoney&quot; width=&quot;14&quot; /&gt; YooMoney&lt;/td&gt; 
   &lt;td&gt;only RU payments accepted&lt;/td&gt; 
   &lt;td&gt;
    &lt;div align=&quot;center&quot;&gt;
     &lt;a href=&quot;https://github.com/user-attachments/assets/33454f79-074b-4349-b453-f94fdadc3c68&quot;&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/da3a864d-d1c7-42cc-8a86-6fcaf26663ec&quot; alt=&quot;QR image&quot; /&gt;&lt;/a&gt;
    &lt;/div&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://yoomoney.ru/fundraise/XA49mgQLPA0.221209&quot;&gt;yoomoney.ru/fundraise/XA49mgQLPA0.221209&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;img src=&quot;https://cdn.simpleicons.org/tether&quot; alt=&quot;USDT&quot; width=&quot;14&quot; /&gt; USDT&lt;/td&gt; 
   &lt;td&gt;TRC20&lt;/td&gt; 
   &lt;td&gt;
    &lt;div align=&quot;center&quot;&gt;
     &lt;a href=&quot;https://github.com/user-attachments/assets/0500498d-18ed-412d-a1a4-8a66d0b6f057&quot;&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/da3a864d-d1c7-42cc-8a86-6fcaf26663ec&quot; alt=&quot;QR image&quot; /&gt;&lt;/a&gt;
    &lt;/div&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;TSXcitMSnWXUFqiUfEXrTVpVewXy2cYhrs&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;img src=&quot;https://cdn.simpleicons.org/ethereum&quot; alt=&quot;ETH&quot; width=&quot;14&quot; /&gt; ETH&lt;/td&gt; 
   &lt;td&gt;BSC/ERC20-Tokens&lt;/td&gt; 
   &lt;td&gt;
    &lt;div align=&quot;center&quot;&gt;
     &lt;a href=&quot;https://github.com/user-attachments/assets/0f323e98-c524-4f41-abb2-f4f1cec83ab6&quot;&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/da3a864d-d1c7-42cc-8a86-6fcaf26663ec&quot; alt=&quot;QR image&quot; /&gt;&lt;/a&gt;
    &lt;/div&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;0xFebF1bBc8229418FF2408C07AF6Afa49152fEc6a&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;img src=&quot;https://cdn.simpleicons.org/bitcoin&quot; alt=&quot;BTC&quot; width=&quot;14&quot; /&gt; BTC&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;
    &lt;div align=&quot;center&quot;&gt;
     &lt;a href=&quot;https://github.com/user-attachments/assets/5a904d45-947e-4b92-9f0f-7fbaaa7b37f8&quot;&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/da3a864d-d1c7-42cc-8a86-6fcaf26663ec&quot; alt=&quot;QR image&quot; /&gt;&lt;/a&gt;
    &lt;/div&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;bc1q0np836jk9jwr4dd7p6qv66d04vamtqkxrecck9&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;img src=&quot;https://cdn.simpleicons.org/solana&quot; alt=&quot;SOL&quot; width=&quot;13&quot; /&gt; SOL&lt;/td&gt; 
   &lt;td&gt;Solana/Tokens&lt;/td&gt; 
   &lt;td&gt;
    &lt;div align=&quot;center&quot;&gt;
     &lt;a href=&quot;https://github.com/user-attachments/assets/ab33c5e0-dd59-497b-9c91-ceb89c36b34d&quot;&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/da3a864d-d1c7-42cc-8a86-6fcaf26663ec&quot; alt=&quot;QR image&quot; /&gt;&lt;/a&gt;
    &lt;/div&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;DSgwouAEgu8iP5yr7EHHDqMNYWZxAqXWsTEeqCAXGLj8&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;img src=&quot;https://cdn.simpleicons.org/dogecoin&quot; alt=&quot;DOGE&quot; width=&quot;14&quot; /&gt; DOGE&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;
    &lt;div align=&quot;center&quot;&gt;
     &lt;a href=&quot;https://github.com/user-attachments/assets/2937edd0-5c85-4465-a444-14d4edb481c0&quot;&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/da3a864d-d1c7-42cc-8a86-6fcaf26663ec&quot; alt=&quot;QR image&quot; /&gt;&lt;/a&gt;
    &lt;/div&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;D6R6gYgBn5LwTNmPyvAQR6bZ9EtGgFCpvv&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;img src=&quot;https://cdn.simpleicons.org/litecoin&quot; alt=&quot;LTC&quot; width=&quot;14&quot; /&gt; LTC&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;
    &lt;div align=&quot;center&quot;&gt;
     &lt;a href=&quot;https://github.com/user-attachments/assets/441985fe-f028-4400-83c1-c215760c1e74&quot;&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/da3a864d-d1c7-42cc-8a86-6fcaf26663ec&quot; alt=&quot;QR image&quot; /&gt;&lt;/a&gt;
    &lt;/div&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;ltc1q3ex4ejkl0xpx3znwrmth4lyuadr5qgv8tmq8z9&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;img src=&quot;https://bitcoincash.org/img/green/bitcoin-cash-circle.svg?sanitize=true&quot; alt=&quot;BCH&quot; width=&quot;14&quot; /&gt; BCH&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;
    &lt;div align=&quot;center&quot;&gt;
     &lt;a href=&quot;https://github.com/user-attachments/assets/7f365976-19a3-4777-b17e-4bfba5f69eff&quot;&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/da3a864d-d1c7-42cc-8a86-6fcaf26663ec&quot; alt=&quot;QR image&quot; /&gt;&lt;/a&gt;
    &lt;/div&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;qquxfyzntuqufy2dx0hrfr4sndp0tucvky4sw8qyu3&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;img src=&quot;https://cdn.simpleicons.org/monero&quot; alt=&quot;XMR&quot; width=&quot;14&quot; /&gt; XMR&lt;/td&gt; 
   &lt;td&gt;Monero&lt;/td&gt; 
   &lt;td&gt;
    &lt;div align=&quot;center&quot;&gt;
     &lt;a href=&quot;https://github.com/user-attachments/assets/96186c06-61e7-4b4d-b716-6eaf1779bfd8&quot;&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/da3a864d-d1c7-42cc-8a86-6fcaf26663ec&quot; alt=&quot;QR image&quot; /&gt;&lt;/a&gt;
    &lt;/div&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;41xUz92suUu1u5Mu4qkrcs52gtfpu9rnZRdBpCJ244KRHf6xXSvVFevdf2cnjS7RAeYr5hn9MsEfxKoFDRSctFjG5fv1Mhn&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;img src=&quot;https://cdn.simpleicons.org/ton&quot; alt=&quot;TON&quot; width=&quot;14&quot; /&gt; TON&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;
    &lt;div align=&quot;center&quot;&gt;
     &lt;a href=&quot;https://github.com/user-attachments/assets/92a57e57-7462-42b7-a342-6f22c6e600c1&quot;&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/da3a864d-d1c7-42cc-8a86-6fcaf26663ec&quot; alt=&quot;QR image&quot; /&gt;&lt;/a&gt;
    &lt;/div&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;UQCOqcnYkvzOZUV_9bPE_8oTbOrOF03MnF-VcJyjisTZmsxa&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;h2&gt;📱 Community Apps&lt;/h2&gt; 
&lt;p&gt;Enhance your Flipper Zero with apps and plugins created by the community:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;Extra Plugins &amp;amp; Packs:&lt;/strong&gt;&lt;br /&gt; Check out the latest extra plugins and plugin packs (Extra Pack and Base Pack) on &lt;a href=&quot;https://github.com/xMasterX/all-the-plugins/releases/latest&quot;&gt;GitHub&lt;/a&gt;.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;Source Code &amp;amp; Full List:&lt;/strong&gt;&lt;br /&gt; Find the complete list and source code at &lt;a href=&quot;https://github.com/xMasterX/all-the-plugins/tree/dev&quot;&gt;xMasterX/all-the-plugins&lt;/a&gt;.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;Official Apps Catalog:&lt;/strong&gt;&lt;br /&gt; Browse the official Flipper Zero Apps Catalog on the &lt;a href=&quot;https://lab.flipper.net/apps&quot;&gt;web&lt;/a&gt; or via the &lt;a href=&quot;https://flipperzero.one/downloads&quot;&gt;mobile app&lt;/a&gt;.&lt;/p&gt; &lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;📁 Where I can find IR, Sub-GHz, ... files, DBs, and other stuff?&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/UberGuidoZ/Flipper&quot;&gt;UberGuidoZ Playground - Large collection of files - Github&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/djsime1/awesome-flipperzero&quot;&gt;Awesome Flipper Zero - Github&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/Lucaslhm/Flipper-IRDB&quot;&gt;IRDB - Infrared remotes database - Github&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;📘 Instructions&lt;/h2&gt; 
&lt;h3&gt;&lt;img src=&quot;https://custom-icon-badges.demolab.com/badge/-rgb(223,241,89)?style=flat&amp;amp;logo=fz-tools&amp;amp;logoColor=black&quot; alt=&quot;Tools Icon Badge&quot; /&gt; Firmware &amp;amp; main Apps feature&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;System: &lt;a href=&quot;https://raw.githubusercontent.com/DarkFlippers/unleashed-firmware/dev/documentation/CustomFlipperName.md&quot;&gt;How to change Flipper name&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;BadUSB: &lt;a href=&quot;https://github.com/dummy-decoy/flipperzero_badusb_kl&quot;&gt;How to add new keyboard layouts&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;Infrared: &lt;a href=&quot;https://raw.githubusercontent.com/DarkFlippers/unleashed-firmware/dev/documentation/InfraredCaptures.md&quot;&gt;How to make captures to add them into Universal IR remotes&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;&lt;img src=&quot;https://custom-icon-badges.demolab.com/badge/-rgb(165,244,190)?style=flat&amp;amp;logo=fz-subghz&amp;amp;logoColor=black&quot; alt=&quot;SubGhz Icon Badge&quot; /&gt; Sub-GHz&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/DarkFlippers/unleashed-firmware/dev/documentation/SubGHzSupportedSystems.md&quot;&gt;Full list of supported protocols and their frequencies/modulations (to use in Read mode)&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/DarkFlippers/unleashed-firmware/dev/documentation/SubGHzRemoteProg.md&quot;&gt;How to use Flipper as rolling code remote (Doorhan, Nice FlorS, BFT Mitto, Somfy Telis, Aprimatic, AN-Motors, etc..)&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/DarkFlippers/unleashed-firmware/dev/documentation/SubGHzCounterMode.md&quot;&gt;Experimental rolling code counter modes (avoid desync)&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;External Radio: &lt;a href=&quot;https://github.com/quen0n/flipperzero-ext-cc1101&quot;&gt;How to connect CC1101 module&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;Transmission is blocked? &lt;a href=&quot;https://raw.githubusercontent.com/DarkFlippers/unleashed-firmware/dev/documentation/DangerousSettings.md&quot;&gt;How to extend Sub-GHz frequency range&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/DarkFlippers/unleashed-firmware/dev/documentation/SubGHzSettings.md&quot;&gt;How to add extra Sub-GHz frequencies&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/DarkFlippers/unleashed-firmware/dev/documentation/SubGHzRemotePlugin.md&quot;&gt;&lt;s&gt;Configure Sub-GHz Remote App&lt;/s&gt;&lt;/a&gt; ⚠️ Not recommended, please use embedded configurator&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;&lt;img src=&quot;https://custom-icon-badges.demolab.com/badge/-rgb(226,78,178)?style=flat&amp;amp;logo=fz-plugins&amp;amp;logoColor=black&quot; alt=&quot;Plugins Icon Badge&quot; /&gt; Plugins&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;TOTP (Authenticator): &lt;a href=&quot;https://github.com/akopachov/flipper-zero_authenticator/raw/master/docs/conf-file_description.md&quot;&gt;config description&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;Barcode Generator: &lt;a href=&quot;https://raw.githubusercontent.com/DarkFlippers/unleashed-firmware/dev/documentation/BarcodeGenerator.md&quot;&gt;How to use&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;Multi Converter: &lt;a href=&quot;https://raw.githubusercontent.com/DarkFlippers/unleashed-firmware/dev/documentation/MultiConverter.md&quot;&gt;How to use&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;WAV Player: &lt;a href=&quot;https://github.com/UberGuidoZ/Flipper/tree/main/Wav_Player#readme&quot;&gt;sample files &amp;amp; how to convert&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;Sub-GHz playlist: &lt;a href=&quot;https://github.com/darmiel/flipper-scripts/raw/main/playlist/playlist_creator_by_chunk.py&quot;&gt;generator script&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;&lt;img src=&quot;https://custom-icon-badges.demolab.com/badge/-rgb(167,242,234)?style=flat&amp;amp;logo=fz-gpio&amp;amp;logoColor=black&quot; alt=&quot;GPIO Icon Badge&quot; /&gt; GPIO - Plugins that works with external hardware&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;Unitemp - Temperature sensors reader: &lt;a href=&quot;https://github.com/quen0n/unitemp-flipperzero#readme&quot;&gt;How to use &amp;amp; supported sensors&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;[NMEA] GPS: &lt;a href=&quot;https://github.com/xMasterX/all-the-plugins/raw/dev/base_pack/gps_nmea_uart/README.md&quot;&gt;How to use&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;i2c Tools &lt;a href=&quot;https://github.com/xMasterX/all-the-plugins/raw/dev/base_pack/flipper_i2ctools/README.md&quot;&gt;How to use&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;[NRF24] plugins: &lt;a href=&quot;https://raw.githubusercontent.com/DarkFlippers/unleashed-firmware/dev/documentation/NRF24.md&quot;&gt;How to use&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;[WiFi] Scanner: &lt;a href=&quot;https://github.com/SequoiaSan/FlipperZero-WiFi-Scanner_Module#readme&quot;&gt;How to use&lt;/a&gt; | &lt;a href=&quot;https://sequoiasan.github.io/FlipperZero-WiFi-Scanner_Module/&quot;&gt;Web Flasher&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;[ESP8266] Deauther: &lt;a href=&quot;https://github.com/SequoiaSan/FlipperZero-Wifi-ESP8266-Deauther-Module#readme&quot;&gt;How to use&lt;/a&gt; | &lt;a href=&quot;https://sequoiasan.github.io/FlipperZero-Wifi-ESP8266-Deauther-Module/&quot;&gt;Web Flasher&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;[ESP32] WiFi Marauder: &lt;a href=&quot;https://github.com/UberGuidoZ/Flipper/tree/main/Wifi_DevBoard&quot;&gt;How to use&lt;/a&gt;&lt;sub&gt; docs by UberGuidoZ&lt;/sub&gt; | &lt;a href=&quot;https://github.com/justcallmekoko/ESP32Marauder&quot;&gt;Marauder repo&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;[ESP32-CAM] Camera Suite: &lt;a href=&quot;https://github.com/CodyTolene/Flipper-Zero-Camera-Suite&quot;&gt;How to use&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;How to Upload &lt;code&gt;.bin&lt;/code&gt; to ESP32/ESP8266: &lt;a href=&quot;https://github.com/SequoiaSan/Guide-How-To-Upload-bin-to-ESP8266-ESP32&quot;&gt;Windows&lt;/a&gt; | &lt;a href=&quot;https://github.com/0xchocolate/flipperzero-esp-flasher&quot;&gt;FAP &quot;ESP flasher&quot;&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;[GPIO] SentrySafe plugin: &lt;a href=&quot;https://raw.githubusercontent.com/DarkFlippers/unleashed-firmware/dev/documentation/SentrySafe.md&quot;&gt;How to use&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;👨‍💻 Firmware &amp;amp; Development&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;Developer Documentation&lt;/strong&gt; - &lt;a href=&quot;https://developer.flipper.net/flipperzero/doxygen&quot;&gt;developer.flipper.net&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://raw.githubusercontent.com/DarkFlippers/unleashed-firmware/dev/documentation/HowToBuild.md#how-to-build-by-yourself&quot;&gt;How to build&lt;/a&gt; | &lt;a href=&quot;https://raw.githubusercontent.com/DarkFlippers/unleashed-firmware/dev/#project-structure&quot;&gt;Project-structure&lt;/a&gt;&lt;/strong&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;CLion IDE&lt;/strong&gt; - How to setup workspace for flipper firmware development &lt;a href=&quot;https://krasovs.ky/2022/11/01/flipper-zero-clion.html&quot;&gt;by Savely Krasovsky&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;&quot;Hello world!&quot;&lt;/strong&gt; - plugin tutorial &lt;a href=&quot;https://github.com/DroomOne/Flipper-Plugin-Tutorial&quot;&gt;English&lt;sub&gt; by DroomOne&lt;/sub&gt; &lt;/a&gt; | &lt;a href=&quot;https://yakovlev.me/hello-flipper-zero&quot;&gt;Russian&lt;sub&gt; by Pavel Yakovlev&lt;/sub&gt;&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://flipper.atmanos.com/docs/overview/intro&quot;&gt;How to write your own app&lt;/a&gt;.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Project structure&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;code&gt;applications&lt;/code&gt; - Applications and services used in firmware&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;assets&lt;/code&gt; - Assets used by applications and services&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;furi&lt;/code&gt; - Furi Core: OS-level primitives and helpers&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;debug&lt;/code&gt; - Debug tool: GDB-plugins, SVD-file and etc&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;documentation&lt;/code&gt; - Documentation generation system configs and input files&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;firmware&lt;/code&gt; - Firmware source code&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;lib&lt;/code&gt; - Our and 3rd party libraries, drivers and etc...&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;site_scons&lt;/code&gt; - Build helpers&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;scripts&lt;/code&gt; - Supplementary scripts and python libraries home&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;Also, pay attention to the &lt;code&gt;ReadMe.md&lt;/code&gt; files inside those directories.&lt;/p&gt; 
&lt;h2&gt;🔗 Links&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;Unleashed web page:&lt;/strong&gt; &lt;a href=&quot;https://flipperunleashed.com&quot;&gt;flipperunleashed.com&lt;/a&gt;&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;Unleashed FW Web Installer:&lt;/strong&gt; &lt;a href=&quot;https://web.unleashedflip.com&quot;&gt;web.unleashedflip.com&lt;/a&gt;&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;Unleashed domain used for direct .tgz update links for web updater or direct download:&lt;/strong&gt; &lt;a href=&quot;https://unleashedflip.com&quot;&gt;unleashedflip.com&lt;/a&gt;&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;Unleashed directory json for ufbt builds:&lt;/strong&gt; &lt;a href=&quot;https://up.unleashedflip.com/directory.json&quot;&gt;up.unleashedflip.com/directory.json&lt;/a&gt;&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;Official Docs: &lt;a href=&quot;https://docs.flipper.net&quot;&gt;docs.flipper.net&lt;/a&gt;&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;Official Forum: &lt;a href=&quot;https://forum.flipperzero.one&quot;&gt;forum.flipperzero.one&lt;/a&gt;&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;Update! Official Developer Documentation &lt;a href=&quot;https://developer.flipper.net/flipperzero/doxygen&quot;&gt;developer.flipper.net&lt;/a&gt;&lt;/p&gt; &lt;/li&gt; 
&lt;/ul&gt;</description>
      
      <media:content url="https://repository-images.githubusercontent.com/470579591/dae94a2a-5098-4630-95c6-eec8bceb9414" medium="image" />
      
    </item>
    
    <item>
      <title>Cisco-Talos/clamav</title>
      <link>https://github.com/Cisco-Talos/clamav</link>
      <description>&lt;p&gt;ClamAV - Documentation is here: https://docs.clamav.net&lt;/p&gt;&lt;hr&gt;&lt;h1&gt;ClamAV&lt;/h1&gt; 
&lt;p align=&quot;center&quot;&gt; &lt;img width=&quot;250&quot; height=&quot;250&quot; src=&quot;https://raw.githubusercontent.com/Cisco-Talos/clamav/main/logo.png&quot; alt=&quot;Maeve, the ClamAV mascot&quot; /&gt; &lt;/p&gt; 
&lt;p align=&quot;center&quot;&gt; ClamAV® is an open source antivirus engine for detecting trojans, viruses, malware &amp;amp; other malicious threats. &lt;/p&gt; 
&lt;p align=&quot;center&quot;&gt; &lt;a href=&quot;https://github.com/Cisco-Talos/clamav/actions&quot;&gt;&lt;img src=&quot;https://github.com/Cisco-Talos/clamav/workflows/CMake%20Build/badge.svg?sanitize=true&quot; height=&quot;18&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://discord.gg/6vNAqWnVgw&quot;&gt;&lt;img src=&quot;https://img.shields.io/discord/636023333074370595.svg?logo=discord&quot; height=&quot;18&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://twitter.com/clamav&quot;&gt;&lt;img src=&quot;https://abs.twimg.com/favicons/twitter.ico&quot; width=&quot;18&quot; height=&quot;18&quot; /&gt;&lt;/a&gt; &lt;/p&gt; 
&lt;h2&gt;Documentation &amp;amp; FAQ&lt;/h2&gt; 
&lt;p&gt;ClamAV documentation is hosted at &lt;a href=&quot;https://docs.clamav.net/&quot;&gt;docs.clamav.net&lt;/a&gt;. The source archive for each release also includes a copy of the documentation for &lt;a href=&quot;https://raw.githubusercontent.com/Cisco-Talos/clamav/main/docs/html/index.html&quot;&gt;offline&lt;/a&gt; reading.&lt;/p&gt; 
&lt;p&gt;You can contribute to the documentation by submitting improvements to &lt;a href=&quot;https://github.com/Cisco-Talos/clamav-documentation&quot;&gt;Cisco-Talos/clamav-documentation&lt;/a&gt;&lt;/p&gt; 
&lt;h2&gt;ClamAV News&lt;/h2&gt; 
&lt;p&gt;For information about the features in this and prior releases, read &lt;a href=&quot;https://raw.githubusercontent.com/Cisco-Talos/clamav/main/NEWS.md&quot;&gt;the news&lt;/a&gt;.&lt;/p&gt; 
&lt;p&gt;Catch up on the latest about ClamAV by reading our &lt;a href=&quot;http://blog.clamav.net&quot;&gt;blog&lt;/a&gt; and follow us on Twitter &lt;code&gt;@clamav&lt;/code&gt;.&lt;/p&gt; 
&lt;h2&gt;ClamAV Signatures&lt;/h2&gt; 
&lt;p&gt;Anyone can learn to read and write ClamAV signatures. To get started, see our &lt;a href=&quot;https://docs.clamav.net/manual/Signatures.html&quot;&gt;signature writing manual&lt;/a&gt;.&lt;/p&gt; 
&lt;h2&gt;Installation Instructions&lt;/h2&gt; 
&lt;h3&gt;Using Docker&lt;/h3&gt; 
&lt;p&gt;ClamAV can be run using Docker. For details, visit to the online manual under &lt;a href=&quot;https://docs.clamav.net/manual/Installing/Docker.html&quot;&gt;&quot;Docker&quot;&lt;/a&gt; and check out our images on &lt;a href=&quot;https://hub.docker.com/r/clamav/clamav&quot;&gt;Docker Hub&lt;/a&gt;.&lt;/p&gt; 
&lt;h3&gt;Using a Package Manager&lt;/h3&gt; 
&lt;p&gt;For help installing from a package manager, refer to the online manual under &lt;a href=&quot;https://docs.clamav.net/manual/Installing/Packages.html&quot;&gt;&quot;Packages&quot;&lt;/a&gt;.&lt;/p&gt; 
&lt;h3&gt;Using an Installer&lt;/h3&gt; 
&lt;p&gt;The following install packages are available for download from &lt;a href=&quot;https://www.clamav.net/downloads&quot;&gt;clamav.net/downloads&lt;/a&gt;:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Linux - Debian and RPM packages for x86_64 and i686. &lt;em&gt;New in v0.104.&lt;/em&gt;&lt;/li&gt; 
 &lt;li&gt;macOS - PKG installer for x86_64 and arm64 (universal). &lt;em&gt;New in v0.104.&lt;/em&gt;&lt;/li&gt; 
 &lt;li&gt;Windows - MSI installers and portable ZIP packages for win32 and x64.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;To learn how to use these packages, refer to the online manual under &lt;a href=&quot;https://docs.clamav.net/manual/Installing.html#installing-with-an-installer&quot;&gt;&quot;Installing&quot;&lt;/a&gt;.&lt;/p&gt; 
&lt;h3&gt;Build from Source&lt;/h3&gt; 
&lt;p&gt;For step-by-step instructions, refer to the online manual:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://docs.clamav.net/manual/Installing/Installing-from-source-Unix.html&quot;&gt;Unix/Linux/Mac&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://docs.clamav.net/manual/Installing/Installing-from-source-Windows.html&quot;&gt;Windows&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;The source archive for each release includes a copy of the documentation for &lt;a href=&quot;https://raw.githubusercontent.com/Cisco-Talos/clamav/main/docs/html/UserManual.html&quot;&gt;offline&lt;/a&gt; reading.&lt;/p&gt; 
&lt;p&gt;A reference with all of the available build options can be found in the &lt;a href=&quot;https://raw.githubusercontent.com/Cisco-Talos/clamav/main/INSTALL.md&quot;&gt;INSTALL.md&lt;/a&gt; file.&lt;/p&gt; 
&lt;p&gt;You can find additional advice for developers in the online manual under &lt;a href=&quot;https://docs.clamav.net/manual/Development.html&quot;&gt;&quot;For Developers&quot;&lt;/a&gt;.&lt;/p&gt; 
&lt;h3&gt;Upgrading from a previous version&lt;/h3&gt; 
&lt;p&gt;Visit &lt;a href=&quot;https://docs.clamav.net/faq/faq-upgrade.html&quot;&gt;the FAQ&lt;/a&gt; for tips on how to upgrade from a previous version.&lt;/p&gt; 
&lt;h2&gt;Join the ClamAV Community&lt;/h2&gt; 
&lt;p&gt;The best way to get in touch with the ClamAV community is to join our &lt;a href=&quot;https://docs.clamav.net/faq/faq-ml.html&quot;&gt;mailing lists&lt;/a&gt;.&lt;/p&gt; 
&lt;p&gt;You can also join the community on our &lt;a href=&quot;https://discord.gg/6vNAqWnVgw&quot;&gt;ClamAV Discord chat server&lt;/a&gt;.&lt;/p&gt; 
&lt;h2&gt;Want to make a contribution?&lt;/h2&gt; 
&lt;p&gt;The ClamAV development team welcomes &lt;a href=&quot;https://github.com/Cisco-Talos/clamav&quot;&gt;code contributions&lt;/a&gt;, improvements to &lt;a href=&quot;https://github.com/Cisco-Talos/clamav-documentation&quot;&gt;our documentation&lt;/a&gt;, and also &lt;a href=&quot;https://github.com/Cisco-Talos/clamav/issues&quot;&gt;bug reports&lt;/a&gt;.&lt;/p&gt; 
&lt;p&gt;Thanks for joining us!&lt;/p&gt; 
&lt;h2&gt;Licensing&lt;/h2&gt; 
&lt;p&gt;ClamAV is licensed for public/open source use under the GNU General Public License, Version 2 (GPLv2).&lt;/p&gt; 
&lt;p&gt;See &lt;code&gt;COPYING.txt&lt;/code&gt; for a copy of the license.&lt;/p&gt; 
&lt;h3&gt;3rd Party Code&lt;/h3&gt; 
&lt;p&gt;ClamAV contains a number of components that include code copied in part or in whole from 3rd party projects and whose code is not owned by Cisco and which are licensed differently than ClamAV. These include:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Yara: Apache 2.0 license 
  &lt;ul&gt; 
   &lt;li&gt;Yara has since switched to the BSD 3-Clause License; Our source is out-of-date and needs to be updated.&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;7z / lzma: public domain&lt;/li&gt; 
 &lt;li&gt;libclamav&#39;s NSIS/NulSoft parser includes: 
  &lt;ul&gt; 
   &lt;li&gt;zlib: permissive free software license&lt;/li&gt; 
   &lt;li&gt;bzip2 / libbzip2: BSD-like license&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;OpenBSD&#39;s libc/regex: BSD license&lt;/li&gt; 
 &lt;li&gt;file: BSD license&lt;/li&gt; 
 &lt;li&gt;str.c: Contains BSD licensed modified-implementations of strtol(), stroul() functions, Copyright (c) 1990 The Regents of the University of California.&lt;/li&gt; 
 &lt;li&gt;pngcheck (png.c): MIT/X11-style license&lt;/li&gt; 
 &lt;li&gt;getopt.c: MIT license&lt;/li&gt; 
 &lt;li&gt;Curl: license inspired by MIT/X, but not identical&lt;/li&gt; 
 &lt;li&gt;libmspack: LGPL license&lt;/li&gt; 
 &lt;li&gt;UnRAR (libclamunrar): a non-free/restricted open source license 
  &lt;ul&gt; 
   &lt;li&gt;Note: The UnRAR license is incompatible with GPLv2 because it contains a clause that prohibits reverse engineering a RAR compression algorithm from the UnRAR decompression code. For this reason, libclamunrar/libclamunrar_iface is not linked at all with libclamav. It is instead loaded at run-time. If it fails to load, ClamAV will continue running without RAR support.&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;See the &lt;code&gt;COPYING&lt;/code&gt; directory for a copy of the 3rd party project licenses.&lt;/p&gt; 
&lt;h2&gt;Acknowledgements&lt;/h2&gt; 
&lt;p&gt;Credit for contributions to each release can be found in the &lt;a href=&quot;https://raw.githubusercontent.com/Cisco-Talos/clamav/main/NEWS.md&quot;&gt;News&lt;/a&gt;.&lt;/p&gt; 
&lt;p&gt;ClamAV is brought to you by &lt;a href=&quot;https://www.clamav.net/about.html#credits&quot;&gt;the ClamAV Team&lt;/a&gt;&lt;/p&gt;</description>
      
      <media:content url="https://opengraph.githubassets.com/81d8e8b4026c16d907a9cd874724893b73f5801a8759fef969ca49cfd25b6383/Cisco-Talos/clamav" medium="image" />
      
    </item>
    
    <item>
      <title>hathach/tinyusb</title>
      <link>https://github.com/hathach/tinyusb</link>
      <description>&lt;p&gt;An open source cross-platform USB stack for embedded system&lt;/p&gt;&lt;hr&gt;&lt;h1&gt;TinyUSB&lt;/h1&gt; 
&lt;p&gt;|Build Status| |CircleCI Status| |Documentation Status| |Static Analysis| |Fuzzing Status| |Membrowse| |License|&lt;/p&gt; 
&lt;h2&gt;Sponsors&lt;/h2&gt; 
&lt;p&gt;TinyUSB is funded by: Adafruit. Purchasing products from them helps to support this project.&lt;/p&gt; 
&lt;p&gt;.. figure:: docs/assets/adafruit_logo.svg :alt: Adafruit Logo :align: left :target: &lt;a href=&quot;https://www.adafruit.com&quot;&gt;https://www.adafruit.com&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;.. raw:: html&lt;/p&gt; 
&lt;div class=&quot;clear-both&quot;&gt;&lt;/div&gt; 
&lt;h2&gt;Overview&lt;/h2&gt; 
&lt;p&gt;.. figure:: docs/assets/logo.svg :alt: TinyUSB :align: left&lt;/p&gt; 
&lt;p&gt;.. raw:: html&lt;/p&gt; 
&lt;div class=&quot;clear-both&quot;&gt;&lt;/div&gt; 
&lt;p&gt;TinyUSB is an open-source cross-platform USB Host/Device stack for embedded systems. It’s designed for memory safety (no dynamic allocation) and thread safety (all interrupts deferred to non-ISR task functions). The stack emphasizes portability, small footprint, and real-time performance across 50+ MCU families.&lt;/p&gt; 
&lt;h2&gt;Key Features&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;Thread-safe:&lt;/strong&gt; USB interrupts deferred to task context&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Memory-safe:&lt;/strong&gt; No dynamic allocation, all buffers static&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Portable:&lt;/strong&gt; Supports 50+ MCU families&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Comprehensive:&lt;/strong&gt; Includes CDC, HID, MSC, Audio, and Host support&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;RTOS-friendly:&lt;/strong&gt; Works with bare metal, FreeRTOS, RT-Thread, and Mynewt&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;.. figure:: docs/assets/stack.svg :width: 500px :align: left :alt: stackup&lt;/p&gt; 
&lt;p&gt;.. raw:: html&lt;/p&gt; 
&lt;div class=&quot;clear-both&quot;&gt;&lt;/div&gt; 
&lt;p&gt;::&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;.
├── docs            # Documentation
├── examples        # Examples with make and cmake build system
├── hw
│   ├── bsp         # Supported boards source files
│   └── mcu         # Low level mcu core &amp;amp; peripheral drivers
├── lib             # Sources from 3rd party such as FreeRTOS, FatFs ...
├── src             # All sources files for TinyUSB stack itself.
├── test            # Tests: unit test, fuzzing, hardware test
└── tools           # Files used internally
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2&gt;Getting started&lt;/h2&gt; 
&lt;p&gt;See the &lt;code&gt;online documentation &amp;lt;https://docs.tinyusb.org&amp;gt;&lt;/code&gt;_ for information about using TinyUSB and how it is implemented.&lt;/p&gt; 
&lt;p&gt;Check out &lt;code&gt;Getting Started&lt;/code&gt;_ guide for adding TinyUSB to your project or building the examples. If you are new to TinyUSB, we recommend starting with the &lt;code&gt;cdc_msc&lt;/code&gt; example. There is a handful of &lt;code&gt;Supported Boards&lt;/code&gt;_ that should work out of the box.&lt;/p&gt; 
&lt;p&gt;We use &lt;code&gt;GitHub Discussions &amp;lt;https://github.com/hathach/tinyusb/discussions&amp;gt;&lt;/code&gt;_ as our forum. It is a great place to ask questions and advice from the community or to discuss your TinyUSB-based projects.&lt;/p&gt; 
&lt;p&gt;For bugs and feature requests, please &lt;code&gt;raise an issue &amp;lt;https://github.com/hathach/tinyusb/issues&amp;gt;&lt;/code&gt;_ and follow the templates there.&lt;/p&gt; 
&lt;p&gt;See &lt;code&gt;Porting&lt;/code&gt;_ guide for adding support for new MCUs and boards.&lt;/p&gt; 
&lt;h2&gt;Device Stack&lt;/h2&gt; 
&lt;p&gt;Supports multiple device configurations by dynamically changing USB descriptors, low power functions such like suspend, resume, and remote wakeup. The following device classes are supported:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Audio Class 1.0/2.0 (UAC1/UAC2)&lt;/li&gt; 
 &lt;li&gt;Bluetooth Host Controller Interface (BTH HCI)&lt;/li&gt; 
 &lt;li&gt;Communication Device Class (CDC)&lt;/li&gt; 
 &lt;li&gt;Device Firmware Update (DFU): DFU mode (WIP) and Runtime&lt;/li&gt; 
 &lt;li&gt;Human Interface Device (HID): Generic (In &amp;amp; Out), Keyboard, Mouse, Gamepad etc ...&lt;/li&gt; 
 &lt;li&gt;Printer class&lt;/li&gt; 
 &lt;li&gt;Mass Storage Class (MSC): with multiple LUNs&lt;/li&gt; 
 &lt;li&gt;Musical Instrument Digital Interface (MIDI)&lt;/li&gt; 
 &lt;li&gt;Media Transfer Protocol (MTP/PTP)&lt;/li&gt; 
 &lt;li&gt;Network with RNDIS, Ethernet Control Model (ECM), Network Control Model (NCM)&lt;/li&gt; 
 &lt;li&gt;Test and Measurement Class (USBTMC)&lt;/li&gt; 
 &lt;li&gt;Video class 1.5 (UVC): work in progress&lt;/li&gt; 
 &lt;li&gt;Vendor-specific class support with generic In &amp;amp; Out endpoints. Can be used with MS OS 2.0 compatible descriptor to load winUSB driver without INF file.&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;WebUSB &amp;lt;https://github.com/WICG/webusb&amp;gt;&lt;/code&gt;__ with vendor-specific class&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;If you have a special requirement, &lt;code&gt;usbd_app_driver_get_cb()&lt;/code&gt; can be used to write your own class driver without modifying the stack. Here is how the RPi team added their reset interface &lt;code&gt;raspberrypi/pico-sdk#197 &amp;lt;https://github.com/raspberrypi/pico-sdk/pull/197&amp;gt;&lt;/code&gt;_&lt;/p&gt; 
&lt;h2&gt;Host Stack&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;Communication Device Class: CDC-ACM&lt;/li&gt; 
 &lt;li&gt;Vendor serial over USB: FTDI, CP210x, CH34x, PL2303&lt;/li&gt; 
 &lt;li&gt;Human Interface Device (HID): Keyboard, Mouse, Generic&lt;/li&gt; 
 &lt;li&gt;Mass Storage Class (MSC)&lt;/li&gt; 
 &lt;li&gt;Musical Instrument Digital Interface (MIDI)&lt;/li&gt; 
 &lt;li&gt;Hub with multiple-level support&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;Similar to the Device Stack, if you have a special requirement, &lt;code&gt;usbh_app_driver_get_cb()&lt;/code&gt; can be used to write your own class driver without modifying the stack.&lt;/p&gt; 
&lt;h2&gt;Power Delivery Stack&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;Power Delivery 3.0 (PD3.0) with USB Type-C support (WIP)&lt;/li&gt; 
 &lt;li&gt;Super early stage, only for testing purpose&lt;/li&gt; 
 &lt;li&gt;Only support STM32 G4&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;OS Abstraction layer&lt;/h2&gt; 
&lt;p&gt;TinyUSB is completely thread-safe by pushing all Interrupt Service Request (ISR) events into a central queue, then processing them later in the non-ISR context task function. It also uses semaphore/mutex to access shared resources such as Communication Device Class (CDC) FIFO. Therefore the stack needs to use some of the OS&#39;s basic APIs. Following OSes are already supported out of the box.&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;No OS&lt;/strong&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;FreeRTOS&lt;/strong&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;RT-Thread &amp;lt;https://github.com/RT-Thread/rt-thread&amp;gt;&lt;/code&gt;&lt;em&gt;: &lt;code&gt;repo &amp;lt;https://github.com/RT-Thread-packages/tinyusb&amp;gt;&lt;/code&gt;&lt;/em&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Mynewt&lt;/strong&gt; Due to the newt package build system, Mynewt examples are better to be on its &lt;code&gt;own repo &amp;lt;https://github.com/hathach/mynewt-tinyusb-example&amp;gt;&lt;/code&gt;_&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Supported CPUs&lt;/h2&gt; 
&lt;p&gt;+--------------+-----------------------------+--------+------+-----------+------------------------+--------------------+ | Manufacturer | Family | Device | Host | Highspeed | Driver | Note | +==============+=============================+========+======+===========+========================+====================+ | Allwinner | F1C100s/F1C200s | ✔ | | ✔ | sunxi | musb variant | +--------------+-----------------------------+--------+------+-----------+------------------------+--------------------+ | Analog | MAX3421E | | ✔ | ✖ | max3421 | via SPI | | +-----------------------------+--------+------+-----------+------------------------+--------------------+ | | MAX32 650, 666, 690, | ✔ | | ✔ | musb | 1-dir ep | | | MAX78002 | | | | | | +--------------+-----------------------------+--------+------+-----------+------------------------+--------------------+ | Artery AT32 | F403a_407, F413 | ✔ | | | fsdev | 512 USB RAM | | +-----------------------------+--------+------+-----------+------------------------+--------------------+ | | F415, F435_437, F423, | ✔ | ✔ | | dwc2 | | | | F425, F45x | | | | | | | +-----------------------------+--------+------+-----------+------------------------+--------------------+ | | F402_F405 | ✔ | ✔ | ✔ | dwc2 | F405 is HS | +--------------+-----------------------------+--------+------+-----------+------------------------+--------------------+ | Bridgetek | FT90x | ✔ | | ✔ | ft9xx | 1-dir ep | +--------------+-----------------------------+--------+------+-----------+------------------------+--------------------+ | Broadcom | BCM2711, BCM2837 | ✔ | | ✔ | dwc2 | | +--------------+-----------------------------+--------+------+-----------+------------------------+--------------------+ | Dialog | DA1469x | ✔ | ✖ | ✖ | da146xx | | +--------------+-----------------------------+--------+------+-----------+------------------------+--------------------+ | Espressif | S2, S3, H4 | ✔ | ✔ | ✖ | dwc2 | | | ESP32 +-----------------------------+--------+------+-----------+------------------------+--------------------+ | | P4 | ✔ | ✔ | ✔ | dwc2 | | +--------------+-----------------------------+--------+------+-----------+------------------------+--------------------+ | GigaDevice | GD32VF103 | ✔ | | ✖ | dwc2 | | +--------------+-----------------------------+--------+------+-----------+------------------------+--------------------+ | HPMicro | HPM6750 | ✔ | ✔ | ✔ | ci_hs, ehci | | +--------------+-----------------------------+--------+------+-----------+------------------------+--------------------+ | Infineon | XMC4500 | ✔ | ✔ | ✖ | dwc2 | | +--------------+-----+-----------------------+--------+------+-----------+------------------------+--------------------+ | MicroChip | SAM | D11, D21, L21, L22 | ✔ | | ✖ | samd | | | | +-----------------------+--------+------+-----------+------------------------+--------------------+ | | | D51, E5x | ✔ | | ✖ | samd | | | | +-----------------------+--------+------+-----------+------------------------+--------------------+ | | | G55 | ✔ | | ✖ | samg | 1-dir ep | | | +-----------------------+--------+------+-----------+------------------------+--------------------+ | | | E70,S70,V70,V71 | ✔ | | ✔ | samx7x | 1-dir ep | | +-----+-----------------------+--------+------+-----------+------------------------+--------------------+ | | PIC | 24 | ✔ | | | pic | ci_fs variant | | | +-----------------------+--------+------+-----------+------------------------+--------------------+ | | | 32 mm, mk, mx | ✔ | | | pic | ci_fs variant | | | +-----------------------+--------+------+-----------+------------------------+--------------------+ | | | dsPIC33 | ✔ | | | pic | ci_fs variant | | | +-----------------------+--------+------+-----------+------------------------+--------------------+ | | | 32mz | ✔ | | | pic32mz | musb variant | +--------------+-----+-----------------------+--------+------+-----------+------------------------+--------------------+ | MindMotion | mm32 | ✔ | | ✖ | mm32f327x_otg | ci_fs variant | +--------------+-----+-----------------------+--------+------+-----------+------------------------+--------------------+ | NordicSemi | nRF52, nRF53 | ✔ | ✖ | ✖ | nrf5x | only ep8 is ISO | | +-----------------------------+--------+------+-----------+------------------------+--------------------+ | | nRF54 | ✔ | ✖ | ✔ | dwc2 | | +--------------+-----------------------------+--------+------+-----------+------------------------+--------------------+ | Nuvoton | NUC120 | ✔ | ✖ | ✖ | nuc120 | | | +-----------------------------+--------+------+-----------+------------------------+--------------------+ | | NUC121/NUC125, NUC126 | ✔ | ✖ | ✖ | nuc121 | | | +-----------------------------+--------+------+-----------+------------------------+--------------------+ | | NUC505 | ✔ | | ✔ | nuc505 | | +--------------+---------+-------------------+--------+------+-----------+------------------------+--------------------+ | NXP | iMXRT | RT 10xx, 11xx | ✔ | ✔ | ✔ | ci_hs, ehci | | | +---------+-------------------+--------+------+-----------+------------------------+--------------------+ | | Kinetis | KL | ✔ | ⚠ | ✖ | ci_fs, khci | | | | +-------------------+--------+------+-----------+------------------------+--------------------+ | | | K32L2 | ✔ | | ✖ | khci | ci_fs variant | | +---------+-------------------+--------+------+-----------+------------------------+--------------------+ | | LPC | 11u, 13, 15 | ✔ | ✖ | ✖ | lpc_ip3511 | | | | +-------------------+--------+------+-----------+------------------------+--------------------+ | | | 17, 40 | ✔ | ⚠ | ✖ | lpc17_40, ohci | | | | +-------------------+--------+------+-----------+------------------------+--------------------+ | | | 18, 43 | ✔ | ✔ | ✔ | ci_hs, ehci | | | | +-------------------+--------+------+-----------+------------------------+--------------------+ | | | 51u | ✔ | ✖ | ✖ | lpc_ip3511 | | | | +-------------------+--------+------+-----------+------------------------+--------------------+ | | | 54 | ⚠ | ⚠ | ✔ | lpc_ip3511, lpc_ip3516 | NRND, read errata | | | +-------------------+--------+------+-----------+------------------------+--------------------+ | | | 55 | ✔ | ✔ | ✔ | lpc_ip3511, lpc_ip3516 | | | +---------+-------------------+--------+------+-----------+------------------------+--------------------+ | | MCX | N9 | ✔ | | ✔ | ci_fs, ci_hs, ehci | | | | +-------------------+--------+------+-----------+------------------------+--------------------+ | | | A15 | ✔ | | | ci_fs | | | +---------+-------------------+--------+------+-----------+------------------------+--------------------+ | | RW61x | ✔ | ✔ | ✔ | ci_hs, ehci | | +--------------+-----------------------------+--------+------+-----------+------------------------+--------------------+ | Raspberry Pi | RP2040, RP2350 | ✔ | ✔ | ✖ | rp2040, pio_usb | | +--------------+-----+-----------------------+--------+------+-----------+------------------------+--------------------+ | Renesas | RX | 63N, 65N, 72N | ✔ | ✔ | ✖ | rusb2 | | | +-----+-----------------------+--------+------+-----------+------------------------+--------------------+ | | RA | 4M1, 4M3, 6M1 | ✔ | ✔ | ✖ | rusb2 | | | | +-----------------------+--------+------+-----------+------------------------+--------------------+ | | | 6M5 | ✔ | ✔ | ✔ | rusb2 | | +--------------+-----+-----------------------+--------+------+-----------+------------------------+--------------------+ | Silabs | EFM32GG12 | ✔ | | ✖ | dwc2 | | +--------------+-----------------------------+--------+------+-----------+------------------------+--------------------+ | Sony | CXD56 | ✔ | ✖ | ✔ | cxd56 | | +--------------+-----------------------------+--------+------+-----------+------------------------+--------------------+ | ST STM32 | F0, F3, L0, L1, L5, WBx5 | ✔ | ✖ | ✖ | stm32_fsdev | | | +----+------------------------+--------+------+-----------+------------------------+--------------------+ | | F1 | 102, 103 | ✔ | ✖ | ✖ | stm32_fsdev | 512 USB RAM | | | +------------------------+--------+------+-----------+------------------------+--------------------+ | | | 105, 107 | ✔ | ✔ | ✖ | dwc2 | | | +----+------------------------+--------+------+-----------+------------------------+--------------------+ | | F2, F4, F7, H7, H7RS | ✔ | ✔ | ✔ | dwc2 | | | +-----------------------------+--------+------+-----------+------------------------+--------------------+ | | C0, G0, H5, U3 | ✔ | ✔ | ✖ | stm32_fsdev | 2KB USB RAM | | +-----------------------------+--------+------+-----------+------------------------+--------------------+ | | G4 | ✔ | ✖ | ✖ | stm32_fsdev | 1KB USB RAM | | +----+------------------------+--------+------+-----------+------------------------+--------------------+ | | L4 | 4x2, 4x3 | ✔ | ✖ | ✖ | stm32_fsdev | 1KB USB RAM | | | +------------------------+--------+------+-----------+------------------------+--------------------+ | | | 4x5, 4x6, 4+ | ✔ | ✔ | ✖ | dwc2 | | | +----+------------------------+--------+------+-----------+------------------------+--------------------+ | | N6 | ✔ | ✔ | ✔ | dwc2 | | | +-----------------------------+--------+------+-----------+------------------------+--------------------+ | | U0 | ✔ | ✖ | ✖ | stm32_fsdev | 1KB USB RAM | | +----+------------------------+--------+------+-----------+------------------------+--------------------+ | | U5 | 535, 545 | ✔ | ✔ | ✖ | stm32_fsdev | 2KB USB RAM | | | +------------------------+--------+------+-----------+------------------------+--------------------+ | | | 575, 585 | ✔ | ✔ | ✖ | dwc2 | | | | +------------------------+--------+------+-----------+------------------------+--------------------+ | | | 59x,5Ax,5Fx,5Gx | ✔ | ✔ | ✔ | dwc2 | | +--------------+----+------------------------+--------+------+-----------+------------------------+--------------------+ | TI | MSP430 | ✔ | ✖ | ✖ | msp430x5xx | | | +-----------------------------+--------+------+-----------+------------------------+--------------------+ | | MSP432E4, TM4C123 | ✔ | | ✖ | musb | | +--------------+-----------------------------+--------+------+-----------+------------------------+--------------------+ | ValentyUSB | eptri | ✔ | ✖ | ✖ | eptri | | +--------------+-----------------------------+--------+------+-----------+------------------------+--------------------+ | WCH | CH32F20x | ✔ | | ✔ | ch32_usbhs | | | +-----------------------------+--------+------+-----------+------------------------+--------------------+ | | CH32V20x | ✔ | | ✖ | stm32_fsdev/ch32_usbfs | | | +-----------------------------+--------+------+-----------+------------------------+--------------------+ | | CH32V305, CH32V307 | ✔ | | ✔ | ch32_usbfs/hs | | +--------------+-----------------------------+--------+------+-----------+------------------------+--------------------+&lt;/p&gt; 
&lt;p&gt;Table Legend ^^^^^^^^^^^^&lt;/p&gt; 
&lt;p&gt;========= ========================= ✔ Supported ⚠ Partial support ✖ Not supported by hardware [empty] Unknown ========= =========================&lt;/p&gt; 
&lt;h2&gt;Development Tools&lt;/h2&gt; 
&lt;p&gt;The following tools are provided freely to support the development of the TinyUSB project:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;code&gt;IAR Build Tools (CX) &amp;lt;https://iar.com&amp;gt;&lt;/code&gt;_ Professional IDE and compiler for embedded development.&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;JetBrains CLion &amp;lt;https://www.jetbrains.com/clion/&amp;gt;&lt;/code&gt;_ Cross-platform IDE for C and C++ development.&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;PVS-Studio &amp;lt;https://pvs-studio.com/en/pvs-studio/?utm_source=website&amp;amp;utm_medium=github&amp;amp;utm_campaign=open_source&amp;gt;&lt;/code&gt;_ static analyzer for C, C++, C#, and Java code.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;.. |Build Status| image:: &lt;a href=&quot;https://github.com/hathach/tinyusb/actions/workflows/build.yml/badge.svg&quot;&gt;https://github.com/hathach/tinyusb/actions/workflows/build.yml/badge.svg&lt;/a&gt; :target: &lt;a href=&quot;https://github.com/hathach/tinyusb/actions/workflows/build.yml&quot;&gt;https://github.com/hathach/tinyusb/actions/workflows/build.yml&lt;/a&gt; .. |CircleCI Status| image:: &lt;a href=&quot;https://dl.circleci.com/status-badge/img/circleci/4AYHvUhFxdnY4rA7LEsdqW/QmrpoL2AjGqetvFQNqtWyq/tree/master.svg?style=svg&quot;&gt;https://dl.circleci.com/status-badge/img/circleci/4AYHvUhFxdnY4rA7LEsdqW/QmrpoL2AjGqetvFQNqtWyq/tree/master.svg?style=svg&lt;/a&gt; :target: &lt;a href=&quot;https://dl.circleci.com/status-badge/redirect/circleci/4AYHvUhFxdnY4rA7LEsdqW/QmrpoL2AjGqetvFQNqtWyq/tree/master&quot;&gt;https://dl.circleci.com/status-badge/redirect/circleci/4AYHvUhFxdnY4rA7LEsdqW/QmrpoL2AjGqetvFQNqtWyq/tree/master&lt;/a&gt; .. |Documentation Status| image:: &lt;a href=&quot;https://readthedocs.org/projects/tinyusb/badge/?version=latest&quot;&gt;https://readthedocs.org/projects/tinyusb/badge/?version=latest&lt;/a&gt; :target: &lt;a href=&quot;https://docs.tinyusb.org/en/latest/?badge=latest&quot;&gt;https://docs.tinyusb.org/en/latest/?badge=latest&lt;/a&gt; .. |Static Analysis| image:: &lt;a href=&quot;https://github.com/hathach/tinyusb/actions/workflows/static_analysis.yml/badge.svg&quot;&gt;https://github.com/hathach/tinyusb/actions/workflows/static_analysis.yml/badge.svg&lt;/a&gt; :target: &lt;a href=&quot;https://github.com/hathach/tinyusb/actions/workflows/static_analysis.yml&quot;&gt;https://github.com/hathach/tinyusb/actions/workflows/static_analysis.yml&lt;/a&gt; .. |Fuzzing Status| image:: &lt;a href=&quot;https://oss-fuzz-build-logs.storage.googleapis.com/badges/tinyusb.svg&quot;&gt;https://oss-fuzz-build-logs.storage.googleapis.com/badges/tinyusb.svg&lt;/a&gt; :target: &lt;a href=&quot;https://oss-fuzz-build-logs.storage.googleapis.com/index.html#tinyusb&quot;&gt;https://oss-fuzz-build-logs.storage.googleapis.com/index.html#tinyusb&lt;/a&gt; .. |Membrowse| image:: &lt;a href=&quot;https://membrowse.com/badge.svg&quot;&gt;https://membrowse.com/badge.svg&lt;/a&gt; :target: &lt;a href=&quot;https://membrowse.com/public/hathach/tinyusb&quot;&gt;https://membrowse.com/public/hathach/tinyusb&lt;/a&gt; .. |License| image:: &lt;a href=&quot;https://img.shields.io/badge/license-MIT-brightgreen.svg&quot;&gt;https://img.shields.io/badge/license-MIT-brightgreen.svg&lt;/a&gt; :target: &lt;a href=&quot;https://opensource.org/licenses/MIT&quot;&gt;https://opensource.org/licenses/MIT&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;.. _Changelog: docs/info/changelog.rst .. _Contributors: CONTRIBUTORS.rst .. _Getting Started: docs/getting_started.rst .. _Supported Boards: docs/reference/boards.rst .. _Dependencies: docs/reference/dependencies.rst .. _Concurrency: docs/reference/concurrency.rst .. _Code of Conduct: CODE_OF_CONDUCT.rst .. _Porting: docs/porting.rst&lt;/p&gt;</description>
      
      <media:content url="https://repository-images.githubusercontent.com/6860771/cb2a166d-aa8c-4c3f-aa79-bc0bfb8b49a8" medium="image" />
      
    </item>
    
    <item>
      <title>jqlang/jq</title>
      <link>https://github.com/jqlang/jq</link>
      <description>&lt;p&gt;Command-line JSON processor&lt;/p&gt;&lt;hr&gt;&lt;h1&gt;jq&lt;/h1&gt; 
&lt;p&gt;&lt;code&gt;jq&lt;/code&gt; is a lightweight and flexible command-line JSON processor akin to &lt;code&gt;sed&lt;/code&gt;,&lt;code&gt;awk&lt;/code&gt;,&lt;code&gt;grep&lt;/code&gt;, and friends for JSON data. It&#39;s written in portable C and has zero runtime dependencies, allowing you to easily slice, filter, map, and transform structured data.&lt;/p&gt; 
&lt;h2&gt;Documentation&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;Official Documentation&lt;/strong&gt;: &lt;a href=&quot;https://jqlang.org&quot;&gt;jqlang.org&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Try jq Online&lt;/strong&gt;: &lt;a href=&quot;https://play.jqlang.org&quot;&gt;play.jqlang.org&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Installation&lt;/h2&gt; 
&lt;h3&gt;Prebuilt Binaries&lt;/h3&gt; 
&lt;p&gt;Download the latest releases from the &lt;a href=&quot;https://github.com/jqlang/jq/releases&quot;&gt;GitHub release page&lt;/a&gt;.&lt;/p&gt; 
&lt;h3&gt;Docker Image&lt;/h3&gt; 
&lt;p&gt;Pull the &lt;a href=&quot;https://github.com/jqlang/jq/pkgs/container/jq&quot;&gt;jq image&lt;/a&gt; to start quickly with Docker.&lt;/p&gt; 
&lt;h4&gt;Run with Docker&lt;/h4&gt; 
&lt;h5&gt;Example: Extracting the version from a &lt;code&gt;package.json&lt;/code&gt; file&lt;/h5&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;docker run --rm -i ghcr.io/jqlang/jq:latest &amp;lt; package.json &#39;.version&#39;
&lt;/code&gt;&lt;/pre&gt; 
&lt;h5&gt;Example: Extracting the version from a &lt;code&gt;package.json&lt;/code&gt; file with a mounted volume&lt;/h5&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;docker run --rm -i -v &quot;$PWD:$PWD&quot; -w &quot;$PWD&quot; ghcr.io/jqlang/jq:latest &#39;.version&#39; package.json
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;Building from source&lt;/h3&gt; 
&lt;h4&gt;Dependencies&lt;/h4&gt; 
&lt;ul&gt; 
 &lt;li&gt;libtool&lt;/li&gt; 
 &lt;li&gt;make&lt;/li&gt; 
 &lt;li&gt;automake&lt;/li&gt; 
 &lt;li&gt;autoconf&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h4&gt;Instructions&lt;/h4&gt; 
&lt;pre&gt;&lt;code class=&quot;language-console&quot;&gt;git submodule update --init    # if building from git to get oniguruma
autoreconf -i                  # if building from git
./configure --with-oniguruma=builtin
make clean                     # if upgrading from a version previously built from source
make -j8
make check
sudo make install
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Build a statically linked version:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-console&quot;&gt;make LDFLAGS=-all-static
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;If you&#39;re not using the latest git version but instead building a released tarball (available on the release page), skip the &lt;code&gt;autoreconf&lt;/code&gt; step, and flex or bison won&#39;t be needed.&lt;/p&gt; 
&lt;h5&gt;Cross-Compilation&lt;/h5&gt; 
&lt;p&gt;For details on cross-compilation, check out the &lt;a href=&quot;https://raw.githubusercontent.com/jqlang/jq/master/.github/workflows/ci.yml&quot;&gt;GitHub Actions file&lt;/a&gt; and the &lt;a href=&quot;https://github.com/jqlang/jq/wiki/Cross-compilation&quot;&gt;cross-compilation wiki page&lt;/a&gt;.&lt;/p&gt; 
&lt;h2&gt;Community &amp;amp; Support&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;Questions &amp;amp; Help: &lt;a href=&quot;https://stackoverflow.com/questions/tagged/jq&quot;&gt;Stack Overflow (jq tag)&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;Chat &amp;amp; Community: &lt;a href=&quot;https://discord.gg/yg6yjNmgAC&quot;&gt;Join us on Discord&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;Wiki &amp;amp; Advanced Topics: &lt;a href=&quot;https://github.com/jqlang/jq/wiki&quot;&gt;Explore the Wiki&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;License&lt;/h2&gt; 
&lt;p&gt;&lt;code&gt;jq&lt;/code&gt; is released under the &lt;a href=&quot;https://raw.githubusercontent.com/jqlang/jq/master/COPYING&quot;&gt;MIT License&lt;/a&gt;. &lt;code&gt;jq&lt;/code&gt;&#39;s documentation is licensed under the &lt;a href=&quot;https://raw.githubusercontent.com/jqlang/jq/master/COPYING&quot;&gt;Creative Commons CC BY 3.0&lt;/a&gt;. &lt;code&gt;jq&lt;/code&gt; uses parts of the open source C library &quot;decNumber&quot;, which is distributed under &lt;a href=&quot;https://raw.githubusercontent.com/jqlang/jq/master/COPYING&quot;&gt;ICU License&lt;/a&gt;&lt;/p&gt;</description>
      
      <media:content url="https://opengraph.githubassets.com/cacadbd9c0fcef9f121c1c36669087628d495ab62e3a72025b59fc6ab4c25757/jqlang/jq" medium="image" />
      
    </item>
    
    <item>
      <title>raspberrypi/linux</title>
      <link>https://github.com/raspberrypi/linux</link>
      <description>&lt;p&gt;Kernel source tree for Raspberry Pi-provided kernel builds. Issues unrelated to the linux kernel should be posted on the community forum at https://forums.raspberrypi.com/&lt;/p&gt;&lt;hr&gt;&lt;h1&gt;Linux kernel&lt;/h1&gt; 
&lt;p&gt;There are several guides for kernel developers and users. These guides can be rendered in a number of formats, like HTML and PDF. Please read Documentation/admin-guide/README.rst first.&lt;/p&gt; 
&lt;p&gt;In order to build the documentation, use &lt;code&gt;make htmldocs&lt;/code&gt; or &lt;code&gt;make pdfdocs&lt;/code&gt;. The formatted documentation can also be read online at:&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;https://www.kernel.org/doc/html/latest/
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;There are various text files in the Documentation/ subdirectory, several of them using the Restructured Text markup notation.&lt;/p&gt; 
&lt;p&gt;Please read the Documentation/process/changes.rst file, as it contains the requirements for building and running the kernel, and information about the problems which may result by upgrading your kernel.&lt;/p&gt; 
&lt;p&gt;Build status for rpi-6.1.y: &lt;a href=&quot;https://github.com/raspberrypi/linux/actions/workflows/kernel-build.yml&quot;&gt;&lt;img src=&quot;https://github.com/raspberrypi/linux/actions/workflows/kernel-build.yml/badge.svg?branch=rpi-6.1.y&quot; alt=&quot;Pi kernel build tests&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://github.com/raspberrypi/linux/actions/workflows/dtoverlaycheck.yml&quot;&gt;&lt;img src=&quot;https://github.com/raspberrypi/linux/actions/workflows/dtoverlaycheck.yml/badge.svg?branch=rpi-6.1.y&quot; alt=&quot;dtoverlaycheck&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;Build status for rpi-6.6.y: &lt;a href=&quot;https://github.com/raspberrypi/linux/actions/workflows/kernel-build.yml&quot;&gt;&lt;img src=&quot;https://github.com/raspberrypi/linux/actions/workflows/kernel-build.yml/badge.svg?branch=rpi-6.6.y&quot; alt=&quot;Pi kernel build tests&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://github.com/raspberrypi/linux/actions/workflows/dtoverlaycheck.yml&quot;&gt;&lt;img src=&quot;https://github.com/raspberrypi/linux/actions/workflows/dtoverlaycheck.yml/badge.svg?branch=rpi-6.6.y&quot; alt=&quot;dtoverlaycheck&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;Build status for rpi-6.12.y: &lt;a href=&quot;https://github.com/raspberrypi/linux/actions/workflows/kernel-build.yml&quot;&gt;&lt;img src=&quot;https://github.com/raspberrypi/linux/actions/workflows/kernel-build.yml/badge.svg?branch=rpi-6.12.y&quot; alt=&quot;Pi kernel build tests&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://github.com/raspberrypi/linux/actions/workflows/dtoverlaycheck.yml&quot;&gt;&lt;img src=&quot;https://github.com/raspberrypi/linux/actions/workflows/dtoverlaycheck.yml/badge.svg?branch=rpi-6.12.y&quot; alt=&quot;dtoverlaycheck&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description>
      
      <media:content url="https://opengraph.githubassets.com/a1b12711b88854c88f03fb9cfe9520c696e121b48501e08e2ed33113bb36b94b/raspberrypi/linux" medium="image" />
      
    </item>
    
    <item>
      <title>freebsd/freebsd-src</title>
      <link>https://github.com/freebsd/freebsd-src</link>
      <description>&lt;p&gt;The FreeBSD src tree publish-only repository. Experimenting with &#39;simple&#39; pull requests....&lt;/p&gt;&lt;hr&gt;&lt;h2&gt;FreeBSD Source:&lt;/h2&gt; 
&lt;p&gt;This is the top level of the FreeBSD source directory.&lt;/p&gt; 
&lt;p&gt;FreeBSD is an operating system used to power modern servers, desktops, and embedded platforms. A large community has continually developed it for more than thirty years. Its advanced networking, security, and storage features have made FreeBSD the platform of choice for many of the busiest web sites and most pervasive embedded networking and storage devices.&lt;/p&gt; 
&lt;p&gt;For copyright information, please see &lt;a href=&quot;https://raw.githubusercontent.com/freebsd/freebsd-src/main/COPYRIGHT&quot;&gt;the file COPYRIGHT&lt;/a&gt; in this directory. Additional copyright information also exists for some sources in this tree - please see the specific source directories for more information.&lt;/p&gt; 
&lt;p&gt;The Makefile in this directory supports a number of targets for building components (or all) of the FreeBSD source tree. See build(7), config(8), &lt;a href=&quot;https://docs.freebsd.org/en/books/handbook/cutting-edge/#makeworld&quot;&gt;FreeBSD handbook on building userland&lt;/a&gt;, and &lt;a href=&quot;https://docs.freebsd.org/en/books/handbook/kernelconfig/&quot;&gt;Handbook for kernels&lt;/a&gt; for more information, including setting make(1) variables.&lt;/p&gt; 
&lt;p&gt;For information on the CPU architectures and platforms supported by FreeBSD, see the &lt;a href=&quot;https://www.freebsd.org/platforms/&quot;&gt;FreeBSD website&#39;s Platforms page&lt;/a&gt;.&lt;/p&gt; 
&lt;p&gt;For official FreeBSD bootable images, see the &lt;a href=&quot;https://download.freebsd.org/ftp/releases/ISO-IMAGES/&quot;&gt;release page&lt;/a&gt;.&lt;/p&gt; 
&lt;h2&gt;Source Roadmap:&lt;/h2&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Directory&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;bin&lt;/td&gt; 
   &lt;td&gt;System/user commands.&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;cddl&lt;/td&gt; 
   &lt;td&gt;Source code for third-party software under the Common Development and Distribution License.&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;contrib&lt;/td&gt; 
   &lt;td&gt;Source code for third-party software.&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;crypto&lt;/td&gt; 
   &lt;td&gt;Source code for cryptographic libraries and commands (see &lt;a href=&quot;https://raw.githubusercontent.com/freebsd/freebsd-src/main/crypto/README&quot;&gt;crypto/README&lt;/a&gt;).&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;etc&lt;/td&gt; 
   &lt;td&gt;Template files for /etc.&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;gnu&lt;/td&gt; 
   &lt;td&gt;Source code for third-party software under the GNU General Public License (GPL) or Lesser General Public License (LGPL). Please see &lt;a href=&quot;https://raw.githubusercontent.com/freebsd/freebsd-src/main/gnu/COPYING&quot;&gt;gnu/COPYING&lt;/a&gt; and &lt;a href=&quot;https://raw.githubusercontent.com/freebsd/freebsd-src/main/gnu/COPYING.LIB&quot;&gt;gnu/COPYING.LIB&lt;/a&gt; for more information.&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;include&lt;/td&gt; 
   &lt;td&gt;System include files.&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;kerberos5&lt;/td&gt; 
   &lt;td&gt;Build system for Kerberos 5 (Heimdal).&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;krb5&lt;/td&gt; 
   &lt;td&gt;Build system for Kerberos 5 (MIT).&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;lib&lt;/td&gt; 
   &lt;td&gt;System libraries.&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;libexec&lt;/td&gt; 
   &lt;td&gt;System commands intended to be executed by other commands or daemons.&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;release&lt;/td&gt; 
   &lt;td&gt;Makefiles and scripts used for building releases and VM images.&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;rescue&lt;/td&gt; 
   &lt;td&gt;Build system for statically linked /rescue commands.&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;sbin&lt;/td&gt; 
   &lt;td&gt;System commands.&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;secure&lt;/td&gt; 
   &lt;td&gt;Build system for cryptographic libraries and commands (excluding Kerberos).&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;share&lt;/td&gt; 
   &lt;td&gt;Shared resources.&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;stand&lt;/td&gt; 
   &lt;td&gt;Boot loader sources.&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;sys&lt;/td&gt; 
   &lt;td&gt;Kernel sources (see &lt;a href=&quot;https://raw.githubusercontent.com/freebsd/freebsd-src/main/sys/README.md&quot;&gt;sys/README.md&lt;/a&gt;).&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;targets&lt;/td&gt; 
   &lt;td&gt;Support for experimental &lt;code&gt;DIRDEPS_BUILD&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;tests&lt;/td&gt; 
   &lt;td&gt;Tests which can be run by Kyua. See &lt;a href=&quot;https://raw.githubusercontent.com/freebsd/freebsd-src/main/tests/README&quot;&gt;tests/README&lt;/a&gt; for additional information.&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;tools&lt;/td&gt; 
   &lt;td&gt;Ancillary utilities and tests (not included in the build).&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;usr.bin&lt;/td&gt; 
   &lt;td&gt;User commands.&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;usr.sbin&lt;/td&gt; 
   &lt;td&gt;System administration commands.&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;p&gt;For information on synchronizing your source tree with one or more of the FreeBSD Project&#39;s development branches, please see &lt;a href=&quot;https://docs.freebsd.org/en/books/handbook/cutting-edge/#current-stable&quot;&gt;FreeBSD Handbook&lt;/a&gt;.&lt;/p&gt;</description>
      
      <media:content url="https://opengraph.githubassets.com/e8e7b0bc3b3f9e3a9fce2e873562f67659a07b15a3ec2c47c5235e67de36c8c3/freebsd/freebsd-src" medium="image" />
      
    </item>
    
    <item>
      <title>signalwire/freeswitch</title>
      <link>https://github.com/signalwire/freeswitch</link>
      <description>&lt;p&gt;FreeSWITCH is a Software Defined Telecom Stack enabling the digital transformation from proprietary telecom switches to a versatile software implementation that runs on any commodity hardware. From a Raspberry PI to a multi-core server, FreeSWITCH can unlock the telecommunications potential of any device.&lt;/p&gt;&lt;hr&gt;&lt;h1&gt;FreeSWITCH&lt;/h1&gt; 
&lt;p&gt;FreeSWITCH is a Software Defined Telecom Stack enabling the digital transformation from proprietary telecom switches to a versatile software implementation that runs on any commodity hardware. From a Raspberry PI to a multi-core server, FreeSWITCH can unlock the telecommunications potential of any device. Combined with our hosted cloud platform, SignalWire, FreeSWITCH can interconnect with the outside world and scale to any size.&lt;/p&gt; 
&lt;p&gt;Visit &lt;a href=&quot;https://signalwire.com/&quot;&gt;https://signalwire.com&lt;/a&gt; or &lt;a href=&quot;https://github.com/signalwire&quot;&gt;https://github.com/signalwire&lt;/a&gt; for more info.&lt;/p&gt; 
&lt;h2&gt;Getting Started&lt;/h2&gt; 
&lt;p&gt;FreeSWITCH is available on &lt;a href=&quot;https://github.com/signalwire/freeswitch&quot;&gt;Github&lt;/a&gt; in source code format. You can checkout the development branch and build for many popular platforms including Linux, Windows, MacOSX and BSD. There is an issue tracker and pull request system available as part of the repo online.&lt;/p&gt; 
&lt;p&gt;See &lt;a href=&quot;https://developer.signalwire.com/freeswitch/FreeSWITCH-Explained/&quot;&gt;https://developer.signalwire.com/freeswitch/FreeSWITCH-Explained/&lt;/a&gt; for more detailed instructions.&lt;/p&gt; 
&lt;h2&gt;Additional Help&lt;/h2&gt; 
&lt;p&gt;If you need assistance or have an interest in using a commercially supported build, you can contact &lt;a href=&quot;mailto:coreteam@freeswitch.com&quot;&gt;coreteam@freeswitch.com&lt;/a&gt; to learn about professional services to support your project.&lt;/p&gt; 
&lt;h2&gt;Voice-over-IP services - SIP / SMS - App Integrations&lt;/h2&gt; 
&lt;p&gt;&lt;a href=&quot;https://signalwire.com&quot;&gt;SignalWire&lt;/a&gt; is the primary sponsor of the FreeSWITCH project and was founded by the original developers of FreeSWITCH. SignalWire provides scalable services to enhance and scale your project such as SMS, SIP, Serverless Application hosting as well as programmable telecom. mod_signalwire which is distributed in this code base allows you to instantly pair with SignalWire and extend your FreeSWITCH.&lt;/p&gt; 
&lt;h2&gt;Documentation&lt;/h2&gt; 
&lt;p&gt;The main index for documentation is available at:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://freeswitch.org/confluence/&quot;&gt;https://freeswitch.org/confluence/&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Release notes:&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://freeswitch.org/confluence/display/FREESWITCH/Release+Notes&quot;&gt;https://freeswitch.org/confluence/display/FREESWITCH/Release+Notes&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Install from packages&lt;/h3&gt; 
&lt;p&gt;Step by step tutorials to install FreeSWITCH from packages:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/signalwire/freeswitch/master/scripts/packaging&quot;&gt;Using FSGET&lt;/a&gt; [&lt;b&gt;Recommended&lt;/b&gt;]&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://freeswitch.org/confluence/display/FREESWITCH/Debian&quot;&gt;Debian&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://freeswitch.org/confluence/display/FREESWITCH/Raspberry+Pi&quot;&gt;Raspberry Pi&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://freeswitch.org/confluence/display/FREESWITCH/CentOS+7+and+RHEL+7&quot;&gt;CentOS 7&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Build from source&lt;/h3&gt; 
&lt;p&gt;Example Dockerfiles to build FreeSWITCH and dependencies from source:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/signalwire/freeswitch/tree/master/docker/examples&quot;&gt;https://github.com/signalwire/freeswitch/tree/master/docker/examples&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;Step by step tutorials to build FreeSWITCH with provided dependency packages:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://freeswitch.org/confluence/display/FREESWITCH/Debian#Debian-buildfromsource&quot;&gt;Debian&lt;/a&gt; [&lt;b&gt;Recommended&lt;/b&gt;]&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://freeswitch.org/confluence/display/FREESWITCH/Raspberry+Pi&quot;&gt;Raspberry Pi&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://freeswitch.org/confluence/display/FREESWITCH/CentOS+7+and+RHEL+7&quot;&gt;CentOS 7&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;How to build Debian packages&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/signalwire/freeswitch/master/scripts/packaging/build&quot;&gt;Using FSDEB&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Downloads&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://files.freeswitch.org/releases/freeswitch/&quot;&gt;Tarballs&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;http://files.freeswitch.org/windows/installer/x64/&quot;&gt;Windows Installer&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;http://files.freeswitch.org/windows/installer/x64/sounds/&quot;&gt;Windows Sound Packages&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Contributions&lt;/h2&gt; 
&lt;p&gt;GitHub pull requests are the recommended way to contribute to the FreeSWITCH source code:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/signalwire/freeswitch/pulls&quot;&gt;https://github.com/signalwire/freeswitch/pulls&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Community&lt;/h2&gt; 
&lt;p&gt;Slack is our chat system where the developers, the FreeSWITCH team, and the most active users are present. This is the place to get answers faster and chat with other users in real time. All you need to do is enter your email and verify it on the Slack signup page and you are ready to join in the discussion!&lt;/p&gt; 
&lt;p&gt;Slack Community:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://signalwire.community/&quot;&gt;https://signalwire.community/&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;Mailing list (ARCHIVED):&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;http://lists.freeswitch.org/pipermail/freeswitch-users/&quot;&gt;http://lists.freeswitch.org/pipermail/freeswitch-users/&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;strong&gt;Thank you for using FreeSWITCH!&lt;/strong&gt;&lt;/p&gt;</description>
      
      <media:content url="https://opengraph.githubassets.com/fc01e9c3d1fcb0931310a1f74a8c0a05de4b884f7a8659fe1f1aa7ffb2eaa45a/signalwire/freeswitch" medium="image" />
      
    </item>
    
    <item>
      <title>pgvector/pgvector</title>
      <link>https://github.com/pgvector/pgvector</link>
      <description>&lt;p&gt;Open-source vector similarity search for Postgres&lt;/p&gt;&lt;hr&gt;&lt;h1&gt;pgvector&lt;/h1&gt; 
&lt;p&gt;Open-source vector similarity search for Postgres&lt;/p&gt; 
&lt;p&gt;Store your vectors with the rest of your data. Supports:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;exact and approximate nearest neighbor search&lt;/li&gt; 
 &lt;li&gt;single-precision, half-precision, binary, and sparse vectors&lt;/li&gt; 
 &lt;li&gt;L2 distance, inner product, cosine distance, L1 distance, Hamming distance, and Jaccard distance&lt;/li&gt; 
 &lt;li&gt;any &lt;a href=&quot;https://raw.githubusercontent.com/pgvector/pgvector/master/#languages&quot;&gt;language&lt;/a&gt; with a Postgres client&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;Plus &lt;a href=&quot;https://en.wikipedia.org/wiki/ACID&quot;&gt;ACID&lt;/a&gt; compliance, point-in-time recovery, JOINs, and all of the other &lt;a href=&quot;https://www.postgresql.org/about/&quot;&gt;great features&lt;/a&gt; of Postgres&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://github.com/pgvector/pgvector/actions&quot;&gt;&lt;img src=&quot;https://github.com/pgvector/pgvector/actions/workflows/build.yml/badge.svg?sanitize=true&quot; alt=&quot;Build Status&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;h2&gt;Installation&lt;/h2&gt; 
&lt;h3&gt;Linux and Mac&lt;/h3&gt; 
&lt;p&gt;Compile and install the extension (supports Postgres 13+)&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-sh&quot;&gt;cd /tmp
git clone --branch v0.8.2 https://github.com/pgvector/pgvector.git
cd pgvector
make
make install # may need sudo
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;See the &lt;a href=&quot;https://raw.githubusercontent.com/pgvector/pgvector/master/#installation-notes---linux-and-mac&quot;&gt;installation notes&lt;/a&gt; if you run into issues&lt;/p&gt; 
&lt;p&gt;You can also install it with &lt;a href=&quot;https://raw.githubusercontent.com/pgvector/pgvector/master/#docker&quot;&gt;Docker&lt;/a&gt;, &lt;a href=&quot;https://raw.githubusercontent.com/pgvector/pgvector/master/#homebrew&quot;&gt;Homebrew&lt;/a&gt;, &lt;a href=&quot;https://raw.githubusercontent.com/pgvector/pgvector/master/#pgxn&quot;&gt;PGXN&lt;/a&gt;, &lt;a href=&quot;https://raw.githubusercontent.com/pgvector/pgvector/master/#apt&quot;&gt;APT&lt;/a&gt;, &lt;a href=&quot;https://raw.githubusercontent.com/pgvector/pgvector/master/#yum&quot;&gt;Yum&lt;/a&gt;, &lt;a href=&quot;https://raw.githubusercontent.com/pgvector/pgvector/master/#pkg&quot;&gt;pkg&lt;/a&gt;, &lt;a href=&quot;https://raw.githubusercontent.com/pgvector/pgvector/master/#apk&quot;&gt;APK&lt;/a&gt;, or &lt;a href=&quot;https://raw.githubusercontent.com/pgvector/pgvector/master/#conda-forge&quot;&gt;conda-forge&lt;/a&gt;, and it comes preinstalled with &lt;a href=&quot;https://raw.githubusercontent.com/pgvector/pgvector/master/#postgresapp&quot;&gt;Postgres.app&lt;/a&gt; and many &lt;a href=&quot;https://raw.githubusercontent.com/pgvector/pgvector/master/#hosted-postgres&quot;&gt;hosted providers&lt;/a&gt;. There are also instructions for &lt;a href=&quot;https://github.com/pgvector/setup-pgvector&quot;&gt;GitHub Actions&lt;/a&gt;.&lt;/p&gt; 
&lt;h3&gt;Windows&lt;/h3&gt; 
&lt;p&gt;Ensure &lt;a href=&quot;https://learn.microsoft.com/en-us/cpp/build/building-on-the-command-line?view=msvc-170#download-and-install-the-tools&quot;&gt;C++ support in Visual Studio&lt;/a&gt; is installed and run &lt;code&gt;x64 Native Tools Command Prompt for VS [version]&lt;/code&gt; as administrator. Then use &lt;code&gt;nmake&lt;/code&gt; to build:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-cmd&quot;&gt;set &quot;PGROOT=C:\Program Files\PostgreSQL\18&quot;
cd %TEMP%
git clone --branch v0.8.2 https://github.com/pgvector/pgvector.git
cd pgvector
nmake /F Makefile.win
nmake /F Makefile.win install
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;See the &lt;a href=&quot;https://raw.githubusercontent.com/pgvector/pgvector/master/#installation-notes---windows&quot;&gt;installation notes&lt;/a&gt; if you run into issues&lt;/p&gt; 
&lt;p&gt;You can also install it with &lt;a href=&quot;https://raw.githubusercontent.com/pgvector/pgvector/master/#docker&quot;&gt;Docker&lt;/a&gt; or &lt;a href=&quot;https://raw.githubusercontent.com/pgvector/pgvector/master/#conda-forge&quot;&gt;conda-forge&lt;/a&gt;.&lt;/p&gt; 
&lt;h2&gt;Getting Started&lt;/h2&gt; 
&lt;p&gt;Enable the extension (do this once in each database where you want to use it)&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-tsql&quot;&gt;CREATE EXTENSION vector;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Create a vector column with 3 dimensions&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-sql&quot;&gt;CREATE TABLE items (id bigserial PRIMARY KEY, embedding vector(3));
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Insert vectors&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-sql&quot;&gt;INSERT INTO items (embedding) VALUES (&#39;[1,2,3]&#39;), (&#39;[4,5,6]&#39;);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Get the nearest neighbors by L2 distance&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-sql&quot;&gt;SELECT * FROM items ORDER BY embedding &amp;lt;-&amp;gt; &#39;[3,1,2]&#39; LIMIT 5;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Also supports inner product (&lt;code&gt;&amp;lt;#&amp;gt;&lt;/code&gt;), cosine distance (&lt;code&gt;&amp;lt;=&amp;gt;&lt;/code&gt;), and L1 distance (&lt;code&gt;&amp;lt;+&amp;gt;&lt;/code&gt;)&lt;/p&gt; 
&lt;p&gt;Note: &lt;code&gt;&amp;lt;#&amp;gt;&lt;/code&gt; returns the negative inner product since Postgres only supports &lt;code&gt;ASC&lt;/code&gt; order index scans on operators&lt;/p&gt; 
&lt;h2&gt;Storing&lt;/h2&gt; 
&lt;p&gt;Create a new table with a vector column&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-sql&quot;&gt;CREATE TABLE items (id bigserial PRIMARY KEY, embedding vector(3));
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Or add a vector column to an existing table&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-sql&quot;&gt;ALTER TABLE items ADD COLUMN embedding vector(3);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Also supports &lt;a href=&quot;https://raw.githubusercontent.com/pgvector/pgvector/master/#half-precision-vectors&quot;&gt;half-precision&lt;/a&gt;, &lt;a href=&quot;https://raw.githubusercontent.com/pgvector/pgvector/master/#binary-vectors&quot;&gt;binary&lt;/a&gt;, and &lt;a href=&quot;https://raw.githubusercontent.com/pgvector/pgvector/master/#sparse-vectors&quot;&gt;sparse&lt;/a&gt; vectors&lt;/p&gt; 
&lt;p&gt;Insert vectors&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-sql&quot;&gt;INSERT INTO items (embedding) VALUES (&#39;[1,2,3]&#39;), (&#39;[4,5,6]&#39;);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Or load vectors in bulk using &lt;code&gt;COPY&lt;/code&gt; (&lt;a href=&quot;https://github.com/pgvector/pgvector-python/raw/master/examples/loading/example.py&quot;&gt;example&lt;/a&gt;)&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-sql&quot;&gt;COPY items (embedding) FROM STDIN WITH (FORMAT BINARY);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Upsert vectors&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-sql&quot;&gt;INSERT INTO items (id, embedding) VALUES (1, &#39;[1,2,3]&#39;), (2, &#39;[4,5,6]&#39;)
    ON CONFLICT (id) DO UPDATE SET embedding = EXCLUDED.embedding;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Update vectors&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-sql&quot;&gt;UPDATE items SET embedding = &#39;[1,2,3]&#39; WHERE id = 1;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Delete vectors&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-sql&quot;&gt;DELETE FROM items WHERE id = 1;
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2&gt;Querying&lt;/h2&gt; 
&lt;p&gt;Get the nearest neighbors to a vector&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-sql&quot;&gt;SELECT * FROM items ORDER BY embedding &amp;lt;-&amp;gt; &#39;[3,1,2]&#39; LIMIT 5;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Supported distance functions are:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;code&gt;&amp;lt;-&amp;gt;&lt;/code&gt; - L2 distance&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;&amp;lt;#&amp;gt;&lt;/code&gt; - (negative) inner product&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;&amp;lt;=&amp;gt;&lt;/code&gt; - cosine distance&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;&amp;lt;+&amp;gt;&lt;/code&gt; - L1 distance&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;&amp;lt;~&amp;gt;&lt;/code&gt; - Hamming distance (binary vectors)&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;&amp;lt;%&amp;gt;&lt;/code&gt; - Jaccard distance (binary vectors)&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;Get the nearest neighbors to a row&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-sql&quot;&gt;SELECT * FROM items WHERE id != 1 ORDER BY embedding &amp;lt;-&amp;gt; (SELECT embedding FROM items WHERE id = 1) LIMIT 5;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Get rows within a certain distance&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-sql&quot;&gt;SELECT * FROM items WHERE embedding &amp;lt;-&amp;gt; &#39;[3,1,2]&#39; &amp;lt; 5;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Note: Combine with &lt;code&gt;ORDER BY&lt;/code&gt; and &lt;code&gt;LIMIT&lt;/code&gt; to use an index&lt;/p&gt; 
&lt;h4&gt;Distances&lt;/h4&gt; 
&lt;p&gt;Get the distance&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-sql&quot;&gt;SELECT embedding &amp;lt;-&amp;gt; &#39;[3,1,2]&#39; AS distance FROM items;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;For inner product, multiply by -1 (since &lt;code&gt;&amp;lt;#&amp;gt;&lt;/code&gt; returns the negative inner product)&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-tsql&quot;&gt;SELECT (embedding &amp;lt;#&amp;gt; &#39;[3,1,2]&#39;) * -1 AS inner_product FROM items;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;For cosine similarity, use 1 - cosine distance&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-sql&quot;&gt;SELECT 1 - (embedding &amp;lt;=&amp;gt; &#39;[3,1,2]&#39;) AS cosine_similarity FROM items;
&lt;/code&gt;&lt;/pre&gt; 
&lt;h4&gt;Aggregates&lt;/h4&gt; 
&lt;p&gt;Average vectors&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-sql&quot;&gt;SELECT AVG(embedding) FROM items;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Average groups of vectors&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-sql&quot;&gt;SELECT category_id, AVG(embedding) FROM items GROUP BY category_id;
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2&gt;Indexing&lt;/h2&gt; 
&lt;p&gt;By default, pgvector performs exact nearest neighbor search, which provides perfect recall.&lt;/p&gt; 
&lt;p&gt;You can add an index to use approximate nearest neighbor search, which trades some recall for speed. Unlike typical indexes, you will see different results for queries after adding an approximate index.&lt;/p&gt; 
&lt;p&gt;Supported index types are:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/pgvector/pgvector/master/#hnsw&quot;&gt;HNSW&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/pgvector/pgvector/master/#ivfflat&quot;&gt;IVFFlat&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;HNSW&lt;/h2&gt; 
&lt;p&gt;An HNSW index creates a multilayer graph. It has better query performance than IVFFlat (in terms of speed-recall tradeoff), but has slower build times and uses more memory. Also, an index can be created without any data in the table since there isn’t a training step like IVFFlat.&lt;/p&gt; 
&lt;p&gt;Add an index for each distance function you want to use.&lt;/p&gt; 
&lt;p&gt;L2 distance&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-sql&quot;&gt;CREATE INDEX ON items USING hnsw (embedding vector_l2_ops);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Note: Use &lt;code&gt;halfvec_l2_ops&lt;/code&gt; for &lt;code&gt;halfvec&lt;/code&gt; and &lt;code&gt;sparsevec_l2_ops&lt;/code&gt; for &lt;code&gt;sparsevec&lt;/code&gt; (and similar with the other distance functions)&lt;/p&gt; 
&lt;p&gt;Inner product&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-sql&quot;&gt;CREATE INDEX ON items USING hnsw (embedding vector_ip_ops);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Cosine distance&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-sql&quot;&gt;CREATE INDEX ON items USING hnsw (embedding vector_cosine_ops);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;L1 distance&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-sql&quot;&gt;CREATE INDEX ON items USING hnsw (embedding vector_l1_ops);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Hamming distance&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-sql&quot;&gt;CREATE INDEX ON items USING hnsw (embedding bit_hamming_ops);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Jaccard distance&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-sql&quot;&gt;CREATE INDEX ON items USING hnsw (embedding bit_jaccard_ops);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Supported types are:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;code&gt;vector&lt;/code&gt; - up to 2,000 dimensions&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;halfvec&lt;/code&gt; - up to 4,000 dimensions&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;bit&lt;/code&gt; - up to 64,000 dimensions&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;sparsevec&lt;/code&gt; - up to 1,000 non-zero elements&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Index Options&lt;/h3&gt; 
&lt;p&gt;Specify HNSW parameters&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;code&gt;m&lt;/code&gt; - the max number of connections per layer (16 by default)&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;ef_construction&lt;/code&gt; - the size of the dynamic candidate list for constructing the graph (64 by default)&lt;/li&gt; 
&lt;/ul&gt; 
&lt;pre&gt;&lt;code class=&quot;language-sql&quot;&gt;CREATE INDEX ON items USING hnsw (embedding vector_l2_ops) WITH (m = 16, ef_construction = 64);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;A higher value of &lt;code&gt;ef_construction&lt;/code&gt; provides better recall at the cost of index build time / insert speed.&lt;/p&gt; 
&lt;h3&gt;Query Options&lt;/h3&gt; 
&lt;p&gt;Specify the size of the dynamic candidate list for search (40 by default)&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-sql&quot;&gt;SET hnsw.ef_search = 100;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;A higher value provides better recall at the cost of speed.&lt;/p&gt; 
&lt;p&gt;Use &lt;code&gt;SET LOCAL&lt;/code&gt; inside a transaction to set it for a single query&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-sql&quot;&gt;BEGIN;
SET LOCAL hnsw.ef_search = 100;
SELECT ...
COMMIT;
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;Index Build Time&lt;/h3&gt; 
&lt;p&gt;Indexes build significantly faster when the graph fits into &lt;code&gt;maintenance_work_mem&lt;/code&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-sql&quot;&gt;SET maintenance_work_mem = &#39;8GB&#39;;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;A notice is shown when the graph no longer fits&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;NOTICE:  hnsw graph no longer fits into maintenance_work_mem after 100000 tuples
DETAIL:  Building will take significantly more time.
HINT:  Increase maintenance_work_mem to speed up builds.
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Note: Do not set &lt;code&gt;maintenance_work_mem&lt;/code&gt; so high that it exhausts the memory on the server&lt;/p&gt; 
&lt;p&gt;Like other index types, it’s faster to create an index after loading your initial data&lt;/p&gt; 
&lt;p&gt;You can also speed up index creation by increasing the number of parallel workers (2 by default)&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-sql&quot;&gt;SET max_parallel_maintenance_workers = 7; -- plus leader
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;For a large number of workers, you may need to increase &lt;code&gt;max_parallel_workers&lt;/code&gt; (8 by default)&lt;/p&gt; 
&lt;p&gt;The &lt;a href=&quot;https://raw.githubusercontent.com/pgvector/pgvector/master/#index-options&quot;&gt;index options&lt;/a&gt; also have a significant impact on build time (use the defaults unless seeing low recall)&lt;/p&gt; 
&lt;h3&gt;Indexing Progress&lt;/h3&gt; 
&lt;p&gt;Check &lt;a href=&quot;https://www.postgresql.org/docs/current/progress-reporting.html#CREATE-INDEX-PROGRESS-REPORTING&quot;&gt;indexing progress&lt;/a&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-sql&quot;&gt;SELECT phase, round(100.0 * blocks_done / nullif(blocks_total, 0), 1) AS &quot;%&quot; FROM pg_stat_progress_create_index;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;The phases for HNSW are:&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;&lt;code&gt;initializing&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;loading tuples&lt;/code&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;h2&gt;IVFFlat&lt;/h2&gt; 
&lt;p&gt;An IVFFlat index divides vectors into lists, and then searches a subset of those lists that are closest to the query vector. It has faster build times and uses less memory than HNSW, but has lower query performance (in terms of speed-recall tradeoff).&lt;/p&gt; 
&lt;p&gt;Three keys to achieving good recall are:&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;Create the index &lt;em&gt;after&lt;/em&gt; the table has some data&lt;/li&gt; 
 &lt;li&gt;Choose an appropriate number of lists - a good place to start is &lt;code&gt;rows / 1000&lt;/code&gt; for up to 1M rows and &lt;code&gt;sqrt(rows)&lt;/code&gt; for over 1M rows&lt;/li&gt; 
 &lt;li&gt;When querying, specify an appropriate number of &lt;a href=&quot;https://raw.githubusercontent.com/pgvector/pgvector/master/#query-options&quot;&gt;probes&lt;/a&gt; (higher is better for recall, lower is better for speed) - a good place to start is &lt;code&gt;sqrt(lists)&lt;/code&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;Add an index for each distance function you want to use.&lt;/p&gt; 
&lt;p&gt;L2 distance&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-sql&quot;&gt;CREATE INDEX ON items USING ivfflat (embedding vector_l2_ops) WITH (lists = 100);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Note: Use &lt;code&gt;halfvec_l2_ops&lt;/code&gt; for &lt;code&gt;halfvec&lt;/code&gt; (and similar with the other distance functions)&lt;/p&gt; 
&lt;p&gt;Inner product&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-sql&quot;&gt;CREATE INDEX ON items USING ivfflat (embedding vector_ip_ops) WITH (lists = 100);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Cosine distance&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-sql&quot;&gt;CREATE INDEX ON items USING ivfflat (embedding vector_cosine_ops) WITH (lists = 100);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Hamming distance&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-sql&quot;&gt;CREATE INDEX ON items USING ivfflat (embedding bit_hamming_ops) WITH (lists = 100);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Supported types are:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;code&gt;vector&lt;/code&gt; - up to 2,000 dimensions&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;halfvec&lt;/code&gt; - up to 4,000 dimensions&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;bit&lt;/code&gt; - up to 64,000 dimensions&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Query Options&lt;/h3&gt; 
&lt;p&gt;Specify the number of probes (1 by default)&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-sql&quot;&gt;SET ivfflat.probes = 10;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;A higher value provides better recall at the cost of speed, and it can be set to the number of lists for exact nearest neighbor search (at which point the planner won’t use the index)&lt;/p&gt; 
&lt;p&gt;Use &lt;code&gt;SET LOCAL&lt;/code&gt; inside a transaction to set it for a single query&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-sql&quot;&gt;BEGIN;
SET LOCAL ivfflat.probes = 10;
SELECT ...
COMMIT;
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;Index Build Time&lt;/h3&gt; 
&lt;p&gt;Speed up index creation on large tables by increasing the number of parallel workers (2 by default)&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-sql&quot;&gt;SET max_parallel_maintenance_workers = 7; -- plus leader
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;For a large number of workers, you may also need to increase &lt;code&gt;max_parallel_workers&lt;/code&gt; (8 by default)&lt;/p&gt; 
&lt;h3&gt;Indexing Progress&lt;/h3&gt; 
&lt;p&gt;Check &lt;a href=&quot;https://www.postgresql.org/docs/current/progress-reporting.html#CREATE-INDEX-PROGRESS-REPORTING&quot;&gt;indexing progress&lt;/a&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-sql&quot;&gt;SELECT phase, round(100.0 * tuples_done / nullif(tuples_total, 0), 1) AS &quot;%&quot; FROM pg_stat_progress_create_index;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;The phases for IVFFlat are:&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;&lt;code&gt;initializing&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;performing k-means&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;assigning tuples&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;loading tuples&lt;/code&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;Note: &lt;code&gt;%&lt;/code&gt; is only populated during the &lt;code&gt;loading tuples&lt;/code&gt; phase&lt;/p&gt; 
&lt;h2&gt;Filtering&lt;/h2&gt; 
&lt;p&gt;There are a few ways to index nearest neighbor queries with a &lt;code&gt;WHERE&lt;/code&gt; clause.&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-sql&quot;&gt;SELECT * FROM items WHERE category_id = 123 ORDER BY embedding &amp;lt;-&amp;gt; &#39;[3,1,2]&#39; LIMIT 5;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;A good place to start is creating an index on the filter column. This can provide fast, exact nearest neighbor search in many cases. Postgres has a number of &lt;a href=&quot;https://www.postgresql.org/docs/current/indexes-types.html&quot;&gt;index types&lt;/a&gt; for this: B-tree (default), hash, GiST, SP-GiST, GIN, and BRIN.&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-sql&quot;&gt;CREATE INDEX ON items (category_id);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;For multiple columns, consider a &lt;a href=&quot;https://www.postgresql.org/docs/current/indexes-multicolumn.html&quot;&gt;multicolumn index&lt;/a&gt;.&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-sql&quot;&gt;CREATE INDEX ON items (location_id, category_id);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Exact indexes work well for conditions that match a low percentage of rows. Otherwise, &lt;a href=&quot;https://raw.githubusercontent.com/pgvector/pgvector/master/#indexing&quot;&gt;approximate indexes&lt;/a&gt; can work better.&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-sql&quot;&gt;CREATE INDEX ON items USING hnsw (embedding vector_l2_ops);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;With approximate indexes, filtering is applied &lt;em&gt;after&lt;/em&gt; the index is scanned. If a condition matches 10% of rows, with HNSW and the default &lt;code&gt;hnsw.ef_search&lt;/code&gt; of 40, only 4 rows will match on average. For more rows, increase &lt;code&gt;hnsw.ef_search&lt;/code&gt;.&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-sql&quot;&gt;SET hnsw.ef_search = 200;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Starting with 0.8.0, you can enable &lt;a href=&quot;https://raw.githubusercontent.com/pgvector/pgvector/master/#iterative-index-scans&quot;&gt;iterative index scans&lt;/a&gt;, which will automatically scan more of the index when needed.&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-sql&quot;&gt;SET hnsw.iterative_scan = strict_order;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;If filtering by only a few distinct values, consider &lt;a href=&quot;https://www.postgresql.org/docs/current/indexes-partial.html&quot;&gt;partial indexing&lt;/a&gt;.&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-sql&quot;&gt;CREATE INDEX ON items USING hnsw (embedding vector_l2_ops) WHERE (category_id = 123);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;If filtering by many different values, consider &lt;a href=&quot;https://www.postgresql.org/docs/current/ddl-partitioning.html&quot;&gt;partitioning&lt;/a&gt;.&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-sql&quot;&gt;CREATE TABLE items (embedding vector(3), category_id int) PARTITION BY LIST(category_id);
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2&gt;Iterative Index Scans&lt;/h2&gt; 
&lt;p&gt;With approximate indexes, queries with filtering can return less results since filtering is applied &lt;em&gt;after&lt;/em&gt; the index is scanned. Starting with 0.8.0, you can enable iterative index scans, which will automatically scan more of the index until enough results are found (or it reaches &lt;code&gt;hnsw.max_scan_tuples&lt;/code&gt; or &lt;code&gt;ivfflat.max_probes&lt;/code&gt;).&lt;/p&gt; 
&lt;p&gt;Iterative scans can use strict or relaxed ordering.&lt;/p&gt; 
&lt;p&gt;Strict ensures results are in the exact order by distance&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-sql&quot;&gt;SET hnsw.iterative_scan = strict_order;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Relaxed allows results to be slightly out of order by distance, but provides better recall&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-sql&quot;&gt;SET hnsw.iterative_scan = relaxed_order;
# or
SET ivfflat.iterative_scan = relaxed_order;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;With relaxed ordering, you can use a &lt;a href=&quot;https://www.postgresql.org/docs/current/queries-with.html#QUERIES-WITH-CTE-MATERIALIZATION&quot;&gt;materialized CTE&lt;/a&gt; to get strict ordering&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-sql&quot;&gt;WITH relaxed_results AS MATERIALIZED (
    SELECT id, embedding &amp;lt;-&amp;gt; &#39;[1,2,3]&#39; AS distance FROM items WHERE category_id = 123 ORDER BY distance LIMIT 5
) SELECT * FROM relaxed_results ORDER BY distance + 0;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Note: &lt;code&gt;+ 0&lt;/code&gt; is needed for Postgres 17+&lt;/p&gt; 
&lt;p&gt;For queries that filter by distance, use a materialized CTE and place the distance filter outside of it for best performance (due to the &lt;a href=&quot;https://www.postgresql.org/message-id/flat/CAOdR5yGUoMQ6j7M5hNUXrySzaqZVGf_Ne%2B8fwZMRKTFxU1nbJg%40mail.gmail.com&quot;&gt;current behavior&lt;/a&gt; of the Postgres executor)&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-sql&quot;&gt;WITH nearest_results AS MATERIALIZED (
    SELECT id, embedding &amp;lt;-&amp;gt; &#39;[1,2,3]&#39; AS distance FROM items ORDER BY distance LIMIT 5
) SELECT * FROM nearest_results WHERE distance &amp;lt; 5 ORDER BY distance;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Note: Place any other filters inside the CTE&lt;/p&gt; 
&lt;h3&gt;Iterative Scan Options&lt;/h3&gt; 
&lt;p&gt;Since scanning a large portion of an approximate index is expensive, there are options to control when a scan ends.&lt;/p&gt; 
&lt;h4&gt;HNSW&lt;/h4&gt; 
&lt;p&gt;Specify the max number of tuples to visit (20,000 by default)&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-sql&quot;&gt;SET hnsw.max_scan_tuples = 20000;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Note: This is approximate and does not affect the initial scan&lt;/p&gt; 
&lt;p&gt;Specify the max amount of memory to use, as a multiple of &lt;code&gt;work_mem&lt;/code&gt; (1 by default)&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-sql&quot;&gt;SET hnsw.scan_mem_multiplier = 2;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Note: Try increasing this if increasing &lt;code&gt;hnsw.max_scan_tuples&lt;/code&gt; does not improve recall&lt;/p&gt; 
&lt;h4&gt;IVFFlat&lt;/h4&gt; 
&lt;p&gt;Specify the max number of probes&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-sql&quot;&gt;SET ivfflat.max_probes = 100;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Note: If this is lower than &lt;code&gt;ivfflat.probes&lt;/code&gt;, &lt;code&gt;ivfflat.probes&lt;/code&gt; will be used&lt;/p&gt; 
&lt;h2&gt;Half-Precision Vectors&lt;/h2&gt; 
&lt;p&gt;Use the &lt;code&gt;halfvec&lt;/code&gt; type to store half-precision vectors&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-sql&quot;&gt;CREATE TABLE items (id bigserial PRIMARY KEY, embedding halfvec(3));
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2&gt;Half-Precision Indexing&lt;/h2&gt; 
&lt;p&gt;Index vectors at half precision for smaller indexes&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-sql&quot;&gt;CREATE INDEX ON items USING hnsw ((embedding::halfvec(3)) halfvec_l2_ops);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Get the nearest neighbors&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-sql&quot;&gt;SELECT * FROM items ORDER BY embedding::halfvec(3) &amp;lt;-&amp;gt; &#39;[1,2,3]&#39; LIMIT 5;
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2&gt;Binary Vectors&lt;/h2&gt; 
&lt;p&gt;Use the &lt;code&gt;bit&lt;/code&gt; type to store binary vectors (&lt;a href=&quot;https://github.com/pgvector/pgvector-python/raw/master/examples/imagehash/example.py&quot;&gt;example&lt;/a&gt;)&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-sql&quot;&gt;CREATE TABLE items (id bigserial PRIMARY KEY, embedding bit(3));
INSERT INTO items (embedding) VALUES (&#39;000&#39;), (&#39;111&#39;);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Get the nearest neighbors by Hamming distance&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-sql&quot;&gt;SELECT * FROM items ORDER BY embedding &amp;lt;~&amp;gt; &#39;101&#39; LIMIT 5;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Also supports Jaccard distance (&lt;code&gt;&amp;lt;%&amp;gt;&lt;/code&gt;)&lt;/p&gt; 
&lt;h2&gt;Binary Quantization&lt;/h2&gt; 
&lt;p&gt;Use expression indexing for binary quantization&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-sql&quot;&gt;CREATE INDEX ON items USING hnsw ((binary_quantize(embedding)::bit(3)) bit_hamming_ops);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Get the nearest neighbors by Hamming distance&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-sql&quot;&gt;SELECT * FROM items ORDER BY binary_quantize(embedding)::bit(3) &amp;lt;~&amp;gt; binary_quantize(&#39;[1,-2,3]&#39;) LIMIT 5;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Re-rank by the original vectors for better recall&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-sql&quot;&gt;SELECT * FROM (
    SELECT * FROM items ORDER BY binary_quantize(embedding)::bit(3) &amp;lt;~&amp;gt; binary_quantize(&#39;[1,-2,3]&#39;) LIMIT 20
) ORDER BY embedding &amp;lt;=&amp;gt; &#39;[1,-2,3]&#39; LIMIT 5;
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2&gt;Sparse Vectors&lt;/h2&gt; 
&lt;p&gt;Use the &lt;code&gt;sparsevec&lt;/code&gt; type to store sparse vectors&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-sql&quot;&gt;CREATE TABLE items (id bigserial PRIMARY KEY, embedding sparsevec(5));
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Insert vectors&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-sql&quot;&gt;INSERT INTO items (embedding) VALUES (&#39;{1:1,3:2,5:3}/5&#39;), (&#39;{1:4,3:5,5:6}/5&#39;);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;The format is &lt;code&gt;{index1:value1,index2:value2}/dimensions&lt;/code&gt; and indices start at 1 like SQL arrays&lt;/p&gt; 
&lt;p&gt;Get the nearest neighbors by L2 distance&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-sql&quot;&gt;SELECT * FROM items ORDER BY embedding &amp;lt;-&amp;gt; &#39;{1:3,3:1,5:2}/5&#39; LIMIT 5;
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2&gt;Hybrid Search&lt;/h2&gt; 
&lt;p&gt;Use together with Postgres &lt;a href=&quot;https://www.postgresql.org/docs/current/textsearch-intro.html&quot;&gt;full-text search&lt;/a&gt; for hybrid search.&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-sql&quot;&gt;SELECT id, content FROM items, plainto_tsquery(&#39;hello search&#39;) query
    WHERE textsearch @@ query ORDER BY ts_rank_cd(textsearch, query) DESC LIMIT 5;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;You can use &lt;a href=&quot;https://github.com/pgvector/pgvector-python/raw/master/examples/hybrid_search/rrf.py&quot;&gt;Reciprocal Rank Fusion&lt;/a&gt; or a &lt;a href=&quot;https://github.com/pgvector/pgvector-python/raw/master/examples/hybrid_search/cross_encoder.py&quot;&gt;cross-encoder&lt;/a&gt; to combine results.&lt;/p&gt; 
&lt;h2&gt;Indexing Subvectors&lt;/h2&gt; 
&lt;p&gt;Use expression indexing to index subvectors&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-sql&quot;&gt;CREATE INDEX ON items USING hnsw ((subvector(embedding, 1, 3)::vector(3)) vector_cosine_ops);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Get the nearest neighbors by cosine distance&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-sql&quot;&gt;SELECT * FROM items ORDER BY subvector(embedding, 1, 3)::vector(3) &amp;lt;=&amp;gt; subvector(&#39;[1,2,3,4,5]&#39;::vector, 1, 3) LIMIT 5;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Re-rank by the full vectors for better recall&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-sql&quot;&gt;SELECT * FROM (
    SELECT * FROM items ORDER BY subvector(embedding, 1, 3)::vector(3) &amp;lt;=&amp;gt; subvector(&#39;[1,2,3,4,5]&#39;::vector, 1, 3) LIMIT 20
) ORDER BY embedding &amp;lt;=&amp;gt; &#39;[1,2,3,4,5]&#39; LIMIT 5;
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2&gt;Performance&lt;/h2&gt; 
&lt;h3&gt;Tuning&lt;/h3&gt; 
&lt;p&gt;Use a tool like &lt;a href=&quot;https://pgtune.leopard.in.ua/&quot;&gt;PgTune&lt;/a&gt; to set initial values for Postgres server parameters. For instance, &lt;code&gt;shared_buffers&lt;/code&gt; should typically be 25% of the server’s memory. You can find the config file with:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-sql&quot;&gt;SHOW config_file;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;And check individual settings with:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-sql&quot;&gt;SHOW shared_buffers;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Be sure to restart Postgres for changes to take effect.&lt;/p&gt; 
&lt;h3&gt;Loading&lt;/h3&gt; 
&lt;p&gt;Use &lt;code&gt;COPY&lt;/code&gt; for bulk loading data (&lt;a href=&quot;https://github.com/pgvector/pgvector-python/raw/master/examples/loading/example.py&quot;&gt;example&lt;/a&gt;).&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-sql&quot;&gt;COPY items (embedding) FROM STDIN WITH (FORMAT BINARY);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Add any indexes &lt;em&gt;after&lt;/em&gt; loading the initial data for best performance.&lt;/p&gt; 
&lt;h3&gt;Indexing&lt;/h3&gt; 
&lt;p&gt;See index build time for &lt;a href=&quot;https://raw.githubusercontent.com/pgvector/pgvector/master/#index-build-time&quot;&gt;HNSW&lt;/a&gt; and &lt;a href=&quot;https://raw.githubusercontent.com/pgvector/pgvector/master/#index-build-time-1&quot;&gt;IVFFlat&lt;/a&gt;.&lt;/p&gt; 
&lt;p&gt;In production environments, create indexes concurrently to avoid blocking writes.&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-sql&quot;&gt;CREATE INDEX CONCURRENTLY ...
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;Querying&lt;/h3&gt; 
&lt;p&gt;Use &lt;code&gt;EXPLAIN (ANALYZE, BUFFERS)&lt;/code&gt; to debug performance.&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-sql&quot;&gt;EXPLAIN (ANALYZE, BUFFERS) SELECT * FROM items ORDER BY embedding &amp;lt;-&amp;gt; &#39;[3,1,2]&#39; LIMIT 5;
&lt;/code&gt;&lt;/pre&gt; 
&lt;h4&gt;Exact Search&lt;/h4&gt; 
&lt;p&gt;To speed up queries without an index, increase &lt;code&gt;max_parallel_workers_per_gather&lt;/code&gt;.&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-sql&quot;&gt;SET max_parallel_workers_per_gather = 4;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;If vectors are normalized to length 1 (like &lt;a href=&quot;https://platform.openai.com/docs/guides/embeddings/which-distance-function-should-i-use&quot;&gt;OpenAI embeddings&lt;/a&gt;), use inner product for best performance.&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-tsql&quot;&gt;SELECT * FROM items ORDER BY embedding &amp;lt;#&amp;gt; &#39;[3,1,2]&#39; LIMIT 5;
&lt;/code&gt;&lt;/pre&gt; 
&lt;h4&gt;Approximate Search&lt;/h4&gt; 
&lt;p&gt;To speed up queries with an IVFFlat index, increase the number of inverted lists (at the expense of recall).&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-sql&quot;&gt;CREATE INDEX ON items USING ivfflat (embedding vector_l2_ops) WITH (lists = 1000);
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;Vacuuming&lt;/h3&gt; 
&lt;p&gt;Vacuuming can take a while for HNSW indexes. Speed it up by reindexing first.&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-sql&quot;&gt;REINDEX INDEX CONCURRENTLY index_name;
VACUUM table_name;
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2&gt;Monitoring&lt;/h2&gt; 
&lt;p&gt;Monitor performance with &lt;a href=&quot;https://www.postgresql.org/docs/current/pgstatstatements.html&quot;&gt;pg_stat_statements&lt;/a&gt; (be sure to add it to &lt;code&gt;shared_preload_libraries&lt;/code&gt;).&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-sql&quot;&gt;CREATE EXTENSION pg_stat_statements;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Get the most time-consuming queries with:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-sql&quot;&gt;SELECT query, calls, ROUND((total_plan_time + total_exec_time) / calls) AS avg_time_ms,
    ROUND((total_plan_time + total_exec_time) / 60000) AS total_time_min
    FROM pg_stat_statements ORDER BY total_plan_time + total_exec_time DESC LIMIT 20;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Monitor recall by comparing results from approximate search with exact search.&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-sql&quot;&gt;BEGIN;
SET LOCAL enable_indexscan = off; -- use exact search
SELECT ...
COMMIT;
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2&gt;Scaling&lt;/h2&gt; 
&lt;p&gt;Scale pgvector the same way you scale Postgres.&lt;/p&gt; 
&lt;p&gt;Scale vertically by increasing memory, CPU, and storage on a single instance. Use existing tools to &lt;a href=&quot;https://raw.githubusercontent.com/pgvector/pgvector/master/#tuning&quot;&gt;tune parameters&lt;/a&gt; and &lt;a href=&quot;https://raw.githubusercontent.com/pgvector/pgvector/master/#monitoring&quot;&gt;monitor performance&lt;/a&gt;.&lt;/p&gt; 
&lt;p&gt;Scale horizontally with &lt;a href=&quot;https://www.postgresql.org/docs/current/hot-standby.html&quot;&gt;replicas&lt;/a&gt;, or use &lt;a href=&quot;https://github.com/citusdata/citus&quot;&gt;Citus&lt;/a&gt; or another approach for sharding (&lt;a href=&quot;https://github.com/pgvector/pgvector-python/raw/master/examples/citus/example.py&quot;&gt;example&lt;/a&gt;).&lt;/p&gt; 
&lt;h2&gt;Languages&lt;/h2&gt; 
&lt;p&gt;Use pgvector from any language with a Postgres client. You can even generate and store vectors in one language and query them in another.&lt;/p&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Language&lt;/th&gt; 
   &lt;th&gt;Libraries / Examples&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Ada&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/pgvector/pgvector-ada&quot;&gt;pgvector-ada&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Algol&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/pgvector/pgvector-algol&quot;&gt;pgvector-algol&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://github.com/pgvector/pgvector-c&quot;&gt;pgvector-c&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://github.com/pgvector/pgvector-cpp&quot;&gt;pgvector-cpp&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;C#, F#, Visual Basic&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/pgvector/pgvector-dotnet&quot;&gt;pgvector-dotnet&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;COBOL&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/pgvector/pgvector-cobol&quot;&gt;pgvector-cobol&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Crystal&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/pgvector/pgvector-crystal&quot;&gt;pgvector-crystal&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;D&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/pgvector/pgvector-d&quot;&gt;pgvector-d&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/pgvector/pgvector-dart&quot;&gt;pgvector-dart&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Elixir&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/pgvector/pgvector-elixir&quot;&gt;pgvector-elixir&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Erlang&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/pgvector/pgvector-erlang&quot;&gt;pgvector-erlang&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Fortran&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/pgvector/pgvector-fortran&quot;&gt;pgvector-fortran&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Gleam&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/pgvector/pgvector-gleam&quot;&gt;pgvector-gleam&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/pgvector/pgvector-go&quot;&gt;pgvector-go&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Haskell&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/pgvector/pgvector-haskell&quot;&gt;pgvector-haskell&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Java, Kotlin, Groovy, Scala&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/pgvector/pgvector-java&quot;&gt;pgvector-java&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;JavaScript, TypeScript&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/pgvector/pgvector-node&quot;&gt;pgvector-node&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Julia&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/pgvector/Pgvector.jl&quot;&gt;Pgvector.jl&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Lisp&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/pgvector/pgvector-lisp&quot;&gt;pgvector-lisp&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Lua&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/pgvector/pgvector-lua&quot;&gt;pgvector-lua&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Nim&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/pgvector/pgvector-nim&quot;&gt;pgvector-nim&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;OCaml&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/pgvector/pgvector-ocaml&quot;&gt;pgvector-ocaml&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Pascal&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/pgvector/pgvector-pascal&quot;&gt;pgvector-pascal&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Perl&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/pgvector/pgvector-perl&quot;&gt;pgvector-perl&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://github.com/pgvector/pgvector-php&quot;&gt;pgvector-php&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Prolog&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/pgvector/pgvector-prolog&quot;&gt;pgvector-prolog&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://github.com/pgvector/pgvector-python&quot;&gt;pgvector-python&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;R&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/pgvector/pgvector-r&quot;&gt;pgvector-r&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Racket&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/pgvector/pgvector-racket&quot;&gt;pgvector-racket&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Raku&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/pgvector/pgvector-raku&quot;&gt;pgvector-raku&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://github.com/pgvector/pgvector-ruby&quot;&gt;pgvector-ruby&lt;/a&gt;, &lt;a href=&quot;https://github.com/ankane/neighbor&quot;&gt;Neighbor&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Rust&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/pgvector/pgvector-rust&quot;&gt;pgvector-rust&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Swift&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/pgvector/pgvector-swift&quot;&gt;pgvector-swift&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Tcl&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/pgvector/pgvector-tcl&quot;&gt;pgvector-tcl&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Zig&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/pgvector/pgvector-zig&quot;&gt;pgvector-zig&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;h2&gt;Frequently Asked Questions&lt;/h2&gt; 
&lt;h4&gt;How many vectors can be stored in a single table?&lt;/h4&gt; 
&lt;p&gt;A non-partitioned table has a limit of 32 TB by default in Postgres. A partitioned table can have thousands of partitions of that size.&lt;/p&gt; 
&lt;h4&gt;Is replication supported?&lt;/h4&gt; 
&lt;p&gt;Yes, pgvector uses the write-ahead log (WAL), which allows for replication and point-in-time recovery.&lt;/p&gt; 
&lt;h4&gt;What if I want to index vectors with more than 2,000 dimensions?&lt;/h4&gt; 
&lt;p&gt;You can use &lt;a href=&quot;https://raw.githubusercontent.com/pgvector/pgvector/master/#half-precision-vectors&quot;&gt;half-precision vectors&lt;/a&gt; or &lt;a href=&quot;https://raw.githubusercontent.com/pgvector/pgvector/master/#half-precision-indexing&quot;&gt;half-precision indexing&lt;/a&gt; to index up to 4,000 dimensions or &lt;a href=&quot;https://raw.githubusercontent.com/pgvector/pgvector/master/#binary-quantization&quot;&gt;binary quantization&lt;/a&gt; to index up to 64,000 dimensions. Other options are &lt;a href=&quot;https://raw.githubusercontent.com/pgvector/pgvector/master/#indexing-subvectors&quot;&gt;indexing subvectors&lt;/a&gt; (for models that support it) or &lt;a href=&quot;https://en.wikipedia.org/wiki/Dimensionality_reduction&quot;&gt;dimensionality reduction&lt;/a&gt;.&lt;/p&gt; 
&lt;h4&gt;Can I store vectors with different dimensions in the same column?&lt;/h4&gt; 
&lt;p&gt;You can use &lt;code&gt;vector&lt;/code&gt; as the type (instead of &lt;code&gt;vector(n)&lt;/code&gt;).&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-sql&quot;&gt;CREATE TABLE embeddings (model_id bigint, item_id bigint, embedding vector, PRIMARY KEY (model_id, item_id));
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;However, you can only create indexes on rows with the same number of dimensions (using &lt;a href=&quot;https://www.postgresql.org/docs/current/indexes-expressional.html&quot;&gt;expression&lt;/a&gt; and &lt;a href=&quot;https://www.postgresql.org/docs/current/indexes-partial.html&quot;&gt;partial&lt;/a&gt; indexing):&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-sql&quot;&gt;CREATE INDEX ON embeddings USING hnsw ((embedding::vector(3)) vector_l2_ops) WHERE (model_id = 123);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;and query with:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-sql&quot;&gt;SELECT * FROM embeddings WHERE model_id = 123 ORDER BY embedding::vector(3) &amp;lt;-&amp;gt; &#39;[3,1,2]&#39; LIMIT 5;
&lt;/code&gt;&lt;/pre&gt; 
&lt;h4&gt;Can I store vectors with more precision?&lt;/h4&gt; 
&lt;p&gt;You can use the &lt;code&gt;double precision[]&lt;/code&gt; or &lt;code&gt;numeric[]&lt;/code&gt; type to store vectors with more precision.&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-sql&quot;&gt;CREATE TABLE items (id bigserial PRIMARY KEY, embedding double precision[]);

-- use {} instead of [] for Postgres arrays
INSERT INTO items (embedding) VALUES (&#39;{1,2,3}&#39;), (&#39;{4,5,6}&#39;);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Optionally, add a &lt;a href=&quot;https://www.postgresql.org/docs/current/ddl-constraints.html&quot;&gt;check constraint&lt;/a&gt; to ensure data can be converted to the &lt;code&gt;vector&lt;/code&gt; type and has the expected dimensions.&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-sql&quot;&gt;ALTER TABLE items ADD CHECK (vector_dims(embedding::vector) = 3);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Use &lt;a href=&quot;https://www.postgresql.org/docs/current/indexes-expressional.html&quot;&gt;expression indexing&lt;/a&gt; to index (at a lower precision):&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-sql&quot;&gt;CREATE INDEX ON items USING hnsw ((embedding::vector(3)) vector_l2_ops);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;and query with:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-sql&quot;&gt;SELECT * FROM items ORDER BY embedding::vector(3) &amp;lt;-&amp;gt; &#39;[3,1,2]&#39; LIMIT 5;
&lt;/code&gt;&lt;/pre&gt; 
&lt;h4&gt;Do indexes need to fit into memory?&lt;/h4&gt; 
&lt;p&gt;No, but like other index types, you’ll likely see better performance if they do. You can get the size of an index with:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-sql&quot;&gt;SELECT pg_size_pretty(pg_relation_size(&#39;index_name&#39;));
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2&gt;Troubleshooting&lt;/h2&gt; 
&lt;h4&gt;Why isn’t a query using an index?&lt;/h4&gt; 
&lt;p&gt;The query needs to have an &lt;code&gt;ORDER BY&lt;/code&gt; and &lt;code&gt;LIMIT&lt;/code&gt;, and the &lt;code&gt;ORDER BY&lt;/code&gt; must be the result of a distance operator (not an expression) in ascending order.&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-sql&quot;&gt;-- index
ORDER BY embedding &amp;lt;=&amp;gt; &#39;[3,1,2]&#39; LIMIT 5;

-- no index
ORDER BY 1 - (embedding &amp;lt;=&amp;gt; &#39;[3,1,2]&#39;) DESC LIMIT 5;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;You can encourage the planner to use an index for a query with:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-sql&quot;&gt;BEGIN;
SET LOCAL enable_seqscan = off;
SELECT ...
COMMIT;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Also, if the table is small, a table scan may be faster.&lt;/p&gt; 
&lt;h4&gt;Why isn’t a query using a parallel table scan?&lt;/h4&gt; 
&lt;p&gt;The planner doesn’t consider &lt;a href=&quot;https://www.postgresql.org/docs/current/storage-toast.html&quot;&gt;out-of-line storage&lt;/a&gt; in cost estimates, which can make a serial scan look cheaper. You can reduce the cost of a parallel scan for a query with:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-sql&quot;&gt;BEGIN;
SET LOCAL min_parallel_table_scan_size = 1;
SET LOCAL parallel_setup_cost = 1;
SELECT ...
COMMIT;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;or choose to store vectors inline:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-sql&quot;&gt;ALTER TABLE items ALTER COLUMN embedding SET STORAGE PLAIN;
&lt;/code&gt;&lt;/pre&gt; 
&lt;h4&gt;Why are there less results for a query after adding an HNSW index?&lt;/h4&gt; 
&lt;p&gt;Results are limited by the size of the dynamic candidate list (&lt;code&gt;hnsw.ef_search&lt;/code&gt;), which is 40 by default. There may be even less results due to dead tuples or filtering conditions in the query. Enabling &lt;a href=&quot;https://raw.githubusercontent.com/pgvector/pgvector/master/#iterative-index-scans&quot;&gt;iterative index scans&lt;/a&gt; can help address this.&lt;/p&gt; 
&lt;p&gt;Also, note that &lt;code&gt;NULL&lt;/code&gt; vectors are not indexed (as well as zero vectors for cosine distance).&lt;/p&gt; 
&lt;h4&gt;Why are there less results for a query after adding an IVFFlat index?&lt;/h4&gt; 
&lt;p&gt;The index was likely created with too little data for the number of lists. Drop the index until the table has more data.&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-sql&quot;&gt;DROP INDEX index_name;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Results can also be limited by the number of probes (&lt;code&gt;ivfflat.probes&lt;/code&gt;). Enabling &lt;a href=&quot;https://raw.githubusercontent.com/pgvector/pgvector/master/#iterative-index-scans&quot;&gt;iterative index scans&lt;/a&gt; can address this.&lt;/p&gt; 
&lt;p&gt;Also, note that &lt;code&gt;NULL&lt;/code&gt; vectors are not indexed (as well as zero vectors for cosine distance).&lt;/p&gt; 
&lt;h2&gt;Reference&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/pgvector/pgvector/master/#vector-type&quot;&gt;Vector&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/pgvector/pgvector/master/#halfvec-type&quot;&gt;Halfvec&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/pgvector/pgvector/master/#bit-type&quot;&gt;Bit&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/pgvector/pgvector/master/#sparsevec-type&quot;&gt;Sparsevec&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Vector Type&lt;/h3&gt; 
&lt;p&gt;Each vector takes &lt;code&gt;4 * dimensions + 8&lt;/code&gt; bytes of storage. Each element is a single-precision floating-point number (like the &lt;code&gt;real&lt;/code&gt; type in Postgres), and all elements must be finite (no &lt;code&gt;NaN&lt;/code&gt;, &lt;code&gt;Infinity&lt;/code&gt; or &lt;code&gt;-Infinity&lt;/code&gt;). Vectors can have up to 16,000 dimensions.&lt;/p&gt; 
&lt;h3&gt;Vector Operators&lt;/h3&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Operator&lt;/th&gt; 
   &lt;th&gt;Description&lt;/th&gt; 
   &lt;th&gt;Added&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;+&lt;/td&gt; 
   &lt;td&gt;element-wise addition&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;-&lt;/td&gt; 
   &lt;td&gt;element-wise subtraction&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;*&lt;/td&gt; 
   &lt;td&gt;element-wise multiplication&lt;/td&gt; 
   &lt;td&gt;0.5.0&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;||&lt;/td&gt; 
   &lt;td&gt;concatenate&lt;/td&gt; 
   &lt;td&gt;0.7.0&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&amp;lt;-&amp;gt;&lt;/td&gt; 
   &lt;td&gt;Euclidean distance&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&amp;lt;#&amp;gt;&lt;/td&gt; 
   &lt;td&gt;negative inner product&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&amp;lt;=&amp;gt;&lt;/td&gt; 
   &lt;td&gt;cosine distance&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&amp;lt;+&amp;gt;&lt;/td&gt; 
   &lt;td&gt;taxicab distance&lt;/td&gt; 
   &lt;td&gt;0.7.0&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;h3&gt;Vector Functions&lt;/h3&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Function&lt;/th&gt; 
   &lt;th&gt;Description&lt;/th&gt; 
   &lt;th&gt;Added&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;binary_quantize(vector) → bit&lt;/td&gt; 
   &lt;td&gt;binary quantize&lt;/td&gt; 
   &lt;td&gt;0.7.0&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;cosine_distance(vector, vector) → double precision&lt;/td&gt; 
   &lt;td&gt;cosine distance&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;inner_product(vector, vector) → double precision&lt;/td&gt; 
   &lt;td&gt;inner product&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;l1_distance(vector, vector) → double precision&lt;/td&gt; 
   &lt;td&gt;taxicab distance&lt;/td&gt; 
   &lt;td&gt;0.5.0&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;l2_distance(vector, vector) → double precision&lt;/td&gt; 
   &lt;td&gt;Euclidean distance&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;l2_normalize(vector) → vector&lt;/td&gt; 
   &lt;td&gt;Normalize with Euclidean norm&lt;/td&gt; 
   &lt;td&gt;0.7.0&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;subvector(vector, integer, integer) → vector&lt;/td&gt; 
   &lt;td&gt;subvector&lt;/td&gt; 
   &lt;td&gt;0.7.0&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;vector_dims(vector) → integer&lt;/td&gt; 
   &lt;td&gt;number of dimensions&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;vector_norm(vector) → double precision&lt;/td&gt; 
   &lt;td&gt;Euclidean norm&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;h3&gt;Vector Aggregate Functions&lt;/h3&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Function&lt;/th&gt; 
   &lt;th&gt;Description&lt;/th&gt; 
   &lt;th&gt;Added&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;avg(vector) → vector&lt;/td&gt; 
   &lt;td&gt;average&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;sum(vector) → vector&lt;/td&gt; 
   &lt;td&gt;sum&lt;/td&gt; 
   &lt;td&gt;0.5.0&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;h3&gt;Halfvec Type&lt;/h3&gt; 
&lt;p&gt;Each half vector takes &lt;code&gt;2 * dimensions + 8&lt;/code&gt; bytes of storage. Each element is a half-precision floating-point number, and all elements must be finite (no &lt;code&gt;NaN&lt;/code&gt;, &lt;code&gt;Infinity&lt;/code&gt; or &lt;code&gt;-Infinity&lt;/code&gt;). Half vectors can have up to 16,000 dimensions.&lt;/p&gt; 
&lt;h3&gt;Halfvec Operators&lt;/h3&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Operator&lt;/th&gt; 
   &lt;th&gt;Description&lt;/th&gt; 
   &lt;th&gt;Added&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;+&lt;/td&gt; 
   &lt;td&gt;element-wise addition&lt;/td&gt; 
   &lt;td&gt;0.7.0&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;-&lt;/td&gt; 
   &lt;td&gt;element-wise subtraction&lt;/td&gt; 
   &lt;td&gt;0.7.0&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;*&lt;/td&gt; 
   &lt;td&gt;element-wise multiplication&lt;/td&gt; 
   &lt;td&gt;0.7.0&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;||&lt;/td&gt; 
   &lt;td&gt;concatenate&lt;/td&gt; 
   &lt;td&gt;0.7.0&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&amp;lt;-&amp;gt;&lt;/td&gt; 
   &lt;td&gt;Euclidean distance&lt;/td&gt; 
   &lt;td&gt;0.7.0&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&amp;lt;#&amp;gt;&lt;/td&gt; 
   &lt;td&gt;negative inner product&lt;/td&gt; 
   &lt;td&gt;0.7.0&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&amp;lt;=&amp;gt;&lt;/td&gt; 
   &lt;td&gt;cosine distance&lt;/td&gt; 
   &lt;td&gt;0.7.0&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&amp;lt;+&amp;gt;&lt;/td&gt; 
   &lt;td&gt;taxicab distance&lt;/td&gt; 
   &lt;td&gt;0.7.0&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;h3&gt;Halfvec Functions&lt;/h3&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Function&lt;/th&gt; 
   &lt;th&gt;Description&lt;/th&gt; 
   &lt;th&gt;Added&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;binary_quantize(halfvec) → bit&lt;/td&gt; 
   &lt;td&gt;binary quantize&lt;/td&gt; 
   &lt;td&gt;0.7.0&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;cosine_distance(halfvec, halfvec) → double precision&lt;/td&gt; 
   &lt;td&gt;cosine distance&lt;/td&gt; 
   &lt;td&gt;0.7.0&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;inner_product(halfvec, halfvec) → double precision&lt;/td&gt; 
   &lt;td&gt;inner product&lt;/td&gt; 
   &lt;td&gt;0.7.0&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;l1_distance(halfvec, halfvec) → double precision&lt;/td&gt; 
   &lt;td&gt;taxicab distance&lt;/td&gt; 
   &lt;td&gt;0.7.0&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;l2_distance(halfvec, halfvec) → double precision&lt;/td&gt; 
   &lt;td&gt;Euclidean distance&lt;/td&gt; 
   &lt;td&gt;0.7.0&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;l2_norm(halfvec) → double precision&lt;/td&gt; 
   &lt;td&gt;Euclidean norm&lt;/td&gt; 
   &lt;td&gt;0.7.0&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;l2_normalize(halfvec) → halfvec&lt;/td&gt; 
   &lt;td&gt;Normalize with Euclidean norm&lt;/td&gt; 
   &lt;td&gt;0.7.0&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;subvector(halfvec, integer, integer) → halfvec&lt;/td&gt; 
   &lt;td&gt;subvector&lt;/td&gt; 
   &lt;td&gt;0.7.0&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;vector_dims(halfvec) → integer&lt;/td&gt; 
   &lt;td&gt;number of dimensions&lt;/td&gt; 
   &lt;td&gt;0.7.0&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;h3&gt;Halfvec Aggregate Functions&lt;/h3&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Function&lt;/th&gt; 
   &lt;th&gt;Description&lt;/th&gt; 
   &lt;th&gt;Added&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;avg(halfvec) → halfvec&lt;/td&gt; 
   &lt;td&gt;average&lt;/td&gt; 
   &lt;td&gt;0.7.0&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;sum(halfvec) → halfvec&lt;/td&gt; 
   &lt;td&gt;sum&lt;/td&gt; 
   &lt;td&gt;0.7.0&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;h3&gt;Bit Type&lt;/h3&gt; 
&lt;p&gt;Each bit vector takes &lt;code&gt;dimensions / 8 + 8&lt;/code&gt; bytes of storage. See the &lt;a href=&quot;https://www.postgresql.org/docs/current/datatype-bit.html&quot;&gt;Postgres docs&lt;/a&gt; for more info.&lt;/p&gt; 
&lt;h3&gt;Bit Operators&lt;/h3&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Operator&lt;/th&gt; 
   &lt;th&gt;Description&lt;/th&gt; 
   &lt;th&gt;Added&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&amp;lt;~&amp;gt;&lt;/td&gt; 
   &lt;td&gt;Hamming distance&lt;/td&gt; 
   &lt;td&gt;0.7.0&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&amp;lt;%&amp;gt;&lt;/td&gt; 
   &lt;td&gt;Jaccard distance&lt;/td&gt; 
   &lt;td&gt;0.7.0&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;h3&gt;Bit Functions&lt;/h3&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Function&lt;/th&gt; 
   &lt;th&gt;Description&lt;/th&gt; 
   &lt;th&gt;Added&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;hamming_distance(bit, bit) → double precision&lt;/td&gt; 
   &lt;td&gt;Hamming distance&lt;/td&gt; 
   &lt;td&gt;0.7.0&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;jaccard_distance(bit, bit) → double precision&lt;/td&gt; 
   &lt;td&gt;Jaccard distance&lt;/td&gt; 
   &lt;td&gt;0.7.0&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;h3&gt;Sparsevec Type&lt;/h3&gt; 
&lt;p&gt;Each sparse vector takes &lt;code&gt;8 * non-zero elements + 16&lt;/code&gt; bytes of storage. Each element is a single-precision floating-point number, and all elements must be finite (no &lt;code&gt;NaN&lt;/code&gt;, &lt;code&gt;Infinity&lt;/code&gt; or &lt;code&gt;-Infinity&lt;/code&gt;). Sparse vectors can have up to 16,000 non-zero elements.&lt;/p&gt; 
&lt;h3&gt;Sparsevec Operators&lt;/h3&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Operator&lt;/th&gt; 
   &lt;th&gt;Description&lt;/th&gt; 
   &lt;th&gt;Added&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&amp;lt;-&amp;gt;&lt;/td&gt; 
   &lt;td&gt;Euclidean distance&lt;/td&gt; 
   &lt;td&gt;0.7.0&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&amp;lt;#&amp;gt;&lt;/td&gt; 
   &lt;td&gt;negative inner product&lt;/td&gt; 
   &lt;td&gt;0.7.0&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&amp;lt;=&amp;gt;&lt;/td&gt; 
   &lt;td&gt;cosine distance&lt;/td&gt; 
   &lt;td&gt;0.7.0&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&amp;lt;+&amp;gt;&lt;/td&gt; 
   &lt;td&gt;taxicab distance&lt;/td&gt; 
   &lt;td&gt;0.7.0&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;h3&gt;Sparsevec Functions&lt;/h3&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Function&lt;/th&gt; 
   &lt;th&gt;Description&lt;/th&gt; 
   &lt;th&gt;Added&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;cosine_distance(sparsevec, sparsevec) → double precision&lt;/td&gt; 
   &lt;td&gt;cosine distance&lt;/td&gt; 
   &lt;td&gt;0.7.0&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;inner_product(sparsevec, sparsevec) → double precision&lt;/td&gt; 
   &lt;td&gt;inner product&lt;/td&gt; 
   &lt;td&gt;0.7.0&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;l1_distance(sparsevec, sparsevec) → double precision&lt;/td&gt; 
   &lt;td&gt;taxicab distance&lt;/td&gt; 
   &lt;td&gt;0.7.0&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;l2_distance(sparsevec, sparsevec) → double precision&lt;/td&gt; 
   &lt;td&gt;Euclidean distance&lt;/td&gt; 
   &lt;td&gt;0.7.0&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;l2_norm(sparsevec) → double precision&lt;/td&gt; 
   &lt;td&gt;Euclidean norm&lt;/td&gt; 
   &lt;td&gt;0.7.0&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;l2_normalize(sparsevec) → sparsevec&lt;/td&gt; 
   &lt;td&gt;Normalize with Euclidean norm&lt;/td&gt; 
   &lt;td&gt;0.7.0&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;h2&gt;Installation Notes - Linux and Mac&lt;/h2&gt; 
&lt;h3&gt;Postgres Location&lt;/h3&gt; 
&lt;p&gt;If your machine has multiple Postgres installations, specify the path to &lt;a href=&quot;https://www.postgresql.org/docs/current/app-pgconfig.html&quot;&gt;pg_config&lt;/a&gt; with:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-sh&quot;&gt;export PG_CONFIG=/Library/PostgreSQL/18/bin/pg_config
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Then re-run the installation instructions (run &lt;code&gt;make clean&lt;/code&gt; before &lt;code&gt;make&lt;/code&gt; if needed). If &lt;code&gt;sudo&lt;/code&gt; is needed for &lt;code&gt;make install&lt;/code&gt;, use:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-sh&quot;&gt;sudo --preserve-env=PG_CONFIG make install
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;A few common paths on Mac are:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;EDB installer - &lt;code&gt;/Library/PostgreSQL/18/bin/pg_config&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;Homebrew (arm64) - &lt;code&gt;/opt/homebrew/opt/postgresql@18/bin/pg_config&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;Homebrew (x86-64) - &lt;code&gt;/usr/local/opt/postgresql@18/bin/pg_config&lt;/code&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;Note: Replace &lt;code&gt;18&lt;/code&gt; with your Postgres server version&lt;/p&gt; 
&lt;h3&gt;Missing Header&lt;/h3&gt; 
&lt;p&gt;If compilation fails with &lt;code&gt;fatal error: postgres.h: No such file or directory&lt;/code&gt;, make sure Postgres development files are installed on the server.&lt;/p&gt; 
&lt;p&gt;For Ubuntu and Debian, use:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-sh&quot;&gt;sudo apt install postgresql-server-dev-18
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Note: Replace &lt;code&gt;18&lt;/code&gt; with your Postgres server version&lt;/p&gt; 
&lt;h3&gt;Missing SDK&lt;/h3&gt; 
&lt;p&gt;If compilation fails and the output includes &lt;code&gt;warning: no such sysroot directory&lt;/code&gt; on Mac, your Postgres installation points to a path that no longer exists.&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-sh&quot;&gt;pg_config --cppflags
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Reinstall Postgres to fix this.&lt;/p&gt; 
&lt;h3&gt;Portability&lt;/h3&gt; 
&lt;p&gt;By default, pgvector compiles with &lt;code&gt;-march=native&lt;/code&gt; on some platforms for best performance. However, this can lead to &lt;code&gt;Illegal instruction&lt;/code&gt; errors if trying to run the compiled extension on a different machine.&lt;/p&gt; 
&lt;p&gt;To compile for portability, use:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-sh&quot;&gt;make OPTFLAGS=&quot;&quot;
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2&gt;Installation Notes - Windows&lt;/h2&gt; 
&lt;h3&gt;Missing Header&lt;/h3&gt; 
&lt;p&gt;If compilation fails with &lt;code&gt;Cannot open include file: &#39;postgres.h&#39;: No such file or directory&lt;/code&gt;, make sure &lt;code&gt;PGROOT&lt;/code&gt; is correct.&lt;/p&gt; 
&lt;h3&gt;Mismatched Architecture&lt;/h3&gt; 
&lt;p&gt;If compilation fails with &lt;code&gt;error C2196: case value &#39;4&#39; already used&lt;/code&gt;, make sure you’re using the &lt;code&gt;x64 Native Tools Command Prompt&lt;/code&gt;. Then run &lt;code&gt;nmake /F Makefile.win clean&lt;/code&gt; and re-run the installation instructions.&lt;/p&gt; 
&lt;h3&gt;Missing Symbol&lt;/h3&gt; 
&lt;p&gt;If linking fails with &lt;code&gt;unresolved external symbol float_to_shortest_decimal_bufn&lt;/code&gt; with Postgres 17.0-17.2, upgrade to Postgres 17.3+.&lt;/p&gt; 
&lt;h3&gt;Permissions&lt;/h3&gt; 
&lt;p&gt;If installation fails with &lt;code&gt;Access is denied&lt;/code&gt;, re-run the installation instructions as an administrator.&lt;/p&gt; 
&lt;h2&gt;Additional Installation Methods&lt;/h2&gt; 
&lt;h3&gt;Docker&lt;/h3&gt; 
&lt;p&gt;Get the &lt;a href=&quot;https://hub.docker.com/r/pgvector/pgvector&quot;&gt;Docker image&lt;/a&gt; with:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-sh&quot;&gt;docker pull pgvector/pgvector:pg18-trixie
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;This adds pgvector to the &lt;a href=&quot;https://hub.docker.com/_/postgres&quot;&gt;Postgres image&lt;/a&gt; (replace &lt;code&gt;18&lt;/code&gt; with your Postgres server version, and run it the same way).&lt;/p&gt; 
&lt;p&gt;Supported tags are:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;code&gt;pg18-trixie&lt;/code&gt;, &lt;code&gt;0.8.2-pg18-trixie&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;pg18-bookworm&lt;/code&gt;, &lt;code&gt;0.8.2-pg18-bookworm&lt;/code&gt;, &lt;code&gt;pg18&lt;/code&gt;, &lt;code&gt;0.8.2-pg18&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;pg17-trixie&lt;/code&gt;, &lt;code&gt;0.8.2-pg17-trixie&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;pg17-bookworm&lt;/code&gt;, &lt;code&gt;0.8.2-pg17-bookworm&lt;/code&gt;, &lt;code&gt;pg17&lt;/code&gt;, &lt;code&gt;0.8.2-pg17&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;pg16-trixie&lt;/code&gt;, &lt;code&gt;0.8.2-pg16-trixie&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;pg16-bookworm&lt;/code&gt;, &lt;code&gt;0.8.2-pg16-bookworm&lt;/code&gt;, &lt;code&gt;pg16&lt;/code&gt;, &lt;code&gt;0.8.2-pg16&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;pg15-trixie&lt;/code&gt;, &lt;code&gt;0.8.2-pg15-trixie&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;pg15-bookworm&lt;/code&gt;, &lt;code&gt;0.8.2-pg15-bookworm&lt;/code&gt;, &lt;code&gt;pg15&lt;/code&gt;, &lt;code&gt;0.8.2-pg15&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;pg14-trixie&lt;/code&gt;, &lt;code&gt;0.8.2-pg14-trixie&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;pg14-bookworm&lt;/code&gt;, &lt;code&gt;0.8.2-pg14-bookworm&lt;/code&gt;, &lt;code&gt;pg14&lt;/code&gt;, &lt;code&gt;0.8.2-pg14&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;pg13-trixie&lt;/code&gt;, &lt;code&gt;0.8.2-pg13-trixie&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;pg13-bookworm&lt;/code&gt;, &lt;code&gt;0.8.2-pg13-bookworm&lt;/code&gt;, &lt;code&gt;pg13&lt;/code&gt;, &lt;code&gt;0.8.2-pg13&lt;/code&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;You can also build the image manually:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-sh&quot;&gt;git clone --branch v0.8.2 https://github.com/pgvector/pgvector.git
cd pgvector
docker build --pull --build-arg PG_MAJOR=18 -t myuser/pgvector .
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;If you increase &lt;code&gt;maintenance_work_mem&lt;/code&gt;, make sure &lt;code&gt;--shm-size&lt;/code&gt; is at least that size to avoid an error with parallel HNSW index builds.&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-sh&quot;&gt;docker run --shm-size=1g ...
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;Homebrew&lt;/h3&gt; 
&lt;p&gt;With Homebrew Postgres, you can use:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-sh&quot;&gt;brew install pgvector
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Note: This only adds it to the &lt;code&gt;postgresql@18&lt;/code&gt; and &lt;code&gt;postgresql@17&lt;/code&gt; formulas&lt;/p&gt; 
&lt;h3&gt;PGXN&lt;/h3&gt; 
&lt;p&gt;Install from the &lt;a href=&quot;https://pgxn.org/dist/vector&quot;&gt;PostgreSQL Extension Network&lt;/a&gt; with:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-sh&quot;&gt;pgxn install vector
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;APT&lt;/h3&gt; 
&lt;p&gt;Debian and Ubuntu packages are available from the &lt;a href=&quot;https://wiki.postgresql.org/wiki/Apt&quot;&gt;PostgreSQL APT Repository&lt;/a&gt;. Follow the &lt;a href=&quot;https://wiki.postgresql.org/wiki/Apt#Quickstart&quot;&gt;setup instructions&lt;/a&gt; and run:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-sh&quot;&gt;sudo apt install postgresql-18-pgvector
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Note: Replace &lt;code&gt;18&lt;/code&gt; with your Postgres server version&lt;/p&gt; 
&lt;h3&gt;Yum&lt;/h3&gt; 
&lt;p&gt;RPM packages are available from the &lt;a href=&quot;https://yum.postgresql.org/&quot;&gt;PostgreSQL Yum Repository&lt;/a&gt;. Follow the &lt;a href=&quot;https://www.postgresql.org/download/linux/redhat/&quot;&gt;setup instructions&lt;/a&gt; for your distribution and run:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-sh&quot;&gt;sudo yum install pgvector_18
# or
sudo dnf install pgvector_18
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Note: Replace &lt;code&gt;18&lt;/code&gt; with your Postgres server version&lt;/p&gt; 
&lt;h3&gt;pkg&lt;/h3&gt; 
&lt;p&gt;Install the FreeBSD package with:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-sh&quot;&gt;pkg install postgresql17-pgvector
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;or the port with:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-sh&quot;&gt;cd /usr/ports/databases/pgvector
make install
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;APK&lt;/h3&gt; 
&lt;p&gt;Install the Alpine package with:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-sh&quot;&gt;apk add postgresql-pgvector
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;conda-forge&lt;/h3&gt; 
&lt;p&gt;With Conda Postgres, install from &lt;a href=&quot;https://anaconda.org/conda-forge/pgvector&quot;&gt;conda-forge&lt;/a&gt; with:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-sh&quot;&gt;conda install -c conda-forge pgvector
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;This method is &lt;a href=&quot;https://github.com/conda-forge/pgvector-feedstock&quot;&gt;community-maintained&lt;/a&gt; by &lt;a href=&quot;https://github.com/mmcauliffe&quot;&gt;@mmcauliffe&lt;/a&gt;&lt;/p&gt; 
&lt;h3&gt;Postgres.app&lt;/h3&gt; 
&lt;p&gt;Download the &lt;a href=&quot;https://postgresapp.com/downloads.html&quot;&gt;latest release&lt;/a&gt; with Postgres 15+.&lt;/p&gt; 
&lt;h2&gt;Hosted Postgres&lt;/h2&gt; 
&lt;p&gt;pgvector is available on &lt;a href=&quot;https://github.com/pgvector/pgvector/issues/54&quot;&gt;these providers&lt;/a&gt;.&lt;/p&gt; 
&lt;h2&gt;Upgrading&lt;/h2&gt; 
&lt;p&gt;&lt;a href=&quot;https://raw.githubusercontent.com/pgvector/pgvector/master/#installation&quot;&gt;Install&lt;/a&gt; the latest version (use the same method as the original installation). Then in each database you want to upgrade, run:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-sql&quot;&gt;ALTER EXTENSION vector UPDATE;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;You can check the version in the current database with:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-sql&quot;&gt;SELECT extversion FROM pg_extension WHERE extname = &#39;vector&#39;;
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2&gt;Thanks&lt;/h2&gt; 
&lt;p&gt;Thanks to:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://dl.acm.org/doi/pdf/10.1145/3318464.3386131&quot;&gt;PASE: PostgreSQL Ultra-High-Dimensional Approximate Nearest Neighbor Search Extension&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/facebookresearch/faiss&quot;&gt;Faiss: A Library for Efficient Similarity Search and Clustering of Dense Vectors&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://cdn.aaai.org/ICML/2003/ICML03-022.pdf&quot;&gt;Using the Triangle Inequality to Accelerate k-means&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://theory.stanford.edu/~sergei/papers/kMeansPP-soda.pdf&quot;&gt;k-means++: The Advantage of Careful Seeding&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.cs.utexas.edu/users/inderjit/public_papers/concept_mlj.pdf&quot;&gt;Concept Decompositions for Large Sparse Text Data using Clustering&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://arxiv.org/ftp/arxiv/papers/1603/1603.09320.pdf&quot;&gt;Efficient and Robust Approximate Nearest Neighbor Search using Hierarchical Navigable Small World Graphs&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;History&lt;/h2&gt; 
&lt;p&gt;View the &lt;a href=&quot;https://github.com/pgvector/pgvector/raw/master/CHANGELOG.md&quot;&gt;changelog&lt;/a&gt;&lt;/p&gt; 
&lt;h2&gt;Contributing&lt;/h2&gt; 
&lt;p&gt;Everyone is encouraged to help improve this project. Here are a few ways you can help:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/pgvector/pgvector/issues&quot;&gt;Report bugs&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;Fix bugs and &lt;a href=&quot;https://github.com/pgvector/pgvector/pulls&quot;&gt;submit pull requests&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;Write, clarify, or fix documentation&lt;/li&gt; 
 &lt;li&gt;Suggest or add new features&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;To get started with development:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-sh&quot;&gt;git clone https://github.com/pgvector/pgvector.git
cd pgvector
make
make install
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;To run all tests:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-sh&quot;&gt;make installcheck        # regression tests
make prove_installcheck  # TAP tests
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;To run single tests:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-sh&quot;&gt;make installcheck REGRESS=functions                            # regression test
make prove_installcheck PROVE_TESTS=test/t/001_ivfflat_wal.pl  # TAP test
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;To enable assertions:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-sh&quot;&gt;make clean &amp;amp;&amp;amp; PG_CFLAGS=&quot;-DUSE_ASSERT_CHECKING&quot; make &amp;amp;&amp;amp; make install
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;To enable benchmarking:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-sh&quot;&gt;make clean &amp;amp;&amp;amp; PG_CFLAGS=&quot;-DIVFFLAT_BENCH&quot; make &amp;amp;&amp;amp; make install
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;To show memory usage:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-sh&quot;&gt;make clean &amp;amp;&amp;amp; PG_CFLAGS=&quot;-DHNSW_MEMORY -DIVFFLAT_MEMORY&quot; make &amp;amp;&amp;amp; make install
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;To get k-means metrics:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-sh&quot;&gt;make clean &amp;amp;&amp;amp; PG_CFLAGS=&quot;-DIVFFLAT_KMEANS_DEBUG&quot; make &amp;amp;&amp;amp; make install
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Resources for contributors&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.postgresql.org/docs/current/extend-pgxs.html&quot;&gt;Extension Building Infrastructure&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.postgresql.org/docs/current/indexam.html&quot;&gt;Index Access Method Interface Definition&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.postgresql.org/docs/current/generic-wal.html&quot;&gt;Generic WAL Records&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt;</description>
      
      <media:content url="https://opengraph.githubassets.com/241e3fefff356047219a62a27f733f7350d4337186fc42b2c49903720a56afea/pgvector/pgvector" medium="image" />
      
    </item>
    
    <item>
      <title>apache/nuttx</title>
      <link>https://github.com/apache/nuttx</link>
      <description>&lt;p&gt;Apache NuttX is a mature, real-time embedded operating system (RTOS)&lt;/p&gt;&lt;hr&gt;&lt;p align=&quot;center&quot;&gt; &lt;img src=&quot;https://raw.githubusercontent.com/apache/nuttx/master/Documentation/_static/NuttX320.png&quot; width=&quot;175&quot; /&gt; &lt;/p&gt; 
&lt;p&gt;&lt;img src=&quot;https://img.shields.io/badge/POSIX-Compliant-brightgreen?style=flat&amp;amp;label=POSIX&quot; alt=&quot;POSIX Badge&quot; /&gt; &lt;a href=&quot;https://nuttx.apache.org/docs/latest/introduction/licensing.html&quot;&gt;&lt;img src=&quot;https://img.shields.io/badge/License-Apache%202.0-blue&quot; alt=&quot;License&quot; /&gt;&lt;/a&gt; &lt;img src=&quot;https://img.shields.io/badge/issue_track-github-blue?style=flat&amp;amp;label=Issue%20Tracking&quot; alt=&quot;Issues Tracking Badge&quot; /&gt; &lt;a href=&quot;https://github.com/apache/nuttx/graphs/contributors&quot;&gt;&lt;img src=&quot;https://img.shields.io/github/contributors/apache/nuttx&quot; alt=&quot;Contributors&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://github.com/apache/nuttx/actions/workflows/build.yml&quot;&gt;&lt;img src=&quot;https://github.com/apache/nuttx/workflows/Build/badge.svg?sanitize=true&quot; alt=&quot;GitHub Build Badge&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://nuttx.apache.org/docs/latest/index.html&quot;&gt;&lt;img src=&quot;https://github.com/apache/nuttx/workflows/Build%20Documentation/badge.svg?sanitize=true&quot; alt=&quot;Documentation Badge&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;Apache NuttX is a real-time operating system (RTOS) with an emphasis on standards compliance and small footprint. Scalable from 8-bit to 64-bit microcontroller environments, the primary governing standards in NuttX are POSIX and ANSI standards. Additional standard APIs from Unix and other common RTOSs (such as VxWorks) are adopted for functionality not available under these standards, or for functionality that is not appropriate for deeply-embedded environments (such as fork()).&lt;/p&gt; 
&lt;p&gt;For brevity, many parts of the documentation will refer to Apache NuttX as simply NuttX.&lt;/p&gt; 
&lt;h2&gt;Getting Started&lt;/h2&gt; 
&lt;p&gt;First time on NuttX? Read the &lt;a href=&quot;https://nuttx.apache.org/docs/latest/quickstart/index.html&quot;&gt;Getting Started&lt;/a&gt; guide! If you don&#39;t have a board available, NuttX has its own simulator that you can run on terminal.&lt;/p&gt; 
&lt;h2&gt;Documentation&lt;/h2&gt; 
&lt;p&gt;You can find the current NuttX documentation on the &lt;a href=&quot;https://nuttx.apache.org/docs/latest/&quot;&gt;Documentation Page&lt;/a&gt;.&lt;/p&gt; 
&lt;p&gt;Alternatively, you can build the documentation yourself by following the Documentation Build &lt;a href=&quot;https://nuttx.apache.org/docs/latest/contributing/documentation.html&quot;&gt;Instructions&lt;/a&gt;.&lt;/p&gt; 
&lt;p&gt;The old NuttX documentation is still available in the &lt;a href=&quot;https://cwiki.apache.org/NUTTX/NuttX&quot;&gt;Apache wiki&lt;/a&gt;.&lt;/p&gt; 
&lt;h2&gt;Supported Boards&lt;/h2&gt; 
&lt;p&gt;NuttX supports a wide variety of platforms. See the full list on the &lt;a href=&quot;https://nuttx.apache.org/docs/latest/platforms/index.html&quot;&gt;Supported Platforms&lt;/a&gt; page.&lt;/p&gt; 
&lt;h2&gt;Contributing&lt;/h2&gt; 
&lt;p&gt;If you wish to contribute to the NuttX project, read the &lt;a href=&quot;https://nuttx.apache.org/docs/latest/contributing/index.html&quot;&gt;Contributing&lt;/a&gt; guidelines for information on Git usage, coding standard, workflow and the NuttX principles.&lt;/p&gt; 
&lt;h2&gt;License&lt;/h2&gt; 
&lt;p&gt;The code in this repository is under either the Apache 2 license, or a license compatible with the Apache 2 license. See the &lt;a href=&quot;https://nuttx.apache.org/docs/latest/introduction/licensing.html&quot;&gt;License Page&lt;/a&gt; for more information.&lt;/p&gt;</description>
      
      <media:content url="https://opengraph.githubassets.com/489dcf8bbac7fc0bafbc11ff93774aca0abf90b00c87da5d6567ada81f9795e4/apache/nuttx" medium="image" />
      
    </item>
    
    <item>
      <title>Zaneham/BarraCUDA</title>
      <link>https://github.com/Zaneham/BarraCUDA</link>
      <description>&lt;p&gt;Open-source CUDA compiler targeting multiple GPU architectures. Compiles .cu to AMD and Tenstorrent GPU&#39;s&lt;/p&gt;&lt;hr&gt;&lt;h1&gt;BarraCUDA&lt;/h1&gt; 
&lt;p&gt;An open-source CUDA C++ compiler written from scratch in C99 that takes &lt;code&gt;.cu&lt;/code&gt; files and compiles them to AMD GPU machine code, NVIDIA PTX, and Tenstorrent Tensix C++, with more architectures planned. No LLVM, no dependencies, and no permission asked.&lt;/p&gt; 
&lt;p&gt;This is what happens when you look at NVIDIA&#39;s walled garden and think &quot;how hard can it be?&quot; The answer is: quite hard, actually, but I did it anyway.&lt;/p&gt; 
&lt;p&gt;See &lt;a href=&quot;https://raw.githubusercontent.com/Zaneham/BarraCUDA/master/#changelog&quot;&gt;Changelog&lt;/a&gt; for recent updates.&lt;/p&gt; 
&lt;h2&gt;What It Does&lt;/h2&gt; 
&lt;p&gt;Takes CUDA C source code, the same &lt;code&gt;.cu&lt;/code&gt; files you&#39;d feed to &lt;code&gt;nvcc&lt;/code&gt;, and compiles them to AMD RDNA 2/3/4 binaries, NVIDIA PTX, or Tenstorrent Tensix Metalium C++.&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;┌───────────────────────────────────────────────────────────────────────────┐
│                          BarraCUDA Pipeline                              │
├───────────────────────────────────────────────────────────────────────────┤
│  Source (.cu)                                                            │
│       ↓                                                                  │
│  Preprocessor → #include, #define, macros, conditionals                  │
│       ↓                                                                  │
│  Lexer → Tokens                                                          │
│       ↓                                                                  │
│  Parser (Recursive Descent) → AST                                        │
│       ↓                                                                  │
│  Semantic Analysis → Type checking, scope resolution                     │
│       ↓                                                                  │
│  BIR (BarraCUDA IR) → SSA form, typed instructions                       │
│       ↓                                                                  │
│  mem2reg → Promotes allocas to SSA registers                             │
│       ↓                                                                  │
│  Instruction Selection                                                   │
│       ├──────────────────┬──────────────────┬────────────────────┤       │
│       ↓ AMD              ↓ NVIDIA            ↓ Tenstorrent       │       │
│  VGPR/SGPR regalloc  PTX isel + emit    Tensix SFPU isel        │       │
│       ↓                  ↓                   ↓                   │       │
│  GFX9/10/11/12       .ptx text          Metalium C++             │       │
│  binary encoding     (driver JIT)       compute/reader/writer    │       │
│       ↓                  ↓                   ↓                   │       │
│  .hsaco ELF          Runs on NVIDIA     Runs on Tenstorrent      │       │
│       ↓              hardware            hardware                │       │
│  Runs on AMD                                                     │       │
│  hardware                                                        │       │
└───────────────────────────────────────────────────────────────────────────┘
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2&gt;Building&lt;/h2&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# It&#39;s C99. It builds with gcc. There are no dependencies.
make

# That&#39;s it. No cmake. No autoconf. No 47-step build process.
# If this doesn&#39;t work, your gcc is broken, not the Makefile.
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;Requirements&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;A C99 compiler (gcc, clang, whatever you&#39;ve got)&lt;/li&gt; 
 &lt;li&gt;A will to live (optional but recommended)&lt;/li&gt; 
 &lt;li&gt;LLVM is NOT required. BarraCUDA does its own instruction encoding like an adult.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Usage&lt;/h2&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# Compile to AMD GPU binary (RDNA 3, default)
./barracuda --amdgpu-bin kernel.cu -o kernel.hsaco

# Compile for RDNA 2
./barracuda --amdgpu-bin --gfx1030 kernel.cu -o kernel.hsaco

# Compile for RDNA 4
./barracuda --amdgpu-bin --gfx1200 kernel.cu -o kernel.hsaco

# Compile to NVIDIA PTX
./barracuda --nvidia-ptx kernel.cu -o kernel.ptx

# Compile to Tenstorrent Metalium C++
./barracuda --tensix kernel.cu -o kernel_compute.cpp

# Dump the IR (for debugging or curiosity)
./barracuda --ir kernel.cu

# Just parse and dump the AST
./barracuda --ast kernel.cu

# Run semantic analysis
./barracuda --sema kernel.cu

# Error messages in te reo Maori (or any language with a translation file)
./barracuda --lang lang/mi.txt --amdgpu-bin kernel.cu -o kernel.hsaco
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2&gt;Runtime Launcher&lt;/h2&gt; 
&lt;p&gt;BarraCUDA includes a minimal HSA runtime (&lt;code&gt;src/runtime/&lt;/code&gt;) for dispatching compiled kernels on real AMD hardware. Zero compile-time dependency on ROCm — loads &lt;code&gt;libhsa-runtime64.so&lt;/code&gt; at runtime via &lt;code&gt;dlopen&lt;/code&gt;.&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# Compile the runtime and example together
gcc -std=c99 -O2 -I src/runtime \
    examples/launch_saxpy.c src/runtime/bc_runtime.c \
    -ldl -lm -o launch_saxpy

# Compile a kernel and run it
./barracuda --amdgpu-bin -o test.hsaco tests/canonical.cu
./launch_saxpy test.hsaco
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Requires Linux with ROCm installed. See &lt;code&gt;examples/launch_saxpy.c&lt;/code&gt; for a complete example.&lt;/p&gt; 
&lt;h2&gt;What Works&lt;/h2&gt; 
&lt;p&gt;The following CUDA features compile to working GFX9/GFX10/GFX11/GFX12 machine code, NVIDIA PTX, and Tensix Metalium C++:&lt;/p&gt; 
&lt;h3&gt;Core Language&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;code&gt;__global__&lt;/code&gt;, &lt;code&gt;__device__&lt;/code&gt;, &lt;code&gt;__host__&lt;/code&gt; function qualifiers&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;threadIdx&lt;/code&gt;, &lt;code&gt;blockIdx&lt;/code&gt;, &lt;code&gt;blockDim&lt;/code&gt;, &lt;code&gt;gridDim&lt;/code&gt; builtins&lt;/li&gt; 
 &lt;li&gt;Structs (named + anonymous inline), enums, typedefs, namespaces&lt;/li&gt; 
 &lt;li&gt;Pointers, arrays, pointer arithmetic&lt;/li&gt; 
 &lt;li&gt;All C control flow: &lt;code&gt;if&lt;/code&gt;/&lt;code&gt;else&lt;/code&gt;, &lt;code&gt;for&lt;/code&gt;, &lt;code&gt;while&lt;/code&gt;, &lt;code&gt;do-while&lt;/code&gt;, &lt;code&gt;switch&lt;/code&gt;/&lt;code&gt;case&lt;/code&gt;, &lt;code&gt;goto&lt;/code&gt;/&lt;code&gt;label&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;Short-circuit &lt;code&gt;&amp;amp;&amp;amp;&lt;/code&gt; and &lt;code&gt;||&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;Ternary operator&lt;/li&gt; 
 &lt;li&gt;Templates (basic instantiation)&lt;/li&gt; 
 &lt;li&gt;Multiple return paths, &lt;code&gt;continue&lt;/code&gt;, &lt;code&gt;break&lt;/code&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;CUDA Features&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;code&gt;__shared__&lt;/code&gt; memory (allocated from LDS, properly tracked)&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;__syncthreads()&lt;/code&gt; → &lt;code&gt;s_barrier&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;Atomic operations: &lt;code&gt;atomicAdd&lt;/code&gt;, &lt;code&gt;atomicSub&lt;/code&gt;, &lt;code&gt;atomicMin&lt;/code&gt;, &lt;code&gt;atomicMax&lt;/code&gt;, &lt;code&gt;atomicExch&lt;/code&gt;, &lt;code&gt;atomicCAS&lt;/code&gt;, &lt;code&gt;atomicAnd&lt;/code&gt;, &lt;code&gt;atomicOr&lt;/code&gt;, &lt;code&gt;atomicXor&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;Warp intrinsics: &lt;code&gt;__shfl_sync&lt;/code&gt;, &lt;code&gt;__shfl_up_sync&lt;/code&gt;, &lt;code&gt;__shfl_down_sync&lt;/code&gt;, &lt;code&gt;__shfl_xor_sync&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;Warp votes: &lt;code&gt;__ballot_sync&lt;/code&gt;, &lt;code&gt;__any_sync&lt;/code&gt;, &lt;code&gt;__all_sync&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;Vector types: &lt;code&gt;float2&lt;/code&gt;, &lt;code&gt;float3&lt;/code&gt;, &lt;code&gt;float4&lt;/code&gt;, &lt;code&gt;int2&lt;/code&gt;, &lt;code&gt;int3&lt;/code&gt;, &lt;code&gt;int4&lt;/code&gt; with &lt;code&gt;.x&lt;/code&gt;/&lt;code&gt;.y&lt;/code&gt;/&lt;code&gt;.z&lt;/code&gt;/&lt;code&gt;.w&lt;/code&gt; access&lt;/li&gt; 
 &lt;li&gt;Half precision: &lt;code&gt;__half&lt;/code&gt;, &lt;code&gt;__float2half()&lt;/code&gt;, &lt;code&gt;__half2float()&lt;/code&gt;, &lt;code&gt;__nv_bfloat16&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;__launch_bounds__&lt;/code&gt; (parsed, propagated, enforces VGPR caps)&lt;/li&gt; 
 &lt;li&gt;Cooperative groups: &lt;code&gt;cooperative_groups::this_thread_block()&lt;/code&gt; with &lt;code&gt;.sync()&lt;/code&gt;, &lt;code&gt;.thread_rank()&lt;/code&gt;, &lt;code&gt;.size()&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;Operator overloading&lt;/li&gt; 
 &lt;li&gt;Math builtins: &lt;code&gt;sqrtf&lt;/code&gt;, &lt;code&gt;rsqrtf&lt;/code&gt;, &lt;code&gt;expf&lt;/code&gt;, &lt;code&gt;exp2f&lt;/code&gt;, &lt;code&gt;logf&lt;/code&gt;, &lt;code&gt;log2f&lt;/code&gt;, &lt;code&gt;log10f&lt;/code&gt;, &lt;code&gt;sinf&lt;/code&gt;, &lt;code&gt;cosf&lt;/code&gt;, &lt;code&gt;tanf&lt;/code&gt;, &lt;code&gt;tanhf&lt;/code&gt;, &lt;code&gt;powf&lt;/code&gt;, &lt;code&gt;fabsf&lt;/code&gt;, &lt;code&gt;floorf&lt;/code&gt;, &lt;code&gt;ceilf&lt;/code&gt;, &lt;code&gt;truncf&lt;/code&gt;, &lt;code&gt;roundf&lt;/code&gt;, &lt;code&gt;rintf&lt;/code&gt;, &lt;code&gt;fmaxf&lt;/code&gt;, &lt;code&gt;fminf&lt;/code&gt;, &lt;code&gt;fmodf&lt;/code&gt;, &lt;code&gt;copysignf&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;__constant__&lt;/code&gt; memory, &lt;code&gt;__device__&lt;/code&gt; globals&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Compiler Features&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;Full C preprocessor: &lt;code&gt;#include&lt;/code&gt;, &lt;code&gt;#define&lt;/code&gt;/&lt;code&gt;#undef&lt;/code&gt;, function-like macros, &lt;code&gt;#ifdef&lt;/code&gt;/&lt;code&gt;#ifndef&lt;/code&gt;/&lt;code&gt;#if&lt;/code&gt;/&lt;code&gt;#elif&lt;/code&gt;/&lt;code&gt;#else&lt;/code&gt;/&lt;code&gt;#endif&lt;/code&gt;, &lt;code&gt;#pragma&lt;/code&gt;, &lt;code&gt;#error&lt;/code&gt;, &lt;code&gt;-I&lt;/code&gt;/&lt;code&gt;-D&lt;/code&gt; flags&lt;/li&gt; 
 &lt;li&gt;Error recovery (reports multiple errors without hanging)&lt;/li&gt; 
 &lt;li&gt;Multilingual error messages (&lt;code&gt;--lang &amp;lt;file&amp;gt;&lt;/code&gt;) with language-neutral E-codes&lt;/li&gt; 
 &lt;li&gt;Source location tracking in IR dumps&lt;/li&gt; 
 &lt;li&gt;Struct pass-by-value&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Example&lt;/h2&gt; 
&lt;pre&gt;&lt;code class=&quot;language-cuda&quot;&gt;__global__ void vector_add(float *c, float *a, float *b, int n)
{
    int idx = threadIdx.x + blockIdx.x * blockDim.x;
    if (idx &amp;lt; n)
        c[idx] = a[idx] + b[idx];
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;pre&gt;&lt;code&gt;$ ./barracuda --amdgpu-bin vector_add.cu -o vector_add.hsaco
wrote vector_add.hsaco (528 bytes code, 1 kernels)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;No LLVM required 😃&lt;/p&gt; 
&lt;h2&gt;Validated on Hardware&lt;/h2&gt; 
&lt;p&gt;BarraCUDA-compiled kernels have been tested and produce correct results on real silicon:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;AMD MI300X (CDNA3, GFX942)&lt;/strong&gt; — 8/8 test kernels passing. Monte Carlo neutron transport producing correct physics (k_eff = 0.995, matching reference).&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;AMD RDNA3 (GFX1100)&lt;/strong&gt; — Full test suite passing via RDNA3 emulator CI.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;NVIDIA RTX 4060 Ti&lt;/strong&gt; — PTX backend, loaded via CUDA Driver API, JIT-compiled by NVIDIA driver. Monte Carlo neutron transport benchmark produces correct results with 3.8x speedup over single-thread CPU. No NVCC involved anywhere in the pipeline.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Tenstorrent Blackhole&lt;/strong&gt; — Compiles to valid Metalium C++. Hardware validation pending dev kit access.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;What Doesn&#39;t Work (Yet)&lt;/h2&gt; 
&lt;p&gt;Being honest about limitations is important. Here&#39;s what&#39;s missing:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Parameter reassignment in &lt;code&gt;__device__&lt;/code&gt; functions (use local variables)&lt;/li&gt; 
 &lt;li&gt;Textures and surfaces&lt;/li&gt; 
 &lt;li&gt;Dynamic parallelism (device-side kernel launch)&lt;/li&gt; 
 &lt;li&gt;Multiple translation units&lt;/li&gt; 
 &lt;li&gt;Host code generation (only device code is compiled)&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;None of these are architectural blockers. They&#39;re all &quot;haven&#39;t got round to it yet&quot; items.&lt;/p&gt; 
&lt;h2&gt;Test Suite&lt;/h2&gt; 
&lt;p&gt;14 test files, 35+ kernels, ~1,700 BIR instructions, ~27,000 bytes of machine code:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;code&gt;vector_add.cu&lt;/code&gt; - The &quot;hello world&quot; of GPU computing&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;cuda_features.cu&lt;/code&gt; - Atomics, warp ops, barriers, gotos, switch, short-circuit&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;test_tier12.cu&lt;/code&gt; - Vectors, shared memory, operator overloading&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;notgpt.cu&lt;/code&gt; - AI-generated CUDA with extremely sarcastic comments (tiled SGEMM, reductions, histograms, prefix scan, stencils, half precision, cooperative groups, and the &quot;kitchen sink&quot; kernel)&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;stress.cu&lt;/code&gt; - N-body simulation, nested control flow, bit manipulation, struct pass-by-value, chained function calls&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;canonical.cu&lt;/code&gt; - Canonical patterns from NVIDIA samples adapted for the parser&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;test_errors.cu&lt;/code&gt; - Deliberate syntax errors to verify error recovery&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;test_launch_bounds.cu&lt;/code&gt; - &lt;code&gt;__launch_bounds__&lt;/code&gt; parsing and VGPR cap enforcement&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;test_coop_groups.cu&lt;/code&gt; - Cooperative groups lowering&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;mymathhomework.cu&lt;/code&gt; - Trig identities, exponential growth, Newton-Raphson, log laws, hyperbolic functions, floor/ceil/round, power rule, clamping&lt;/li&gt; 
 &lt;li&gt;Plus preprocessor tests, template tests, unsigned integer tests&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Roadmap&lt;/h2&gt; 
&lt;h3&gt;Near Term: Hardening&lt;/h3&gt; 
&lt;p&gt;Fix the known gaps: integer literal suffixes, &lt;code&gt;const&lt;/code&gt;, parameter reassignment. These are all small parser/lowerer changes. The goal is to compile real-world &lt;code&gt;.cu&lt;/code&gt; files without modifications.&lt;/p&gt; 
&lt;h3&gt;Medium Term: Optimisation&lt;/h3&gt; 
&lt;p&gt;The generated code works but isn&#39;t winning any benchmarks. Done so far: instruction scheduling, constant folding, dead code elimination, divergence-aware SSA register allocation. Priorities:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Loop-invariant code motion&lt;/li&gt; 
 &lt;li&gt;Occupancy tuning based on register pressure&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Long Term: More Architectures&lt;/h3&gt; 
&lt;p&gt;The IR (BIR) is target-independent. The backend is cleanly separated. Adding a new target means writing a new &lt;code&gt;isel&lt;/code&gt; + &lt;code&gt;emit&lt;/code&gt; pair.&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;NVIDIA PTX&lt;/strong&gt; - Done. Compiles CUDA to PTX, validated on RTX 4060 Ti. &lt;code&gt;--nvidia-ptx&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Tenstorrent Tensix&lt;/strong&gt; - Done. Compiles CUDA to TT-Metalium C++ for Blackhole. &lt;code&gt;--tensix&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Intel Arc&lt;/strong&gt; - Xe architecture. Would give BarraCUDA coverage across all four major GPU vendors.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;RISC-V Vector Extension&lt;/strong&gt; - For when GPUs are too mainstream and you want to run CUDA on a softcore.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Contributing&lt;/h2&gt; 
&lt;p&gt;&lt;strong&gt;Issues and PRs in any language are welcome&lt;/strong&gt; — just include an English translation alongside. See &lt;a href=&quot;https://raw.githubusercontent.com/Zaneham/BarraCUDA/master/CONTRIBUTING.md&quot;&gt;CONTRIBUTING.md&lt;/a&gt; for the full guide on style, naming, and where to help.&lt;/p&gt; 
&lt;p&gt;The HLASM-style short identifiers (&lt;code&gt;ra_gc&lt;/code&gt;, &lt;code&gt;mk_hash&lt;/code&gt;, &lt;code&gt;enc_vop3&lt;/code&gt;) are culturally neutral by accident, there&#39;s nothing English about a 5-character label. If you&#39;ve found a bug or have an idea, write it up in whatever language you think in.&lt;/p&gt; 
&lt;h2&gt;Changelog&lt;/h2&gt; 
&lt;p&gt;&lt;strong&gt;2026-03-18&lt;/strong&gt; — NVIDIA PTX backend (&lt;code&gt;--nvidia-ptx&lt;/code&gt;). Compiles CUDA to PTX text, loaded via CUDA Driver API and JIT-compiled by the NVIDIA driver. Validated on RTX 4060 Ti running a Monte Carlo neutron transport benchmark with correct physics results. No NVCC required. Also: anonymous struct/union support in parser, sema, and lowerer (&lt;code&gt;struct { float f; int i; } cvt;&lt;/code&gt; pattern).&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;2026-03-14&lt;/strong&gt; — Divergence-aware SSA register allocator (&lt;code&gt;--ssa-ra&lt;/code&gt;). Eliminates all 186 VGPR spills on a 654-line Monte Carlo transport kernel — scratch traffic drops 78%, total instructions drop 28%. Exploits the 64:1 cost asymmetry between divergent and uniform VGPR spills on Wave64 hardware: uniform values spill via &lt;code&gt;v_readfirstlane&lt;/code&gt; at 4 bytes each, divergent values stay in registers where they belong. Based on the divergence analysis of Sampaio et al. (2013). ~1,300 lines of C99, all static memory, no malloc.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;2026-03-09&lt;/strong&gt; — Post-isel verification pass (&lt;code&gt;bc_vfy&lt;/code&gt;). The encoder used to trust isel to produce valid machine instructions. It shouldn&#39;t have. &lt;code&gt;bc_vfy&lt;/code&gt; runs twice (post-isel, post-RA) and catches 5 classes of encoding violation before the binary leaves the compiler. Its first run immediately found 7 isel bugs across GFX10 and GFX942 — every one a silent miscompile that would fault on hardware with &quot;Reason: Unknown.&quot; Fixed them all. Also: &lt;code&gt;bc_abend&lt;/code&gt; runtime crash diagnostics, because if IBM could do post-mortem dumps in 1964, we can do it for GPUs in 2026.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;2026-03-08&lt;/strong&gt; — Error localisation infrastructure. Every diagnostic now has a language-neutral ID (&lt;code&gt;E001&lt;/code&gt;–&lt;code&gt;E111&lt;/code&gt;). External translation files via &lt;code&gt;--lang &amp;lt;file&amp;gt;&lt;/code&gt;. English reference at &lt;code&gt;lang/en.txt&lt;/code&gt;, te reo Maori at &lt;code&gt;lang/mi.txt&lt;/code&gt;. Unified error structs. Lowering errors now displayed.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;2026-03-05&lt;/strong&gt; — CDNA 3 additions: GFX942 backend hardening, MFMA, Wave64 divergence, tinygrad compat. 8/8 tests passing on MI300X (&lt;a href=&quot;https://github.com/Zaneham/BarraCUDA/pull/56&quot;&gt;PR#56&lt;/a&gt;).&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;2026-03-05&lt;/strong&gt; — Instruction scheduling (&lt;a href=&quot;https://github.com/Zaneham/BarraCUDA/pull/52&quot;&gt;PR#52&lt;/a&gt;).&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;2026-03-03&lt;/strong&gt; — CDNA 2 support (&lt;code&gt;--gfx90a&lt;/code&gt;, MI250). Tinygrad compatibility.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;2026-02-28&lt;/strong&gt; — Tenstorrent Tensix backend (&lt;code&gt;--tensix&lt;/code&gt;). Compiles CUDA to TT-Metalium C++ for Blackhole. Constant folding (&lt;a href=&quot;https://github.com/Zaneham/BarraCUDA/pull/51&quot;&gt;PR#51&lt;/a&gt;). Dead code elimination (&lt;a href=&quot;https://github.com/Zaneham/BarraCUDA/pull/48&quot;&gt;PR#48&lt;/a&gt;).&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;2026-02-25&lt;/strong&gt; — HSA runtime launcher (&lt;a href=&quot;https://github.com/Zaneham/BarraCUDA/pull/40&quot;&gt;PR#40&lt;/a&gt;). RDNA 2 support (&lt;code&gt;--gfx1030&lt;/code&gt;, &lt;a href=&quot;https://github.com/Zaneham/BarraCUDA/pull/38&quot;&gt;PR#38&lt;/a&gt;). Test suite (&lt;a href=&quot;https://github.com/Zaneham/BarraCUDA/pull/41&quot;&gt;PR#41&lt;/a&gt;).&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;2026-02-20&lt;/strong&gt; — RDNA 4 support (&lt;code&gt;--gfx1200&lt;/code&gt;, &lt;a href=&quot;https://github.com/Zaneham/BarraCUDA/pull/32&quot;&gt;PR#32&lt;/a&gt;).&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;2026-02-16&lt;/strong&gt; — Initial release. CUDA compiler targeting AMD RDNA 3 (gfx1100).&lt;/p&gt; 
&lt;h2&gt;Contact&lt;/h2&gt; 
&lt;p&gt;Found a bug? Want to discuss the finer points of AMDGPU instruction encoding? Need someone to commiserate with about the state of GPU computing?&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;mailto:zanehambly@gmail.com&quot;&gt;zanehambly@gmail.com&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;Open an issue if there&#39;s anything you want to discuss. Or don&#39;t. I&#39;m not your mum.&lt;/p&gt; 
&lt;p&gt;Based in New Zealand, where it&#39;s already tomorrow and the GPUs are just as confused as everywhere else.&lt;/p&gt; 
&lt;h2&gt;License&lt;/h2&gt; 
&lt;p&gt;Apache 2.0. Do whatever you want. If this compiler somehow ends up in production, I&#39;d love to hear about it, mostly so I can update my LinkedIn with something more interesting than wrote a CUDA compiler for fun.&lt;/p&gt; 
&lt;h2&gt;Acknowledgements&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;Fernando Magno Quintão Pereira&lt;/strong&gt; and the &lt;strong&gt;Compilers Lab at UFMG&lt;/strong&gt; (Universidade Federal de Minas Gerais). Fernando reached out after seeing the project, pointed me to the divergence analysis papers, and offered guidance. The SSA register allocator exists because of that conversation.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;The academic community&lt;/strong&gt; — Cooper, Harvey &amp;amp; Kennedy for dominators; Braun &amp;amp; Hack for SSA spilling; Sampaio, Souza, Collange &amp;amp; Pereira for divergence analysis. I&#39;m just a hobbyist who reads papers and writes C. The actual hard work was done by the researchers.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Steven Muchnick&lt;/strong&gt; for &lt;em&gt;Advanced Compiler Design and Implementation&lt;/em&gt;. If this compiler does anything right, that book is why.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Low Level&lt;/strong&gt; for the Zero to Hero C course and the YouTube channel. That&#39;s where I learnt C.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Abe Kornelis&lt;/strong&gt; for being an amazing teacher. His work on the &lt;a href=&quot;https://github.com/z390development/z390&quot;&gt;z390 Portable Mainframe Assembler&lt;/a&gt; project is well worth your time.&lt;/li&gt; 
 &lt;li&gt;To the people who&#39;ve sent messages of kindness and critique, thank you from a forever student and a happy hobbyist.&lt;/li&gt; 
 &lt;li&gt;My Granny, Grandad, Nana and Baka. Love you x&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;em&gt;He aha te mea nui o te ao. He tāngata, he tāngata, he tāngata.&lt;/em&gt;&lt;/p&gt; 
&lt;p&gt;What is the most important thing in the world? It is people, it is people, it is people.&lt;/p&gt; 
&lt;hr /&gt;</description>
      
      <media:content url="https://opengraph.githubassets.com/9166775802bcf827c7cdc2e2dad39ec049b35254e26eae0280bedb64fbc80ced/Zaneham/BarraCUDA" medium="image" />
      
    </item>
    
    <item>
      <title>reactos/reactos</title>
      <link>https://github.com/reactos/reactos</link>
      <description>&lt;p&gt;A free Windows-compatible Operating System&lt;/p&gt;&lt;hr&gt;&lt;p align=&quot;center&quot;&gt; &lt;a href=&quot;https://reactos.org/&quot;&gt; &lt;img alt=&quot;ReactOS&quot; src=&quot;https://reactos.org/wiki/images/0/02/ReactOS_logo.png&quot; /&gt; &lt;/a&gt; &lt;/p&gt; 
&lt;hr /&gt; 
&lt;p align=&quot;center&quot;&gt; &lt;a href=&quot;https://reactos.org/project-news/reactos-0415-released/&quot;&gt; &lt;img alt=&quot;ReactOS 0.4.15 Release&quot; src=&quot;https://img.shields.io/badge/release-0.4.15-0688CB.svg?sanitize=true&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://reactos.org/download/&quot;&gt; &lt;img alt=&quot;Download ReactOS&quot; src=&quot;https://img.shields.io/badge/download-latest-0688CB.svg?sanitize=true&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://sourceforge.net/projects/reactos/&quot;&gt; &lt;img alt=&quot;SourceForge Download&quot; src=&quot;https://img.shields.io/sourceforge/dm/reactos.svg?colorB=0688CB&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://github.com/reactos/reactos/raw/master/COPYING&quot;&gt; &lt;img alt=&quot;License&quot; src=&quot;https://img.shields.io/badge/license-GNU_GPL_2.0-0688CB.svg?sanitize=true&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://reactos.org/donate/&quot;&gt; &lt;img alt=&quot;Donate&quot; src=&quot;https://img.shields.io/badge/%24-donate-E44E4A.svg?sanitize=true&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://twitter.com/reactos&quot;&gt; &lt;img alt=&quot;Follow on Twitter&quot; src=&quot;https://img.shields.io/twitter/follow/reactos.svg?style=social&amp;amp;label=Follow%20%40reactos&quot; /&gt;&lt;/a&gt; &lt;/p&gt; 
&lt;h2&gt;Quick Links&lt;/h2&gt; 
&lt;p&gt;&lt;a href=&quot;https://reactos.org/&quot;&gt;Website&lt;/a&gt; • &lt;a href=&quot;https://chat.reactos.org/&quot;&gt;Official chat&lt;/a&gt; • &lt;a href=&quot;https://reactos.org/wiki/&quot;&gt;Wiki&lt;/a&gt; • &lt;a href=&quot;https://reactos.org/forum/&quot;&gt;Forum&lt;/a&gt; • &lt;a href=&quot;https://discord.gg/7knjvhT&quot;&gt;Community Discord&lt;/a&gt; • &lt;a href=&quot;https://jira.reactos.org/issues/&quot;&gt;JIRA Bug Tracker&lt;/a&gt; • &lt;a href=&quot;https://git.reactos.org/&quot;&gt;ReactOS Git mirror&lt;/a&gt; • &lt;a href=&quot;https://reactos.org/testman/&quot;&gt;Testman&lt;/a&gt;&lt;/p&gt; 
&lt;h2&gt;What is ReactOS?&lt;/h2&gt; 
&lt;p&gt;ReactOS™ is an Open Source effort to develop a quality operating system that is compatible with applications and drivers written for the Microsoft® Windows™ NT family of operating systems (NT4, 2000, XP, 2003, Vista, 7).&lt;/p&gt; 
&lt;p&gt;The ReactOS project, although currently focused on Windows Server 2003 compatibility, is always keeping an eye toward compatibility with Windows Vista and future Windows NT releases.&lt;/p&gt; 
&lt;p&gt;The code of ReactOS is licensed under &lt;a href=&quot;https://github.com/reactos/reactos/raw/master/COPYING&quot;&gt;GNU GPL 2.0&lt;/a&gt;.&lt;/p&gt; 
&lt;h3&gt;Product quality warning&lt;/h3&gt; 
&lt;p&gt;&lt;strong&gt;ReactOS is currently an Alpha quality operating system.&lt;/strong&gt; This means that ReactOS is under heavy development and you have to be ready to encounter some problems. Different things may not work well and it can corrupt the data present on your hard disk. It is HIGHLY recommended to test ReactOS on a virtual machine or on a computer with no sensitive or critical data!&lt;/p&gt; 
&lt;h2&gt;Building&lt;/h2&gt; 
&lt;p&gt;&lt;img src=&quot;https://github.com/reactos/reactos/workflows/Build/badge.svg?sanitize=true&quot; alt=&quot;Build&quot; /&gt; &lt;a href=&quot;https://sourceforge.net/projects/reactos/files/RosBE-Windows/i386/2.2.1/&quot;&gt;&lt;img src=&quot;https://img.shields.io/badge/RosBE_Windows-2.2.1-0688CB.svg?sanitize=true&quot; alt=&quot;rosbewin.badge&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://sourceforge.net/projects/reactos/files/RosBE-Unix/2.2.1/&quot;&gt;&lt;img src=&quot;https://img.shields.io/badge/RosBE_Unix-2.2.1-0688CB.svg?sanitize=true&quot; alt=&quot;rosbeunix.badge&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://scan.coverity.com/projects/205&quot;&gt;&lt;img src=&quot;https://scan.coverity.com/projects/205/badge.svg?flat=1&quot; alt=&quot;coverity.badge&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;To build the system it is strongly advised to use the &lt;em&gt;ReactOS Build Environment (RosBE).&lt;/em&gt; Up-to-date versions for Windows and for Unix/GNU-Linux are available from our download page at: &lt;a href=&quot;https://reactos.org/wiki/Build_Environment&quot;&gt;&quot;Build Environment&quot;&lt;/a&gt;.&lt;/p&gt; 
&lt;p&gt;Alternatively one can use Microsoft Visual C++ (MSVC) version 2019+. Building with MSVC is covered here: &lt;a href=&quot;https://reactos.org/wiki/CMake#Visual_Studio_or_Microsoft_Visual_C.2B.2B&quot;&gt;&quot;Visual Studio or Microsoft Visual C++&quot;&lt;/a&gt;.&lt;/p&gt; 
&lt;p&gt;See &lt;a href=&quot;https://reactos.org/wiki/Building_ReactOS&quot;&gt;&quot;Building ReactOS&quot;&lt;/a&gt; article for more details.&lt;/p&gt; 
&lt;h3&gt;Binaries&lt;/h3&gt; 
&lt;p&gt;To build ReactOS you must run the &lt;code&gt;configure&lt;/code&gt; script in the directory you want to have your build files. Choose &lt;code&gt;configure.cmd&lt;/code&gt; or &lt;code&gt;configure.sh&lt;/code&gt; depending on your system. Then run &lt;code&gt;ninja &amp;lt;modulename&amp;gt;&lt;/code&gt; to build a module you want or just &lt;code&gt;ninja&lt;/code&gt; to build all modules.&lt;/p&gt; 
&lt;h3&gt;Bootable images&lt;/h3&gt; 
&lt;p&gt;To build a bootable CD image run &lt;code&gt;ninja bootcd&lt;/code&gt; from the build directory. This will create a CD image with a filename &lt;code&gt;bootcd.iso&lt;/code&gt;.&lt;/p&gt; 
&lt;p&gt;You can always download fresh binary builds of bootable images from the &lt;a href=&quot;https://reactos.org/getbuilds/&quot;&gt;&quot;Daily builds&quot;&lt;/a&gt; page.&lt;/p&gt; 
&lt;h2&gt;Installing&lt;/h2&gt; 
&lt;p&gt;By default, ReactOS currently can only be installed on a machine that has a FAT16 or FAT32 partition as the active (bootable) partition. The partition on which ReactOS is to be installed (which may or may not be the bootable partition) must also be formatted as FAT16 or FAT32. ReactOS Setup can format the partitions if needed.&lt;/p&gt; 
&lt;p&gt;Starting with 0.4.10, ReactOS can be installed using the BtrFS file system. But consider this as an experimental feature and thus regressions not triggered on FAT setup may be observed.&lt;/p&gt; 
&lt;p&gt;To install ReactOS from the bootable CD distribution, extract the archive contents. Then burn the CD image, boot from it, and follow the instructions.&lt;/p&gt; 
&lt;p&gt;See &lt;a href=&quot;https://reactos.org/wiki/Installing_ReactOS&quot;&gt;&quot;Installing ReactOS&quot;&lt;/a&gt; Wiki page or &lt;a href=&quot;https://raw.githubusercontent.com/reactos/reactos/master/INSTALL&quot;&gt;INSTALL&lt;/a&gt; for more details.&lt;/p&gt; 
&lt;h2&gt;Testing&lt;/h2&gt; 
&lt;p&gt;If you discover a bug in ReactOS search on JIRA first - it might be reported already. If not report the bug providing logs and as much information as possible.&lt;/p&gt; 
&lt;p&gt;See &lt;a href=&quot;https://reactos.org/wiki/File_Bugs&quot;&gt;&quot;File Bugs&quot;&lt;/a&gt; for a guide.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;NOTE:&lt;/strong&gt; The bug tracker is &lt;em&gt;not&lt;/em&gt; for discussions. Please use our &lt;a href=&quot;https://chat.reactos.org/&quot;&gt;official chat&lt;/a&gt; or our &lt;a href=&quot;https://reactos.org/forum/&quot;&gt;forum&lt;/a&gt;.&lt;/p&gt; 
&lt;h2&gt;Contributing &lt;a href=&quot;https://reactos.org/wiki/Commiting_Changes&quot;&gt;&lt;img src=&quot;https://img.shields.io/badge/PR-welcome-0688CB.svg?sanitize=true&quot; alt=&quot;prwelcome.badge&quot; /&gt;&lt;/a&gt;&lt;/h2&gt; 
&lt;p&gt;We are always looking for developers! Check &lt;a href=&quot;https://raw.githubusercontent.com/reactos/reactos/master/CONTRIBUTING.md&quot;&gt;how to contribute&lt;/a&gt; if you are willing to participate.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Legal notice&lt;/strong&gt;: If you have seen proprietary Microsoft Windows source code (including but not limited to the leaked Windows NT 3.5, NT 4, 2000 source code and the Windows Research Kernel), your contribution won&#39;t be accepted because of potential copyright violation.&lt;/p&gt; 
&lt;p&gt;Try out cloud-based ReactOS development using Gitpod and Docker:&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://gitpod.io/#https://github.com/reactos/reactos&quot;&gt;&lt;img src=&quot;https://gitpod.io/button/open-in-gitpod.svg?sanitize=true&quot; alt=&quot;Open in Gitpod&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;You can also support ReactOS by &lt;a href=&quot;https://reactos.org/donate/&quot;&gt;donating&lt;/a&gt;! We rely on our backers to maintain our servers and accelerate development by &lt;a href=&quot;https://reactos.org/contributing/#paid-jobs&quot;&gt;hiring full-time devs&lt;/a&gt;.&lt;/p&gt; 
&lt;h2&gt;More information&lt;/h2&gt; 
&lt;p&gt;ReactOS is a Free and Open Source operating system based on the Windows architecture, providing support for existing applications and drivers, and an alternative to the current dominant consumer operating system.&lt;/p&gt; 
&lt;p&gt;It is not another wrapper built on Linux, like WINE. It does not attempt or plan to compete with WINE; in fact, the user-mode part of ReactOS is almost entirely WINE-based and our two teams have cooperated closely in the past.&lt;/p&gt; 
&lt;p&gt;ReactOS is also not &quot;yet another OS&quot;. It does not attempt to be a third player like any other alternative OS out there. People are not meant to uninstall Linux and use ReactOS instead; ReactOS is a replacement for Windows users who want a Windows replacement that behaves just like Windows.&lt;/p&gt; 
&lt;p&gt;More information is available at: &lt;a href=&quot;https://reactos.org/&quot;&gt;reactos.org&lt;/a&gt;.&lt;/p&gt; 
&lt;p&gt;Also see the &lt;a href=&quot;https://raw.githubusercontent.com/reactos/reactos/master/media/doc/&quot;&gt;media/doc&lt;/a&gt; subdirectory for some sparse notes.&lt;/p&gt; 
&lt;h2&gt;Who is responsible&lt;/h2&gt; 
&lt;p&gt;Active devs are listed as members of &lt;a href=&quot;https://github.com/orgs/reactos/people&quot;&gt;GitHub organization&lt;/a&gt;. See also the &lt;a href=&quot;https://raw.githubusercontent.com/reactos/reactos/master/CREDITS&quot;&gt;CREDITS&lt;/a&gt; file for others.&lt;/p&gt; 
&lt;h2&gt;Code mirrors&lt;/h2&gt; 
&lt;p&gt;The main development is done on &lt;a href=&quot;https://github.com/reactos/reactos&quot;&gt;GitHub&lt;/a&gt;. We have an &lt;a href=&quot;https://git.reactos.org/?p=reactos.git&quot;&gt;alternative mirror&lt;/a&gt; in case GitHub is down.&lt;/p&gt; 
&lt;p&gt;There is also an obsolete &lt;a href=&quot;https://svn.reactos.org/reactos/&quot;&gt;SVN archive repository&lt;/a&gt; that is kept for historical purposes.&lt;/p&gt;</description>
      
      <media:content url="https://opengraph.githubassets.com/a10d2d201069070ae85946f489c5f7e5fa5e85a01a390644e5d73a649388e401/reactos/reactos" medium="image" />
      
    </item>
    
    <item>
      <title>pjsip/pjproject</title>
      <link>https://github.com/pjsip/pjproject</link>
      <description>&lt;p&gt;PJSIP project&lt;/p&gt;&lt;hr&gt;&lt;p&gt;&lt;a href=&quot;https://github.com/pjsip/pjproject/actions/workflows/ci-linux.yml&quot;&gt;&lt;img src=&quot;https://github.com/pjsip/pjproject/actions/workflows/ci-linux.yml/badge.svg?branch=master&quot; alt=&quot;CI Linux&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://github.com/pjsip/pjproject/actions/workflows/ci-mac.yml&quot;&gt;&lt;img src=&quot;https://github.com/pjsip/pjproject/actions/workflows/ci-mac.yml/badge.svg?branch=master&quot; alt=&quot;CI Mac&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://github.com/pjsip/pjproject/actions/workflows/ci-win.yml&quot;&gt;&lt;img src=&quot;https://github.com/pjsip/pjproject/actions/workflows/ci-win.yml/badge.svg?branch=master&quot; alt=&quot;CI Windows&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://app.bitrise.io/app/70e79dc5-cae8-4cb7-a6cd-9a5bd3f3270f&quot;&gt;&lt;img src=&quot;https://img.shields.io/bitrise/70e79dc5-cae8-4cb7-a6cd-9a5bd3f3270f?token=tnXk2DZ71Zmd0qDMhFgiBg&amp;amp;label=CI%20iOS&quot; alt=&quot;Bitrise iOS&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://app.bitrise.io/app/e4b6aade20ea9eb3&quot;&gt;&lt;img src=&quot;https://img.shields.io/bitrise/e4b6aade20ea9eb3?token=byZU0e1BJn_VYg2YuAs-cA&amp;amp;label=CI%20Android&quot; alt=&quot;Bitrise Android&quot; /&gt;&lt;/a&gt; &lt;br /&gt; &lt;a href=&quot;https://oss-fuzz-build-logs.storage.googleapis.com/index.html#pjsip&quot;&gt;&lt;img src=&quot;https://oss-fuzz-build-logs.storage.googleapis.com/badges/pjsip.png&quot; alt=&quot;OSS-Fuzz&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://scan.coverity.com/projects/pjsip&quot;&gt;&lt;img src=&quot;https://scan.coverity.com/projects/905/badge.svg?sanitize=true&quot; alt=&quot;Coverity-Scan&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://github.com/pjsip/pjproject/actions/workflows/codeql-analysis.yml&quot;&gt;&lt;img src=&quot;https://github.com/pjsip/pjproject/actions/workflows/codeql-analysis.yml/badge.svg?branch=master&quot; alt=&quot;CodeQL&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://docs.pjsip.org/en/latest/&quot;&gt;&lt;img src=&quot;https://readthedocs.org/projects/pjsip/badge/?version=latest&quot; alt=&quot;docs.pjsip.org&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;h1&gt;PJSIP&lt;/h1&gt; 
&lt;p&gt;PJSIP is a free and open source multimedia communication library written in C with high level API in C, C++, Java, C#, and Python languages. It implements standard based protocols such as SIP, SDP, RTP, STUN, TURN, and ICE. It combines signaling protocol (SIP) with rich multimedia framework and NAT traversal functionality into high level API that is portable and suitable for almost any type of systems ranging from desktops, embedded systems, to mobile handsets.&lt;/p&gt; 
&lt;h2&gt;Getting PJSIP&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;Main repository: &lt;a href=&quot;https://github.com/pjsip/pjproject&quot;&gt;https://github.com/pjsip/pjproject&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;Releases: &lt;a href=&quot;https://github.com/pjsip/pjproject/releases&quot;&gt;https://github.com/pjsip/pjproject/releases&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Documentation&lt;/h2&gt; 
&lt;p&gt;Main documentation site: &lt;a href=&quot;https://docs.pjsip.org&quot;&gt;https://docs.pjsip.org&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;Table of contents:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Overview 
  &lt;ul&gt; 
   &lt;li&gt;&lt;a href=&quot;https://docs.pjsip.org/en/latest/overview/intro.html&quot;&gt;Overview&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://docs.pjsip.org/en/latest/overview/features.html&quot;&gt;Features (Datasheet)&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://docs.pjsip.org/en/latest/overview/license.html&quot;&gt;License&lt;/a&gt;&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Getting started&lt;/strong&gt; 
  &lt;ul&gt; 
   &lt;li&gt;&lt;a href=&quot;https://docs.pjsip.org/en/latest/get-started/getting.html&quot;&gt;Getting PJSIP&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://docs.pjsip.org/en/latest/get-started/general_guidelines.html&quot;&gt;General Guidelines&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://docs.pjsip.org/en/latest/get-started/android/index.html&quot;&gt;Android&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://docs.pjsip.org/en/latest/get-started/ios/index.html&quot;&gt;iPhone&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://docs.pjsip.org/en/latest/get-started/posix/index.html&quot;&gt;Mac/Linux/Unix&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://docs.pjsip.org/en/latest/get-started/windows/index.html&quot;&gt;Windows&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://docs.pjsip.org/en/latest/get-started/windows-phone/index.html&quot;&gt;Windows Phone&lt;/a&gt;&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;PJSUA2 - High level API guide 
  &lt;ul&gt; 
   &lt;li&gt;&lt;a href=&quot;https://docs.pjsip.org/en/latest/pjsua2/intro.html&quot;&gt;Introduction&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://docs.pjsip.org/en/latest/pjsua2/building.html&quot;&gt;Building PJSUA2&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://docs.pjsip.org/en/latest/pjsua2/general_concept.html&quot;&gt;General concepts&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://docs.pjsip.org/en/latest/pjsua2/building.html&quot;&gt;Hello world!&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://docs.pjsip.org/en/latest/pjsua2/using/index.html&quot;&gt;Using PJSUA2&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://docs.pjsip.org/en/latest/pjsua2/samples.html&quot;&gt;Sample applications&lt;/a&gt;&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;Specific guides 
  &lt;ul&gt; 
   &lt;li&gt;&lt;a href=&quot;https://docs.pjsip.org/en/latest/specific-guides/index.html#audio&quot;&gt;Audio&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://docs.pjsip.org/en/latest/specific-guides/index.html#audio-troubleshooting&quot;&gt;Audio Troubleshooting&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://docs.pjsip.org/en/latest/specific-guides/index.html#build-integration&quot;&gt;Build and integration&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://docs.pjsip.org/en/latest/specific-guides/index.html#development-programming&quot;&gt;Development and programming&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://docs.pjsip.org/en/latest/specific-guides/index.html#media&quot;&gt;Media&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://docs.pjsip.org/en/latest/specific-guides/index.html#network-nat&quot;&gt;Network and NAT&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://docs.pjsip.org/en/latest/specific-guides/index.html#performance-footprint&quot;&gt;Performance and footprint&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://docs.pjsip.org/en/latest/specific-guides/index.html#security&quot;&gt;Security&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://docs.pjsip.org/en/latest/specific-guides/index.html#sip&quot;&gt;SIP&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://docs.pjsip.org/en/latest/specific-guides/index.html#video&quot;&gt;Video&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://docs.pjsip.org/en/latest/specific-guides/index.html#other&quot;&gt;Other&lt;/a&gt;&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;API reference 
  &lt;ul&gt; 
   &lt;li&gt;&lt;a href=&quot;https://docs.pjsip.org/en/latest/api/pjsua2/index.html&quot;&gt;PJSUA2&lt;/a&gt; - high level API (Java/C#/Python/C++/swig)&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://docs.pjsip.org/en/latest/api/pjsua-lib/index.html&quot;&gt;PJSUA-LIB&lt;/a&gt; - high level API (C)&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://docs.pjsip.org/en/latest/api/pjsip/index.html&quot;&gt;PJSIP&lt;/a&gt; - SIP stack&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://docs.pjsip.org/en/latest/api/pjmedia/index.html&quot;&gt;PJMEDIA&lt;/a&gt; - media framework&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://docs.pjsip.org/en/latest/api/pjnath/index.html&quot;&gt;PJNATH&lt;/a&gt; - NAT traversal helper&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://docs.pjsip.org/en/latest/api/pjlib-util/index.html&quot;&gt;PJLIB-UTIL&lt;/a&gt; - utilities&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://docs.pjsip.org/en/latest/api/pjlib/index.html&quot;&gt;PJLIB&lt;/a&gt; - portable library&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
&lt;/ul&gt;</description>
      
      <media:content url="https://opengraph.githubassets.com/40f0f3d7306f8b059dbfb7b4053c5a1b627ede1a7137c19b1968f451fd1532b4/pjsip/pjproject" medium="image" />
      
    </item>
    
  </channel>
</rss>
